@@ -143,10 +143,7 @@ def drain_all():
143143 if msg is None :
144144 break
145145
146- pending = {
147- param_name : (param_value , param_type )
148- for param_name , param_value , param_type in params
149- }
146+ pending = {name : (value , param_type ) for name , value , param_type in params }
150147 retries = {name : 0 for name , _ , _ in params }
151148
152149 logger .debug (f"Setting { len (params )} params" )
@@ -156,60 +153,67 @@ def drain_all():
156153 while pending :
157154 # Send all the pending params at once
158155 for param_name , (param_value , param_type ) in pending .items ():
159- droneStatus .drone .master .mav .param_set_send (
160- droneStatus .drone .master .target_system ,
161- droneStatus .drone .master .target_component ,
162- param_name .encode ("utf-8" ),
163- param_value ,
164- param_type ,
165- )
156+ try :
157+ droneStatus .drone .master .mav .param_set_send (
158+ droneStatus .drone .master .target_system ,
159+ droneStatus .drone .master .target_component ,
160+ param_name .encode ("utf-8" ),
161+ param_value ,
162+ param_type ,
163+ )
164+ except Exception :
165+ logger .warning (f"Error with set_send of param { param_name } " )
166166
167167 start_time = time .time ()
168168
169169 while time .time () - start_time < TIMEOUT and pending :
170- msg = droneStatus .drone .master .recv_match (blocking = False )
170+ try :
171+ time .sleep (0.005 ) # For stability
172+ msg = droneStatus .drone .master .recv_match (blocking = False )
171173
172- if msg is None :
173- time .sleep (0.005 )
174- continue
174+ if msg is None :
175+ continue
175176
176- if msg .get_type () != "PARAM_VALUE" :
177- continue
177+ if msg .get_type () != "PARAM_VALUE" :
178+ continue
178179
179- param_name = msg .param_id
180- if isinstance (param_name , bytes ):
181- param_name = param_name .decode ("utf-8" ).strip ("\x00 " )
180+ param_name = msg .param_id
182181
183- if param_name in pending :
184- param_value , param_type = pending [param_name ]
185- received_value = msg .param_value
182+ if param_name in pending :
183+ param_value , param_type = pending [param_name ]
184+ received_value = msg .param_value
186185
187- if (
188- abs (received_value - param_value ) < 0.001
189- ): # Allow for floating point precision
190- logger .info (
191- f"Successfully set { param_name } to { param_value } (confirmed: { received_value } )"
192- )
186+ if (
187+ abs (received_value - param_value ) < 0.001
188+ ): # Allow for floating point precision
189+ logger .info (
190+ f"Successfully set { param_name } to { param_value } (confirmed: { received_value } )"
191+ )
193192
194- # Keep cached params coherent with direct MAVLink writes used in tests.
195- droneStatus .drone .paramsController .saveParam (
196- param_name ,
197- received_value ,
198- param_type ,
199- )
193+ # Keep cached params coherent with direct MAVLink writes used in tests.
194+ droneStatus .drone .paramsController .saveParam (
195+ param_name ,
196+ received_value ,
197+ param_type ,
198+ )
200199
201- del pending [ param_name ]
200+ pending . pop ( param_name )
202201
203- else :
204- logger .warning (
205- f"Parameter { param_name } was set but value mismatch: expected { param_value } , got { received_value } "
206- )
202+ else :
203+ logger .warning (
204+ f"Parameter { param_name } was set but value mismatch: expected { param_value } , got { received_value } "
205+ )
206+ except Exception :
207+ logger .warning (f"Error setting params, last param: { param_name } " )
207208
208209 # Retry only missing
209210 if pending :
210211 for param_name in list (pending .keys ()):
211212 retries [param_name ] += 1
212213 if retries [param_name ] > MAX_RETRIES :
214+ logger .error (
215+ f"Failed to set { param_name } after { MAX_RETRIES } attempts"
216+ )
213217 raise RuntimeError (
214218 f"Failed to set { param_name } after { MAX_RETRIES } attempts"
215219 )
0 commit comments