From: Benjamin Braatz Date: Wed, 11 Nov 2020 10:08:33 +0000 (+0100) Subject: Read from bus in new _fetchValues() method and unregister interrupt in close() X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=6dfd3eb9769548e236b503626a1ce495c367feb0;p=graphit%2Fpin-py.git Read from bus in new _fetchValues() method and unregister interrupt in close() --- diff --git a/graphit/pin/pcf8574.py b/graphit/pin/pcf8574.py index 6bb1059..6d54e74 100644 --- a/graphit/pin/pcf8574.py +++ b/graphit/pin/pcf8574.py @@ -41,15 +41,18 @@ class PCF8574Input(graphit.event.EventEmitterMixin): self.__values = self.__pi.i2c_read_byte(self.__handle) def _onInterrupt(_value: bool): - oldValues = self.__values - self.__values = self.__pi.i2c_read_byte(self.__handle) - - emitDiff(self._emit, oldValues, self.__values) - self.__interrupt.on('change', _onInterrupt) + self._fetchValues() + self.__int_handle = self.__interrupt.on('change', _onInterrupt) self.__pins = tuple(PCF8574InputPin(self, i) for i in range(0, 8)) + def _fetchValues(self) -> None: + oldValues = self.__values + self.__values = self.__pi.i2c_read_byte(self.__handle) + emitDiff(self._emit, oldValues, self.__values) + def close(self) -> None: + self.__interrupt.off(self.__int_handle) try: self.__pi.i2c_close(self.__handle) except AttributeError: @@ -68,8 +71,7 @@ class PCF8574Input(graphit.event.EventEmitterMixin): return not bool(self.__values & (1 << pin)) def getValues(self) -> int: - self.__values = self.__pi.i2c_read_byte(self.__handle) - return self.__values + return ~self.__values class PCF8574Output(graphit.event.EventEmitterMixin): @@ -103,6 +105,9 @@ class PCF8574Output(graphit.event.EventEmitterMixin): return not bool(self.__values & (1 << pin)) + def getValues(self) -> int: + return ~self.__values + def setValue(self, pin: int, value: bool) -> None: assert isinstance(pin, int), 'pin must be an integer' assert pin >= 0 and pin <= 7, 'pin must be >= 0 and <= 7'