34
34
from adafruit_bus_device .i2c_device import I2CDevice
35
35
from micropython import const
36
36
37
+ try :
38
+ from typing import Tuple
39
+ from circuitpython_typing import ReadableBuffer
40
+ from busio import I2C
41
+ except ImportError :
42
+ pass
43
+
37
44
__version__ = "0.0.0-auto.0"
38
45
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MLX90393.git"
39
46
@@ -192,14 +199,14 @@ class MLX90393: # pylint: disable=too-many-instance-attributes
192
199
193
200
def __init__ (
194
201
self ,
195
- i2c_bus ,
196
- address = 0x0C ,
197
- gain = GAIN_1X ,
198
- resolution = RESOLUTION_16 ,
199
- filt = FILTER_7 ,
200
- oversampling = OSR_3 ,
201
- debug = False ,
202
- ): # pylint: disable=too-many-arguments
202
+ i2c_bus : I2C ,
203
+ address : int = 0x0C ,
204
+ gain : int = GAIN_1X ,
205
+ resolution : int = RESOLUTION_16 ,
206
+ filt : int = FILTER_7 ,
207
+ oversampling : int = OSR_3 ,
208
+ debug : bool = False ,
209
+ ) -> None : # pylint: disable=too-many-arguments
203
210
self .i2c_device = I2CDevice (i2c_bus , address )
204
211
self ._debug = debug
205
212
self ._status_last = 0
@@ -225,12 +232,12 @@ def __init__(
225
232
# Set gain to the supplied level
226
233
self .gain = self ._gain_current
227
234
228
- def _transceive (self , payload , rxlen = 0 ) :
235
+ def _transceive (self , payload : ReadableBuffer , rxlen : int = 0 ) -> bytearray :
229
236
"""
230
237
Writes the specified 'payload' to the sensor
231
238
Returns the results of the write attempt.
232
239
233
- :param bytes payload: The byte array to write to the sensor
240
+ :param ReadableBuffer payload: The byte array to write to the sensor
234
241
:param int rxlen: numbers of bytes to read back. Defaults to :const:`0`
235
242
236
243
"""
@@ -266,21 +273,21 @@ def _transceive(self, payload, rxlen=0):
266
273
return data
267
274
268
275
@property
269
- def last_status (self ):
276
+ def last_status (self ) -> int :
270
277
"""
271
278
The last status byte received from the sensor.
272
279
"""
273
280
return self ._status_last
274
281
275
282
@property
276
- def gain (self ):
283
+ def gain (self ) -> int :
277
284
"""
278
285
The gain setting for the device.
279
286
"""
280
287
return self ._gain_current
281
288
282
289
@gain .setter
283
- def gain (self , value ) :
290
+ def gain (self , value : int ) -> None :
284
291
if value > GAIN_1X or value < GAIN_5X :
285
292
raise ValueError ("Invalid GAIN setting" )
286
293
if self ._debug :
@@ -298,36 +305,36 @@ def gain(self, value):
298
305
)
299
306
300
307
@property
301
- def resolution_x (self ):
308
+ def resolution_x (self ) -> int :
302
309
"""The X axis resolution."""
303
310
return self ._res_x
304
311
305
312
@resolution_x .setter
306
- def resolution_x (self , resolution ) :
313
+ def resolution_x (self , resolution : int ) -> None :
307
314
self ._set_resolution (0 , resolution )
308
315
self ._res_x = resolution
309
316
310
317
@property
311
- def resolution_y (self ):
318
+ def resolution_y (self ) -> int :
312
319
"""The Y axis resolution."""
313
320
return self ._res_y
314
321
315
322
@resolution_y .setter
316
- def resolution_y (self , resolution ) :
323
+ def resolution_y (self , resolution : int ) -> None :
317
324
self ._set_resolution (1 , resolution )
318
325
self ._res_y = resolution
319
326
320
327
@property
321
- def resolution_z (self ):
328
+ def resolution_z (self ) -> int :
322
329
"""The Z axis resolution."""
323
330
return self ._res_z
324
331
325
332
@resolution_z .setter
326
- def resolution_z (self , resolution ) :
333
+ def resolution_z (self , resolution : int ) -> None :
327
334
self ._set_resolution (2 , resolution )
328
335
self ._res_z = resolution
329
336
330
- def _set_resolution (self , axis , resolution ) :
337
+ def _set_resolution (self , axis : int , resolution : int ) -> None :
331
338
if resolution not in (
332
339
RESOLUTION_16 ,
333
340
RESOLUTION_17 ,
@@ -343,12 +350,12 @@ def _set_resolution(self, axis, resolution):
343
350
self .write_reg (_CMD_REG_CONF3 , reg )
344
351
345
352
@property
346
- def filter (self ):
353
+ def filter (self ) -> int :
347
354
"""The filter level."""
348
355
return self ._filter
349
356
350
357
@filter .setter
351
- def filter (self , level ) :
358
+ def filter (self , level : int ) -> None :
352
359
if level not in range (8 ):
353
360
raise ValueError ("Incorrect filter level." )
354
361
reg = self .read_reg (_CMD_REG_CONF3 )
@@ -358,12 +365,12 @@ def filter(self, level):
358
365
self ._filter = level
359
366
360
367
@property
361
- def oversampling (self ):
368
+ def oversampling (self ) -> int :
362
369
"""The oversampling level."""
363
370
return self ._osr
364
371
365
372
@oversampling .setter
366
- def oversampling (self , level ) :
373
+ def oversampling (self , level : int ) -> None :
367
374
if level not in range (4 ):
368
375
raise ValueError ("Incorrect oversampling level." )
369
376
reg = self .read_reg (_CMD_REG_CONF3 )
@@ -372,7 +379,7 @@ def oversampling(self, level):
372
379
self .write_reg (_CMD_REG_CONF3 , reg )
373
380
self ._osr = level
374
381
375
- def display_status (self ):
382
+ def display_status (self ) -> None :
376
383
"""
377
384
Prints out the content of the last status byte in a human-readable
378
385
format.
@@ -389,7 +396,7 @@ def display_status(self):
389
396
print ("Reset status :" , (self ._status_last & (1 << 2 )) > 0 )
390
397
print ("Response bytes available :" , avail )
391
398
392
- def read_reg (self , reg ) :
399
+ def read_reg (self , reg : int ) -> int :
393
400
"""
394
401
Gets the current value of the specified register.
395
402
"""
@@ -411,7 +418,7 @@ def read_reg(self, reg):
411
418
print ("\t Status :" , hex (data [0 ]))
412
419
return val
413
420
414
- def write_reg (self , reg , value ) :
421
+ def write_reg (self , reg : int , value : int ) -> None :
415
422
"""
416
423
Writes the 16-bit value to the supplied register.
417
424
"""
@@ -426,7 +433,7 @@ def write_reg(self, reg, value):
426
433
)
427
434
)
428
435
429
- def reset (self ):
436
+ def reset (self ) -> None :
430
437
"""
431
438
Performs a software reset of the sensor.
432
439
"""
@@ -442,7 +449,7 @@ def reset(self):
442
449
return self ._status_last
443
450
444
451
@property
445
- def read_data (self ):
452
+ def read_data (self ) -> Tuple [ int , int , int ] :
446
453
"""
447
454
Reads a single X/Y/Z sample from the magnetometer.
448
455
"""
@@ -469,7 +476,7 @@ def read_data(self):
469
476
return m_x , m_y , m_z
470
477
471
478
# pylint: disable=no-self-use
472
- def _unpack_axis_data (self , resolution , data ) :
479
+ def _unpack_axis_data (self , resolution : int , data : ReadableBuffer ) -> int :
473
480
# see datasheet
474
481
if resolution == RESOLUTION_19 :
475
482
(value ,) = struct .unpack (">H" , data )
@@ -482,7 +489,7 @@ def _unpack_axis_data(self, resolution, data):
482
489
return value
483
490
484
491
@property
485
- def magnetic (self ):
492
+ def magnetic (self ) -> Tuple [ float , float , float ] :
486
493
"""
487
494
The processed magnetometer sensor values.
488
495
A 3-tuple of X, Y, Z axis values in microteslas that are signed floats.
0 commit comments