3131from adafruit_bus_device import i2c_device
3232from adafruit_register .i2c_struct import Struct
3333
34+ try :
35+ from typing import Tuple , Union
36+ from busio import I2C
37+ except ImportError :
38+ pass
39+
3440__version__ = "0.0.0+auto.0"
3541__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_SI1145.git"
3642
@@ -71,7 +77,7 @@ class SI1145:
7177 _als_data = Struct (_ALS_VIS_DATA0 , "<HH" )
7278 _aux_data = Struct (_UV_INDEX_DATA0 , "<H" )
7379
74- def __init__ (self , i2c , address = _DEFAULT_ADDRESS ):
80+ def __init__ (self , i2c : I2C , address : int = _DEFAULT_ADDRESS ) -> None :
7581 self .i2c_device = i2c_device .I2CDevice (i2c , address )
7682 dev_id , dev_rev , dev_seq = self .device_info
7783 if dev_id != 69 or dev_rev != 0 or dev_seq != 8 :
@@ -84,17 +90,17 @@ def __init__(self, i2c, address=_DEFAULT_ADDRESS):
8490 self .uv_index_enabled = self ._uv_index_enabled
8591
8692 @property
87- def device_info (self ):
93+ def device_info (self ) -> Tuple [ int , int , int ] :
8894 """A three tuple of part, revision, and sequencer ID"""
8995 return self ._device_info
9096
9197 @property
92- def als_enabled (self ):
98+ def als_enabled (self ) -> bool :
9399 """The Ambient Light System enabled state."""
94100 return self ._als_enabled
95101
96102 @als_enabled .setter
97- def als_enabled (self , enable ) :
103+ def als_enabled (self , enable : bool ) -> None :
98104 chlist = self ._param_query (_RAM_CHLIST )
99105 if enable :
100106 chlist |= 0b00110000
@@ -104,18 +110,18 @@ def als_enabled(self, enable):
104110 self ._als_enabled = enable
105111
106112 @property
107- def als (self ):
113+ def als (self ) -> Tuple [ int , int ] :
108114 """A two tuple of the Ambient Light System (ALS) visible and infrared raw sensor values."""
109115 self ._send_command (_CMD_ALS_FORCE )
110116 return self ._als_data
111117
112118 @property
113- def uv_index_enabled (self ):
119+ def uv_index_enabled (self ) -> bool :
114120 """The UV Index system enabled state"""
115121 return self ._uv_index_enabled
116122
117123 @uv_index_enabled .setter
118- def uv_index_enabled (self , enable ) :
124+ def uv_index_enabled (self , enable : bool ) -> None :
119125 chlist = self ._param_query (_RAM_CHLIST )
120126 if enable :
121127 chlist |= 0b10000000
@@ -132,47 +138,49 @@ def uv_index_enabled(self, enable):
132138 self ._uv_index_enabled = enable
133139
134140 @property
135- def uv_index (self ):
141+ def uv_index (self ) -> float :
136142 """The UV Index value"""
137143 self ._send_command (_CMD_ALS_FORCE )
138144 return self ._aux_data [0 ] / 100
139145
140- def reset (self ):
146+ def reset (self ) -> None :
141147 """Perform a software reset of the firmware."""
142148 self ._send_command (_CMD_RESET )
143149 time .sleep (0.05 ) # doubling 25ms datasheet spec
144150
145- def clear_error (self ):
151+ def clear_error (self ) -> None :
146152 """Clear any existing error code."""
147153 self ._send_command (_CMD_NOP )
148154
149- def _param_query (self , param ) :
155+ def _param_query (self , param : int ) -> int :
150156 self ._send_command (_CMD_PARAM_QUERY | (param & 0x1F ))
151157 return self ._read_register (_PARAM_RD )
152158
153- def _param_set (self , param , value ) :
159+ def _param_set (self , param : int , value : int ) -> None :
154160 self ._write_register (_PARAM_WR , value )
155161 self ._send_command (_CMD_PARAM_SET | (param & 0x1F ))
156162
157- def _send_command (self , command ) :
163+ def _send_command (self , command : int ) -> int :
158164 counter = self ._read_register (_RESPONSE ) & 0x0F
159165 self ._write_register (_COMMAND , command )
160166 if command in (_CMD_NOP , _CMD_RESET ):
161167 return 0
162168 response = self ._read_register (_RESPONSE )
163169 while counter == response & 0x0F :
164170 if response & 0xF0 :
165- raise RuntimeError ("SI1145 Error: 0x{:02x}" . format ( response ) )
171+ raise RuntimeError (f "SI1145 Error: { response :#x } " )
166172 response = self ._read_register (_RESPONSE )
167173 return response
168174
169- def _read_register (self , register , length = 1 ) :
175+ def _read_register (self , register : int , length : int = 1 ) -> Union [ int , bytearray ] :
170176 buffer = bytearray (length )
171177 with self .i2c_device as i2c :
172178 i2c .write_then_readinto (bytes ([register ]), buffer )
173179 return buffer [0 ] if length == 1 else buffer
174180
175- def _write_register (self , register , buffer ):
181+ def _write_register (
182+ self , register : int , buffer : Union [int , bytes , bytearray ]
183+ ) -> None :
176184 if isinstance (buffer , int ):
177185 buffer = bytes ([buffer ])
178186 with self .i2c_device as i2c :
0 commit comments