@@ -148,46 +148,49 @@ def flash_devices(serial, ip_list, fw_file, mcu, programmer_type, log_level):
148148 else :
149149 devices = [{'serial' : serial , 'ip' : None }]
150150
151- # Print header
152- if len (devices ) == 1 :
153- device_str = devices [0 ]['ip' ] or (f"serial { devices [0 ]['serial' ]} " if devices [0 ]['serial' ] is not None else "auto-detected" )
154- print (f"Flashing { device_str } " )
155- else :
156- # Show all device identifiers (ip or serial)
157- device_names = []
158- for d in devices :
159- if d ['ip' ]:
160- device_names .append (str (d ['ip' ]))
161- elif d ['serial' ] is not None :
162- device_names .append (f"serial { d ['serial' ]} " )
163- else :
164- device_names .append ("auto-detected" )
165- print (f"Flashing { len (devices )} device(s) in parallel: { ', ' .join (device_names )} " )
151+ # Print device list
152+ device_names = []
153+ for d in devices :
154+ if d ['ip' ]:
155+ device_names .append (str (d ['ip' ]))
156+ elif d ['serial' ] is not None :
157+ device_names .append (f"serial { d ['serial' ]} " )
158+ else :
159+ device_names .append ("auto-detected" )
160+ print (f"Flashing { len (devices )} device(s): { ', ' .join (device_names )} " )
166161 print (f"Firmware: { fw_file } \n " )
167162
168163 results = []
169- with ProcessPoolExecutor (max_workers = len (devices )) as executor :
170- # Submit all flash tasks
171- future_to_device = {
172- executor .submit (flash_device_task , dev ['serial' ], dev ['ip' ], fw_file , mcu , programmer_type , log_level ): dev
173- for dev in devices
174- }
175-
176- # Process results as they complete
177- for future in as_completed (future_to_device ):
178- dev = future_to_device [future ]
179- try :
180- result = future .result (timeout = 300 ) # 5 min timeout per device
181- results .append (result )
182-
183- if result ['success' ]:
184- print (f"✓ { result ['device' ]} : Success" )
185- else :
186- print (f"✗ { result ['device' ]} : { result ['error' ]} " )
187- except Exception as e :
188- device_id = dev ['ip' ] or dev ['serial' ]
189- results .append ({'device' : device_id , 'success' : False , 'error' : str (e )})
190- print (f"✗ { device_id } : { e } " )
164+ if ip_list :
165+ # Parallel flashing for IPs
166+ from concurrent .futures import ProcessPoolExecutor , as_completed
167+ with ProcessPoolExecutor (max_workers = len (devices )) as executor :
168+ future_to_device = {
169+ executor .submit (flash_device_task , dev ['serial' ], dev ['ip' ], fw_file , mcu , programmer_type , log_level ): dev
170+ for dev in devices
171+ }
172+ for future in as_completed (future_to_device ):
173+ dev = future_to_device [future ]
174+ try :
175+ result = future .result (timeout = 300 )
176+ results .append (result )
177+ if result ['success' ]:
178+ print (f"✓ { result ['device' ]} : Success" )
179+ else :
180+ print (f"✗ { result ['device' ]} : { result ['error' ]} " )
181+ except Exception as e :
182+ device_id = dev ['ip' ] or dev ['serial' ]
183+ results .append ({'device' : device_id , 'success' : False , 'error' : str (e )})
184+ print (f"✗ { device_id } : { e } " )
185+ else :
186+ # Sequential flashing for serials
187+ for dev in devices :
188+ result = flash_device_task (dev ['serial' ], dev ['ip' ], fw_file , mcu , programmer_type , log_level )
189+ results .append (result )
190+ if result ['success' ]:
191+ print (f"✓ { result ['device' ]} : Success" )
192+ else :
193+ print (f"✗ { result ['device' ]} : { result ['error' ]} " )
191194
192195 # Summary
193196 success_count = sum (1 for r in results if r ['success' ])
0 commit comments