49
49
from adafruit_register .i2c_struct import ROUnaryStruct , Struct
50
50
from adafruit_register .i2c_bits import RWBits
51
51
from adafruit_register .i2c_bit import RWBit
52
+
52
53
__version__ = "0.0.0-auto.0"
53
54
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_LSM6DSOX.git"
54
55
64
65
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_LIS3MDL.git"
65
66
66
67
_LIS3MDL_WHO_AM_I = const (0x0F ) # Register that contains the part ID
67
- _LIS3MDL_CTRL_REG1 = const (0x20 ) # Register address for control 1
68
- _LIS3MDL_CTRL_REG2 = const (0x21 ) # Register address for control 2
69
- _LIS3MDL_CTRL_REG3 = const (0x22 ) # Register address for control 3
70
- _LIS3MDL_CTRL_REG4 = const (0x23 ) # Register address for control 3
71
- _LIS3MDL_OUT_X_L = const (0x28 ) # Register address for X axis lower byte
72
- _LIS3MDL_INT_CFG = const (0x30 ) # Interrupt configuration register
73
- _LIS3MDL_INT_THS_L = const (0x32 ) # Low byte of the irq threshold
68
+ _LIS3MDL_CTRL_REG1 = const (0x20 ) # Register address for control 1
69
+ _LIS3MDL_CTRL_REG2 = const (0x21 ) # Register address for control 2
70
+ _LIS3MDL_CTRL_REG3 = const (0x22 ) # Register address for control 3
71
+ _LIS3MDL_CTRL_REG4 = const (0x23 ) # Register address for control 3
72
+ _LIS3MDL_OUT_X_L = const (0x28 ) # Register address for X axis lower byte
73
+ _LIS3MDL_INT_CFG = const (0x30 ) # Interrupt configuration register
74
+ _LIS3MDL_INT_THS_L = const (0x32 ) # Low byte of the irq threshold
74
75
75
76
_GAUSS_TO_UT = 100
76
77
78
+
77
79
class CV :
78
80
"""struct helper"""
79
81
@@ -94,27 +96,39 @@ def is_valid(cls, value):
94
96
"Returns true if the given value is a member of the CV"
95
97
return value in cls .string
96
98
99
+
97
100
class Range (CV ):
98
101
"""Options for ``accelerometer_range``"""
99
- pass #pylint: disable=unnecessary-pass
100
102
101
- Range .add_values ((
102
- ('RANGE_4_GAUSS' , 0 , 4 , 6842 ),
103
- ('RANGE_8_GAUSS' , 1 , 8 , 3421 ),
104
- ('RANGE_12_GAUSS' , 2 , 12 , 2281 ),
105
- ('RANGE_16_GAUSS' , 3 , 16 , 1711 )
106
- ))
103
+ pass # pylint: disable=unnecessary-pass
104
+
105
+
106
+ Range .add_values (
107
+ (
108
+ ("RANGE_4_GAUSS" , 0 , 4 , 6842 ),
109
+ ("RANGE_8_GAUSS" , 1 , 8 , 3421 ),
110
+ ("RANGE_12_GAUSS" , 2 , 12 , 2281 ),
111
+ ("RANGE_16_GAUSS" , 3 , 16 , 1711 ),
112
+ )
113
+ )
114
+
107
115
108
116
class PerformanceMode (CV ):
109
117
"""Options for `performance_mode` """
110
- pass #pylint: disable=unnecessary-pass
111
-
112
- PerformanceMode .add_values ((
113
- ('MODE_LOW_POWER' , 0 , 'Low Power' , None ),
114
- ('MODE_MEDIUM' , 1 , 'Medium Performance' , None ),
115
- ('MODE_HIGH' , 2 , 'High Performance' , None ),
116
- ('MODE_ULTRA' , 3 , 'Ultra-high Performance' , None )
117
- ))
118
+
119
+ pass # pylint: disable=unnecessary-pass
120
+
121
+
122
+ PerformanceMode .add_values (
123
+ (
124
+ ("MODE_LOW_POWER" , 0 , "Low Power" , None ),
125
+ ("MODE_MEDIUM" , 1 , "Medium Performance" , None ),
126
+ ("MODE_HIGH" , 2 , "High Performance" , None ),
127
+ ("MODE_ULTRA" , 3 , "Ultra-high Performance" , None ),
128
+ )
129
+ )
130
+
131
+
118
132
class Rate (CV ):
119
133
"""Options for `data_rate`
120
134
@@ -136,23 +150,28 @@ class Rate(CV):
136
150
============================= ============================================
137
151
138
152
"""
139
- pass #pylint: disable=unnecessary-pass
153
+
154
+ pass # pylint: disable=unnecessary-pass
155
+
140
156
141
157
# The magnetometer data rate, includes FAST_ODR bit
142
- Rate .add_values ((
143
- ('RATE_0_625_HZ' , 0b0000 , 0.625 , None ),
144
- ('RATE_1_25_HZ' , 0b0010 , 1.25 , None ),
145
- ('RATE_2_5_HZ' , 0b0100 , 2.5 , None ),
146
- ('RATE_5_HZ' , 0b0110 , 5.0 , None ),
147
- ('RATE_10_HZ' , 0b1000 , 10.0 , None ),
148
- ('RATE_20_HZ' , 0b1010 , 20.0 , None ),
149
- ('RATE_40_HZ' , 0b1100 , 40.0 , None ),
150
- ('RATE_80_HZ' , 0b1110 , 80.0 , None ),
151
- ('RATE_155_HZ' , 0b0001 , 155.0 , None ),
152
- ('RATE_300_HZ' , 0b0011 , 300.0 , None ),
153
- ('RATE_560_HZ' , 0b0101 , 560.0 , None ),
154
- ('RATE_1000_HZ' , 0b0111 , 1000.0 , None ),
155
- ))
158
+ Rate .add_values (
159
+ (
160
+ ("RATE_0_625_HZ" , 0b0000 , 0.625 , None ),
161
+ ("RATE_1_25_HZ" , 0b0010 , 1.25 , None ),
162
+ ("RATE_2_5_HZ" , 0b0100 , 2.5 , None ),
163
+ ("RATE_5_HZ" , 0b0110 , 5.0 , None ),
164
+ ("RATE_10_HZ" , 0b1000 , 10.0 , None ),
165
+ ("RATE_20_HZ" , 0b1010 , 20.0 , None ),
166
+ ("RATE_40_HZ" , 0b1100 , 40.0 , None ),
167
+ ("RATE_80_HZ" , 0b1110 , 80.0 , None ),
168
+ ("RATE_155_HZ" , 0b0001 , 155.0 , None ),
169
+ ("RATE_300_HZ" , 0b0011 , 300.0 , None ),
170
+ ("RATE_560_HZ" , 0b0101 , 560.0 , None ),
171
+ ("RATE_1000_HZ" , 0b0111 , 1000.0 , None ),
172
+ )
173
+ )
174
+
156
175
157
176
class OperationMode (CV ):
158
177
"""Options for `operation_mode`
@@ -166,25 +185,31 @@ class OperationMode(CV):
166
185
============================= ============================================
167
186
168
187
"""
169
- pass #pylint: disable=unnecessary-pass
170
188
171
- OperationMode .add_values ((
172
- ('CONTINUOUS' , 0b00 , 'Continuous' , None ),
173
- ('SINGLE' , 0b01 , 'Single' , None ),
174
- ('POWER_DOWN' , 0b11 , 'Power Down' , None )
175
- ))
189
+ pass # pylint: disable=unnecessary-pass
190
+
191
+
192
+ OperationMode .add_values (
193
+ (
194
+ ("CONTINUOUS" , 0b00 , "Continuous" , None ),
195
+ ("SINGLE" , 0b01 , "Single" , None ),
196
+ ("POWER_DOWN" , 0b11 , "Power Down" , None ),
197
+ )
198
+ )
176
199
# /** The magnetometer operation mode */
177
200
# typedef enum {
178
201
# LIS3MDL_CONTINUOUSMODE = , ///< Continuous conversion
179
202
# LIS3MDL_SINGLEMODE = , ///< Single-shot conversion
180
203
# LIS3MDL_POWERDOWNMODE = , ///< Powered-down mode
181
204
# } lis3mdl_operationmode_t;
182
205
206
+
183
207
class LIS3MDL :
184
208
"""Driver for the LIS3MDL 3-axis magnetometer.
185
209
:param ~busio.I2C i2c_bus: The I2C bus the LIS3MDL is connected to.
186
210
:param address: The I2C slave address of the sensor
187
211
"""
212
+
188
213
_chip_id = ROUnaryStruct (_LIS3MDL_WHOAMI , "<b" )
189
214
190
215
_perf_mode = RWBits (2 , _LIS3MDL_CTRL_REG1 , 5 )
@@ -200,7 +225,7 @@ class LIS3MDL:
200
225
_reset = RWBit (_LIS3MDL_CTRL_REG2 , 2 )
201
226
202
227
def __init__ (self , i2c_bus , address = _LIS3MDL_DEFAULT_ADDRESS ):
203
- #pylint: disable=no-member
228
+ # pylint: disable=no-member
204
229
self .i2c_device = i2c_device .I2CDevice (i2c_bus , address )
205
230
if self ._chip_id != _LIS3MDL_CHIP_ID :
206
231
raise RuntimeError ("Failed to find LIS3MDL - check your wiring!" )
@@ -214,7 +239,7 @@ def __init__(self, i2c_bus, address=_LIS3MDL_DEFAULT_ADDRESS):
214
239
215
240
sleep (0.010 )
216
241
217
- def reset (self ): # pylint: disable=no-self-use
242
+ def reset (self ): # pylint: disable=no-self-use
218
243
"""Reset the sensor to the default state set by the library"""
219
244
self ._reset = True
220
245
sleep (0.010 )
@@ -230,9 +255,9 @@ def magnetic(self):
230
255
y = self ._scale_mag_data (raw_mag_data [1 ])
231
256
z = self ._scale_mag_data (raw_mag_data [2 ])
232
257
233
- return (x , y , z )
258
+ return (x , y , z )
234
259
235
- def _scale_mag_data (self , raw_measurement ): # pylint: disable=no-self-use
260
+ def _scale_mag_data (self , raw_measurement ): # pylint: disable=no-self-use
236
261
return (raw_measurement / Range .lsb [self .range ]) * _GAUSS_TO_UT
237
262
238
263
@property
@@ -256,7 +281,7 @@ def data_rate(self):
256
281
257
282
@data_rate .setter
258
283
def data_rate (self , value ):
259
- #pylint: disable=no-member
284
+ # pylint: disable=no-member
260
285
if value is Rate .RATE_155_HZ :
261
286
self .performance_mode = PerformanceMode .MODE_ULTRA
262
287
if value is Rate .RATE_300_HZ :
0 commit comments