58
58
59
59
# Register addresses and other constants:
60
60
# pylint: disable=bad-whitespace
61
- _FXOS8700_ADDRESS = const (0x1F ) # 0011111
62
- _FXOS8700_ID = const (0xC7 ) # 1100 0111
63
- _FXOS8700_REGISTER_STATUS = const (0x00 )
64
- _FXOS8700_REGISTER_OUT_X_MSB = const (0x01 )
65
- _FXOS8700_REGISTER_OUT_X_LSB = const (0x02 )
66
- _FXOS8700_REGISTER_OUT_Y_MSB = const (0x03 )
67
- _FXOS8700_REGISTER_OUT_Y_LSB = const (0x04 )
68
- _FXOS8700_REGISTER_OUT_Z_MSB = const (0x05 )
69
- _FXOS8700_REGISTER_OUT_Z_LSB = const (0x06 )
70
- _FXOS8700_REGISTER_WHO_AM_I = const (0x0D ) # 11000111 r
61
+ _FXOS8700_ADDRESS = const (0x1F ) # 0011111
62
+ _FXOS8700_ID = const (0xC7 ) # 1100 0111
63
+ _FXOS8700_REGISTER_STATUS = const (0x00 )
64
+ _FXOS8700_REGISTER_OUT_X_MSB = const (0x01 )
65
+ _FXOS8700_REGISTER_OUT_X_LSB = const (0x02 )
66
+ _FXOS8700_REGISTER_OUT_Y_MSB = const (0x03 )
67
+ _FXOS8700_REGISTER_OUT_Y_LSB = const (0x04 )
68
+ _FXOS8700_REGISTER_OUT_Z_MSB = const (0x05 )
69
+ _FXOS8700_REGISTER_OUT_Z_LSB = const (0x06 )
70
+ _FXOS8700_REGISTER_WHO_AM_I = const (0x0D ) # 11000111 r
71
71
_FXOS8700_REGISTER_XYZ_DATA_CFG = const (0x0E )
72
- _FXOS8700_REGISTER_CTRL_REG1 = const (0x2A ) # 00000000 r/w
73
- _FXOS8700_REGISTER_CTRL_REG2 = const (0x2B ) # 00000000 r/w
74
- _FXOS8700_REGISTER_CTRL_REG3 = const (0x2C ) # 00000000 r/w
75
- _FXOS8700_REGISTER_CTRL_REG4 = const (0x2D ) # 00000000 r/w
76
- _FXOS8700_REGISTER_CTRL_REG5 = const (0x2E ) # 00000000 r/w
77
- _FXOS8700_REGISTER_MSTATUS = const (0x32 )
78
- _FXOS8700_REGISTER_MOUT_X_MSB = const (0x33 )
79
- _FXOS8700_REGISTER_MOUT_X_LSB = const (0x34 )
80
- _FXOS8700_REGISTER_MOUT_Y_MSB = const (0x35 )
81
- _FXOS8700_REGISTER_MOUT_Y_LSB = const (0x36 )
82
- _FXOS8700_REGISTER_MOUT_Z_MSB = const (0x37 )
83
- _FXOS8700_REGISTER_MOUT_Z_LSB = const (0x38 )
84
- _FXOS8700_REGISTER_MCTRL_REG1 = const (0x5B ) # 00000000 r/w
85
- _FXOS8700_REGISTER_MCTRL_REG2 = const (0x5C ) # 00000000 r/w
86
- _FXOS8700_REGISTER_MCTRL_REG3 = const (0x5D ) # 00000000 r/w
87
- _ACCEL_MG_LSB_2G = 0.000244
88
- _ACCEL_MG_LSB_4G = 0.000488
89
- _ACCEL_MG_LSB_8G = 0.000976
90
- _MAG_UT_LSB = 0.1
91
- _SENSORS_GRAVITY_STANDARD = 9.80665
72
+ _FXOS8700_REGISTER_CTRL_REG1 = const (0x2A ) # 00000000 r/w
73
+ _FXOS8700_REGISTER_CTRL_REG2 = const (0x2B ) # 00000000 r/w
74
+ _FXOS8700_REGISTER_CTRL_REG3 = const (0x2C ) # 00000000 r/w
75
+ _FXOS8700_REGISTER_CTRL_REG4 = const (0x2D ) # 00000000 r/w
76
+ _FXOS8700_REGISTER_CTRL_REG5 = const (0x2E ) # 00000000 r/w
77
+ _FXOS8700_REGISTER_MSTATUS = const (0x32 )
78
+ _FXOS8700_REGISTER_MOUT_X_MSB = const (0x33 )
79
+ _FXOS8700_REGISTER_MOUT_X_LSB = const (0x34 )
80
+ _FXOS8700_REGISTER_MOUT_Y_MSB = const (0x35 )
81
+ _FXOS8700_REGISTER_MOUT_Y_LSB = const (0x36 )
82
+ _FXOS8700_REGISTER_MOUT_Z_MSB = const (0x37 )
83
+ _FXOS8700_REGISTER_MOUT_Z_LSB = const (0x38 )
84
+ _FXOS8700_REGISTER_MCTRL_REG1 = const (0x5B ) # 00000000 r/w
85
+ _FXOS8700_REGISTER_MCTRL_REG2 = const (0x5C ) # 00000000 r/w
86
+ _FXOS8700_REGISTER_MCTRL_REG3 = const (0x5D ) # 00000000 r/w
87
+ _ACCEL_MG_LSB_2G = 0.000244
88
+ _ACCEL_MG_LSB_4G = 0.000488
89
+ _ACCEL_MG_LSB_8G = 0.000976
90
+ _MAG_UT_LSB = 0.1
91
+ _SENSORS_GRAVITY_STANDARD = 9.80665
92
92
# pylint: enable=bad-whitespace
93
93
94
94
# User-facing constants/module-level globals:
@@ -107,19 +107,19 @@ def _twos_comp(val, bits):
107
107
108
108
class FXOS8700 :
109
109
"""Driver for the NXP FXOS8700 accelerometer and magnetometer."""
110
+
110
111
# Class-level buffer for reading and writing data with the sensor.
111
112
# This reduces memory allocations but means the code is not re-entrant or
112
113
# thread safe!
113
114
_BUFFER = bytearray (13 )
114
115
115
- def __init__ (self , i2c , address = _FXOS8700_ADDRESS ,
116
- accel_range = ACCEL_RANGE_2G ):
116
+ def __init__ (self , i2c , address = _FXOS8700_ADDRESS , accel_range = ACCEL_RANGE_2G ):
117
117
assert accel_range in (ACCEL_RANGE_2G , ACCEL_RANGE_4G , ACCEL_RANGE_8G )
118
118
self ._accel_range = accel_range
119
119
self ._device = i2c_dev .I2CDevice (i2c , address )
120
120
# Check for chip ID value.
121
121
if self ._read_u8 (_FXOS8700_REGISTER_WHO_AM_I ) != _FXOS8700_ID :
122
- raise RuntimeError (' Failed to find FXOS8700, check wiring!' )
122
+ raise RuntimeError (" Failed to find FXOS8700, check wiring!" )
123
123
# Set to standby mode (required to make changes to this register)
124
124
self ._write_u8 (_FXOS8700_REGISTER_CTRL_REG1 , 0 )
125
125
if accel_range == ACCEL_RANGE_2G :
@@ -142,8 +142,7 @@ def _read_u8(self, address):
142
142
# Read an 8-bit unsigned value from the specified 8-bit address.
143
143
with self ._device as i2c :
144
144
self ._BUFFER [0 ] = address & 0xFF
145
- i2c .write_then_readinto (self ._BUFFER , self ._BUFFER ,
146
- out_end = 1 , in_end = 1 )
145
+ i2c .write_then_readinto (self ._BUFFER , self ._BUFFER , out_end = 1 , in_end = 1 )
147
146
return self ._BUFFER [0 ]
148
147
149
148
def _write_u8 (self , address , val ):
@@ -166,11 +165,10 @@ def read_raw_accel_mag(self):
166
165
# Read accelerometer data from sensor.
167
166
with self ._device as i2c :
168
167
self ._BUFFER [0 ] = _FXOS8700_REGISTER_OUT_X_MSB
169
- i2c .write_then_readinto (self ._BUFFER , self ._BUFFER ,
170
- out_end = 1 , in_end = 6 )
171
- accel_raw_x = struct .unpack_from ('>H' , self ._BUFFER [0 :2 ])[0 ]
172
- accel_raw_y = struct .unpack_from ('>H' , self ._BUFFER [2 :4 ])[0 ]
173
- accel_raw_z = struct .unpack_from ('>H' , self ._BUFFER [4 :6 ])[0 ]
168
+ i2c .write_then_readinto (self ._BUFFER , self ._BUFFER , out_end = 1 , in_end = 6 )
169
+ accel_raw_x = struct .unpack_from (">H" , self ._BUFFER [0 :2 ])[0 ]
170
+ accel_raw_y = struct .unpack_from (">H" , self ._BUFFER [2 :4 ])[0 ]
171
+ accel_raw_z = struct .unpack_from (">H" , self ._BUFFER [4 :6 ])[0 ]
174
172
# Convert accelerometer data to signed 14-bit value from 16-bit
175
173
# left aligned 2's compliment value.
176
174
accel_raw_x = _twos_comp (accel_raw_x >> 2 , 14 )
@@ -180,13 +178,14 @@ def read_raw_accel_mag(self):
180
178
# 16-bit signed data so struct parsing can handle it directly.
181
179
with self ._device as i2c :
182
180
self ._BUFFER [0 ] = _FXOS8700_REGISTER_MOUT_X_MSB
183
- i2c .write_then_readinto (self ._BUFFER , self ._BUFFER ,
184
- out_end = 1 , in_end = 6 )
185
- mag_raw_x = struct .unpack_from ('>h' , self ._BUFFER [0 :2 ])[0 ]
186
- mag_raw_y = struct .unpack_from ('>h' , self ._BUFFER [2 :4 ])[0 ]
187
- mag_raw_z = struct .unpack_from ('>h' , self ._BUFFER [4 :6 ])[0 ]
188
- return ((accel_raw_x , accel_raw_y , accel_raw_z ),
189
- (mag_raw_x , mag_raw_y , mag_raw_z ))
181
+ i2c .write_then_readinto (self ._BUFFER , self ._BUFFER , out_end = 1 , in_end = 6 )
182
+ mag_raw_x = struct .unpack_from (">h" , self ._BUFFER [0 :2 ])[0 ]
183
+ mag_raw_y = struct .unpack_from (">h" , self ._BUFFER [2 :4 ])[0 ]
184
+ mag_raw_z = struct .unpack_from (">h" , self ._BUFFER [4 :6 ])[0 ]
185
+ return (
186
+ (accel_raw_x , accel_raw_y , accel_raw_z ),
187
+ (mag_raw_x , mag_raw_y , mag_raw_z ),
188
+ )
190
189
191
190
@property
192
191
def accelerometer (self ):
0 commit comments