Skip to content

Commit d2f7d32

Browse files
committed
1.0.3 - added check version
1 parent 4ed7f46 commit d2f7d32

File tree

4 files changed

+65
-8
lines changed

4 files changed

+65
-8
lines changed

arduino_alvik/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
__author__ = "Lucio Rossi <[email protected]>, Giovanni Bruno <[email protected]>"
66
__license__ = "MPL 2.0"
7-
__version__ = "1.0.2"
7+
__version__ = "1.0.3"
88
__maintainer__ = "Lucio Rossi <[email protected]>, Giovanni Bruno <[email protected]>"
9+
__required_firmware_version__ = "1.0.3"
910

1011
from .arduino_alvik import *

arduino_alvik/arduino_alvik.py

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
from .robot_definitions import *
1414
from .constants import *
1515

16+
from .__init__ import __version__
17+
from .__init__ import __required_firmware_version__
18+
1619

1720
class ArduinoAlvik:
1821
_update_thread_running = False
@@ -73,7 +76,9 @@ def __init__(self):
7376
self._angular_velocity = None
7477
self._last_ack = None
7578
self._waiting_ack = None
76-
self._version = [None, None, None]
79+
self._version = list(map(int, __version__.split('.')))
80+
self._fw_version = [None, None, None]
81+
self._required_fw_version = list(map(int, __required_firmware_version__.split('.')))
7782
self._touch_events = _ArduinoAlvikTouchEvents()
7883
self._move_events = _ArduinoAlvikMoveEvents()
7984
self._timer_events = _ArduinoAlvikTimerEvents(-1)
@@ -208,6 +213,9 @@ def begin(self) -> int:
208213
self._flush_uart()
209214
self._snake_robot(1000)
210215
self._wait_for_ack()
216+
if not self._wait_for_fw_check():
217+
print('\n********** PLEASE UPDATE ALVIK FIRMWARE! Check documentation **********\n')
218+
sys.exit(-2)
211219
self._snake_robot(2000)
212220
self.set_illuminator(True)
213221
self.set_behaviour(1)
@@ -241,6 +249,18 @@ def _wait_for_ack(self) -> None:
241249
sleep_ms(20)
242250
self._waiting_ack = None
243251

252+
def _wait_for_fw_check(self) -> bool:
253+
"""
254+
Waits until receives version from robot, check required version and return true if everything is ok
255+
:return:
256+
"""
257+
while self._fw_version == [None, None, None]:
258+
sleep_ms(20)
259+
if self.check_firmware_compatibility():
260+
return True
261+
else:
262+
return False
263+
244264
@staticmethod
245265
def _flush_uart():
246266
"""
@@ -689,7 +709,7 @@ def _parse_message(self) -> int:
689709
_, self._x, self._y, self._theta = self._packeter.unpacketC3F()
690710
elif code == 0x7E:
691711
# firmware version
692-
_, *self._version = self._packeter.unpacketC3B()
712+
_, *self._fw_version = self._packeter.unpacketC3B()
693713
else:
694714
return -1
695715

@@ -1053,20 +1073,56 @@ def get_distance_bottom(self, unit: str = 'cm') -> float | None:
10531073
"""
10541074
return convert_distance(self._bottom_tof, 'mm', unit)
10551075

1056-
def get_version(self) -> str:
1076+
def get_version(self, version: str = 'fw') -> str:
1077+
"""
1078+
Returns the version of the Alvik firmware or micropython library
1079+
:param version:
1080+
:return:
1081+
"""
1082+
if version == 'fw' or version == 'FW' or version == 'firmware':
1083+
return self.get_fw_version()
1084+
elif version == 'lib' or version == 'LIB':
1085+
return self.get_lib_version()
1086+
else:
1087+
return f'{None, None, None}'
1088+
1089+
def get_lib_version(self) -> str:
10571090
"""
1058-
Returns the firmware version of the Alvik
1091+
Returns the micropython library version of the Alvik
10591092
:return:
10601093
"""
10611094
return f'{self._version[0]}.{self._version[1]}.{self._version[2]}'
1095+
1096+
def get_fw_version(self) -> str:
1097+
"""
1098+
Returns the firmware version of the Alvik Carrier
1099+
:return:
1100+
"""
1101+
return f'{self._fw_version[0]}.{self._fw_version[1]}.{self._fw_version[2]}'
1102+
1103+
def get_required_fw_version(self) -> str:
1104+
"""
1105+
Returns the required firmware version of the Alvik Carrier for this micropython library
1106+
:return:
1107+
"""
1108+
return f'{self._required_fw_version[0]}.{self._required_fw_version[1]}.{self._required_fw_version[2]}'
1109+
1110+
def check_firmware_compatibility(self) -> bool:
1111+
"""
1112+
Returns true if the library and the firmware are compatible
1113+
:return:
1114+
"""
1115+
return self._fw_version == self._required_fw_version
10621116

10631117
def print_status(self):
10641118
"""
10651119
Prints the Alvik status
10661120
:return:
10671121
"""
10681122
print('---ALVIK STATUS---')
1069-
print(f'VERSION: {self._version}')
1123+
print(f'LIBRARY VERSION: {self._version}')
1124+
print(f'REQUIRED FW VERSION: {self._required_fw_version}')
1125+
print(f'FIRMWARE VERSION: {self._fw_version}')
10701126

10711127
print('---SENSORS---')
10721128
print(f'TOF: T:{self._top_tof} B:{self._bottom_tof} L:{self._left_tof} CL:{self._center_left_tof}' +

examples/tests/message_reader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
while True:
1111
try:
12-
print(f'VER: {alvik.get_version()}')
12+
print(f'FW VER: {alvik.get_fw_version()}')
1313
print(f'LSP: {alvik.left_wheel.get_speed()}')
1414
print(f'RSP: {alvik.right_wheel.get_speed()}')
1515
print(f'LPOS: {alvik.left_wheel.get_position()}')

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
"deps": [
1313
["github:arduino/ucPack-mpy", "0.1.6"]
1414
],
15-
"version": "1.0.2"
15+
"version": "1.0.3"
1616
}

0 commit comments

Comments
 (0)