Skip to content

Commit ea6e775

Browse files
Implement error exit code on errors
1 parent b6b7f5c commit ea6e775

File tree

1 file changed

+54
-23
lines changed

1 file changed

+54
-23
lines changed

host-software/xbot-boot.py

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,11 @@ def upload_file(filename, ip, interface_ip=None):
185185
filename (str): The path to the file to upload.
186186
ip (str): The IP address of the board.
187187
interface_ip (str): The IP address of the network interface to use.
188+
189+
Returns:
190+
bool: True on success, False on error.
188191
"""
192+
sock = None
189193
try:
190194
# Read the file contents
191195
file_contents = read_file(filename)
@@ -213,7 +217,7 @@ def upload_file(filename, ip, interface_ip=None):
213217
while True:
214218
line = read_protocol_line(sock_file)
215219
if line is None:
216-
return
220+
return False
217221
if variables.get("BOOTLOADER VERSION") == "xcore-boot v1.0" and line == "SEND HASH":
218222
break
219223
if line == 'SEND COMMAND':
@@ -237,7 +241,7 @@ def upload_file(filename, ip, interface_ip=None):
237241
response = read_protocol_line(sock_file)
238242
if response != 'SEND HASH':
239243
print(f"Unexpected response after sending command: {response}")
240-
return
244+
return False
241245
print("Received SEND HASH")
242246

243247
# Send SHA256 as hex string
@@ -249,14 +253,14 @@ def upload_file(filename, ip, interface_ip=None):
249253
response = read_protocol_line(sock_file)
250254
if response != 'HASH OK':
251255
print(f"Unexpected response after sending SHA256: {response}")
252-
return
256+
return False
253257
print("Received HASH OK")
254258

255259
# Wait for "SEND LENGTH" response
256260
response = read_protocol_line(sock_file)
257261
if response != 'SEND LENGTH':
258262
print(f"Unexpected response after sending SHA256: {response}")
259-
return
263+
return False
260264

261265
# Send file length
262266
sock_file.write((str(file_length) + '\n').encode())
@@ -267,13 +271,13 @@ def upload_file(filename, ip, interface_ip=None):
267271
response = read_protocol_line(sock_file)
268272
if response != 'LENGTH OK':
269273
print(f"Unexpected response after sending file length: {response}")
270-
return
274+
return False
271275

272276
# Wait for "SEND DATA" response
273277
response = read_protocol_line(sock_file)
274278
if response != 'SEND DATA':
275279
print(f"Unexpected response after sending file length: {response}")
276-
return
280+
return False
277281

278282
# Send file content as binary data with progress bar
279283
print("Uploading file...")
@@ -289,11 +293,14 @@ def upload_file(filename, ip, interface_ip=None):
289293
total_sent += len(chunk)
290294
pbar.update(len(chunk))
291295
print("File content sent")
296+
return True
292297

293298
except Exception as e:
294299
print(f"Error during file upload: {e}")
300+
return False
295301
finally:
296-
sock.close()
302+
if sock:
303+
sock.close()
297304
print("Connection closed")
298305

299306
def set_developer_mode(enable_developer_mode, ip, interface_ip=None):
@@ -303,7 +310,11 @@ def set_developer_mode(enable_developer_mode, ip, interface_ip=None):
303310
enable_developer_mode (bool): The new value for the developer mode
304311
ip (str): The IP address of the board.
305312
interface_ip (str): The IP address of the network interface to use.
313+
314+
Returns:
315+
bool: True on success, False on error.
306316
"""
317+
sock = None
307318
try:
308319
# Create a TCP socket
309320
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -324,10 +335,10 @@ def set_developer_mode(enable_developer_mode, ip, interface_ip=None):
324335
line = read_protocol_line(sock_file)
325336
if line is None:
326337
# timeout
327-
return
338+
return False
328339
if variables.get("BOOTLOADER VERSION") == "xcore-boot v1.0":
329340
print("Developer mode not supported on bootloader v1.0")
330-
return
341+
return False
331342
if line == 'SEND COMMAND':
332343
break # End of variables section
333344
if ':' in line:
@@ -348,7 +359,7 @@ def set_developer_mode(enable_developer_mode, ip, interface_ip=None):
348359
response = read_protocol_line(sock_file)
349360
if response != 'SEND DEV_MODE_ENABLED':
350361
print(f"Unexpected response after sending SET_DEV_MODE: {response}")
351-
return
362+
return False
352363
print("Received HASH OK")
353364

354365
if enable_developer_mode:
@@ -361,10 +372,13 @@ def set_developer_mode(enable_developer_mode, ip, interface_ip=None):
361372

362373
# read back for CLI output
363374
read_protocol_line(sock_file)
375+
return True
364376
except Exception as e:
365377
print(f"Error during set dev mode: {e}")
378+
return False
366379
finally:
367-
sock.close()
380+
if sock:
381+
sock.close()
368382
print("Connection closed")
369383

370384
def service_discovery(interface_name, target_ip):
@@ -402,41 +416,57 @@ def service_discovery(interface_name, target_ip):
402416

403417

404418
def upload_command(args):
405-
"""Handles the upload command."""
419+
"""Handles the upload command.
420+
421+
Returns:
422+
int: 0 on success, non-zero on error.
423+
"""
406424
filename = args.filename
407425
interface_name = args.interface
408426
target_ip = args.target_ip
409427

410428
board_ip, interface_ip = service_discovery(interface_name, target_ip)
411429
if board_ip is None:
412-
return
430+
return 2
413431
# Upload file to board
414432
try:
415-
upload_file(filename, board_ip, interface_ip)
433+
ok = upload_file(filename, board_ip, interface_ip)
434+
if not ok:
435+
return 4
416436
except Exception as e:
417437
print(f"Error uploading file: {e}")
418-
return
438+
return 3
439+
return 0
419440

420441
def set_dev_mode_command(args):
421-
"""Handles the set_dev_mode command"""
442+
"""Handles the set_dev_mode command
443+
444+
Returns:
445+
int: 0 on success, non-zero on error.
446+
"""
422447
interface_name = args.interface
423448
target_ip = args.target_ip
424449

425450
if (args.enable and args.disable) or (not args.enable and not args.disable):
426451
print("Illegal Argument: Need to either specify enable or disable")
427-
return
452+
return 2
428453
enable = args.enable
429454

430455
board_ip, interface_ip = service_discovery(interface_name, target_ip)
431456
if board_ip is None:
432-
return
457+
return 2
433458

434-
set_developer_mode(enable, board_ip, interface_ip)
459+
ok = set_developer_mode(enable, board_ip, interface_ip)
460+
return 0 if ok else 4
435461

436462

437463

438464
def main():
439-
"""Main function to parse arguments and execute commands."""
465+
"""Main function to parse arguments and execute commands.
466+
467+
Returns:
468+
int: process exit code, 0 on success, non-zero on error.
469+
"""
440470
parser = argparse.ArgumentParser(description='xcore-upload utility')
441471
parser.add_argument('-i', '--interface', help='Network interface to use for communication')
442472
parser.add_argument('--target-ip', help='IP address of the target board (skip service discovery)')
@@ -454,11 +484,12 @@ def main():
454484
args = parser.parse_args()
455485

456486
if args.command == 'upload':
457-
upload_command(args)
487+
return upload_command(args)
458488
elif args.command == 'set_dev_mode':
459-
set_dev_mode_command(args)
489+
return set_dev_mode_command(args)
460490
else:
461491
parser.print_help()
492+
return 1
462493

463494
if __name__ == '__main__':
464-
main()
495+
sys.exit(main())

0 commit comments

Comments
 (0)