Skip to content

Commit e854678

Browse files
Angel CamposAnthony Vizcarra
Angel Campos
authored and
Anthony Vizcarra
committed
Weekly FW version check on RVR program startup
1 parent 734d33c commit e854678

29 files changed

+429
-1478
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
/.idea
77
/.python-version
88
/docs/_build/
9+
/.fw
910
*.ipynb_checkpoints
1011
*.h5
1112
*.py~

sphero_sdk/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@
99
from sphero_sdk.common.enums.sphero_rvr_enums import SpheroRvrLedBitmasks
1010
from sphero_sdk.common.rvr_streaming_services import RvrStreamingServices
1111

12+
1213
from sphero_sdk.common.enums.drive_enums import RawMotorModesEnum
1314
from sphero_sdk.common.enums.drive_enums import StabilizationIndexesEnum
14-
from sphero_sdk.common.enums.drive_enums import MotorIndexesEnum
15+
from sphero_sdk.common.enums.drive_enums import MotorIndexesEnum as DriveMotorIndexesEnum
1516
from sphero_sdk.common.enums.drive_enums import DriveFlagsBitmask
1617
from sphero_sdk.common.enums.io_enums import SpecdrumsColorPaletteIndiciesEnum
17-
from sphero_sdk.common.enums.io_enums import FrameInfoTypesEnum
1818
from sphero_sdk.common.enums.power_enums import BatteryVoltageStatesEnum
1919
from sphero_sdk.common.enums.power_enums import BatteryVoltageReadingTypesEnum
2020
from sphero_sdk.common.enums.power_enums import AmplifierIdsEnum
21-
from sphero_sdk.common.enums.sensor_enums import MotorIndexesEnum
21+
from sphero_sdk.common.enums.sensor_enums import MotorIndexesEnum as SensorMotorIndexesEnum
2222
from sphero_sdk.common.enums.sensor_enums import ThermalProtectionStatusEnum
2323
from sphero_sdk.common.enums.sensor_enums import StreamingDataSizesEnum
24-
from sphero_sdk.common.enums.sensor_enums import StreamingServiceStatesEnum
2524
from sphero_sdk.common.enums.sensor_enums import GyroMaxFlagsBitmask
2625
from sphero_sdk.common.enums.sensor_enums import LocatorFlagsBitmask
2726
from sphero_sdk.common.enums.sensor_enums import InfraredSensorLocationsBitmask
2827

28+
from sphero_sdk.asyncio.client.firmware.rvr_fw_check_async import RvrFwCheckAsync
2929
from sphero_sdk.asyncio.controls.led_control_async import LedControlAsync
3030
from sphero_sdk.asyncio.controls.drive_control_async import DriveControlAsync
3131
from sphero_sdk.asyncio.controls.infrared_control_async import InfraredControlAsync
@@ -35,6 +35,7 @@
3535
from sphero_sdk.asyncio.client.dal.restful_async_dal import RestfulAsyncDal
3636

3737
from sphero_sdk.observer.observer_base import Observer
38+
from sphero_sdk.observer.client.firmware.rvr_fw_check_observer import RvrFwCheckObserver
3839
from sphero_sdk.observer.events.event_dispatcher import EventDispatcher
3940
from sphero_sdk.observer.controls.led_control_observer import LedControlObserver
4041
from sphero_sdk.observer.controls.drive_control_observer import DriveControlObserver

sphero_sdk/asyncio/client/firmware/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import os
2+
import logging
3+
from sphero_sdk import SpheroRvrTargets
4+
from sphero_sdk.common.firmware.cms_fw_check_base import CmsFwCheckBase
5+
6+
logger = logging.getLogger(__name__)
7+
8+
9+
class RvrFwCheckAsync(CmsFwCheckBase):
10+
11+
def __init__(self):
12+
CmsFwCheckBase.__init__(self)
13+
self.__rvr = self
14+
15+
async def _check_rvr_fw(self):
16+
"""Checks the RVR's firmware on the Nordic and ST chips against the CMS, if an internet connection is available.
17+
"""
18+
root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../../'))
19+
20+
# Have more than 7 days elapsed since last check?
21+
if not self._should_run_fw_check():
22+
return
23+
24+
print('Checking RVR firmware versions...')
25+
26+
rvr_nordic_version = await self.__rvr.get_main_application_version(target=SpheroRvrTargets.primary.value, timeout=3)
27+
rvr_st_version = await self.__rvr.get_main_application_version(target=SpheroRvrTargets.secondary.value, timeout=3)
28+
29+
if rvr_nordic_version is None or rvr_st_version is None:
30+
logger.error('Unable to retrieve Nordic and/or ST versions from RVR.')
31+
return
32+
33+
print('Checking CMS firmware versions...')
34+
cms_nordic_version = await self._get_cms_fw_version(self._nordic_cms_url)
35+
logger.info('CMS Nordic Version:', cms_nordic_version)
36+
37+
cms_st_version = await self._get_cms_fw_version(self._st_cms_url)
38+
logger.info('CMS ST Version:', cms_st_version)
39+
40+
# Proceed only if both versions are acquired from the CMS.
41+
if cms_nordic_version is not None or cms_st_version is not None:
42+
43+
# Record timestamp of this check
44+
self._write_timestamp()
45+
46+
warning_displayed = self._check_update_available(rvr_nordic_version, cms_nordic_version)
47+
48+
# Check ST version only if Nordic version check return false
49+
if not warning_displayed:
50+
self._check_update_available(rvr_st_version, cms_st_version)
51+
52+
print('Firmware check complete.')
53+
54+
55+
56+
57+

0 commit comments

Comments
 (0)