From 3f42ec46dd4c62793c7cfa8e8dc92102d9a6f101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Wed, 25 Mar 2026 12:08:35 +0100 Subject: [PATCH 1/4] fix(wsen-hids): Restore sensor config after power cycle. --- lib/wsen-hids/wsen_hids/device.py | 7 +++++++ tests/scenarios/wsen_hids.yaml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/wsen-hids/wsen_hids/device.py b/lib/wsen-hids/wsen_hids/device.py index c221022e..3b9e6f45 100644 --- a/lib/wsen-hids/wsen_hids/device.py +++ b/lib/wsen-hids/wsen_hids/device.py @@ -61,6 +61,9 @@ def __init__( self._calibration = {} self._temp_gain = 1.0 self._temp_offset = 0.0 + self._avg_t = avg_t + self._avg_h = avg_h + self._bdu = enable_bdu if check_device: self.check_device() @@ -201,6 +204,10 @@ def power_on(self): ctrl1 = self._read_reg(REG_CTRL_1) ctrl1 |= CTRL_1_PD self._write_reg(REG_CTRL_1, ctrl1) + self.set_average(self._avg_t, self._avg_h) + if self._bdu: + self.enable_bdu(True) + self._read_calibration() def enable_heater(self, enabled=True): value = CTRL_2_HEATER if enabled else 0 diff --git a/tests/scenarios/wsen_hids.yaml b/tests/scenarios/wsen_hids.yaml index 3748f195..d278abae 100644 --- a/tests/scenarios/wsen_hids.yaml +++ b/tests/scenarios/wsen_hids.yaml @@ -106,6 +106,36 @@ tests: expect_true: true mode: [mock] + - name: "Power on restores averaging config" + action: script + script: | + dev.power_off() + dev.power_on() + av_conf = i2c.readfrom_mem(dev.address, 0x10, 1)[0] + result = av_conf != 0 + expect_true: true + mode: [mock] + + - name: "Power on restores BDU setting" + action: script + script: | + dev.power_off() + dev.power_on() + ctrl1 = i2c.readfrom_mem(dev.address, 0x20, 1)[0] + result = (ctrl1 & 0x04) != 0 + expect_true: true + mode: [mock] + + - name: "Read one-shot works after power cycle" + action: script + script: | + dev.power_off() + dev.power_on() + h, t = dev.read_one_shot() + result = isinstance(h, float) and isinstance(t, float) + expect_true: true + mode: [mock] + - name: "Temperature with offset" action: script script: | From 5fc7208c81212a34dd25a4b52dd11563f75acb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Wed, 25 Mar 2026 12:12:43 +0100 Subject: [PATCH 2/4] test(wsen-hids): Add hardware test for power cycle read_one_shot. --- tests/scenarios/wsen_hids.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/scenarios/wsen_hids.yaml b/tests/scenarios/wsen_hids.yaml index d278abae..5d7de9b1 100644 --- a/tests/scenarios/wsen_hids.yaml +++ b/tests/scenarios/wsen_hids.yaml @@ -136,6 +136,18 @@ tests: expect_true: true mode: [mock] + - name: "Read one-shot after power cycle (hardware)" + action: script + script: | + from time import sleep_ms + dev.power_off() + sleep_ms(50) + dev.power_on() + h, t = dev.read_one_shot() + result = 10.0 < h < 90.0 and 10.0 < t < 50.0 + expect_true: true + mode: [hardware] + - name: "Temperature with offset" action: script script: | From 8066562e20c5993a7e59ecb1e7e72028b73ea217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Wed, 25 Mar 2026 12:17:36 +0100 Subject: [PATCH 3/4] fix(wsen-hids): Sync runtime config and improve mock tests. --- lib/wsen-hids/wsen_hids/device.py | 3 +++ tests/scenarios/wsen_hids.yaml | 24 ++++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/wsen-hids/wsen_hids/device.py b/lib/wsen-hids/wsen_hids/device.py index 3b9e6f45..da60e872 100644 --- a/lib/wsen-hids/wsen_hids/device.py +++ b/lib/wsen-hids/wsen_hids/device.py @@ -170,10 +170,13 @@ def _read_calibration(self): # ------------------------------------------------------------------------- def enable_bdu(self, enabled=True): + self._bdu = enabled value = CTRL_1_BDU if enabled else 0 self._update_reg(REG_CTRL_1, CTRL_1_BDU, value) def set_average(self, avg_t=AVG_T_DEFAULT, avg_h=AVG_H_DEFAULT): + self._avg_t = avg_t + self._avg_h = avg_h avg_t &= 0x07 avg_h &= 0x07 value = (avg_t << 3) | avg_h diff --git a/tests/scenarios/wsen_hids.yaml b/tests/scenarios/wsen_hids.yaml index 5d7de9b1..e7200645 100644 --- a/tests/scenarios/wsen_hids.yaml +++ b/tests/scenarios/wsen_hids.yaml @@ -106,30 +106,46 @@ tests: expect_true: true mode: [mock] - - name: "Power on restores averaging config" + - name: "Power on restores averaging config after register loss" action: script script: | dev.power_off() + i2c.writeto_mem(dev.address, 0x10, bytes([0x00])) dev.power_on() av_conf = i2c.readfrom_mem(dev.address, 0x10, 1)[0] - result = av_conf != 0 + result = av_conf == 0x1B expect_true: true mode: [mock] - - name: "Power on restores BDU setting" + - name: "Power on restores BDU after register loss" action: script script: | dev.power_off() + i2c.writeto_mem(dev.address, 0x20, bytes([0x00])) dev.power_on() ctrl1 = i2c.readfrom_mem(dev.address, 0x20, 1)[0] result = (ctrl1 & 0x04) != 0 expect_true: true mode: [mock] - - name: "Read one-shot works after power cycle" + - name: "Power on preserves runtime config changes" action: script script: | + dev.enable_bdu(False) dev.power_off() + i2c.writeto_mem(dev.address, 0x20, bytes([0x00])) + dev.power_on() + ctrl1 = i2c.readfrom_mem(dev.address, 0x20, 1)[0] + result = (ctrl1 & 0x04) == 0 + expect_true: true + mode: [mock] + + - name: "Read one-shot works after register loss" + action: script + script: | + dev.power_off() + i2c.writeto_mem(dev.address, 0x10, bytes([0x00])) + i2c.writeto_mem(dev.address, 0x20, bytes([0x00])) dev.power_on() h, t = dev.read_one_shot() result = isinstance(h, float) and isinstance(t, float) From feaf8bb55df08a1d61a84dbcefd221e0f3195b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20NEDJAR?= Date: Wed, 25 Mar 2026 12:20:39 +0100 Subject: [PATCH 4/4] test(wsen-hids): Cover runtime averaging restore after power cycle. --- tests/scenarios/wsen_hids.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/scenarios/wsen_hids.yaml b/tests/scenarios/wsen_hids.yaml index e7200645..2a26445c 100644 --- a/tests/scenarios/wsen_hids.yaml +++ b/tests/scenarios/wsen_hids.yaml @@ -140,6 +140,18 @@ tests: expect_true: true mode: [mock] + - name: "Power on preserves runtime averaging changes" + action: script + script: | + dev.set_average(dev.AVG_64, dev.AVG_32) + dev.power_off() + i2c.writeto_mem(dev.address, 0x10, bytes([0x00])) + dev.power_on() + av_conf = i2c.readfrom_mem(dev.address, 0x10, 1)[0] + result = av_conf == ((dev.AVG_64 << 3) | dev.AVG_32) + expect_true: true + mode: [mock] + - name: "Read one-shot works after register loss" action: script script: |