38
38
from adafruit_register .i2c_bits import RWBits
39
39
from adafruit_register .i2c_struct_array import StructArray
40
40
41
+ try :
42
+ from typing import Optional , Tuple
43
+ from typing_extensions import Literal
44
+ from busio import I2C
45
+ except ImportError :
46
+ pass
47
+
41
48
__version__ = "0.0.0+auto.0"
42
49
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_LSM303_Accel.git"
43
50
@@ -191,7 +198,7 @@ class LSM303_Accel: # pylint:disable=too-many-instance-attributes
191
198
192
199
_BUFFER = bytearray (6 )
193
200
194
- def __init__ (self , i2c ) :
201
+ def __init__ (self , i2c : I2C ) -> None :
195
202
self ._accel_device = I2CDevice (i2c , _ADDRESS_ACCEL )
196
203
self .i2c_device = self ._accel_device
197
204
self ._data_rate = 2
@@ -207,14 +214,14 @@ def __init__(self, i2c):
207
214
208
215
def set_tap (
209
216
self ,
210
- tap ,
211
- threshold ,
217
+ tap : Literal [ 0 , 1 , 2 ] ,
218
+ threshold : int ,
212
219
* ,
213
- time_limit = 10 ,
214
- time_latency = 20 ,
215
- time_window = 255 ,
216
- tap_cfg = None
217
- ):
220
+ time_limit : int = 10 ,
221
+ time_latency : int = 20 ,
222
+ time_window : int = 255 ,
223
+ tap_cfg : Optional [ int ] = None ,
224
+ ) -> None :
218
225
"""
219
226
The tap detection parameters.
220
227
@@ -259,7 +266,7 @@ def set_tap(
259
266
self ._tap_time_window = time_window
260
267
261
268
@property
262
- def tapped (self ):
269
+ def tapped (self ) -> bool :
263
270
"""
264
271
True if a tap was detected recently. Whether its a single tap or double tap is
265
272
determined by the tap param on :meth:`set_tap`. :attr:`tapped` may be True over
@@ -269,14 +276,14 @@ def tapped(self):
269
276
return tap_src & 0b1000000 > 0
270
277
271
278
@property
272
- def _raw_acceleration (self ):
279
+ def _raw_acceleration (self ) -> Tuple [ int , int , int ] :
273
280
self ._read_bytes (
274
281
self ._accel_device , _REG_ACCEL_OUT_X_L_A | 0x80 , 6 , self ._BUFFER
275
282
)
276
283
return struct .unpack_from ("<hhh" , self ._BUFFER [0 :6 ])
277
284
278
285
@property
279
- def acceleration (self ):
286
+ def acceleration (self ) -> Tuple [ float , float , float ] :
280
287
"""The measured accelerometer sensor values.
281
288
A 3-tuple of X, Y, Z axis values in m/s^2 squared that are signed floats.
282
289
"""
@@ -289,12 +296,12 @@ def acceleration(self):
289
296
290
297
return (x , y , z )
291
298
292
- def _scale_data (self , raw_measurement ) :
299
+ def _scale_data (self , raw_measurement : int ) -> float :
293
300
lsb , shift = self ._lsb_shift ()
294
301
295
302
return (raw_measurement >> shift ) * lsb * _SMOLLER_GRAVITY
296
303
297
- def _lsb_shift (self ): # pylint:disable=too-many-branches
304
+ def _lsb_shift (self ) -> Tuple [ float , int ] : # pylint:disable=too-many-branches
298
305
# the bit depth of the data depends on the mode, and the lsb value
299
306
# depends on the mode and range
300
307
lsb = - 1 # the default, normal mode @ 2G
@@ -333,64 +340,66 @@ def _lsb_shift(self): # pylint:disable=too-many-branches
333
340
334
341
if lsb is - 1 :
335
342
raise AttributeError (
336
- "'impossible' range or mode detected: range: %d mode: %d "
337
- % ( self ._cached_range , self ._cached_mode )
343
+ "'impossible' range or mode detected: "
344
+ f"range: { self ._cached_range } mode: { self ._cached_mode } "
338
345
)
339
346
return (lsb , shift )
340
347
341
348
@property
342
- def data_rate (self ):
349
+ def data_rate (self ) -> int :
343
350
"""Select the rate at which the sensor takes measurements. Must be a `Rate`"""
344
351
return self ._data_rate
345
352
346
353
@data_rate .setter
347
- def data_rate (self , value ) :
354
+ def data_rate (self , value : int ) -> None :
348
355
if value < 0 or value > 9 :
349
356
raise AttributeError ("data_rate must be a `Rate`" )
350
357
351
358
self ._data_rate = value
352
359
353
360
@property
354
- def range (self ):
361
+ def range (self ) -> int :
355
362
"""Adjusts the range of values that the sensor can measure, from +- 2G to +-16G
356
363
Note that larger ranges will be less accurate. Must be a `Range`"""
357
364
return self ._cached_range
358
365
359
366
@range .setter
360
- def range (self , value ) :
367
+ def range (self , value : int ) -> None :
361
368
if value < 0 or value > 3 :
362
369
raise AttributeError ("range must be a `Range`" )
363
370
self ._range = value
364
371
self ._cached_range = value
365
372
366
373
@property
367
- def mode (self ):
374
+ def mode (self ) -> int :
368
375
"""Sets the power mode of the sensor. The mode must be a `Mode`. Note that the
369
376
mode and range will both affect the accuracy of the sensor"""
370
377
return self ._cached_mode
371
378
372
379
@mode .setter
373
- def mode (self , value ) :
380
+ def mode (self , value : int ) -> None :
374
381
if value < 0 or value > 2 :
375
382
raise AttributeError ("mode must be a `Mode`" )
376
383
self ._high_resolution = value & 0b01
377
384
self ._low_power = (value & 0b10 ) >> 1
378
385
self ._cached_mode = value
379
386
380
- def _read_u8 (self , device , address ) :
387
+ def _read_u8 (self , device : I2CDevice , address : int ) -> int :
381
388
with device as i2c :
382
389
self ._BUFFER [0 ] = address & 0xFF
383
390
i2c .write_then_readinto (self ._BUFFER , self ._BUFFER , out_end = 1 , in_end = 1 )
384
391
return self ._BUFFER [0 ]
385
392
386
- def _write_u8 (self , device , address , val ) :
393
+ def _write_u8 (self , device : I2CDevice , address : int , val : int ) -> None :
387
394
with device as i2c :
388
395
self ._BUFFER [0 ] = address & 0xFF
389
396
self ._BUFFER [1 ] = val & 0xFF
390
397
i2c .write (self ._BUFFER , end = 2 )
391
398
392
399
@staticmethod
393
- def _read_bytes (device , address , count , buf ):
400
+ def _read_bytes (
401
+ device : I2CDevice , address : int , count : int , buf : bytearray
402
+ ) -> None :
394
403
with device as i2c :
395
404
buf [0 ] = address & 0xFF
396
405
i2c .write_then_readinto (buf , buf , out_end = 1 , in_end = count )
0 commit comments