diff --git a/selfdrive/hardware/base.py b/selfdrive/hardware/base.py index 20258b85d0..8e4ba72b2e 100644 --- a/selfdrive/hardware/base.py +++ b/selfdrive/hardware/base.py @@ -134,9 +134,11 @@ class HardwareBase(ABC): def get_gpu_usage_percent(self): pass - @abstractmethod def get_modem_version(self): - pass + return None + + def get_modem_nv(self): + return None @abstractmethod def get_modem_temperatures(self): diff --git a/selfdrive/hardware/eon/hardware.py b/selfdrive/hardware/eon/hardware.py index ae5ae53f78..bd2a01cf1e 100644 --- a/selfdrive/hardware/eon/hardware.py +++ b/selfdrive/hardware/eon/hardware.py @@ -411,9 +411,6 @@ class Android(HardwareBase): except Exception: return 0 - def get_modem_version(self): - return None - def get_modem_temperatures(self): # Not sure if we can get this on the LeEco return [] diff --git a/selfdrive/hardware/pc/hardware.py b/selfdrive/hardware/pc/hardware.py index 8231bbc2f9..0d85f28bed 100644 --- a/selfdrive/hardware/pc/hardware.py +++ b/selfdrive/hardware/pc/hardware.py @@ -92,9 +92,6 @@ class Pc(HardwareBase): def get_gpu_usage_percent(self): return 0 - def get_modem_version(self): - return None - def get_modem_temperatures(self): return [] diff --git a/selfdrive/hardware/tici/hardware.py b/selfdrive/hardware/tici/hardware.py index 611c661ad5..bb130514c3 100644 --- a/selfdrive/hardware/tici/hardware.py +++ b/selfdrive/hardware/tici/hardware.py @@ -317,6 +317,19 @@ class Tici(HardwareBase): except Exception: return None + def get_modem_nv(self): + timeout = 0.2 # Default timeout is too short + files = ( + '/nv/item_files/modem/mmode/ue_usage_setting', + '/nv/item_files/ims/IMS_enable', + '/nv/item_files/modem/mmode/sms_only', + ) + try: + modem = self.get_modem() + return { fn: str(modem.Command(f'AT+QNVFR="{fn}"', math.ceil(timeout), dbus_interface=MM_MODEM, timeout=timeout)) for fn in files} + except Exception: + return None + def get_modem_temperatures(self): timeout = 0.2 # Default timeout is too short try: diff --git a/selfdrive/thermald/thermald.py b/selfdrive/thermald/thermald.py index 7c64eaf31e..16887e9f74 100755 --- a/selfdrive/thermald/thermald.py +++ b/selfdrive/thermald/thermald.py @@ -99,6 +99,9 @@ def hw_state_thread(end_event, hw_queue): registered_count = 0 prev_hw_state = None + modem_version = None + modem_nv = None + while not end_event.is_set(): # these are expensive calls. update every 10s if (count % int(10. / DT_TRML)) == 0: @@ -108,6 +111,14 @@ def hw_state_thread(end_event, hw_queue): if len(modem_temps) == 0 and prev_hw_state is not None: modem_temps = prev_hw_state.modem_temps + # Log modem version once + if TICI and ((modem_version is None) or (modem_nv is None)): + modem_version = HARDWARE.get_modem_version() # pylint: disable=assignment-from-none + modem_nv = HARDWARE.get_modem_nv() # pylint: disable=assignment-from-none + + if (modem_version is not None) and (modem_nv is not None): + cloudlog.event("modem version", version=modem_version, nv=modem_nv) + hw_state = HardwareState( network_type=network_type, network_metered=HARDWARE.get_network_metered(network_type),