Motion Processing Library adapted to mbed

Dependents:   openwear-lifelogger-example

Committer:
janekm
Date:
Tue Sep 16 22:42:12 2014 +0000
Revision:
1:6221b0518f94
Parent:
0:61a7cadab29e
I forgot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
janekm 0:61a7cadab29e 1 /*
janekm 0:61a7cadab29e 2 $License:
janekm 0:61a7cadab29e 3 Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
janekm 0:61a7cadab29e 4 See included License.txt for License information.
janekm 0:61a7cadab29e 5 $
janekm 0:61a7cadab29e 6 */
janekm 0:61a7cadab29e 7 /**
janekm 0:61a7cadab29e 8 * @addtogroup DRIVERS Sensor Driver Layer
janekm 0:61a7cadab29e 9 * @brief Hardware drivers to communicate with sensors via I2C.
janekm 0:61a7cadab29e 10 *
janekm 0:61a7cadab29e 11 * @{
janekm 0:61a7cadab29e 12 * @file inv_mpu.h
janekm 0:61a7cadab29e 13 * @brief An I2C-based driver for Invensense gyroscopes.
janekm 0:61a7cadab29e 14 * @details This driver currently works for the following devices:
janekm 0:61a7cadab29e 15 * MPU6050
janekm 0:61a7cadab29e 16 * MPU6500
janekm 0:61a7cadab29e 17 * MPU9150 (or MPU6050 w/ AK8975 on the auxiliary bus)
janekm 0:61a7cadab29e 18 * MPU9250 (or MPU6500 w/ AK8963 on the auxiliary bus)
janekm 0:61a7cadab29e 19 */
janekm 0:61a7cadab29e 20
janekm 0:61a7cadab29e 21 #ifndef _INV_MPU_H_
janekm 0:61a7cadab29e 22 #define _INV_MPU_H_
janekm 0:61a7cadab29e 23
janekm 0:61a7cadab29e 24 #define INV_X_GYRO (0x40)
janekm 0:61a7cadab29e 25 #define INV_Y_GYRO (0x20)
janekm 0:61a7cadab29e 26 #define INV_Z_GYRO (0x10)
janekm 0:61a7cadab29e 27 #define INV_XYZ_GYRO (INV_X_GYRO | INV_Y_GYRO | INV_Z_GYRO)
janekm 0:61a7cadab29e 28 #define INV_XYZ_ACCEL (0x08)
janekm 0:61a7cadab29e 29 #define INV_XYZ_COMPASS (0x01)
janekm 0:61a7cadab29e 30
janekm 0:61a7cadab29e 31
janekm 0:61a7cadab29e 32 struct int_param_s {
janekm 0:61a7cadab29e 33 void (*cb)(void);
janekm 0:61a7cadab29e 34 };
janekm 0:61a7cadab29e 35
janekm 0:61a7cadab29e 36 #define MPU_INT_STATUS_DATA_READY (0x0001)
janekm 0:61a7cadab29e 37 #define MPU_INT_STATUS_DMP (0x0002)
janekm 0:61a7cadab29e 38 #define MPU_INT_STATUS_PLL_READY (0x0004)
janekm 0:61a7cadab29e 39 #define MPU_INT_STATUS_I2C_MST (0x0008)
janekm 0:61a7cadab29e 40 #define MPU_INT_STATUS_FIFO_OVERFLOW (0x0010)
janekm 0:61a7cadab29e 41 #define MPU_INT_STATUS_ZMOT (0x0020)
janekm 0:61a7cadab29e 42 #define MPU_INT_STATUS_MOT (0x0040)
janekm 0:61a7cadab29e 43 #define MPU_INT_STATUS_FREE_FALL (0x0080)
janekm 0:61a7cadab29e 44 #define MPU_INT_STATUS_DMP_0 (0x0100)
janekm 0:61a7cadab29e 45 #define MPU_INT_STATUS_DMP_1 (0x0200)
janekm 0:61a7cadab29e 46 #define MPU_INT_STATUS_DMP_2 (0x0400)
janekm 0:61a7cadab29e 47 #define MPU_INT_STATUS_DMP_3 (0x0800)
janekm 0:61a7cadab29e 48 #define MPU_INT_STATUS_DMP_4 (0x1000)
janekm 0:61a7cadab29e 49 #define MPU_INT_STATUS_DMP_5 (0x2000)
janekm 0:61a7cadab29e 50
janekm 0:61a7cadab29e 51 /* Set up APIs */
janekm 0:61a7cadab29e 52 int mpu_init(struct int_param_s *int_param);
janekm 0:61a7cadab29e 53 int mpu_init_slave(void);
janekm 0:61a7cadab29e 54 int mpu_set_bypass(unsigned char bypass_on);
janekm 0:61a7cadab29e 55
janekm 0:61a7cadab29e 56 /* Configuration APIs */
janekm 0:61a7cadab29e 57 int mpu_lp_accel_mode(unsigned short rate);
janekm 0:61a7cadab29e 58 int mpu_lp_motion_interrupt(unsigned short thresh, unsigned char time,
janekm 0:61a7cadab29e 59 unsigned short lpa_freq);
janekm 0:61a7cadab29e 60 int mpu_set_int_level(unsigned char active_low);
janekm 0:61a7cadab29e 61 int mpu_set_int_latched(unsigned char enable);
janekm 0:61a7cadab29e 62
janekm 0:61a7cadab29e 63 int mpu_set_dmp_state(unsigned char enable);
janekm 0:61a7cadab29e 64 int mpu_get_dmp_state(unsigned char *enabled);
janekm 0:61a7cadab29e 65
janekm 0:61a7cadab29e 66 int mpu_get_lpf(unsigned short *lpf);
janekm 0:61a7cadab29e 67 int mpu_set_lpf(unsigned short lpf);
janekm 0:61a7cadab29e 68
janekm 0:61a7cadab29e 69 int mpu_get_gyro_fsr(unsigned short *fsr);
janekm 0:61a7cadab29e 70 int mpu_set_gyro_fsr(unsigned short fsr);
janekm 0:61a7cadab29e 71
janekm 0:61a7cadab29e 72 int mpu_get_accel_fsr(unsigned char *fsr);
janekm 0:61a7cadab29e 73 int mpu_set_accel_fsr(unsigned char fsr);
janekm 0:61a7cadab29e 74
janekm 0:61a7cadab29e 75 int mpu_get_compass_fsr(unsigned short *fsr);
janekm 0:61a7cadab29e 76
janekm 0:61a7cadab29e 77 int mpu_get_gyro_sens(float *sens);
janekm 0:61a7cadab29e 78 int mpu_get_accel_sens(unsigned short *sens);
janekm 0:61a7cadab29e 79
janekm 0:61a7cadab29e 80 int mpu_get_sample_rate(unsigned short *rate);
janekm 0:61a7cadab29e 81 int mpu_set_sample_rate(unsigned short rate);
janekm 0:61a7cadab29e 82 int mpu_get_compass_sample_rate(unsigned short *rate);
janekm 0:61a7cadab29e 83 int mpu_set_compass_sample_rate(unsigned short rate);
janekm 0:61a7cadab29e 84
janekm 0:61a7cadab29e 85 int mpu_get_fifo_config(unsigned char *sensors);
janekm 0:61a7cadab29e 86 int mpu_configure_fifo(unsigned char sensors);
janekm 0:61a7cadab29e 87
janekm 0:61a7cadab29e 88 int mpu_get_power_state(unsigned char *power_on);
janekm 0:61a7cadab29e 89 int mpu_set_sensors(unsigned char sensors);
janekm 0:61a7cadab29e 90
janekm 0:61a7cadab29e 91 int mpu_read_6500_accel_bias(long *accel_bias);
janekm 0:61a7cadab29e 92 int mpu_set_gyro_bias_reg(long * gyro_bias);
janekm 0:61a7cadab29e 93 int mpu_set_accel_bias_6500_reg(const long *accel_bias);
janekm 0:61a7cadab29e 94 int mpu_read_6050_accel_bias(long *accel_bias);
janekm 0:61a7cadab29e 95 int mpu_set_accel_bias_6050_reg(const long *accel_bias);
janekm 0:61a7cadab29e 96
janekm 0:61a7cadab29e 97 /* Data getter/setter APIs */
janekm 0:61a7cadab29e 98 int mpu_get_gyro_reg(short *data, unsigned long *timestamp);
janekm 0:61a7cadab29e 99 int mpu_get_accel_reg(short *data, unsigned long *timestamp);
janekm 0:61a7cadab29e 100 int mpu_get_compass_reg(short *data, unsigned long *timestamp);
janekm 0:61a7cadab29e 101 int mpu_get_temperature(long *data, unsigned long *timestamp);
janekm 0:61a7cadab29e 102
janekm 0:61a7cadab29e 103 int mpu_get_int_status(short *status);
janekm 0:61a7cadab29e 104 int mpu_read_fifo(short *gyro, short *accel, unsigned long *timestamp,
janekm 0:61a7cadab29e 105 unsigned char *sensors, unsigned char *more);
janekm 0:61a7cadab29e 106 int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
janekm 0:61a7cadab29e 107 unsigned char *more);
janekm 0:61a7cadab29e 108 int mpu_reset_fifo(void);
janekm 0:61a7cadab29e 109
janekm 0:61a7cadab29e 110 int mpu_write_mem(unsigned short mem_addr, unsigned short length,
janekm 0:61a7cadab29e 111 unsigned char *data);
janekm 0:61a7cadab29e 112 int mpu_read_mem(unsigned short mem_addr, unsigned short length,
janekm 0:61a7cadab29e 113 unsigned char *data);
janekm 0:61a7cadab29e 114 int mpu_load_firmware(unsigned short length, const unsigned char *firmware,
janekm 0:61a7cadab29e 115 unsigned short start_addr, unsigned short sample_rate);
janekm 0:61a7cadab29e 116
janekm 0:61a7cadab29e 117 int mpu_reg_dump(void);
janekm 0:61a7cadab29e 118 int mpu_read_reg(unsigned char reg, unsigned char *data);
janekm 0:61a7cadab29e 119 int mpu_run_self_test(long *gyro, long *accel);
janekm 0:61a7cadab29e 120 int mpu_run_6500_self_test(long *gyro, long *accel, unsigned char debug);
janekm 0:61a7cadab29e 121 int mpu_register_tap_cb(void (*func)(unsigned char, unsigned char));
janekm 0:61a7cadab29e 122
janekm 0:61a7cadab29e 123 #endif /* #ifndef _INV_MPU_H_ */
janekm 0:61a7cadab29e 124