diff options
Diffstat (limited to 'core/acquisition.py')
| -rw-r--r-- | core/acquisition.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/core/acquisition.py b/core/acquisition.py index 4fffb8b..79bdb79 100644 --- a/core/acquisition.py +++ b/core/acquisition.py @@ -73,12 +73,15 @@ class AcquisitionEngine(QObject): new_data(timestamp, readings) # readings: list[(device_id, channel_id, value)] — # one batched emit per poll tick, not one per channel device_status_changed(device_id, status_str) + channel_unit_changed(device_id, channel_id, new_unit) # e.g. Mark-10 gauge + # switched lb/kgF/N/ozF on its own front panel log_started(filepath) log_stopped(filepath) """ new_data = pyqtSignal(float, list) device_status_changed = pyqtSignal(str, str) + channel_unit_changed = pyqtSignal(str, str, str) log_started = pyqtSignal(str) log_stopped = pyqtSignal(str) @@ -87,6 +90,8 @@ class AcquisitionEngine(QObject): self._interval = poll_interval_ms / 1000.0 self._devices: List[BaseDevice] = [] self._buffers: Dict[str, Dict[str, ChannelBuffer]] = {} + self._last_units: Dict[Tuple[str, str], str] = {} + self._last_status: Dict[str, str] = {} self._running = False self._thread: Optional[threading.Thread] = None self._t0 = 0.0 @@ -104,10 +109,15 @@ class AcquisitionEngine(QObject): ch.channel_id: ChannelBuffer() for ch in dev.info.channels } + for ch in dev.info.channels: + self._last_units[(dev.info.device_id, ch.channel_id)] = ch.unit def remove_device(self, device_id: str): self._devices = [d for d in self._devices if d.info.device_id != device_id] self._buffers.pop(device_id, None) + self._last_status.pop(device_id, None) + for key in [k for k in self._last_units if k[0] == device_id]: + self._last_units.pop(key, None) def get_buffer(self, device_id: str, channel_id: str) -> Optional[ChannelBuffer]: return self._buffers.get(device_id, {}).get(channel_id) @@ -186,6 +196,10 @@ class AcquisitionEngine(QObject): batch: List[Tuple[str, str, float]] = [] for dev in list(self._devices): + if self._last_status.get(dev.info.device_id) != dev.status.value: + self._last_status[dev.info.device_id] = dev.status.value + self.device_status_changed.emit(dev.info.device_id, dev.status.value) + active = dev.status in (DeviceStatus.CONNECTED, DeviceStatus.SIMULATED) try: readings = dev.read_channels() if active else {} @@ -194,6 +208,11 @@ class AcquisitionEngine(QObject): readings = {} for ch in dev.info.channels: + key = (dev.info.device_id, ch.channel_id) + if self._last_units.get(key) != ch.unit: + self._last_units[key] = ch.unit + self.channel_unit_changed.emit(dev.info.device_id, ch.channel_id, ch.unit) + val = readings.get(ch.channel_id) if val is None or not ch.enabled: log_row.append("") |
