Skip to content

Commit 56e5d39

Browse files
authored
fix(wsen-hids): Restore sensor config after power cycle. (#240)
* fix(wsen-hids): Restore sensor config after power cycle. * test(wsen-hids): Add hardware test for power cycle read_one_shot. * fix(wsen-hids): Sync runtime config and improve mock tests. * test(wsen-hids): Cover runtime averaging restore after power cycle.
1 parent 7e30e27 commit 56e5d39

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

lib/wsen-hids/wsen_hids/device.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ def __init__(
6161
self._calibration = {}
6262
self._temp_gain = 1.0
6363
self._temp_offset = 0.0
64+
self._avg_t = avg_t
65+
self._avg_h = avg_h
66+
self._bdu = enable_bdu
6467

6568
if check_device:
6669
self.check_device()
@@ -167,10 +170,13 @@ def _read_calibration(self):
167170
# -------------------------------------------------------------------------
168171

169172
def enable_bdu(self, enabled=True):
173+
self._bdu = enabled
170174
value = CTRL_1_BDU if enabled else 0
171175
self._update_reg(REG_CTRL_1, CTRL_1_BDU, value)
172176

173177
def set_average(self, avg_t=AVG_T_DEFAULT, avg_h=AVG_H_DEFAULT):
178+
self._avg_t = avg_t
179+
self._avg_h = avg_h
174180
avg_t &= 0x07
175181
avg_h &= 0x07
176182
value = (avg_t << 3) | avg_h
@@ -201,6 +207,10 @@ def power_on(self):
201207
ctrl1 = self._read_reg(REG_CTRL_1)
202208
ctrl1 |= CTRL_1_PD
203209
self._write_reg(REG_CTRL_1, ctrl1)
210+
self.set_average(self._avg_t, self._avg_h)
211+
if self._bdu:
212+
self.enable_bdu(True)
213+
self._read_calibration()
204214

205215
def enable_heater(self, enabled=True):
206216
value = CTRL_2_HEATER if enabled else 0

tests/scenarios/wsen_hids.yaml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,76 @@ tests:
106106
expect_true: true
107107
mode: [mock]
108108

109+
- name: "Power on restores averaging config after register loss"
110+
action: script
111+
script: |
112+
dev.power_off()
113+
i2c.writeto_mem(dev.address, 0x10, bytes([0x00]))
114+
dev.power_on()
115+
av_conf = i2c.readfrom_mem(dev.address, 0x10, 1)[0]
116+
result = av_conf == 0x1B
117+
expect_true: true
118+
mode: [mock]
119+
120+
- name: "Power on restores BDU after register loss"
121+
action: script
122+
script: |
123+
dev.power_off()
124+
i2c.writeto_mem(dev.address, 0x20, bytes([0x00]))
125+
dev.power_on()
126+
ctrl1 = i2c.readfrom_mem(dev.address, 0x20, 1)[0]
127+
result = (ctrl1 & 0x04) != 0
128+
expect_true: true
129+
mode: [mock]
130+
131+
- name: "Power on preserves runtime config changes"
132+
action: script
133+
script: |
134+
dev.enable_bdu(False)
135+
dev.power_off()
136+
i2c.writeto_mem(dev.address, 0x20, bytes([0x00]))
137+
dev.power_on()
138+
ctrl1 = i2c.readfrom_mem(dev.address, 0x20, 1)[0]
139+
result = (ctrl1 & 0x04) == 0
140+
expect_true: true
141+
mode: [mock]
142+
143+
- name: "Power on preserves runtime averaging changes"
144+
action: script
145+
script: |
146+
dev.set_average(dev.AVG_64, dev.AVG_32)
147+
dev.power_off()
148+
i2c.writeto_mem(dev.address, 0x10, bytes([0x00]))
149+
dev.power_on()
150+
av_conf = i2c.readfrom_mem(dev.address, 0x10, 1)[0]
151+
result = av_conf == ((dev.AVG_64 << 3) | dev.AVG_32)
152+
expect_true: true
153+
mode: [mock]
154+
155+
- name: "Read one-shot works after register loss"
156+
action: script
157+
script: |
158+
dev.power_off()
159+
i2c.writeto_mem(dev.address, 0x10, bytes([0x00]))
160+
i2c.writeto_mem(dev.address, 0x20, bytes([0x00]))
161+
dev.power_on()
162+
h, t = dev.read_one_shot()
163+
result = isinstance(h, float) and isinstance(t, float)
164+
expect_true: true
165+
mode: [mock]
166+
167+
- name: "Read one-shot after power cycle (hardware)"
168+
action: script
169+
script: |
170+
from time import sleep_ms
171+
dev.power_off()
172+
sleep_ms(50)
173+
dev.power_on()
174+
h, t = dev.read_one_shot()
175+
result = 10.0 < h < 90.0 and 10.0 < t < 50.0
176+
expect_true: true
177+
mode: [hardware]
178+
109179
- name: "Temperature with offset"
110180
action: script
111181
script: |

0 commit comments

Comments
 (0)