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