Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MPU9150 by
MPU9150.h
00001 #ifndef _MPU9150_H_ 00002 #define _MPU9150_H_ 00003 00004 #include "I2Cdev.h" 00005 00006 // supporting link: http://forum.arduino.cc/index.php?&topic=143444.msg1079517#msg1079517 00007 // also: http://forum.arduino.cc/index.php?&topic=141571.msg1062899#msg1062899s 00008 #ifdef __AVR__ 00009 #include <avr/pgmspace.h> 00010 #else 00011 #define PROGMEM /* empty */ 00012 #define pgm_read_byte(x) (*(x)) 00013 #define pgm_read_word(x) (*(x)) 00014 #define pgm_read_float(x) (*(x)) 00015 #define PSTR(STR) STR 00016 #endif 00017 00018 //Magnetometer Registers 00019 #define MPU9150_RA_MAG_ADDRESS 0x0C 00020 #define MPU9150_RA_MAG_XOUT_L 0x03 00021 #define MPU9150_RA_MAG_XOUT_H 0x04 00022 #define MPU9150_RA_MAG_YOUT_L 0x05 00023 #define MPU9150_RA_MAG_YOUT_H 0x06 00024 #define MPU9150_RA_MAG_ZOUT_L 0x07 00025 #define MPU9150_RA_MAG_ZOUT_H 0x08 00026 00027 #define MPU9150_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board 00028 #define MPU9150_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC) 00029 #define MPU9150_DEFAULT_ADDRESS MPU9150_ADDRESS_AD0_LOW 00030 00031 #define MPU9150_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD 00032 #define MPU9150_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD 00033 #define MPU9150_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD 00034 #define MPU9150_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN 00035 #define MPU9150_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN 00036 #define MPU9150_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN 00037 #define MPU9150_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS 00038 #define MPU9150_RA_XA_OFFS_L_TC 0x07 00039 #define MPU9150_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS 00040 #define MPU9150_RA_YA_OFFS_L_TC 0x09 00041 #define MPU9150_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS 00042 #define MPU9150_RA_ZA_OFFS_L_TC 0x0B 00043 #define MPU9150_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR 00044 #define MPU9150_RA_XG_OFFS_USRL 0x14 00045 #define MPU9150_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR 00046 #define MPU9150_RA_YG_OFFS_USRL 0x16 00047 #define MPU9150_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR 00048 #define MPU9150_RA_ZG_OFFS_USRL 0x18 00049 #define MPU9150_RA_SMPLRT_DIV 0x19 00050 #define MPU9150_RA_CONFIG 0x1A 00051 #define MPU9150_RA_GYRO_CONFIG 0x1B 00052 #define MPU9150_RA_ACCEL_CONFIG 0x1C 00053 #define MPU9150_RA_FF_THR 0x1D 00054 #define MPU9150_RA_FF_DUR 0x1E 00055 #define MPU9150_RA_MOT_THR 0x1F 00056 #define MPU9150_RA_MOT_DUR 0x20 00057 #define MPU9150_RA_ZRMOT_THR 0x21 00058 #define MPU9150_RA_ZRMOT_DUR 0x22 00059 #define MPU9150_RA_FIFO_EN 0x23 00060 #define MPU9150_RA_I2C_MST_CTRL 0x24 00061 #define MPU9150_RA_I2C_SLV0_ADDR 0x25 00062 #define MPU9150_RA_I2C_SLV0_REG 0x26 00063 #define MPU9150_RA_I2C_SLV0_CTRL 0x27 00064 #define MPU9150_RA_I2C_SLV1_ADDR 0x28 00065 #define MPU9150_RA_I2C_SLV1_REG 0x29 00066 #define MPU9150_RA_I2C_SLV1_CTRL 0x2A 00067 #define MPU9150_RA_I2C_SLV2_ADDR 0x2B 00068 #define MPU9150_RA_I2C_SLV2_REG 0x2C 00069 #define MPU9150_RA_I2C_SLV2_CTRL 0x2D 00070 #define MPU9150_RA_I2C_SLV3_ADDR 0x2E 00071 #define MPU9150_RA_I2C_SLV3_REG 0x2F 00072 #define MPU9150_RA_I2C_SLV3_CTRL 0x30 00073 #define MPU9150_RA_I2C_SLV4_ADDR 0x31 00074 #define MPU9150_RA_I2C_SLV4_REG 0x32 00075 #define MPU9150_RA_I2C_SLV4_DO 0x33 00076 #define MPU9150_RA_I2C_SLV4_CTRL 0x34 00077 #define MPU9150_RA_I2C_SLV4_DI 0x35 00078 #define MPU9150_RA_I2C_MST_STATUS 0x36 00079 #define MPU9150_RA_INT_PIN_CFG 0x37 00080 #define MPU9150_RA_INT_ENABLE 0x38 00081 #define MPU9150_RA_DMP_INT_STATUS 0x39 00082 #define MPU9150_RA_INT_STATUS 0x3A 00083 #define MPU9150_RA_ACCEL_XOUT_H 0x3B 00084 #define MPU9150_RA_ACCEL_XOUT_L 0x3C 00085 #define MPU9150_RA_ACCEL_YOUT_H 0x3D 00086 #define MPU9150_RA_ACCEL_YOUT_L 0x3E 00087 #define MPU9150_RA_ACCEL_ZOUT_H 0x3F 00088 #define MPU9150_RA_ACCEL_ZOUT_L 0x40 00089 #define MPU9150_RA_TEMP_OUT_H 0x41 00090 #define MPU9150_RA_TEMP_OUT_L 0x42 00091 #define MPU9150_RA_GYRO_XOUT_H 0x43 00092 #define MPU9150_RA_GYRO_XOUT_L 0x44 00093 #define MPU9150_RA_GYRO_YOUT_H 0x45 00094 #define MPU9150_RA_GYRO_YOUT_L 0x46 00095 #define MPU9150_RA_GYRO_ZOUT_H 0x47 00096 #define MPU9150_RA_GYRO_ZOUT_L 0x48 00097 #define MPU9150_RA_EXT_SENS_DATA_00 0x49 00098 #define MPU9150_RA_EXT_SENS_DATA_01 0x4A 00099 #define MPU9150_RA_EXT_SENS_DATA_02 0x4B 00100 #define MPU9150_RA_EXT_SENS_DATA_03 0x4C 00101 #define MPU9150_RA_EXT_SENS_DATA_04 0x4D 00102 #define MPU9150_RA_EXT_SENS_DATA_05 0x4E 00103 #define MPU9150_RA_EXT_SENS_DATA_06 0x4F 00104 #define MPU9150_RA_EXT_SENS_DATA_07 0x50 00105 #define MPU9150_RA_EXT_SENS_DATA_08 0x51 00106 #define MPU9150_RA_EXT_SENS_DATA_09 0x52 00107 #define MPU9150_RA_EXT_SENS_DATA_10 0x53 00108 #define MPU9150_RA_EXT_SENS_DATA_11 0x54 00109 #define MPU9150_RA_EXT_SENS_DATA_12 0x55 00110 #define MPU9150_RA_EXT_SENS_DATA_13 0x56 00111 #define MPU9150_RA_EXT_SENS_DATA_14 0x57 00112 #define MPU9150_RA_EXT_SENS_DATA_15 0x58 00113 #define MPU9150_RA_EXT_SENS_DATA_16 0x59 00114 #define MPU9150_RA_EXT_SENS_DATA_17 0x5A 00115 #define MPU9150_RA_EXT_SENS_DATA_18 0x5B 00116 #define MPU9150_RA_EXT_SENS_DATA_19 0x5C 00117 #define MPU9150_RA_EXT_SENS_DATA_20 0x5D 00118 #define MPU9150_RA_EXT_SENS_DATA_21 0x5E 00119 #define MPU9150_RA_EXT_SENS_DATA_22 0x5F 00120 #define MPU9150_RA_EXT_SENS_DATA_23 0x60 00121 #define MPU9150_RA_MOT_DETECT_STATUS 0x61 00122 #define MPU9150_RA_I2C_SLV0_DO 0x63 00123 #define MPU9150_RA_I2C_SLV1_DO 0x64 00124 #define MPU9150_RA_I2C_SLV2_DO 0x65 00125 #define MPU9150_RA_I2C_SLV3_DO 0x66 00126 #define MPU9150_RA_I2C_MST_DELAY_CTRL 0x67 00127 #define MPU9150_RA_SIGNAL_PATH_RESET 0x68 00128 #define MPU9150_RA_MOT_DETECT_CTRL 0x69 00129 #define MPU9150_RA_USER_CTRL 0x6A 00130 #define MPU9150_RA_PWR_MGMT_1 0x6B 00131 #define MPU9150_RA_PWR_MGMT_2 0x6C 00132 #define MPU9150_RA_BANK_SEL 0x6D 00133 #define MPU9150_RA_MEM_START_ADDR 0x6E 00134 #define MPU9150_RA_MEM_R_W 0x6F 00135 #define MPU9150_RA_DMP_CFG_1 0x70 00136 #define MPU9150_RA_DMP_CFG_2 0x71 00137 #define MPU9150_RA_FIFO_COUNTH 0x72 00138 #define MPU9150_RA_FIFO_COUNTL 0x73 00139 #define MPU9150_RA_FIFO_R_W 0x74 00140 #define MPU9150_RA_WHO_AM_I 0x75 00141 00142 #define MPU9150_TC_PWR_MODE_BIT 7 00143 #define MPU9150_TC_OFFSET_BIT 6 00144 #define MPU9150_TC_OFFSET_LENGTH 6 00145 #define MPU9150_TC_OTP_BNK_VLD_BIT 0 00146 00147 #define MPU9150_VDDIO_LEVEL_VLOGIC 0 00148 #define MPU9150_VDDIO_LEVEL_VDD 1 00149 00150 #define MPU9150_CFG_EXT_SYNC_SET_BIT 5 00151 #define MPU9150_CFG_EXT_SYNC_SET_LENGTH 3 00152 #define MPU9150_CFG_DLPF_CFG_BIT 2 00153 #define MPU9150_CFG_DLPF_CFG_LENGTH 3 00154 00155 #define MPU9150_EXT_SYNC_DISABLED 0x0 00156 #define MPU9150_EXT_SYNC_TEMP_OUT_L 0x1 00157 #define MPU9150_EXT_SYNC_GYRO_XOUT_L 0x2 00158 #define MPU9150_EXT_SYNC_GYRO_YOUT_L 0x3 00159 #define MPU9150_EXT_SYNC_GYRO_ZOUT_L 0x4 00160 #define MPU9150_EXT_SYNC_ACCEL_XOUT_L 0x5 00161 #define MPU9150_EXT_SYNC_ACCEL_YOUT_L 0x6 00162 #define MPU9150_EXT_SYNC_ACCEL_ZOUT_L 0x7 00163 00164 #define MPU9150_DLPF_BW_256 0x00 00165 #define MPU9150_DLPF_BW_188 0x01 00166 #define MPU9150_DLPF_BW_98 0x02 00167 #define MPU9150_DLPF_BW_42 0x03 00168 #define MPU9150_DLPF_BW_20 0x04 00169 #define MPU9150_DLPF_BW_10 0x05 00170 #define MPU9150_DLPF_BW_5 0x06 00171 00172 #define MPU9150_GCONFIG_FS_SEL_BIT 4 00173 #define MPU9150_GCONFIG_FS_SEL_LENGTH 2 00174 00175 #define MPU9150_GYRO_FS_250 0x00 00176 #define MPU9150_GYRO_FS_500 0x01 00177 #define MPU9150_GYRO_FS_1000 0x02 00178 #define MPU9150_GYRO_FS_2000 0x03 00179 00180 #define MPU9150_ACONFIG_XA_ST_BIT 7 00181 #define MPU9150_ACONFIG_YA_ST_BIT 6 00182 #define MPU9150_ACONFIG_ZA_ST_BIT 5 00183 #define MPU9150_ACONFIG_AFS_SEL_BIT 4 00184 #define MPU9150_ACONFIG_AFS_SEL_LENGTH 2 00185 #define MPU9150_ACONFIG_ACCEL_HPF_BIT 2 00186 #define MPU9150_ACONFIG_ACCEL_HPF_LENGTH 3 00187 00188 #define MPU9150_ACCEL_FS_2 0x00 00189 #define MPU9150_ACCEL_FS_4 0x01 00190 #define MPU9150_ACCEL_FS_8 0x02 00191 #define MPU9150_ACCEL_FS_16 0x03 00192 00193 #define MPU9150_DHPF_RESET 0x00 00194 #define MPU9150_DHPF_5 0x01 00195 #define MPU9150_DHPF_2P5 0x02 00196 #define MPU9150_DHPF_1P25 0x03 00197 #define MPU9150_DHPF_0P63 0x04 00198 #define MPU9150_DHPF_HOLD 0x07 00199 00200 #define MPU9150_TEMP_FIFO_EN_BIT 7 00201 #define MPU9150_XG_FIFO_EN_BIT 6 00202 #define MPU9150_YG_FIFO_EN_BIT 5 00203 #define MPU9150_ZG_FIFO_EN_BIT 4 00204 #define MPU9150_ACCEL_FIFO_EN_BIT 3 00205 #define MPU9150_SLV2_FIFO_EN_BIT 2 00206 #define MPU9150_SLV1_FIFO_EN_BIT 1 00207 #define MPU9150_SLV0_FIFO_EN_BIT 0 00208 00209 #define MPU9150_MULT_MST_EN_BIT 7 00210 #define MPU9150_WAIT_FOR_ES_BIT 6 00211 #define MPU9150_SLV_3_FIFO_EN_BIT 5 00212 #define MPU9150_I2C_MST_P_NSR_BIT 4 00213 #define MPU9150_I2C_MST_CLK_BIT 3 00214 #define MPU9150_I2C_MST_CLK_LENGTH 4 00215 00216 #define MPU9150_CLOCK_DIV_348 0x0 00217 #define MPU9150_CLOCK_DIV_333 0x1 00218 #define MPU9150_CLOCK_DIV_320 0x2 00219 #define MPU9150_CLOCK_DIV_308 0x3 00220 #define MPU9150_CLOCK_DIV_296 0x4 00221 #define MPU9150_CLOCK_DIV_286 0x5 00222 #define MPU9150_CLOCK_DIV_276 0x6 00223 #define MPU9150_CLOCK_DIV_267 0x7 00224 #define MPU9150_CLOCK_DIV_258 0x8 00225 #define MPU9150_CLOCK_DIV_500 0x9 00226 #define MPU9150_CLOCK_DIV_471 0xA 00227 #define MPU9150_CLOCK_DIV_444 0xB 00228 #define MPU9150_CLOCK_DIV_421 0xC 00229 #define MPU9150_CLOCK_DIV_400 0xD 00230 #define MPU9150_CLOCK_DIV_381 0xE 00231 #define MPU9150_CLOCK_DIV_364 0xF 00232 00233 #define MPU9150_I2C_SLV_RW_BIT 7 00234 #define MPU9150_I2C_SLV_ADDR_BIT 6 00235 #define MPU9150_I2C_SLV_ADDR_LENGTH 7 00236 #define MPU9150_I2C_SLV_EN_BIT 7 00237 #define MPU9150_I2C_SLV_BYTE_SW_BIT 6 00238 #define MPU9150_I2C_SLV_REG_DIS_BIT 5 00239 #define MPU9150_I2C_SLV_GRP_BIT 4 00240 #define MPU9150_I2C_SLV_LEN_BIT 3 00241 #define MPU9150_I2C_SLV_LEN_LENGTH 4 00242 00243 #define MPU9150_I2C_SLV4_RW_BIT 7 00244 #define MPU9150_I2C_SLV4_ADDR_BIT 6 00245 #define MPU9150_I2C_SLV4_ADDR_LENGTH 7 00246 #define MPU9150_I2C_SLV4_EN_BIT 7 00247 #define MPU9150_I2C_SLV4_INT_EN_BIT 6 00248 #define MPU9150_I2C_SLV4_REG_DIS_BIT 5 00249 #define MPU9150_I2C_SLV4_MST_DLY_BIT 4 00250 #define MPU9150_I2C_SLV4_MST_DLY_LENGTH 5 00251 00252 #define MPU9150_MST_PASS_THROUGH_BIT 7 00253 #define MPU9150_MST_I2C_SLV4_DONE_BIT 6 00254 #define MPU9150_MST_I2C_LOST_ARB_BIT 5 00255 #define MPU9150_MST_I2C_SLV4_NACK_BIT 4 00256 #define MPU9150_MST_I2C_SLV3_NACK_BIT 3 00257 #define MPU9150_MST_I2C_SLV2_NACK_BIT 2 00258 #define MPU9150_MST_I2C_SLV1_NACK_BIT 1 00259 #define MPU9150_MST_I2C_SLV0_NACK_BIT 0 00260 00261 #define MPU9150_INTCFG_INT_LEVEL_BIT 7 00262 #define MPU9150_INTCFG_INT_OPEN_BIT 6 00263 #define MPU9150_INTCFG_LATCH_INT_EN_BIT 5 00264 #define MPU9150_INTCFG_INT_RD_CLEAR_BIT 4 00265 #define MPU9150_INTCFG_FSYNC_INT_LEVEL_BIT 3 00266 #define MPU9150_INTCFG_FSYNC_INT_EN_BIT 2 00267 #define MPU9150_INTCFG_I2C_BYPASS_EN_BIT 1 00268 #define MPU9150_INTCFG_CLKOUT_EN_BIT 0 00269 00270 #define MPU9150_INTMODE_ACTIVEHIGH 0x00 00271 #define MPU9150_INTMODE_ACTIVELOW 0x01 00272 00273 #define MPU9150_INTDRV_PUSHPULL 0x00 00274 #define MPU9150_INTDRV_OPENDRAIN 0x01 00275 00276 #define MPU9150_INTLATCH_50USPULSE 0x00 00277 #define MPU9150_INTLATCH_WAITCLEAR 0x01 00278 00279 #define MPU9150_INTCLEAR_STATUSREAD 0x00 00280 #define MPU9150_INTCLEAR_ANYREAD 0x01 00281 00282 #define MPU9150_INTERRUPT_FF_BIT 7 00283 #define MPU9150_INTERRUPT_MOT_BIT 6 00284 #define MPU9150_INTERRUPT_ZMOT_BIT 5 00285 #define MPU9150_INTERRUPT_FIFO_OFLOW_BIT 4 00286 #define MPU9150_INTERRUPT_I2C_MST_INT_BIT 3 00287 #define MPU9150_INTERRUPT_PLL_RDY_INT_BIT 2 00288 #define MPU9150_INTERRUPT_DMP_INT_BIT 1 00289 #define MPU9150_INTERRUPT_DATA_RDY_BIT 0 00290 00291 // TODO: figure out what these actually do 00292 // UMPL source code is not very obivous 00293 #define MPU9150_DMPINT_5_BIT 5 00294 #define MPU9150_DMPINT_4_BIT 4 00295 #define MPU9150_DMPINT_3_BIT 3 00296 #define MPU9150_DMPINT_2_BIT 2 00297 #define MPU9150_DMPINT_1_BIT 1 00298 #define MPU9150_DMPINT_0_BIT 0 00299 00300 #define MPU9150_MOTION_MOT_XNEG_BIT 7 00301 #define MPU9150_MOTION_MOT_XPOS_BIT 6 00302 #define MPU9150_MOTION_MOT_YNEG_BIT 5 00303 #define MPU9150_MOTION_MOT_YPOS_BIT 4 00304 #define MPU9150_MOTION_MOT_ZNEG_BIT 3 00305 #define MPU9150_MOTION_MOT_ZPOS_BIT 2 00306 #define MPU9150_MOTION_MOT_ZRMOT_BIT 0 00307 00308 #define MPU9150_DELAYCTRL_DELAY_ES_SHADOW_BIT 7 00309 #define MPU9150_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4 00310 #define MPU9150_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3 00311 #define MPU9150_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2 00312 #define MPU9150_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1 00313 #define MPU9150_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0 00314 00315 #define MPU9150_PATHRESET_GYRO_RESET_BIT 2 00316 #define MPU9150_PATHRESET_ACCEL_RESET_BIT 1 00317 #define MPU9150_PATHRESET_TEMP_RESET_BIT 0 00318 00319 #define MPU9150_DETECT_ACCEL_ON_DELAY_BIT 5 00320 #define MPU9150_DETECT_ACCEL_ON_DELAY_LENGTH 2 00321 #define MPU9150_DETECT_FF_COUNT_BIT 3 00322 #define MPU9150_DETECT_FF_COUNT_LENGTH 2 00323 #define MPU9150_DETECT_MOT_COUNT_BIT 1 00324 #define MPU9150_DETECT_MOT_COUNT_LENGTH 2 00325 00326 #define MPU9150_DETECT_DECREMENT_RESET 0x0 00327 #define MPU9150_DETECT_DECREMENT_1 0x1 00328 #define MPU9150_DETECT_DECREMENT_2 0x2 00329 #define MPU9150_DETECT_DECREMENT_4 0x3 00330 00331 #define MPU9150_USERCTRL_DMP_EN_BIT 7 00332 #define MPU9150_USERCTRL_FIFO_EN_BIT 6 00333 #define MPU9150_USERCTRL_I2C_MST_EN_BIT 5 00334 #define MPU9150_USERCTRL_I2C_IF_DIS_BIT 4 00335 #define MPU9150_USERCTRL_DMP_RESET_BIT 3 00336 #define MPU9150_USERCTRL_FIFO_RESET_BIT 2 00337 #define MPU9150_USERCTRL_I2C_MST_RESET_BIT 1 00338 #define MPU9150_USERCTRL_SIG_COND_RESET_BIT 0 00339 00340 #define MPU9150_PWR1_DEVICE_RESET_BIT 7 00341 #define MPU9150_PWR1_SLEEP_BIT 6 00342 #define MPU9150_PWR1_CYCLE_BIT 5 00343 #define MPU9150_PWR1_TEMP_DIS_BIT 3 00344 #define MPU9150_PWR1_CLKSEL_BIT 2 00345 #define MPU9150_PWR1_CLKSEL_LENGTH 3 00346 00347 #define MPU9150_CLOCK_INTERNAL 0x00 00348 #define MPU9150_CLOCK_PLL_XGYRO 0x01 00349 #define MPU9150_CLOCK_PLL_YGYRO 0x02 00350 #define MPU9150_CLOCK_PLL_ZGYRO 0x03 00351 #define MPU9150_CLOCK_PLL_EXT32K 0x04 00352 #define MPU9150_CLOCK_PLL_EXT19M 0x05 00353 #define MPU9150_CLOCK_KEEP_RESET 0x07 00354 00355 #define MPU9150_PWR2_LP_WAKE_CTRL_BIT 7 00356 #define MPU9150_PWR2_LP_WAKE_CTRL_LENGTH 2 00357 #define MPU9150_PWR2_STBY_XA_BIT 5 00358 #define MPU9150_PWR2_STBY_YA_BIT 4 00359 #define MPU9150_PWR2_STBY_ZA_BIT 3 00360 #define MPU9150_PWR2_STBY_XG_BIT 2 00361 #define MPU9150_PWR2_STBY_YG_BIT 1 00362 #define MPU9150_PWR2_STBY_ZG_BIT 0 00363 00364 #define MPU9150_WAKE_FREQ_1P25 0x0 00365 #define MPU9150_WAKE_FREQ_2P5 0x1 00366 #define MPU9150_WAKE_FREQ_5 0x2 00367 #define MPU9150_WAKE_FREQ_10 0x3 00368 00369 #define MPU9150_BANKSEL_PRFTCH_EN_BIT 6 00370 #define MPU9150_BANKSEL_CFG_USER_BANK_BIT 5 00371 #define MPU9150_BANKSEL_MEM_SEL_BIT 4 00372 #define MPU9150_BANKSEL_MEM_SEL_LENGTH 5 00373 00374 #define MPU9150_WHO_AM_I_BIT 6 00375 #define MPU9150_WHO_AM_I_LENGTH 6 00376 00377 #define MPU9150_DMP_MEMORY_BANKS 8 00378 #define MPU9150_DMP_MEMORY_BANK_SIZE 256 00379 #define MPU9150_DMP_MEMORY_CHUNK_SIZE 16 00380 00381 // note: DMP code memory blocks defined at end of header file 00382 00383 class MPU9150 { 00384 public: 00385 MPU9150(); 00386 MPU9150(uint8_t address); 00387 00388 void initialize(); 00389 bool testConnection(); 00390 00391 // AUX_VDDIO register 00392 uint8_t getAuxVDDIOLevel(); 00393 void setAuxVDDIOLevel(uint8_t level); 00394 00395 // SMPLRT_DIV register 00396 uint8_t getRate(); 00397 void setRate(uint8_t rate); 00398 00399 // CONFIG register 00400 uint8_t getExternalFrameSync(); 00401 void setExternalFrameSync(uint8_t sync); 00402 uint8_t getDLPFMode(); 00403 void setDLPFMode(uint8_t bandwidth); 00404 00405 // GYRO_CONFIG register 00406 uint8_t getFullScaleGyroRange(); 00407 void setFullScaleGyroRange(uint8_t range); 00408 00409 // ACCEL_CONFIG register 00410 bool getAccelXSelfTest(); 00411 void setAccelXSelfTest(bool enabled); 00412 bool getAccelYSelfTest(); 00413 void setAccelYSelfTest(bool enabled); 00414 bool getAccelZSelfTest(); 00415 void setAccelZSelfTest(bool enabled); 00416 uint8_t getFullScaleAccelRange(); 00417 void setFullScaleAccelRange(uint8_t range); 00418 uint8_t getDHPFMode(); 00419 void setDHPFMode(uint8_t mode); 00420 00421 // FF_THR register 00422 uint8_t getFreefallDetectionThreshold(); 00423 void setFreefallDetectionThreshold(uint8_t threshold); 00424 00425 // FF_DUR register 00426 uint8_t getFreefallDetectionDuration(); 00427 void setFreefallDetectionDuration(uint8_t duration); 00428 00429 // MOT_THR register 00430 uint8_t getMotionDetectionThreshold(); 00431 void setMotionDetectionThreshold(uint8_t threshold); 00432 00433 // MOT_DUR register 00434 uint8_t getMotionDetectionDuration(); 00435 void setMotionDetectionDuration(uint8_t duration); 00436 00437 // ZRMOT_THR register 00438 uint8_t getZeroMotionDetectionThreshold(); 00439 void setZeroMotionDetectionThreshold(uint8_t threshold); 00440 00441 // ZRMOT_DUR register 00442 uint8_t getZeroMotionDetectionDuration(); 00443 void setZeroMotionDetectionDuration(uint8_t duration); 00444 00445 // FIFO_EN register 00446 bool getTempFIFOEnabled(); 00447 void setTempFIFOEnabled(bool enabled); 00448 bool getXGyroFIFOEnabled(); 00449 void setXGyroFIFOEnabled(bool enabled); 00450 bool getYGyroFIFOEnabled(); 00451 void setYGyroFIFOEnabled(bool enabled); 00452 bool getZGyroFIFOEnabled(); 00453 void setZGyroFIFOEnabled(bool enabled); 00454 bool getAccelFIFOEnabled(); 00455 void setAccelFIFOEnabled(bool enabled); 00456 bool getSlave2FIFOEnabled(); 00457 void setSlave2FIFOEnabled(bool enabled); 00458 bool getSlave1FIFOEnabled(); 00459 void setSlave1FIFOEnabled(bool enabled); 00460 bool getSlave0FIFOEnabled(); 00461 void setSlave0FIFOEnabled(bool enabled); 00462 00463 // I2C_MST_CTRL register 00464 bool getMultiMasterEnabled(); 00465 void setMultiMasterEnabled(bool enabled); 00466 bool getWaitForExternalSensorEnabled(); 00467 void setWaitForExternalSensorEnabled(bool enabled); 00468 bool getSlave3FIFOEnabled(); 00469 void setSlave3FIFOEnabled(bool enabled); 00470 bool getSlaveReadWriteTransitionEnabled(); 00471 void setSlaveReadWriteTransitionEnabled(bool enabled); 00472 uint8_t getMasterClockSpeed(); 00473 void setMasterClockSpeed(uint8_t speed); 00474 00475 // I2C_SLV* registers (Slave 0-3) 00476 uint8_t getSlaveAddress(uint8_t num); 00477 void setSlaveAddress(uint8_t num, uint8_t address); 00478 uint8_t getSlaveRegister(uint8_t num); 00479 void setSlaveRegister(uint8_t num, uint8_t reg); 00480 bool getSlaveEnabled(uint8_t num); 00481 void setSlaveEnabled(uint8_t num, bool enabled); 00482 bool getSlaveWordByteSwap(uint8_t num); 00483 void setSlaveWordByteSwap(uint8_t num, bool enabled); 00484 bool getSlaveWriteMode(uint8_t num); 00485 void setSlaveWriteMode(uint8_t num, bool mode); 00486 bool getSlaveWordGroupOffset(uint8_t num); 00487 void setSlaveWordGroupOffset(uint8_t num, bool enabled); 00488 uint8_t getSlaveDataLength(uint8_t num); 00489 void setSlaveDataLength(uint8_t num, uint8_t length); 00490 00491 // I2C_SLV* registers (Slave 4) 00492 uint8_t getSlave4Address(); 00493 void setSlave4Address(uint8_t address); 00494 uint8_t getSlave4Register(); 00495 void setSlave4Register(uint8_t reg); 00496 void setSlave4OutputByte(uint8_t data); 00497 bool getSlave4Enabled(); 00498 void setSlave4Enabled(bool enabled); 00499 bool getSlave4InterruptEnabled(); 00500 void setSlave4InterruptEnabled(bool enabled); 00501 bool getSlave4WriteMode(); 00502 void setSlave4WriteMode(bool mode); 00503 uint8_t getSlave4MasterDelay(); 00504 void setSlave4MasterDelay(uint8_t delay); 00505 uint8_t getSlate4InputByte(); 00506 00507 // I2C_MST_STATUS register 00508 bool getPassthroughStatus(); 00509 bool getSlave4IsDone(); 00510 bool getLostArbitration(); 00511 bool getSlave4Nack(); 00512 bool getSlave3Nack(); 00513 bool getSlave2Nack(); 00514 bool getSlave1Nack(); 00515 bool getSlave0Nack(); 00516 00517 // INT_PIN_CFG register 00518 bool getInterruptMode(); 00519 void setInterruptMode(bool mode); 00520 bool getInterruptDrive(); 00521 void setInterruptDrive(bool drive); 00522 bool getInterruptLatch(); 00523 void setInterruptLatch(bool latch); 00524 bool getInterruptLatchClear(); 00525 void setInterruptLatchClear(bool clear); 00526 bool getFSyncInterruptLevel(); 00527 void setFSyncInterruptLevel(bool level); 00528 bool getFSyncInterruptEnabled(); 00529 void setFSyncInterruptEnabled(bool enabled); 00530 bool getI2CBypassEnabled(); 00531 void setI2CBypassEnabled(bool enabled); 00532 bool getClockOutputEnabled(); 00533 void setClockOutputEnabled(bool enabled); 00534 00535 // INT_ENABLE register 00536 uint8_t getIntEnabled(); 00537 void setIntEnabled(uint8_t enabled); 00538 bool getIntFreefallEnabled(); 00539 void setIntFreefallEnabled(bool enabled); 00540 bool getIntMotionEnabled(); 00541 void setIntMotionEnabled(bool enabled); 00542 bool getIntZeroMotionEnabled(); 00543 void setIntZeroMotionEnabled(bool enabled); 00544 bool getIntFIFOBufferOverflowEnabled(); 00545 void setIntFIFOBufferOverflowEnabled(bool enabled); 00546 bool getIntI2CMasterEnabled(); 00547 void setIntI2CMasterEnabled(bool enabled); 00548 bool getIntDataReadyEnabled(); 00549 void setIntDataReadyEnabled(bool enabled); 00550 00551 // INT_STATUS register 00552 uint8_t getIntStatus(); 00553 bool getIntFreefallStatus(); 00554 bool getIntMotionStatus(); 00555 bool getIntZeroMotionStatus(); 00556 bool getIntFIFOBufferOverflowStatus(); 00557 bool getIntI2CMasterStatus(); 00558 bool getIntDataReadyStatus(); 00559 00560 // ACCEL_*OUT_* registers 00561 void getMotion9(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz, int16_t* mx, int16_t* my, int16_t* mz); 00562 void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz); 00563 void getAcceleration(int16_t* x, int16_t* y, int16_t* z); 00564 int16_t getAccelerationX(); 00565 int16_t getAccelerationY(); 00566 int16_t getAccelerationZ(); 00567 00568 // TEMP_OUT_* registers 00569 int16_t getTemperature(); 00570 00571 // GYRO_*OUT_* registers 00572 void getRotation(int16_t* x, int16_t* y, int16_t* z); 00573 int16_t getRotationX(); 00574 int16_t getRotationY(); 00575 int16_t getRotationZ(); 00576 00577 // EXT_SENS_DATA_* registers 00578 uint8_t getExternalSensorByte(int position); 00579 uint16_t getExternalSensorWord(int position); 00580 uint32_t getExternalSensorDWord(int position); 00581 00582 // MOT_DETECT_STATUS register 00583 bool getXNegMotionDetected(); 00584 bool getXPosMotionDetected(); 00585 bool getYNegMotionDetected(); 00586 bool getYPosMotionDetected(); 00587 bool getZNegMotionDetected(); 00588 bool getZPosMotionDetected(); 00589 bool getZeroMotionDetected(); 00590 00591 // I2C_SLV*_DO register 00592 void setSlaveOutputByte(uint8_t num, uint8_t data); 00593 00594 // I2C_MST_DELAY_CTRL register 00595 bool getExternalShadowDelayEnabled(); 00596 void setExternalShadowDelayEnabled(bool enabled); 00597 bool getSlaveDelayEnabled(uint8_t num); 00598 void setSlaveDelayEnabled(uint8_t num, bool enabled); 00599 00600 // SIGNAL_PATH_RESET register 00601 void resetGyroscopePath(); 00602 void resetAccelerometerPath(); 00603 void resetTemperaturePath(); 00604 00605 // MOT_DETECT_CTRL register 00606 uint8_t getAccelerometerPowerOnDelay(); 00607 void setAccelerometerPowerOnDelay(uint8_t delay); 00608 uint8_t getFreefallDetectionCounterDecrement(); 00609 void setFreefallDetectionCounterDecrement(uint8_t decrement); 00610 uint8_t getMotionDetectionCounterDecrement(); 00611 void setMotionDetectionCounterDecrement(uint8_t decrement); 00612 00613 // USER_CTRL register 00614 bool getFIFOEnabled(); 00615 void setFIFOEnabled(bool enabled); 00616 bool getI2CMasterModeEnabled(); 00617 void setI2CMasterModeEnabled(bool enabled); 00618 void switchSPIEnabled(bool enabled); 00619 void resetFIFO(); 00620 void resetI2CMaster(); 00621 void resetSensors(); 00622 00623 // PWR_MGMT_1 register 00624 void reset(); 00625 bool getSleepEnabled(); 00626 void setSleepEnabled(bool enabled); 00627 bool getWakeCycleEnabled(); 00628 void setWakeCycleEnabled(bool enabled); 00629 bool getTempSensorEnabled(); 00630 void setTempSensorEnabled(bool enabled); 00631 uint8_t getClockSource(); 00632 void setClockSource(uint8_t source); 00633 00634 // PWR_MGMT_2 register 00635 uint8_t getWakeFrequency(); 00636 void setWakeFrequency(uint8_t frequency); 00637 bool getStandbyXAccelEnabled(); 00638 void setStandbyXAccelEnabled(bool enabled); 00639 bool getStandbyYAccelEnabled(); 00640 void setStandbyYAccelEnabled(bool enabled); 00641 bool getStandbyZAccelEnabled(); 00642 void setStandbyZAccelEnabled(bool enabled); 00643 bool getStandbyXGyroEnabled(); 00644 void setStandbyXGyroEnabled(bool enabled); 00645 bool getStandbyYGyroEnabled(); 00646 void setStandbyYGyroEnabled(bool enabled); 00647 bool getStandbyZGyroEnabled(); 00648 void setStandbyZGyroEnabled(bool enabled); 00649 00650 // FIFO_COUNT_* registers 00651 uint16_t getFIFOCount(); 00652 00653 // FIFO_R_W register 00654 uint8_t getFIFOByte(); 00655 void setFIFOByte(uint8_t data); 00656 void getFIFOBytes(uint8_t *data, uint8_t length); 00657 00658 // WHO_AM_I register 00659 uint8_t getDeviceID(); 00660 void setDeviceID(uint8_t id); 00661 00662 // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ======== 00663 00664 // XG_OFFS_TC register 00665 uint8_t getOTPBankValid(); 00666 void setOTPBankValid(bool enabled); 00667 int8_t getXGyroOffsetTC(); 00668 void setXGyroOffsetTC(int8_t offset); 00669 00670 // YG_OFFS_TC register 00671 int8_t getYGyroOffsetTC(); 00672 void setYGyroOffsetTC(int8_t offset); 00673 00674 // ZG_OFFS_TC register 00675 int8_t getZGyroOffsetTC(); 00676 void setZGyroOffsetTC(int8_t offset); 00677 00678 // X_FINE_GAIN register 00679 int8_t getXFineGain(); 00680 void setXFineGain(int8_t gain); 00681 00682 // Y_FINE_GAIN register 00683 int8_t getYFineGain(); 00684 void setYFineGain(int8_t gain); 00685 00686 // Z_FINE_GAIN register 00687 int8_t getZFineGain(); 00688 void setZFineGain(int8_t gain); 00689 00690 // XA_OFFS_* registers 00691 int16_t getXAccelOffset(); 00692 void setXAccelOffset(int16_t offset); 00693 00694 // YA_OFFS_* register 00695 int16_t getYAccelOffset(); 00696 void setYAccelOffset(int16_t offset); 00697 00698 // ZA_OFFS_* register 00699 int16_t getZAccelOffset(); 00700 void setZAccelOffset(int16_t offset); 00701 00702 // XG_OFFS_USR* registers 00703 int16_t getXGyroOffset(); 00704 void setXGyroOffset(int16_t offset); 00705 00706 // YG_OFFS_USR* register 00707 int16_t getYGyroOffset(); 00708 void setYGyroOffset(int16_t offset); 00709 00710 // ZG_OFFS_USR* register 00711 int16_t getZGyroOffset(); 00712 void setZGyroOffset(int16_t offset); 00713 00714 // INT_ENABLE register (DMP functions) 00715 bool getIntPLLReadyEnabled(); 00716 void setIntPLLReadyEnabled(bool enabled); 00717 bool getIntDMPEnabled(); 00718 void setIntDMPEnabled(bool enabled); 00719 00720 // DMP_INT_STATUS 00721 bool getDMPInt5Status(); 00722 bool getDMPInt4Status(); 00723 bool getDMPInt3Status(); 00724 bool getDMPInt2Status(); 00725 bool getDMPInt1Status(); 00726 bool getDMPInt0Status(); 00727 00728 // INT_STATUS register (DMP functions) 00729 bool getIntPLLReadyStatus(); 00730 bool getIntDMPStatus(); 00731 00732 // USER_CTRL register (DMP functions) 00733 bool getDMPEnabled(); 00734 void setDMPEnabled(bool enabled); 00735 void resetDMP(); 00736 00737 // BANK_SEL register 00738 void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false); 00739 00740 // MEM_START_ADDR register 00741 void setMemoryStartAddress(uint8_t address); 00742 00743 // MEM_R_W register 00744 uint8_t readMemoryByte(); 00745 void writeMemoryByte(uint8_t data); 00746 void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0); 00747 bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false); 00748 bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true); 00749 00750 bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false); 00751 bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize); 00752 00753 // DMP_CFG_1 register 00754 uint8_t getDMPConfig1(); 00755 void setDMPConfig1(uint8_t config); 00756 00757 // DMP_CFG_2 register 00758 uint8_t getDMPConfig2(); 00759 void setDMPConfig2(uint8_t config); 00760 00761 // special methods for MotionApps 2.0 implementation 00762 #ifdef MPU9150_INCLUDE_DMP_MOTIONAPPS20 00763 uint8_t *dmpPacketBuffer; 00764 uint16_t dmpPacketSize; 00765 00766 uint8_t dmpInitialize(); 00767 bool dmpPacketAvailable(); 00768 00769 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00770 uint8_t dmpGetFIFORate(); 00771 uint8_t dmpGetSampleStepSizeMS(); 00772 uint8_t dmpGetSampleFrequency(); 00773 int32_t dmpDecodeTemperature(int8_t tempReg); 00774 00775 // Register callbacks after a packet of FIFO data is processed 00776 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00777 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00778 uint8_t dmpRunFIFORateProcesses(); 00779 00780 // Setup FIFO for various output 00781 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00782 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00783 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00784 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00785 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00786 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00787 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00788 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00789 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00790 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00791 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00792 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00793 00794 // Get Fixed Point data from FIFO 00795 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00796 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00797 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00798 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00799 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00800 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00801 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00802 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00803 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00804 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00805 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00806 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00807 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00808 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00809 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00810 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00811 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00812 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00813 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00814 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00815 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00816 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00817 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00818 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00819 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00820 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00821 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00822 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00823 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00824 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00825 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00826 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00827 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00828 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00829 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00830 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00831 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00832 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00833 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00834 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00835 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00836 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00837 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00838 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00839 00840 uint8_t dmpGetEuler(float *data, Quaternion *q); 00841 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00842 00843 // Get Floating Point data from FIFO 00844 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00845 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00846 00847 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00848 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00849 00850 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00851 00852 uint8_t dmpInitFIFOParam(); 00853 uint8_t dmpCloseFIFO(); 00854 uint8_t dmpSetGyroDataSource(uint8_t source); 00855 uint8_t dmpDecodeQuantizedAccel(); 00856 uint32_t dmpGetGyroSumOfSquare(); 00857 uint32_t dmpGetAccelSumOfSquare(); 00858 void dmpOverrideQuaternion(long *q); 00859 uint16_t dmpGetFIFOPacketSize(); 00860 #endif 00861 00862 // special methods for MotionApps 4.1 implementation 00863 #ifdef MPU9150_INCLUDE_DMP_MOTIONAPPS41 00864 uint8_t *dmpPacketBuffer; 00865 uint16_t dmpPacketSize; 00866 00867 uint8_t dmpInitialize(); 00868 bool dmpPacketAvailable(); 00869 00870 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00871 uint8_t dmpGetFIFORate(); 00872 uint8_t dmpGetSampleStepSizeMS(); 00873 uint8_t dmpGetSampleFrequency(); 00874 int32_t dmpDecodeTemperature(int8_t tempReg); 00875 00876 // Register callbacks after a packet of FIFO data is processed 00877 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00878 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00879 uint8_t dmpRunFIFORateProcesses(); 00880 00881 // Setup FIFO for various output 00882 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00883 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00884 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00885 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00886 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00887 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00888 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00889 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00890 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00891 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00892 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00893 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00894 00895 // Get Fixed Point data from FIFO 00896 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00897 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00898 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00899 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00900 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00901 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00902 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00903 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00904 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00905 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00906 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00907 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00908 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00909 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00910 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00911 uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0); 00912 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00913 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00914 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00915 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00916 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00917 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00918 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00919 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00920 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00921 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00922 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00923 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00924 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00925 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00926 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00927 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00928 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00929 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00930 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00931 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00932 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00933 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00934 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00935 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00936 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00937 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00938 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00939 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00940 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00941 00942 uint8_t dmpGetEuler(float *data, Quaternion *q); 00943 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00944 00945 // Get Floating Point data from FIFO 00946 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00947 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00948 00949 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00950 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00951 00952 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00953 00954 uint8_t dmpInitFIFOParam(); 00955 uint8_t dmpCloseFIFO(); 00956 uint8_t dmpSetGyroDataSource(uint8_t source); 00957 uint8_t dmpDecodeQuantizedAccel(); 00958 uint32_t dmpGetGyroSumOfSquare(); 00959 uint32_t dmpGetAccelSumOfSquare(); 00960 void dmpOverrideQuaternion(long *q); 00961 uint16_t dmpGetFIFOPacketSize(); 00962 #endif 00963 00964 private: 00965 uint8_t devAddr; 00966 uint8_t buffer[14]; 00967 }; 00968 00969 #endif /* _MPU9150_H_ */
Generated on Sun Aug 28 2022 00:33:45 by
