From 3abbedae7a59f20ecb055bb931c8c2122d9330b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Sat, 14 Mar 2026 23:01:44 +0100 Subject: [PATCH 1/2] hts221: Add data ready polling in _ensure_data(). --- lib/hts221/hts221/device.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/hts221/hts221/device.py b/lib/hts221/hts221/device.py index 6a899080..6f776359 100644 --- a/lib/hts221/hts221/device.py +++ b/lib/hts221/hts221/device.py @@ -110,6 +110,11 @@ def trigger_one_shot(self): def _ensure_data(self): if self._is_power_down() or self._is_one_shot_mode(): self.trigger_one_shot() + for _ in range(50): + if self._read_reg(HTS221_STATUS_REG) & HTS221_STATUS_T_DA: + return + sleep_ms(2) + raise OSError("HTS221 data ready timeout") # calculate Temperature def temperature(self): From d49a8db8eb2a65a3e4aa4fad365985b58e377832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Sat, 14 Mar 2026 23:15:35 +0100 Subject: [PATCH 2/2] hts221: Address Copilot review on polling timeout PR. --- lib/hts221/hts221/device.py | 3 ++- tests/scenarios/hts221.yaml | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/hts221/hts221/device.py b/lib/hts221/hts221/device.py index 6f776359..0eb35213 100644 --- a/lib/hts221/hts221/device.py +++ b/lib/hts221/hts221/device.py @@ -110,8 +110,9 @@ 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) & HTS221_STATUS_T_DA: + if (self._read_reg(HTS221_STATUS_REG) & ready_mask) == ready_mask: return sleep_ms(2) raise OSError("HTS221 data ready timeout") 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: |