15
15
16
16
17
17
class ArduinoAlvik :
18
-
19
18
_update_thread_running = False
20
19
_update_thread_id = None
21
20
_touch_events_thread_running = False
@@ -32,9 +31,9 @@ def __init__(self):
32
31
self .right_wheel = _ArduinoAlvikWheel (self ._packeter , ord ('R' ))
33
32
self ._led_state = list ((None ,))
34
33
self .left_led = self .DL1 = _ArduinoAlvikRgbLed (self ._packeter , 'left' , self ._led_state ,
35
- rgb_mask = [0b00000100 , 0b00001000 , 0b00010000 ])
34
+ rgb_mask = [0b00000100 , 0b00001000 , 0b00010000 ])
36
35
self .right_led = self .DL2 = _ArduinoAlvikRgbLed (self ._packeter , 'right' , self ._led_state ,
37
- rgb_mask = [0b00100000 , 0b01000000 , 0b10000000 ])
36
+ rgb_mask = [0b00100000 , 0b01000000 , 0b10000000 ])
38
37
self ._battery_perc = None
39
38
self ._touch_byte = None
40
39
self ._behaviour = None
@@ -234,7 +233,7 @@ def _stop_update_thread(cls):
234
233
def _wait_for_target (self , idle_time ):
235
234
start = ticks_ms ()
236
235
while True :
237
- if ticks_diff (ticks_ms (), start ) >= idle_time * 1000 and self .is_target_reached ():
236
+ if ticks_diff (ticks_ms (), start ) >= idle_time * 1000 and self .is_target_reached ():
238
237
break
239
238
else :
240
239
# print(self._last_ack)
@@ -280,7 +279,7 @@ def rotate(self, angle: float, unit: str = 'deg', blocking: bool = True):
280
279
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
281
280
self ._waiting_ack = ord ('R' )
282
281
if blocking :
283
- self ._wait_for_target (idle_time = (angle / MOTOR_CONTROL_DEG_S ))
282
+ self ._wait_for_target (idle_time = (angle / MOTOR_CONTROL_DEG_S ))
284
283
285
284
def move (self , distance : float , unit : str = 'cm' , blocking : bool = True ):
286
285
"""
@@ -296,7 +295,7 @@ def move(self, distance: float, unit: str = 'cm', blocking: bool = True):
296
295
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
297
296
self ._waiting_ack = ord ('M' )
298
297
if blocking :
299
- self ._wait_for_target (idle_time = (distance / MOTOR_CONTROL_MM_S ))
298
+ self ._wait_for_target (idle_time = (distance / MOTOR_CONTROL_MM_S ))
300
299
301
300
def stop (self ):
302
301
"""
@@ -1337,3 +1336,44 @@ def register_callback(self, event_name: str, callback: callable, args: tuple = N
1337
1336
if event_name not in self .__class__ .available_events :
1338
1337
return
1339
1338
super ().register_callback (event_name , callback , args )
1339
+
1340
+
1341
+ # UPDATE FIRMWARE METHOD #
1342
+
1343
+ def update_firmware (file_path : str ):
1344
+ """
1345
+
1346
+ :param file_path: path of your FW bin
1347
+ :return:
1348
+ """
1349
+
1350
+ from sys import exit
1351
+ from stm32_flash import (
1352
+ CHECK_STM32 ,
1353
+ STM32_endCommunication ,
1354
+ STM32_startCommunication ,
1355
+ STM32_NACK ,
1356
+ STM32_eraseMEM ,
1357
+ STM32_writeMEM , )
1358
+
1359
+ if CHECK_STM32 .value () is not 1 :
1360
+ print ("Turn on your Alvik to continue..." )
1361
+ while CHECK_STM32 .value () is not 1 :
1362
+ sleep_ms (500 )
1363
+
1364
+ ans = STM32_startCommunication ()
1365
+ if ans == STM32_NACK :
1366
+ print ("Cannot establish connection with STM32" )
1367
+ exit (- 1 )
1368
+
1369
+ print ('\n STM32 FOUND' )
1370
+
1371
+ print ('\n ERASING MEM' )
1372
+ STM32_eraseMEM (0xFFFF )
1373
+
1374
+ print ("\n WRITING MEM" )
1375
+ STM32_writeMEM (file_path )
1376
+ print ("\n DONE" )
1377
+ print ("\n Lower Boot0 and reset STM32" )
1378
+
1379
+ STM32_endCommunication ()
0 commit comments