6464from adafruit_register .i2c_bits import RWBits
6565from adafruit_register .i2c_bit import RWBit
6666
67+ try :
68+ from typing import Tuple , Optional
69+ from busio import I2C
70+ except ImportError :
71+ pass
72+
6773
6874class CV :
6975 """struct helper"""
7076
7177 @classmethod
72- def add_values (cls , value_tuples ) :
78+ def add_values (cls , value_tuples : Tuple [ str , int , float , Optional [ float ]]) -> None :
7379 "creates CV entires"
7480 cls .string = {}
7581 cls .lsb = {}
@@ -81,7 +87,7 @@ def add_values(cls, value_tuples):
8187 cls .lsb [value ] = lsb
8288
8389 @classmethod
84- def is_valid (cls , value ) :
90+ def is_valid (cls , value : int ) -> bool :
8591 """Returns true if the given value is a member of the CV"""
8692 return value in cls .string
8793
@@ -187,7 +193,7 @@ class LSM6DS: # pylint: disable=too-many-instance-attributes
187193 before calling. Use `pedometer_reset` to reset the number of steps"""
188194 CHIP_ID = None
189195
190- def __init__ (self , i2c_bus , address = LSM6DS_DEFAULT_ADDRESS ):
196+ def __init__ (self , i2c_bus : I2C , address : int = LSM6DS_DEFAULT_ADDRESS ) -> None :
191197 self ._cached_accel_range = None
192198 self ._cached_gyro_range = None
193199
@@ -210,14 +216,14 @@ def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
210216 self .accelerometer_range = AccelRange .RANGE_4G # pylint: disable=no-member
211217 self .gyro_range = GyroRange .RANGE_250_DPS # pylint: disable=no-member
212218
213- def reset (self ):
219+ def reset (self ) -> None :
214220 "Resets the sensor's configuration into an initial state"
215221 self ._sw_reset = True
216222 while self ._sw_reset :
217223 sleep (0.001 )
218224
219225 @staticmethod
220- def _add_gyro_ranges ():
226+ def _add_gyro_ranges () -> None :
221227 GyroRange .add_values (
222228 (
223229 ("RANGE_125_DPS" , 125 , 125 , 4.375 ),
@@ -229,7 +235,7 @@ def _add_gyro_ranges():
229235 )
230236
231237 @staticmethod
232- def _add_accel_ranges ():
238+ def _add_accel_ranges () -> None :
233239 AccelRange .add_values (
234240 (
235241 ("RANGE_2G" , 0 , 2 , 0.061 ),
@@ -240,7 +246,7 @@ def _add_accel_ranges():
240246 )
241247
242248 @property
243- def acceleration (self ):
249+ def acceleration (self ) -> Tuple [ float , float , float ] :
244250 """The x, y, z acceleration values returned in a 3-tuple and are in m / s ^ 2."""
245251 raw_accel_data = self ._raw_accel_data
246252
@@ -251,49 +257,49 @@ def acceleration(self):
251257 return (x , y , z )
252258
253259 @property
254- def gyro (self ):
260+ def gyro (self ) -> Tuple [ float , float , float ] :
255261 """The x, y, z angular velocity values returned in a 3-tuple and are in radians / second"""
256262 raw_gyro_data = self ._raw_gyro_data
257263 x , y , z = [radians (self ._scale_gyro_data (i )) for i in raw_gyro_data ]
258264 return (x , y , z )
259265
260- def _scale_xl_data (self , raw_measurement ) :
266+ def _scale_xl_data (self , raw_measurement : int ) -> float :
261267 return (
262268 raw_measurement
263269 * AccelRange .lsb [self ._cached_accel_range ]
264270 * _MILLI_G_TO_ACCEL
265271 )
266272
267- def _scale_gyro_data (self , raw_measurement ) :
273+ def _scale_gyro_data (self , raw_measurement : int ) -> float :
268274 return raw_measurement * GyroRange .lsb [self ._cached_gyro_range ] / 1000
269275
270276 @property
271- def accelerometer_range (self ):
277+ def accelerometer_range (self ) -> int :
272278 """Adjusts the range of values that the sensor can measure, from +/- 2G to +/-16G
273279 Note that larger ranges will be less accurate. Must be an ``AccelRange``"""
274280 return self ._cached_accel_range
275281
276282 # pylint: disable=no-member
277283 @accelerometer_range .setter
278- def accelerometer_range (self , value ) :
284+ def accelerometer_range (self , value : int ) -> None :
279285 if not AccelRange .is_valid (value ):
280286 raise AttributeError ("range must be an `AccelRange`" )
281287 self ._accel_range = value
282288 self ._cached_accel_range = value
283289 sleep (0.2 ) # needed to let new range settle
284290
285291 @property
286- def gyro_range (self ):
292+ def gyro_range (self ) -> int :
287293 """Adjusts the range of values that the sensor can measure, from 125 Degrees/s to 2000
288294 degrees/s. Note that larger ranges will be less accurate. Must be a ``GyroRange``."""
289295 return self ._cached_gyro_range
290296
291297 @gyro_range .setter
292- def gyro_range (self , value ) :
298+ def gyro_range (self , value : int ) -> None :
293299 self ._set_gyro_range (value )
294300 sleep (0.2 )
295301
296- def _set_gyro_range (self , value ) :
302+ def _set_gyro_range (self , value : int ) -> None :
297303 if not GyroRange .is_valid (value ):
298304 raise AttributeError ("range must be a `GyroRange`" )
299305
@@ -308,12 +314,12 @@ def _set_gyro_range(self, value):
308314 self ._cached_gyro_range = value # needed to let new range settle
309315
310316 @property
311- def accelerometer_data_rate (self ):
317+ def accelerometer_data_rate (self ) -> int :
312318 """Select the rate at which the accelerometer takes measurements. Must be a ``Rate``"""
313319 return self ._accel_data_rate
314320
315321 @accelerometer_data_rate .setter
316- def accelerometer_data_rate (self , value ) :
322+ def accelerometer_data_rate (self , value : int ) -> None :
317323
318324 if not Rate .is_valid (value ):
319325 raise AttributeError ("accelerometer_data_rate must be a `Rate`" )
@@ -322,42 +328,42 @@ def accelerometer_data_rate(self, value):
322328 # sleep(.2) # needed to let new range settle
323329
324330 @property
325- def gyro_data_rate (self ):
331+ def gyro_data_rate (self ) -> int :
326332 """Select the rate at which the gyro takes measurements. Must be a ``Rate``"""
327333 return self ._gyro_data_rate
328334
329335 @gyro_data_rate .setter
330- def gyro_data_rate (self , value ) :
336+ def gyro_data_rate (self , value : int ) -> None :
331337 if not Rate .is_valid (value ):
332338 raise AttributeError ("gyro_data_rate must be a `Rate`" )
333339
334340 self ._gyro_data_rate = value
335341 # sleep(.2) # needed to let new range settle
336342
337343 @property
338- def pedometer_enable (self ):
344+ def pedometer_enable (self ) -> bool :
339345 """ Whether the pedometer function on the accelerometer is enabled"""
340346 return self ._ped_enable and self ._func_enable
341347
342348 @pedometer_enable .setter
343- def pedometer_enable (self , enable ) :
349+ def pedometer_enable (self , enable : bool ) -> None :
344350 self ._ped_enable = enable
345351 self ._func_enable = enable
346352 self ._pedometer_reset = enable
347353
348354 @property
349- def high_pass_filter (self ):
355+ def high_pass_filter (self ) -> int :
350356 """The high pass filter applied to accelerometer data"""
351357 return self ._high_pass_filter
352358
353359 @high_pass_filter .setter
354- def high_pass_filter (self , value ) :
360+ def high_pass_filter (self , value : int ) -> None :
355361 if not AccelHPF .is_valid (value ):
356362 raise AttributeError ("range must be an `AccelHPF`" )
357363 self ._high_pass_filter = value
358364
359365 @property
360- def temperature (self ):
366+ def temperature (self ) -> float :
361367 """Temperature in Celsius"""
362368 # Data from Datasheet Table 4.3
363369 # Temp range -40 to 85 Celsius
0 commit comments