From 48fe5d01c998520755fb89284b21ab5a5440e9dc Mon Sep 17 00:00:00 2001 From: Feeph Aifeimei <55798703+feeph@users.noreply.github.com> Date: Sat, 20 Jul 2024 23:36:15 +0000 Subject: [PATCH] fix: fix 'configure_pin_six_as_alert()' and provide unit tests --- feeph/emc2101/core.py | 4 +-- tests/test_emc2101.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100755 tests/test_emc2101.py diff --git a/feeph/emc2101/core.py b/feeph/emc2101/core.py index bda7865..4665b12 100755 --- a/feeph/emc2101/core.py +++ b/feeph/emc2101/core.py @@ -173,10 +173,10 @@ def configure_pin_six_as_alert(self) -> bool: with BurstHandler(i2c_bus=self._i2c_bus, i2c_adr=self._i2c_adr) as bh: cfg_register_value = bh.read_register(0x03) if cfg_register_value is not None: - bh.write_registers(0x03, cfg_register_value & 0b1111_1011) + bh.write_register(0x03, cfg_register_value & 0b1111_1011) # clear spin up behavior settings # (spin up is unavailable when pin 6 is in alert mode), - bh.write_registers(0x4B, 0b0000_0000) + bh.write_register(0x4B, 0b0000_0000) return True else: LH.error("Unable to read config register!") diff --git a/tests/test_emc2101.py b/tests/test_emc2101.py new file mode 100755 index 0000000..2531150 --- /dev/null +++ b/tests/test_emc2101.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +""" +perform PWM related tests + +use simulated device: + pdm run pytest +use hardware device: + TEST_EMC2101_CHIP=y pdm run pytest +""" + +import os +import unittest + +# modules board and busio provide no type hints +import board # type: ignore +import busio # type: ignore +from feeph.i2c import BurstHandler, EmulatedI2C + +import feeph.emc2101.core as sut # sytem under test + +if os.environ.get('TEST_EMC2101_CHIP', 'n') == 'y': + HAS_HARDWARE = True +else: + HAS_HARDWARE = False + + +class TestEmc2101(unittest.TestCase): + + def setUp(self): + self.i2c_adr = 0x4C + if HAS_HARDWARE: + self.i2c_bus = busio.I2C(scl=board.SCL, sda=board.SDA) + else: + # initialize read/write registers + registers = sut.DEFAULTS.copy() + # add readonly registers + registers[0x00] = 0x14 # chip temperature + registers[0x01] = 0x1B # external sensor temperature (high byte) + registers[0x02] = 0x00 # status register + registers[0x0F] = 0x00 # write only register, trigger temperature conversion + registers[0x10] = 0xE0 # external sensor temperature (low byte) + registers[0x46] = 0xFF # tacho reading (low byte) + registers[0x47] = 0xFF # tacho reading (high byte) + registers[0xFD] = 0x16 # product id + registers[0xFE] = 0x5D # manufacturer id + registers[0xFF] = 0x02 # revision + self.i2c_bus = EmulatedI2C(state={self.i2c_adr: registers}) + self.emc2101 = sut.Emc2101_core(i2c_bus=self.i2c_bus) + # restore original state after each run + # (hardware is not stateless) + self.emc2101.reset_device_registers() + + def tearDown(self): + # nothing to do + pass + + # --------------------------------------------------------------------- + # circuit-dependent settings + # --------------------------------------------------------------------- + + def test_pin_six_as_alert(self): + # ----------------------------------------------------------------- + computed = self.emc2101.configure_pin_six_as_alert() + expected = True + # ----------------------------------------------------------------- + self.assertEqual(computed, expected, "Failed to enable alert mode.") + with BurstHandler(i2c_bus=self.i2c_bus, i2c_adr=self.i2c_adr) as bh: + self.assertEqual(bh.read_register(0x03), 0b0000_0000) + self.assertEqual(bh.read_register(0x4B), 0b0000_0000) + + def test_pin_six_as_tacho(self): + # ----------------------------------------------------------------- + computed = self.emc2101.configure_pin_six_as_tacho() + expected = True + # ----------------------------------------------------------------- + self.assertEqual(computed, expected, "Failed to enable tacho mode.") + with BurstHandler(i2c_bus=self.i2c_bus, i2c_adr=self.i2c_adr) as bh: + self.assertEqual(bh.read_register(0x03), 0b0000_0100) + self.assertEqual(bh.read_register(0x4B), 0b0011_1111)