diff --git a/lib/hts221/hts221/device.py b/lib/hts221/hts221/device.py index 6a899080..0eb35213 100644 --- a/lib/hts221/hts221/device.py +++ b/lib/hts221/hts221/device.py @@ -110,6 +110,12 @@ def trigger_one_shot(self): def _ensure_data(self): if self._is_power_down() or self._is_one_shot_mode(): self.trigger_one_shot() + ready_mask = HTS221_STATUS_T_DA | HTS221_STATUS_H_DA + for _ in range(50): + if (self._read_reg(HTS221_STATUS_REG) & ready_mask) == ready_mask: + return + sleep_ms(2) + raise OSError("HTS221 data ready timeout") # calculate Temperature def temperature(self): diff --git a/tests/scenarios/hts221.yaml b/tests/scenarios/hts221.yaml index 66f893cd..d252e3c5 100644 --- a/tests/scenarios/hts221.yaml +++ b/tests/scenarios/hts221.yaml @@ -136,6 +136,20 @@ tests: expect_true: true mode: [mock] + - name: "Timeout raises OSError when data never ready" + action: script + script: | + dev.poweroff() + i2c._registers[0x27] = bytes([0x00]) + try: + dev.temperature() + result = False + except OSError: + result = True + i2c._registers[0x27] = bytes([0x03]) + expect_true: true + mode: [mock] + - name: "Auto-trigger after poweroff" action: hardware_script script: |