InvenSense Motion Driver v5.1.2 ported

Dependents:   Sensorv2

Committer:
oprospero
Date:
Wed Oct 15 04:59:22 2014 +0000
Revision:
3:8ac73f9099ab
Parent:
1:dbbd3dcd61c9
Child:
4:2cb380415dc7
added reset

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oprospero 0:4dd021344a6b 1 #ifndef _INV_MPU_H_
oprospero 0:4dd021344a6b 2 #define _INV_MPU_H_
oprospero 0:4dd021344a6b 3
oprospero 0:4dd021344a6b 4 #include "I2Cdev.h"
oprospero 0:4dd021344a6b 5
oprospero 1:dbbd3dcd61c9 6 //#define DEBUG_MPU
oprospero 0:4dd021344a6b 7
oprospero 0:4dd021344a6b 8
oprospero 0:4dd021344a6b 9
oprospero 0:4dd021344a6b 10 #define INV_X_GYRO (0x40)
oprospero 0:4dd021344a6b 11 #define INV_Y_GYRO (0x20)
oprospero 0:4dd021344a6b 12 #define INV_Z_GYRO (0x10)
oprospero 0:4dd021344a6b 13 #define INV_XYZ_GYRO (INV_X_GYRO | INV_Y_GYRO | INV_Z_GYRO)
oprospero 0:4dd021344a6b 14 #define INV_XYZ_ACCEL (0x08)
oprospero 0:4dd021344a6b 15 #define INV_XYZ_COMPASS (0x01)
oprospero 0:4dd021344a6b 16
oprospero 0:4dd021344a6b 17 #define MPU_INT_STATUS_DATA_READY (0x0001)
oprospero 0:4dd021344a6b 18 #define MPU_INT_STATUS_DMP (0x0002)
oprospero 0:4dd021344a6b 19 #define MPU_INT_STATUS_PLL_READY (0x0004)
oprospero 0:4dd021344a6b 20 #define MPU_INT_STATUS_I2C_MST (0x0008)
oprospero 0:4dd021344a6b 21 #define MPU_INT_STATUS_FIFO_OVERFLOW (0x0010)
oprospero 0:4dd021344a6b 22 #define MPU_INT_STATUS_ZMOT (0x0020)
oprospero 0:4dd021344a6b 23 #define MPU_INT_STATUS_MOT (0x0040)
oprospero 0:4dd021344a6b 24 #define MPU_INT_STATUS_FREE_FALL (0x0080)
oprospero 0:4dd021344a6b 25 #define MPU_INT_STATUS_DMP_0 (0x0100)
oprospero 0:4dd021344a6b 26 #define MPU_INT_STATUS_DMP_1 (0x0200)
oprospero 0:4dd021344a6b 27 #define MPU_INT_STATUS_DMP_2 (0x0400)
oprospero 0:4dd021344a6b 28 #define MPU_INT_STATUS_DMP_3 (0x0800)
oprospero 0:4dd021344a6b 29 #define MPU_INT_STATUS_DMP_4 (0x1000)
oprospero 0:4dd021344a6b 30 #define MPU_INT_STATUS_DMP_5 (0x2000)
oprospero 0:4dd021344a6b 31
oprospero 0:4dd021344a6b 32 #define MPU6050_WHO_AM_I_BIT 6
oprospero 0:4dd021344a6b 33 #define MPU6050_WHO_AM_I_LENGTH 6
oprospero 0:4dd021344a6b 34 #define MPU6050_RA_WHO_AM_I 0x75
oprospero 0:4dd021344a6b 35
oprospero 0:4dd021344a6b 36 class InvMpu
oprospero 0:4dd021344a6b 37 {
oprospero 0:4dd021344a6b 38 private:
oprospero 0:4dd021344a6b 39 I2Cdev i2Cdev;
oprospero 0:4dd021344a6b 40
oprospero 0:4dd021344a6b 41 public:
oprospero 0:4dd021344a6b 42 InvMpu();
oprospero 0:4dd021344a6b 43 int getDeviceID();
oprospero 0:4dd021344a6b 44 bool testConnection();
oprospero 0:4dd021344a6b 45
oprospero 3:8ac73f9099ab 46 int mpu_reset(void);
oprospero 0:4dd021344a6b 47 // static
oprospero 0:4dd021344a6b 48 int set_int_enable(unsigned char enable);
oprospero 0:4dd021344a6b 49 int get_accel_prod_shift(float *st_shift);
oprospero 0:4dd021344a6b 50 int accel_self_test(long *bias_regular, long *bias_st);
oprospero 0:4dd021344a6b 51 int gyro_self_test(long *bias_regular, long *bias_st);
oprospero 0:4dd021344a6b 52 int compass_self_test(void);
oprospero 0:4dd021344a6b 53 int get_st_biases(long *gyro, long *accel, unsigned char hw_test);
oprospero 0:4dd021344a6b 54 int setup_compass(void);
oprospero 0:4dd021344a6b 55
oprospero 0:4dd021344a6b 56 /* Set up APIs */
oprospero 0:4dd021344a6b 57 int mpu_init(void);
oprospero 0:4dd021344a6b 58 int mpu_init_slave(void);
oprospero 0:4dd021344a6b 59 int mpu_set_bypass(unsigned char bypass_on);
oprospero 0:4dd021344a6b 60
oprospero 0:4dd021344a6b 61 /* Configuration APIs */
oprospero 0:4dd021344a6b 62 int mpu_lp_accel_mode(unsigned char rate);
oprospero 0:4dd021344a6b 63 int mpu_lp_motion_interrupt(unsigned short thresh, unsigned char time,
oprospero 0:4dd021344a6b 64 unsigned char lpa_freq);
oprospero 0:4dd021344a6b 65 int mpu_set_int_level(unsigned char active_low);
oprospero 0:4dd021344a6b 66 int mpu_set_int_latched(unsigned char enable);
oprospero 0:4dd021344a6b 67
oprospero 0:4dd021344a6b 68 int mpu_set_dmp_state(unsigned char enable);
oprospero 0:4dd021344a6b 69 int mpu_get_dmp_state(unsigned char *enabled);
oprospero 0:4dd021344a6b 70
oprospero 0:4dd021344a6b 71 int mpu_get_lpf(unsigned short *lpf);
oprospero 0:4dd021344a6b 72 int mpu_set_lpf(unsigned short lpf);
oprospero 0:4dd021344a6b 73
oprospero 0:4dd021344a6b 74 int mpu_get_gyro_fsr(unsigned short *fsr);
oprospero 0:4dd021344a6b 75 int mpu_set_gyro_fsr(unsigned short fsr);
oprospero 0:4dd021344a6b 76
oprospero 0:4dd021344a6b 77 int mpu_get_accel_fsr(unsigned char *fsr);
oprospero 0:4dd021344a6b 78 int mpu_set_accel_fsr(unsigned char fsr);
oprospero 0:4dd021344a6b 79
oprospero 0:4dd021344a6b 80 int mpu_get_compass_fsr(unsigned short *fsr);
oprospero 0:4dd021344a6b 81
oprospero 0:4dd021344a6b 82 int mpu_get_gyro_sens(float *sens);
oprospero 0:4dd021344a6b 83 int mpu_get_accel_sens(unsigned short *sens);
oprospero 0:4dd021344a6b 84
oprospero 0:4dd021344a6b 85 int mpu_get_sample_rate(unsigned short *rate);
oprospero 0:4dd021344a6b 86 int mpu_set_sample_rate(unsigned short rate);
oprospero 0:4dd021344a6b 87 int mpu_get_compass_sample_rate(unsigned short *rate);
oprospero 0:4dd021344a6b 88 int mpu_set_compass_sample_rate(unsigned short rate);
oprospero 0:4dd021344a6b 89
oprospero 0:4dd021344a6b 90 int mpu_get_fifo_config(unsigned char *sensors);
oprospero 0:4dd021344a6b 91 int mpu_configure_fifo(unsigned char sensors);
oprospero 0:4dd021344a6b 92
oprospero 0:4dd021344a6b 93 int mpu_get_power_state(unsigned char *power_on);
oprospero 0:4dd021344a6b 94 int mpu_set_sensors(unsigned char sensors);
oprospero 0:4dd021344a6b 95
oprospero 0:4dd021344a6b 96 int mpu_read_6500_accel_bias(long *accel_bias);
oprospero 0:4dd021344a6b 97 int mpu_read_6500_gyro_bias(long *gyro_bias);
oprospero 0:4dd021344a6b 98 int mpu_set_gyro_bias_reg(long * gyro_bias);
oprospero 0:4dd021344a6b 99 int mpu_set_accel_bias_6500_reg(const long *accel_bias);
oprospero 0:4dd021344a6b 100 int mpu_read_6050_accel_bias(long *accel_bias);
oprospero 0:4dd021344a6b 101 int mpu_set_accel_bias_6050_reg(const long *accel_bias);
oprospero 0:4dd021344a6b 102
oprospero 0:4dd021344a6b 103 /* Data getter/setter APIs */
oprospero 0:4dd021344a6b 104 int mpu_get_gyro_reg(short *data, unsigned long *timestamp);
oprospero 0:4dd021344a6b 105 int mpu_get_accel_reg(short *data, unsigned long *timestamp);
oprospero 0:4dd021344a6b 106 int mpu_get_compass_reg(short *data, unsigned long *timestamp);
oprospero 0:4dd021344a6b 107 int mpu_get_temperature(long *data, unsigned long *timestamp);
oprospero 0:4dd021344a6b 108
oprospero 0:4dd021344a6b 109 int mpu_get_int_status(short *status);
oprospero 0:4dd021344a6b 110 int mpu_read_fifo(short *gyro, short *accel, unsigned long *timestamp,
oprospero 0:4dd021344a6b 111 unsigned char *sensors, unsigned char *more);
oprospero 0:4dd021344a6b 112 int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
oprospero 0:4dd021344a6b 113 unsigned char *more);
oprospero 0:4dd021344a6b 114 int mpu_reset_fifo(void);
oprospero 0:4dd021344a6b 115
oprospero 0:4dd021344a6b 116 int mpu_write_mem(unsigned short mem_addr, unsigned short length,
oprospero 0:4dd021344a6b 117 unsigned char *data);
oprospero 0:4dd021344a6b 118 int mpu_read_mem(unsigned short mem_addr, unsigned short length,
oprospero 0:4dd021344a6b 119 unsigned char *data);
oprospero 0:4dd021344a6b 120 int mpu_load_firmware(unsigned short length, const unsigned char *firmware,
oprospero 0:4dd021344a6b 121 unsigned short start_addr, unsigned short sample_rate);
oprospero 0:4dd021344a6b 122
oprospero 0:4dd021344a6b 123 int mpu_reg_dump(void);
oprospero 0:4dd021344a6b 124 int mpu_read_reg(unsigned char reg, unsigned char *data);
oprospero 0:4dd021344a6b 125 int mpu_run_self_test(long *gyro, long *accel);
oprospero 0:4dd021344a6b 126 int mpu_run_6500_self_test(long *gyro, long *accel, unsigned char debug);
oprospero 0:4dd021344a6b 127 int mpu_register_tap_cb(void (*func)(unsigned char, unsigned char));
oprospero 0:4dd021344a6b 128
oprospero 0:4dd021344a6b 129 };
oprospero 0:4dd021344a6b 130
oprospero 0:4dd021344a6b 131
oprospero 0:4dd021344a6b 132 #endif /* #ifndef _INV_MPU_H_ */