From 9b29b1ac2727001407ebbf1f9ddd27327ece7ce2 Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 11:40:39 -0700 Subject: [PATCH 1/6] Add type annotations to adafruit_amg88xx.py --- adafruit_amg88xx.py | 97 ++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index 4b8e099..bfb7e2d 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -23,48 +23,55 @@ **Notes:** """ -__version__ = "0.0.0-auto.0" -__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_AMG88xx" +__version__: str = "0.0.0-auto.0" +__repo__: str = "https://github.com/adafruit/Adafruit_CircuitPython_AMG88xx" from adafruit_bus_device.i2c_device import I2CDevice from adafruit_register import i2c_bit, i2c_bits +from adafruit_register.i2c_bits import RWBits, ROBits +from adafruit_register.i2c_bit import RWBit, ROBit from micropython import const +import busio +try: + from typing import List +except ImportError: + pass # Registers are defined below in the class. These are possible register values. # Operating Modes -_NORMAL_MODE = const(0x00) -_SLEEP_MODE = const(0x10) -_STAND_BY_60 = const(0x20) -_STAND_BY_10 = const(0x21) +_NORMAL_MODE: int = const(0x00) +_SLEEP_MODE: int = const(0x10) +_STAND_BY_60: int = const(0x20) +_STAND_BY_10: int = const(0x21) # sw resets -_FLAG_RESET = const(0x30) -_INITIAL_RESET = const(0x3F) +_FLAG_RESET: int = const(0x30) +_INITIAL_RESET: int = const(0x3F) # frame rates -_FPS_10 = const(0x00) -_FPS_1 = const(0x01) +_FPS_10: int = const(0x00) +_FPS_1: int = const(0x01) # int enables -_INT_DISABLED = const(0x00) -_INT_ENABLED = const(0x01) +_INT_DISABLED: int = const(0x00) +_INT_ENABLED: int = const(0x01) # int modes -_DIFFERENCE = const(0x00) -_ABSOLUTE_VALUE = const(0x01) +_DIFFERENCE: int = const(0x00) +_ABSOLUTE_VALUE: int = const(0x01) -_INT_OFFSET = const(0x010) -_PIXEL_OFFSET = const(0x80) +_INT_OFFSET: int = const(0x010) +_PIXEL_OFFSET: int = const(0x80) -_PIXEL_ARRAY_WIDTH = const(8) -_PIXEL_ARRAY_HEIGHT = const(8) -_PIXEL_TEMP_CONVERSION = 0.25 -_THERMISTOR_CONVERSION = 0.0625 +_PIXEL_ARRAY_WIDTH: int = const(8) +_PIXEL_ARRAY_HEIGHT: int = const(8) +_PIXEL_TEMP_CONVERSION: int = 0.25 +_THERMISTOR_CONVERSION: int = 0.0625 -def _signed_12bit_to_float(val): +def _signed_12bit_to_float(val: int) -> float: # take first 11 bits as absolute val abs_val = val & 0x7FF if val & 0x800: @@ -72,7 +79,7 @@ def _signed_12bit_to_float(val): return float(abs_val) -def _twos_comp_to_float(val): +def _twos_comp_to_float(val: int) -> float: val &= 0xFFF if val & 0x800: val -= 0x1000 @@ -83,34 +90,34 @@ class AMG88XX: """Driver for the AMG88xx GRID-Eye IR 8x8 thermal camera.""" # Set up the registers - _pctl = i2c_bits.RWBits(8, 0x00, 0) - _rst = i2c_bits.RWBits(8, 0x01, 0) - _fps = i2c_bit.RWBit(0x02, 0) - _inten = i2c_bit.RWBit(0x03, 0) - _intmod = i2c_bit.RWBit(0x03, 1) + _pctl: RWBits = i2c_bits.RWBits(8, 0x00, 0) + _rst: RWBits = i2c_bits.RWBits(8, 0x01, 0) + _fps: RWBit = i2c_bit.RWBit(0x02, 0) + _inten: RWBit = i2c_bit.RWBit(0x03, 0) + _intmod: RWBit = i2c_bit.RWBit(0x03, 1) - _intf = i2c_bit.RWBit(0x04, 1) - _ovf_irs = i2c_bit.RWBit(0x04, 2) - _ovf_ths = i2c_bit.RWBit(0x04, 3) + _intf: RWBit = i2c_bit.RWBit(0x04, 1) + _ovf_irs: RWBit = i2c_bit.RWBit(0x04, 2) + _ovf_ths: RWBit = i2c_bit.RWBit(0x04, 3) - _intclr = i2c_bit.RWBit(0x05, 1) - _ovs_clr = i2c_bit.RWBit(0x05, 2) - _ovt_clr = i2c_bit.RWBit(0x05, 3) + _intclr: RWBit = i2c_bit.RWBit(0x05, 1) + _ovs_clr: RWBit = i2c_bit.RWBit(0x05, 2) + _ovt_clr: RWBit = i2c_bit.RWBit(0x05, 3) - _mamod = i2c_bit.RWBit(0x07, 5) + _mamod: RWBit = i2c_bit.RWBit(0x07, 5) - _inthl = i2c_bits.RWBits(8, 0x08, 0) - _inthh = i2c_bits.RWBits(4, 0x09, 0) - _intll = i2c_bits.RWBits(8, 0x0A, 0) - _intlh = i2c_bits.RWBits(4, 0x0B, 0) - _ihysl = i2c_bits.RWBits(8, 0x0C, 0) - _ihysh = i2c_bits.RWBits(4, 0x0D, 0) + _inthl: RWBits = i2c_bits.RWBits(8, 0x08, 0) + _inthh: RWBits = i2c_bits.RWBits(4, 0x09, 0) + _intll: RWBits = i2c_bits.RWBits(8, 0x0A, 0) + _intlh: RWBits = i2c_bits.RWBits(4, 0x0B, 0) + _ihysl: RWBits = i2c_bits.RWBits(8, 0x0C, 0) + _ihysh: RWBits = i2c_bits.RWBits(4, 0x0D, 0) - _tthl = i2c_bits.RWBits(8, 0x0E, 0) + _tthl: RWBits = i2c_bits.RWBits(8, 0x0E, 0) - _tthh = i2c_bits.RWBits(4, 0x0F, 0) + _tthh: RWBits = i2c_bits.RWBits(4, 0x0F, 0) - def __init__(self, i2c, addr=0x69): + def __init__(self, i2c: busio.I2C, addr: int = 0x69): self.i2c_device = I2CDevice(i2c, addr) # enter normal mode @@ -126,13 +133,13 @@ def __init__(self, i2c, addr=0x69): self._fps = _FPS_10 @property - def temperature(self): + def temperature(self) -> float: """Temperature of the sensor in Celsius""" raw = (self._tthh << 8) | self._tthl return _signed_12bit_to_float(raw) * _THERMISTOR_CONVERSION @property - def pixels(self): + def pixels(self) -> List[List[float]]: """Temperature of each pixel across the sensor in Celsius. Temperatures are stored in a two dimensional list where the first index is the row and From 737c04f3680c81a5cbe5961e2337a79e961e9c6e Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 11:41:48 -0700 Subject: [PATCH 2/6] Remove unused imports (pylint) --- adafruit_amg88xx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index bfb7e2d..0238700 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -28,8 +28,8 @@ from adafruit_bus_device.i2c_device import I2CDevice from adafruit_register import i2c_bit, i2c_bits -from adafruit_register.i2c_bits import RWBits, ROBits -from adafruit_register.i2c_bit import RWBit, ROBit +from adafruit_register.i2c_bits import RWBits +from adafruit_register.i2c_bit import RWBit from micropython import const import busio From 5b55b7e7489159be80b688090774ae330b985758 Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 14:59:13 -0700 Subject: [PATCH 3/6] Moved busio imports inside a try block to save memory --- adafruit_amg88xx.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index 0238700..c8f5244 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -28,13 +28,14 @@ from adafruit_bus_device.i2c_device import I2CDevice from adafruit_register import i2c_bit, i2c_bits -from adafruit_register.i2c_bits import RWBits -from adafruit_register.i2c_bit import RWBit from micropython import const -import busio try: from typing import List + # These are only needed for typing + import busio # pylint: disable=unused-import + from adafruit_register.i2c_bits import RWBits # pylint: disable=unused-import,line-too-long + from adafruit_register.i2c_bit import RWBit # pylint: disable=unused-import,line-too-long except ImportError: pass From 98fa4f70a9fb73c840a79bd2592bd808f8b96003 Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 15:00:20 -0700 Subject: [PATCH 4/6] code reformatting by black --- adafruit_amg88xx.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index c8f5244..bcf5b03 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -32,10 +32,15 @@ try: from typing import List + # These are only needed for typing import busio # pylint: disable=unused-import - from adafruit_register.i2c_bits import RWBits # pylint: disable=unused-import,line-too-long - from adafruit_register.i2c_bit import RWBit # pylint: disable=unused-import,line-too-long + from adafruit_register.i2c_bits import ( + RWBits, + ) # pylint: disable=unused-import,line-too-long + from adafruit_register.i2c_bit import ( + RWBit, + ) # pylint: disable=unused-import,line-too-long except ImportError: pass From 0e033b96d780715d80cf9a3f7c29724f47c1fbcd Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 15:03:50 -0700 Subject: [PATCH 5/6] Clean up pylint warning about ungrouped imports --- adafruit_amg88xx.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index bcf5b03..51c3c88 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -28,6 +28,12 @@ from adafruit_bus_device.i2c_device import I2CDevice from adafruit_register import i2c_bit, i2c_bits +from adafruit_register.i2c_bits import ( + RWBits, +) # pylint: disable=unused-import,line-too-long +from adafruit_register.i2c_bit import ( + RWBit, +) # pylint: disable=unused-import,line-too-long from micropython import const try: @@ -35,12 +41,6 @@ # These are only needed for typing import busio # pylint: disable=unused-import - from adafruit_register.i2c_bits import ( - RWBits, - ) # pylint: disable=unused-import,line-too-long - from adafruit_register.i2c_bit import ( - RWBit, - ) # pylint: disable=unused-import,line-too-long except ImportError: pass From dfc81f0409f5b71ae32673d0122630197ca38dd1 Mon Sep 17 00:00:00 2001 From: Tammy Cravit Date: Sat, 12 Feb 2022 16:23:20 -0700 Subject: [PATCH 6/6] Added type annotation for `__init__` --- adafruit_amg88xx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_amg88xx.py b/adafruit_amg88xx.py index 51c3c88..8943e4e 100644 --- a/adafruit_amg88xx.py +++ b/adafruit_amg88xx.py @@ -123,7 +123,7 @@ class AMG88XX: _tthh: RWBits = i2c_bits.RWBits(4, 0x0F, 0) - def __init__(self, i2c: busio.I2C, addr: int = 0x69): + def __init__(self, i2c: busio.I2C, addr: int = 0x69) -> None: self.i2c_device = I2CDevice(i2c, addr) # enter normal mode