diff --git a/lib/wsen-hids/wsen_hids/device.py b/lib/wsen-hids/wsen_hids/device.py index c221022e..da60e872 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() @@ -167,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 @@ -201,6 +207,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..2a26445c 100644 --- a/tests/scenarios/wsen_hids.yaml +++ b/tests/scenarios/wsen_hids.yaml @@ -106,6 +106,76 @@ tests: expect_true: true mode: [mock] + - 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 == 0x1B + expect_true: true + mode: [mock] + + - 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: "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: "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: | + 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) + 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: |