31
31
from adafruit_bus_device import i2c_device
32
32
from adafruit_register .i2c_struct import Struct
33
33
34
+ try :
35
+ from typing import Tuple , Union
36
+ from busio import I2C
37
+ except ImportError :
38
+ pass
39
+
34
40
__version__ = "0.0.0+auto.0"
35
41
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_SI1145.git"
36
42
@@ -71,7 +77,7 @@ class SI1145:
71
77
_als_data = Struct (_ALS_VIS_DATA0 , "<HH" )
72
78
_aux_data = Struct (_UV_INDEX_DATA0 , "<H" )
73
79
74
- def __init__ (self , i2c , address = _DEFAULT_ADDRESS ):
80
+ def __init__ (self , i2c : I2C , address : int = _DEFAULT_ADDRESS ) -> None :
75
81
self .i2c_device = i2c_device .I2CDevice (i2c , address )
76
82
dev_id , dev_rev , dev_seq = self .device_info
77
83
if dev_id != 69 or dev_rev != 0 or dev_seq != 8 :
@@ -84,17 +90,17 @@ def __init__(self, i2c, address=_DEFAULT_ADDRESS):
84
90
self .uv_index_enabled = self ._uv_index_enabled
85
91
86
92
@property
87
- def device_info (self ):
93
+ def device_info (self ) -> Tuple [ int , int , int ] :
88
94
"""A three tuple of part, revision, and sequencer ID"""
89
95
return self ._device_info
90
96
91
97
@property
92
- def als_enabled (self ):
98
+ def als_enabled (self ) -> bool :
93
99
"""The Ambient Light System enabled state."""
94
100
return self ._als_enabled
95
101
96
102
@als_enabled .setter
97
- def als_enabled (self , enable ) :
103
+ def als_enabled (self , enable : bool ) -> None :
98
104
chlist = self ._param_query (_RAM_CHLIST )
99
105
if enable :
100
106
chlist |= 0b00110000
@@ -104,18 +110,18 @@ def als_enabled(self, enable):
104
110
self ._als_enabled = enable
105
111
106
112
@property
107
- def als (self ):
113
+ def als (self ) -> Tuple [ int , int ] :
108
114
"""A two tuple of the Ambient Light System (ALS) visible and infrared raw sensor values."""
109
115
self ._send_command (_CMD_ALS_FORCE )
110
116
return self ._als_data
111
117
112
118
@property
113
- def uv_index_enabled (self ):
119
+ def uv_index_enabled (self ) -> bool :
114
120
"""The UV Index system enabled state"""
115
121
return self ._uv_index_enabled
116
122
117
123
@uv_index_enabled .setter
118
- def uv_index_enabled (self , enable ) :
124
+ def uv_index_enabled (self , enable : bool ) -> None :
119
125
chlist = self ._param_query (_RAM_CHLIST )
120
126
if enable :
121
127
chlist |= 0b10000000
@@ -132,47 +138,49 @@ def uv_index_enabled(self, enable):
132
138
self ._uv_index_enabled = enable
133
139
134
140
@property
135
- def uv_index (self ):
141
+ def uv_index (self ) -> float :
136
142
"""The UV Index value"""
137
143
self ._send_command (_CMD_ALS_FORCE )
138
144
return self ._aux_data [0 ] / 100
139
145
140
- def reset (self ):
146
+ def reset (self ) -> None :
141
147
"""Perform a software reset of the firmware."""
142
148
self ._send_command (_CMD_RESET )
143
149
time .sleep (0.05 ) # doubling 25ms datasheet spec
144
150
145
- def clear_error (self ):
151
+ def clear_error (self ) -> None :
146
152
"""Clear any existing error code."""
147
153
self ._send_command (_CMD_NOP )
148
154
149
- def _param_query (self , param ) :
155
+ def _param_query (self , param : int ) -> int :
150
156
self ._send_command (_CMD_PARAM_QUERY | (param & 0x1F ))
151
157
return self ._read_register (_PARAM_RD )
152
158
153
- def _param_set (self , param , value ) :
159
+ def _param_set (self , param : int , value : int ) -> None :
154
160
self ._write_register (_PARAM_WR , value )
155
161
self ._send_command (_CMD_PARAM_SET | (param & 0x1F ))
156
162
157
- def _send_command (self , command ) :
163
+ def _send_command (self , command : int ) -> int :
158
164
counter = self ._read_register (_RESPONSE ) & 0x0F
159
165
self ._write_register (_COMMAND , command )
160
166
if command in (_CMD_NOP , _CMD_RESET ):
161
167
return 0
162
168
response = self ._read_register (_RESPONSE )
163
169
while counter == response & 0x0F :
164
170
if response & 0xF0 :
165
- raise RuntimeError ("SI1145 Error: 0x{:02x}" . format ( response ) )
171
+ raise RuntimeError (f "SI1145 Error: { response :#x } " )
166
172
response = self ._read_register (_RESPONSE )
167
173
return response
168
174
169
- def _read_register (self , register , length = 1 ) :
175
+ def _read_register (self , register : int , length : int = 1 ) -> Union [ int , bytearray ] :
170
176
buffer = bytearray (length )
171
177
with self .i2c_device as i2c :
172
178
i2c .write_then_readinto (bytes ([register ]), buffer )
173
179
return buffer [0 ] if length == 1 else buffer
174
180
175
- def _write_register (self , register , buffer ):
181
+ def _write_register (
182
+ self , register : int , buffer : Union [int , bytes , bytearray ]
183
+ ) -> None :
176
184
if isinstance (buffer , int ):
177
185
buffer = bytes ([buffer ])
178
186
with self .i2c_device as i2c :
0 commit comments