9 #include "Messages.hpp" 10 #include "cluon/OD4Session.hpp" 12 uint8_t
const MPU9250_ADDRESS = 0x68;
13 uint8_t
const AK8963_ADDRESS = 0x76;
52 float getGscale(
bool);
56 uint8_t m_gscale = GFS_250DPS;
57 uint8_t m_ascale = AFS_2G;
59 uint8_t m_mscale = MFS_16BITS;
60 uint8_t m_mmode = M_100HZ;
66 void initializeMpu(int16_t deviceFile);
72 void initializeAK8963(int16_t deviceFile);
80 int8_t i2cAccessDevice(int16_t deviceFile, uint8_t
const addr);
90 int8_t i2cReadRegister(int16_t deviceFile, uint8_t
const addr, uint8_t *data, uint8_t
const length);
98 int8_t i2cWriteRegister(std::vector<uint8_t> a_data, int16_t deviceFile);
106 std::vector<float> calibrateMPU9250(int16_t deviceFile);
108 int8_t setGyroOffset(std::vector<float>
const a_offset, int16_t deviceFile);
115 opendlv::proxy::AccelerationReading readAccelerometer(int16_t deviceFile);
122 opendlv::proxy::MagneticFieldReading readMagnetometer(int16_t deviceFile);
129 opendlv::proxy::GyroscopeReading readGyroscope(int16_t deviceFile);
136 opendlv::proxy::AltitudeReading readAltimeter(int16_t deviceFile);
143 opendlv::proxy::TemperatureReading readThermometer(int16_t deviceFile);
156 IMU_POLL_TIMEOUT = 300,
157 MAX_FIFO_BUFFER = 128,
159 SELF_TEST_X_GYRO = 0x00,
160 SELF_TEST_Y_GYRO = 0x01,
161 SELF_TEST_Z_GYRO = 0x02,
165 SELF_TEST_X_ACCEL = 0x0D,
166 SELF_TEST_Y_ACCEL = 0x0E,
167 SELF_TEST_Z_ACCEL = 0x0F,
179 ACCEL_CONFIG2 = 0x1D,
187 I2C_SLV0_ADDR = 0x25,
189 I2C_SLV0_CTRL = 0x27,
190 I2C_SLV1_ADDR = 0x28,
192 I2C_SLV1_CTRL = 0x2A,
193 I2C_SLV2_ADDR = 0x2B,
195 I2C_SLV2_CTRL = 0x2D,
196 I2C_SLV3_ADDR = 0x2E,
198 I2C_SLV3_CTRL = 0x30,
199 I2C_SLV4_ADDR = 0x31,
202 I2C_SLV4_CTRL = 0x34,
204 I2C_MST_STATUS = 0x36,
207 DMP_INT_STATUS = 0x39,
223 EXT_SENS_DATA_00 = 0x49,
224 EXT_SENS_DATA_01 = 0x4A,
225 EXT_SENS_DATA_02 = 0x4B,
226 EXT_SENS_DATA_03 = 0x4C,
227 EXT_SENS_DATA_04 = 0x4D,
228 EXT_SENS_DATA_05 = 0x4E,
229 EXT_SENS_DATA_06 = 0x4F,
230 EXT_SENS_DATA_07 = 0x50,
231 EXT_SENS_DATA_08 = 0x51,
232 EXT_SENS_DATA_09 = 0x52,
233 EXT_SENS_DATA_10 = 0x53,
234 EXT_SENS_DATA_11 = 0x54,
235 EXT_SENS_DATA_12 = 0x55,
236 EXT_SENS_DATA_13 = 0x56,
237 EXT_SENS_DATA_14 = 0x57,
238 EXT_SENS_DATA_15 = 0x58,
239 EXT_SENS_DATA_16 = 0x59,
240 EXT_SENS_DATA_17 = 0x5A,
241 EXT_SENS_DATA_18 = 0x5B,
242 EXT_SENS_DATA_19 = 0x5C,
243 EXT_SENS_DATA_20 = 0x5D,
244 EXT_SENS_DATA_21 = 0x5E,
245 EXT_SENS_DATA_22 = 0x5F,
246 EXT_SENS_DATA_23 = 0x60,
247 MOT_DETECT_STATUS = 0x61,
252 I2C_MST_DELAY_CTRL = 0x67,
253 SIGNAL_PATH_RESET = 0x68,
254 MOT_DETECT_CTRL = 0x69,
266 WHO_AM_I_MPU9250 = 0x75,
277 XGYRO_CTEN = 0x01<<7,
278 YGYRO_CTEN = 0x01<<6,
279 ZGYRO_CTEN = 0x01<<5,
280 GYRO_FSR_CFG_250 = 0x00<<3,
281 GYRO_FSR_CFG_500 = 0x01<<3,
282 GYRO_FSR_CFG_1000 = 0x02<<3,
283 GYRO_FSR_CFG_2000 = 0x03<<3,
284 FCHOICE_B_DLPF_EN = 0x00,
285 FCHOICE_B_DLPF_DISABLE = 0x01,
293 ACCEL_FSR_CFG_2G = 0x00<<3,
294 ACCEL_FSR_CFG_4G = 0x01<<3,
295 ACCEL_FSR_CFG_8G = 0x02<<3,
296 ACCEL_FSR_CFG_16G = 0x03<<3,
301 ACCEL_FCHOICE_1KHZ = 0x00<<3,
302 ACCEL_FCHOICE_4KHZ = 0x01<<3,
308 ACTL_ACTIVE_LOW = 0x01<<7,
309 ACTL_ACTIVE_HIGH = 0x00,
310 INT_OPEN_DRAIN = 0x00,
311 INT_PUSH_PULL = 0x00<<6,
312 LATCH_INT_EN = 0x01<<5,
313 INT_ANYRD_CLEAR = 0x01<<4,
314 ACTL_FSYNC_ACTIVE_LOW = 0x01<<3,
315 ACTL_FSYNC_ACTIVE_HIGH = 0x00<<3,
316 FSYNC_INT_MODE_EN = 0x01<<2,
317 FSYNC_INT_MODE_DIS = 0x00<<2,
324 WHO_AM_I_AK8963 = 0x00,
327 AK8963_XOUT_L = 0x03,
328 AK8963_XOUT_H = 0x04,
329 AK8963_YOUT_L = 0x05,
330 AK8963_YOUT_H = 0x06,
331 AK8963_ZOUT_L = 0x07,
332 AK8963_ZOUT_H = 0x08,
336 AK8963_I2CDIS = 0x0F,
345 MAG_SINGLE_MES = 0x01,
346 MAG_CONT_MES_1 = 0x02,
347 MAG_CONT_MES_2 = 0x06,
349 MAG_SELF_TEST = 0x08,
357 MAGNETOMETER_SATURATION = 0x01<<3,
362 MAG_DATA_READY = 0x01,
370 BIT_I2C_MST_VDDIO = 0x80,
375 BIT_FIFO_OVERFLOW = 0x10,
376 BIT_DATA_RDY_EN = 0x01,
377 BIT_DMP_INT_EN = 0x02,
378 BIT_MOT_INT_EN = 0x40,
383 BIT_FIFO_SIZE_1024 = 0x40,
384 BIT_FIFO_SIZE_2048 = 0x80,
385 BIT_FIFO_SIZE_4096 = 0xC0,
388 BIT_S0_DELAY_EN = 0x01,
389 BIT_S2_DELAY_EN = 0x04,
390 BITS_SLAVE_LENGTH = 0x0F,
391 BIT_SLAVE_BYTE_SW = 0x40,
392 BIT_SLAVE_GROUP = 0x10,
395 BITS_I2C_MASTER_DLY = 0x1F,
396 BIT_AUX_IF_EN = 0x20,
399 BIT_ANY_RD_CLR = 0x10,
400 BIT_BYPASS_EN = 0x02,
402 BIT_LPA_CYCLE = 0x20,
404 DMP_FEATURE_SEND_RAW_ACCEL = 0x040,
405 DMP_FEATURE_SEND_RAW_GYRO = 0x080,
406 DMP_FEATURE_SEND_CAL_GYRO = 0x100,
407 DMP_FEATURE_SEND_ANY_GYRO = (DMP_FEATURE_SEND_RAW_GYRO | \
408 DMP_FEATURE_SEND_CAL_GYRO)
413 #endif //GROUP9_IMU_HPP