5858
5959# Register addresses and other constants:
6060# 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
7171_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
9292# pylint: enable=bad-whitespace
9393
9494# User-facing constants/module-level globals:
@@ -107,19 +107,19 @@ def _twos_comp(val, bits):
107107
108108class FXOS8700 :
109109 """Driver for the NXP FXOS8700 accelerometer and magnetometer."""
110+
110111 # Class-level buffer for reading and writing data with the sensor.
111112 # This reduces memory allocations but means the code is not re-entrant or
112113 # thread safe!
113114 _BUFFER = bytearray (13 )
114115
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 ):
117117 assert accel_range in (ACCEL_RANGE_2G , ACCEL_RANGE_4G , ACCEL_RANGE_8G )
118118 self ._accel_range = accel_range
119119 self ._device = i2c_dev .I2CDevice (i2c , address )
120120 # Check for chip ID value.
121121 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!" )
123123 # Set to standby mode (required to make changes to this register)
124124 self ._write_u8 (_FXOS8700_REGISTER_CTRL_REG1 , 0 )
125125 if accel_range == ACCEL_RANGE_2G :
@@ -142,8 +142,7 @@ def _read_u8(self, address):
142142 # Read an 8-bit unsigned value from the specified 8-bit address.
143143 with self ._device as i2c :
144144 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 )
147146 return self ._BUFFER [0 ]
148147
149148 def _write_u8 (self , address , val ):
@@ -166,11 +165,10 @@ def read_raw_accel_mag(self):
166165 # Read accelerometer data from sensor.
167166 with self ._device as i2c :
168167 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 ]
174172 # Convert accelerometer data to signed 14-bit value from 16-bit
175173 # left aligned 2's compliment value.
176174 accel_raw_x = _twos_comp (accel_raw_x >> 2 , 14 )
@@ -180,13 +178,14 @@ def read_raw_accel_mag(self):
180178 # 16-bit signed data so struct parsing can handle it directly.
181179 with self ._device as i2c :
182180 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+ )
190189
191190 @property
192191 def accelerometer (self ):
0 commit comments