@@ -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
299306def 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
370384def service_discovery (interface_name , target_ip ):
@@ -402,41 +416,57 @@ def service_discovery(interface_name, target_ip):
402416
403417
404418def 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
420441def 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
438464def 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
463494if __name__ == '__main__' :
464- main ()
495+ sys . exit ( main () )
0 commit comments