diff --git a/scos_actions/__init__.py b/scos_actions/__init__.py index b2ea6c25..87c6f8ed 100644 --- a/scos_actions/__init__.py +++ b/scos_actions/__init__.py @@ -1 +1,2 @@ -__version__ = "7.0.2" +__version__ = "7.1.0" + diff --git a/scos_actions/actions/acquire_sea_data_product.py b/scos_actions/actions/acquire_sea_data_product.py index d956fbbf..17adb08c 100644 --- a/scos_actions/actions/acquire_sea_data_product.py +++ b/scos_actions/actions/acquire_sea_data_product.py @@ -666,7 +666,8 @@ def capture_diagnostics(self, action_start_tic: float, cpu_speeds: list) -> None start time, and SCOS uptime. Software versions: the OS platform, Python version, scos_actions - version, and preselector API version. + version, the preselector API version, the signal analyzer API + version, and the signal analyzer firmware version. The total action runtime is also recorded. @@ -779,6 +780,8 @@ def capture_diagnostics(self, action_start_tic: float, cpu_speeds: list) -> None name="scos_tekrsa", version=self.sigan.plugin_version ), "preselector_api_version": PRESELECTOR_API_VERSION, + "sigan_firmware_version": self.sigan.firmware_version, + "sigan_api_version": self.sigan.api_version, } toc = perf_counter() diff --git a/scos_actions/hardware/mocks/mock_sigan.py b/scos_actions/hardware/mocks/mock_sigan.py index 46b8f2ec..29942705 100644 --- a/scos_actions/hardware/mocks/mock_sigan.py +++ b/scos_actions/hardware/mocks/mock_sigan.py @@ -38,6 +38,8 @@ def __init__(self, randomize_values=False): self._capture_time = None self._is_available = True self._plugin_version = SCOS_ACTIONS_VERSION + self._firmware_version = "1.2.3" + self._api_version = "v1.2.3" # Simulate returning less than the requested number of samples from # self.recv_num_samps @@ -55,6 +57,14 @@ def is_available(self): @property def plugin_version(self): return self._plugin_version + + @property + def firmware_version(self): + return self._firmware_version + + @property + def api_version(self): + return self._api_version @property def sample_rate(self): diff --git a/scos_actions/hardware/sigan_iface.py b/scos_actions/hardware/sigan_iface.py index a12c1d67..ee6a43e0 100644 --- a/scos_actions/hardware/sigan_iface.py +++ b/scos_actions/hardware/sigan_iface.py @@ -70,6 +70,16 @@ def plugin_version(self) -> str: """Returns the version of the SCOS plugin defining this interface.""" pass + @property + def firmware_version(self) -> str: + """Returns the version of the signal analyzer firmware.""" + return "Unknown" + + @property + def api_version(self) -> str: + """Returns the version of the underlying signal analyzer API.""" + return "Unknown" + @abstractmethod def acquire_time_domain_samples( self, diff --git a/scos_actions/metadata/structs/ntia_diagnostics.py b/scos_actions/metadata/structs/ntia_diagnostics.py index 8c144299..def0cbd5 100644 --- a/scos_actions/metadata/structs/ntia_diagnostics.py +++ b/scos_actions/metadata/structs/ntia_diagnostics.py @@ -179,6 +179,8 @@ class Software(msgspec.Struct, **SIGMF_OBJECT_KWARGS): :param scos_sigan_plugin: `ScosPlugin` object describing the plugin which defines the signal analyzer interface. :param preselector_api_version: Version of the NTIA `preselector` package. + :param sigan_firmware_version: Version of the signal analyzer firmware. + :param sigan_api_version: Version of the signal analyzer API. """ system_platform: Optional[str] = None @@ -187,6 +189,8 @@ class Software(msgspec.Struct, **SIGMF_OBJECT_KWARGS): scos_actions_version: Optional[str] = None scos_sigan_plugin: Optional[ScosPlugin] = None preselector_api_version: Optional[str] = None + sigan_firmware_version: Optional[str] = None + sigan_api_version: Optional[str] = None class Diagnostics(msgspec.Struct, **SIGMF_OBJECT_KWARGS):