64
64
from adafruit_register .i2c_bits import RWBits
65
65
from adafruit_register .i2c_bit import RWBit
66
66
67
+ try :
68
+ from typing import Tuple , Optional
69
+ from busio import I2C
70
+ except ImportError :
71
+ pass
72
+
67
73
68
74
class CV :
69
75
"""struct helper"""
70
76
71
77
@classmethod
72
- def add_values (cls , value_tuples ) :
78
+ def add_values (cls , value_tuples : Tuple [ str , int , float , Optional [ float ]]) -> None :
73
79
"creates CV entires"
74
80
cls .string = {}
75
81
cls .lsb = {}
@@ -81,7 +87,7 @@ def add_values(cls, value_tuples):
81
87
cls .lsb [value ] = lsb
82
88
83
89
@classmethod
84
- def is_valid (cls , value ) :
90
+ def is_valid (cls , value : int ) -> bool :
85
91
"""Returns true if the given value is a member of the CV"""
86
92
return value in cls .string
87
93
@@ -187,7 +193,7 @@ class LSM6DS: # pylint: disable=too-many-instance-attributes
187
193
before calling. Use `pedometer_reset` to reset the number of steps"""
188
194
CHIP_ID = None
189
195
190
- def __init__ (self , i2c_bus , address = LSM6DS_DEFAULT_ADDRESS ):
196
+ def __init__ (self , i2c_bus : I2C , address : int = LSM6DS_DEFAULT_ADDRESS ) -> None :
191
197
self ._cached_accel_range = None
192
198
self ._cached_gyro_range = None
193
199
@@ -210,14 +216,14 @@ def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
210
216
self .accelerometer_range = AccelRange .RANGE_4G # pylint: disable=no-member
211
217
self .gyro_range = GyroRange .RANGE_250_DPS # pylint: disable=no-member
212
218
213
- def reset (self ):
219
+ def reset (self ) -> None :
214
220
"Resets the sensor's configuration into an initial state"
215
221
self ._sw_reset = True
216
222
while self ._sw_reset :
217
223
sleep (0.001 )
218
224
219
225
@staticmethod
220
- def _add_gyro_ranges ():
226
+ def _add_gyro_ranges () -> None :
221
227
GyroRange .add_values (
222
228
(
223
229
("RANGE_125_DPS" , 125 , 125 , 4.375 ),
@@ -229,7 +235,7 @@ def _add_gyro_ranges():
229
235
)
230
236
231
237
@staticmethod
232
- def _add_accel_ranges ():
238
+ def _add_accel_ranges () -> None :
233
239
AccelRange .add_values (
234
240
(
235
241
("RANGE_2G" , 0 , 2 , 0.061 ),
@@ -240,7 +246,7 @@ def _add_accel_ranges():
240
246
)
241
247
242
248
@property
243
- def acceleration (self ):
249
+ def acceleration (self ) -> Tuple [ float , float , float ] :
244
250
"""The x, y, z acceleration values returned in a 3-tuple and are in m / s ^ 2."""
245
251
raw_accel_data = self ._raw_accel_data
246
252
@@ -251,49 +257,49 @@ def acceleration(self):
251
257
return (x , y , z )
252
258
253
259
@property
254
- def gyro (self ):
260
+ def gyro (self ) -> Tuple [ float , float , float ] :
255
261
"""The x, y, z angular velocity values returned in a 3-tuple and are in radians / second"""
256
262
raw_gyro_data = self ._raw_gyro_data
257
263
x , y , z = [radians (self ._scale_gyro_data (i )) for i in raw_gyro_data ]
258
264
return (x , y , z )
259
265
260
- def _scale_xl_data (self , raw_measurement ) :
266
+ def _scale_xl_data (self , raw_measurement : int ) -> float :
261
267
return (
262
268
raw_measurement
263
269
* AccelRange .lsb [self ._cached_accel_range ]
264
270
* _MILLI_G_TO_ACCEL
265
271
)
266
272
267
- def _scale_gyro_data (self , raw_measurement ) :
273
+ def _scale_gyro_data (self , raw_measurement : int ) -> float :
268
274
return raw_measurement * GyroRange .lsb [self ._cached_gyro_range ] / 1000
269
275
270
276
@property
271
- def accelerometer_range (self ):
277
+ def accelerometer_range (self ) -> int :
272
278
"""Adjusts the range of values that the sensor can measure, from +/- 2G to +/-16G
273
279
Note that larger ranges will be less accurate. Must be an ``AccelRange``"""
274
280
return self ._cached_accel_range
275
281
276
282
# pylint: disable=no-member
277
283
@accelerometer_range .setter
278
- def accelerometer_range (self , value ) :
284
+ def accelerometer_range (self , value : int ) -> None :
279
285
if not AccelRange .is_valid (value ):
280
286
raise AttributeError ("range must be an `AccelRange`" )
281
287
self ._accel_range = value
282
288
self ._cached_accel_range = value
283
289
sleep (0.2 ) # needed to let new range settle
284
290
285
291
@property
286
- def gyro_range (self ):
292
+ def gyro_range (self ) -> int :
287
293
"""Adjusts the range of values that the sensor can measure, from 125 Degrees/s to 2000
288
294
degrees/s. Note that larger ranges will be less accurate. Must be a ``GyroRange``."""
289
295
return self ._cached_gyro_range
290
296
291
297
@gyro_range .setter
292
- def gyro_range (self , value ) :
298
+ def gyro_range (self , value : int ) -> None :
293
299
self ._set_gyro_range (value )
294
300
sleep (0.2 )
295
301
296
- def _set_gyro_range (self , value ) :
302
+ def _set_gyro_range (self , value : int ) -> None :
297
303
if not GyroRange .is_valid (value ):
298
304
raise AttributeError ("range must be a `GyroRange`" )
299
305
@@ -308,12 +314,12 @@ def _set_gyro_range(self, value):
308
314
self ._cached_gyro_range = value # needed to let new range settle
309
315
310
316
@property
311
- def accelerometer_data_rate (self ):
317
+ def accelerometer_data_rate (self ) -> int :
312
318
"""Select the rate at which the accelerometer takes measurements. Must be a ``Rate``"""
313
319
return self ._accel_data_rate
314
320
315
321
@accelerometer_data_rate .setter
316
- def accelerometer_data_rate (self , value ) :
322
+ def accelerometer_data_rate (self , value : int ) -> None :
317
323
318
324
if not Rate .is_valid (value ):
319
325
raise AttributeError ("accelerometer_data_rate must be a `Rate`" )
@@ -322,42 +328,42 @@ def accelerometer_data_rate(self, value):
322
328
# sleep(.2) # needed to let new range settle
323
329
324
330
@property
325
- def gyro_data_rate (self ):
331
+ def gyro_data_rate (self ) -> int :
326
332
"""Select the rate at which the gyro takes measurements. Must be a ``Rate``"""
327
333
return self ._gyro_data_rate
328
334
329
335
@gyro_data_rate .setter
330
- def gyro_data_rate (self , value ) :
336
+ def gyro_data_rate (self , value : int ) -> None :
331
337
if not Rate .is_valid (value ):
332
338
raise AttributeError ("gyro_data_rate must be a `Rate`" )
333
339
334
340
self ._gyro_data_rate = value
335
341
# sleep(.2) # needed to let new range settle
336
342
337
343
@property
338
- def pedometer_enable (self ):
344
+ def pedometer_enable (self ) -> bool :
339
345
""" Whether the pedometer function on the accelerometer is enabled"""
340
346
return self ._ped_enable and self ._func_enable
341
347
342
348
@pedometer_enable .setter
343
- def pedometer_enable (self , enable ) :
349
+ def pedometer_enable (self , enable : bool ) -> None :
344
350
self ._ped_enable = enable
345
351
self ._func_enable = enable
346
352
self ._pedometer_reset = enable
347
353
348
354
@property
349
- def high_pass_filter (self ):
355
+ def high_pass_filter (self ) -> int :
350
356
"""The high pass filter applied to accelerometer data"""
351
357
return self ._high_pass_filter
352
358
353
359
@high_pass_filter .setter
354
- def high_pass_filter (self , value ) :
360
+ def high_pass_filter (self , value : int ) -> None :
355
361
if not AccelHPF .is_valid (value ):
356
362
raise AttributeError ("range must be an `AccelHPF`" )
357
363
self ._high_pass_filter = value
358
364
359
365
@property
360
- def temperature (self ):
366
+ def temperature (self ) -> float :
361
367
"""Temperature in Celsius"""
362
368
# Data from Datasheet Table 4.3
363
369
# Temp range -40 to 85 Celsius
0 commit comments