33
33
from adafruit_register .i2c_struct import ROUnaryStruct , UnaryStruct
34
34
from adafruit_register .i2c_bits import RWBits
35
35
36
+ try :
37
+ import typing # pylint: disable=unused-import
38
+ from busio import I2C
39
+ except ImportError :
40
+ pass
41
+
36
42
__version__ = "0.0.0+auto.0"
37
43
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_GUVX_I2C.git"
38
44
@@ -91,7 +97,7 @@ class GUVX_I2C:
91
97
_uvb = ROUnaryStruct (_GUVXI2C_REG_UVBLSB , "<H" )
92
98
_uva = ROUnaryStruct (_GUVXI2C_REG_UVALSB , "<H" )
93
99
94
- def __init__ (self , i2c_bus , address = _GUVXI2C_I2CADDR_DEFAULT ):
100
+ def __init__ (self , i2c_bus : I2C , address : int = _GUVXI2C_I2CADDR_DEFAULT ) -> None :
95
101
# pylint: disable=no-member
96
102
self .i2c_device = i2c_device .I2CDevice (i2c_bus , address )
97
103
if self ._chip_id != _GUVXI2C_CHIP_ID :
@@ -109,7 +115,7 @@ def __init__(self, i2c_bus, address=_GUVXI2C_I2CADDR_DEFAULT):
109
115
self ._nvm_ctrl = 0x0B # read B_Scale second
110
116
self ._scale = self ._nvm_data
111
117
112
- def reset (self ):
118
+ def reset (self ) -> None :
113
119
"""Perform a soft reset"""
114
120
# It should be noted that applying SOFT_RESET should be done only
115
121
# when POWER_MODE=��00��.
@@ -118,20 +124,20 @@ def reset(self):
118
124
time .sleep (0.05 )
119
125
120
126
@property
121
- def uv_mode (self ):
127
+ def uv_mode (self ) -> bool :
122
128
"""Whether or not UV-reading mode is enabled"""
123
129
return self ._oper == 2 # see datasheet table 7.2
124
130
125
131
@uv_mode .setter
126
- def uv_mode (self , enabled ) :
132
+ def uv_mode (self , enabled : bool ) -> None :
127
133
# see datasheet table 7.2
128
134
if enabled :
129
135
self ._oper = 2
130
136
else :
131
137
self ._oper = 0
132
138
133
139
@property
134
- def power_mode (self ):
140
+ def power_mode (self ) -> int :
135
141
"""One of four power modes available:
136
142
137
143
GUVXI2C_PMODE_NORMAL, GUVXI2C_PMODE_LOWPOWER, GUVXI2C_PMODE_AUTOSHUT,
@@ -140,7 +146,7 @@ def power_mode(self):
140
146
return self ._pmode
141
147
142
148
@power_mode .setter
143
- def power_mode (self , mode ) :
149
+ def power_mode (self , mode : int ) -> None :
144
150
# see datasheet table 7.3
145
151
if not mode in (
146
152
GUVXI2C_PMODE_NORMAL ,
@@ -152,30 +158,30 @@ def power_mode(self, mode):
152
158
self ._pmode = mode
153
159
154
160
@property
155
- def measure_period (self ):
161
+ def measure_period (self ) -> int :
156
162
"""One of four measuring periods in milliseconds:
157
163
158
164
100, 200, 400 or 800ms
159
165
"""
160
166
return _measure_periods [self ._period ]
161
167
162
168
@measure_period .setter
163
- def measure_period (self , period ) :
169
+ def measure_period (self , period : int ) -> None :
164
170
# see datasheet table 7.4
165
171
if not period in _measure_periods :
166
172
raise RuntimeError ("Invalid period: must be 100, 200, 400 or 800 (ms)" )
167
173
self ._period = _measure_periods .index (period )
168
174
169
175
@property
170
- def sleep_duration (self ):
176
+ def sleep_duration (self ) -> int :
171
177
"""Sleep duration in low power mode, can be:
172
178
173
179
2, 4, 8, 16, 32, 64, 128, or 256 times
174
180
"""
175
181
return _sleep_durations [self ._sleep_duration ]
176
182
177
183
@sleep_duration .setter
178
- def sleep_duration (self , duration ) :
184
+ def sleep_duration (self , duration : int ) -> None :
179
185
# see datasheet table 7.7
180
186
if not duration in _sleep_durations :
181
187
raise RuntimeError (
@@ -188,12 +194,12 @@ class GUVB_C31SM(GUVX_I2C):
188
194
"""Driver for the GUVB-C31SM sensor"""
189
195
190
196
@property
191
- def range (self ):
197
+ def range (self ) -> int :
192
198
"""UVB range, can be: 1, 2, 4, 8, 16, 32, 64, or 128 times"""
193
199
return _measure_ranges [self ._range_uvb ]
194
200
195
201
@range .setter
196
- def range (self , multiple ) :
202
+ def range (self , multiple : int ) -> None :
197
203
# see datasheet table 7.6
198
204
if not multiple in _measure_ranges :
199
205
raise RuntimeError (
@@ -202,12 +208,12 @@ def range(self, multiple):
202
208
self ._range_uvb = _measure_ranges .index (multiple )
203
209
204
210
@property
205
- def uvb (self ):
211
+ def uvb (self ) -> int :
206
212
"""The raw UV B 16-bit data"""
207
213
return self ._uvb
208
214
209
215
@property
210
- def uv_index (self ):
216
+ def uv_index (self ) -> float :
211
217
"""Calculated using offset and b-scale"""
212
218
# GUVB-C31SM UVI = (B value *0.8 )/(B_scale) in app note
213
219
return (self .uvb / self .range * 0.8 ) / self ._scale
@@ -220,12 +226,12 @@ class GUVA_C32SM(GUVX_I2C):
220
226
"""
221
227
222
228
@property
223
- def range (self ):
229
+ def range (self ) -> int :
224
230
"""UVB range, can be: 1, 2, 4, 8, 16, 32, 64, or 128 times"""
225
231
return _measure_ranges [self ._range_uva ]
226
232
227
233
@range .setter
228
- def range (self , multiple ) :
234
+ def range (self , multiple : int ) -> None :
229
235
# see datasheet table 7.6
230
236
if not multiple in _measure_ranges :
231
237
raise RuntimeError (
@@ -234,12 +240,12 @@ def range(self, multiple):
234
240
self ._range_uva = _measure_ranges .index (multiple )
235
241
236
242
@property
237
- def uva (self ):
243
+ def uva (self ) -> int :
238
244
"""The raw UV A 16-bit data"""
239
245
return self ._uva
240
246
241
247
@property
242
- def uv_index (self ):
248
+ def uv_index (self ) -> float :
243
249
"""Calculated using offset and b-scale"""
244
250
# GUVA-C32SM UVI = (A value * 2.5 - self._offset )/(A_scale)
245
251
# in app note
0 commit comments