虽然移植完毕,但是不work。需要细调……

Dependencies:   mbed

Committer:
lixianyu
Date:
Sat Jun 04 03:16:52 2016 +0000
Revision:
0:a4d8f5b3c546
Pass compile!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:a4d8f5b3c546 1 // I2Cdev library collection - MPU6050 I2C device class
lixianyu 0:a4d8f5b3c546 2 // Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00)
lixianyu 0:a4d8f5b3c546 3 // 10/3/2011 by Jeff Rowberg <jeff@rowberg.net>
lixianyu 0:a4d8f5b3c546 4 // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
lixianyu 0:a4d8f5b3c546 5 //
lixianyu 0:a4d8f5b3c546 6 // Changelog:
lixianyu 0:a4d8f5b3c546 7 // ... - ongoing debug release
lixianyu 0:a4d8f5b3c546 8
lixianyu 0:a4d8f5b3c546 9 // NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE
lixianyu 0:a4d8f5b3c546 10 // DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF
lixianyu 0:a4d8f5b3c546 11 // YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING.
lixianyu 0:a4d8f5b3c546 12
lixianyu 0:a4d8f5b3c546 13 /* ============================================
lixianyu 0:a4d8f5b3c546 14 I2Cdev device library code is placed under the MIT license
lixianyu 0:a4d8f5b3c546 15 Copyright (c) 2012 Jeff Rowberg
lixianyu 0:a4d8f5b3c546 16
lixianyu 0:a4d8f5b3c546 17 Permission is hereby granted, free of charge, to any person obtaining a copy
lixianyu 0:a4d8f5b3c546 18 of this software and associated documentation files (the "Software"), to deal
lixianyu 0:a4d8f5b3c546 19 in the Software without restriction, including without limitation the rights
lixianyu 0:a4d8f5b3c546 20 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
lixianyu 0:a4d8f5b3c546 21 copies of the Software, and to permit persons to whom the Software is
lixianyu 0:a4d8f5b3c546 22 furnished to do so, subject to the following conditions:
lixianyu 0:a4d8f5b3c546 23
lixianyu 0:a4d8f5b3c546 24 The above copyright notice and this permission notice shall be included in
lixianyu 0:a4d8f5b3c546 25 all copies or substantial portions of the Software.
lixianyu 0:a4d8f5b3c546 26
lixianyu 0:a4d8f5b3c546 27 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
lixianyu 0:a4d8f5b3c546 28 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
lixianyu 0:a4d8f5b3c546 29 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
lixianyu 0:a4d8f5b3c546 30 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
lixianyu 0:a4d8f5b3c546 31 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
lixianyu 0:a4d8f5b3c546 32 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
lixianyu 0:a4d8f5b3c546 33 THE SOFTWARE.
lixianyu 0:a4d8f5b3c546 34 ===============================================
lixianyu 0:a4d8f5b3c546 35 */
lixianyu 0:a4d8f5b3c546 36
lixianyu 0:a4d8f5b3c546 37 #ifndef _MPU6050_H_
lixianyu 0:a4d8f5b3c546 38 #define _MPU6050_H_
lixianyu 0:a4d8f5b3c546 39
lixianyu 0:a4d8f5b3c546 40 #include "mbed.h"
lixianyu 0:a4d8f5b3c546 41 #include <math.h>
lixianyu 0:a4d8f5b3c546 42 #include "I2Cdev.h"
lixianyu 0:a4d8f5b3c546 43 //#include <avr/pgmspace.h>
lixianyu 0:a4d8f5b3c546 44
lixianyu 0:a4d8f5b3c546 45
lixianyu 0:a4d8f5b3c546 46
lixianyu 0:a4d8f5b3c546 47 #define MPU6050_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board
lixianyu 0:a4d8f5b3c546 48 #define MPU6050_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC)
lixianyu 0:a4d8f5b3c546 49 #define MPU6050_DEFAULT_ADDRESS MPU6050_ADDRESS_AD0_LOW
lixianyu 0:a4d8f5b3c546 50
lixianyu 0:a4d8f5b3c546 51 #define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
lixianyu 0:a4d8f5b3c546 52 #define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
lixianyu 0:a4d8f5b3c546 53 #define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
lixianyu 0:a4d8f5b3c546 54 #define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN
lixianyu 0:a4d8f5b3c546 55 #define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN
lixianyu 0:a4d8f5b3c546 56 #define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN
lixianyu 0:a4d8f5b3c546 57 #define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS
lixianyu 0:a4d8f5b3c546 58 #define MPU6050_RA_XA_OFFS_L_TC 0x07
lixianyu 0:a4d8f5b3c546 59 #define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS
lixianyu 0:a4d8f5b3c546 60 #define MPU6050_RA_YA_OFFS_L_TC 0x09
lixianyu 0:a4d8f5b3c546 61 #define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS
lixianyu 0:a4d8f5b3c546 62 #define MPU6050_RA_ZA_OFFS_L_TC 0x0B
lixianyu 0:a4d8f5b3c546 63 #define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR
lixianyu 0:a4d8f5b3c546 64 #define MPU6050_RA_XG_OFFS_USRL 0x14
lixianyu 0:a4d8f5b3c546 65 #define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR
lixianyu 0:a4d8f5b3c546 66 #define MPU6050_RA_YG_OFFS_USRL 0x16
lixianyu 0:a4d8f5b3c546 67 #define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR
lixianyu 0:a4d8f5b3c546 68 #define MPU6050_RA_ZG_OFFS_USRL 0x18
lixianyu 0:a4d8f5b3c546 69 #define MPU6050_RA_SMPLRT_DIV 0x19
lixianyu 0:a4d8f5b3c546 70 #define MPU6050_RA_CONFIG 0x1A
lixianyu 0:a4d8f5b3c546 71 #define MPU6050_RA_GYRO_CONFIG 0x1B
lixianyu 0:a4d8f5b3c546 72 #define MPU6050_RA_ACCEL_CONFIG 0x1C
lixianyu 0:a4d8f5b3c546 73 #define MPU6050_RA_FF_THR 0x1D
lixianyu 0:a4d8f5b3c546 74 #define MPU6050_RA_FF_DUR 0x1E
lixianyu 0:a4d8f5b3c546 75 #define MPU6050_RA_MOT_THR 0x1F
lixianyu 0:a4d8f5b3c546 76 #define MPU6050_RA_MOT_DUR 0x20
lixianyu 0:a4d8f5b3c546 77 #define MPU6050_RA_ZRMOT_THR 0x21
lixianyu 0:a4d8f5b3c546 78 #define MPU6050_RA_ZRMOT_DUR 0x22
lixianyu 0:a4d8f5b3c546 79 #define MPU6050_RA_FIFO_EN 0x23
lixianyu 0:a4d8f5b3c546 80 #define MPU6050_RA_I2C_MST_CTRL 0x24
lixianyu 0:a4d8f5b3c546 81 #define MPU6050_RA_I2C_SLV0_ADDR 0x25
lixianyu 0:a4d8f5b3c546 82 #define MPU6050_RA_I2C_SLV0_REG 0x26
lixianyu 0:a4d8f5b3c546 83 #define MPU6050_RA_I2C_SLV0_CTRL 0x27
lixianyu 0:a4d8f5b3c546 84 #define MPU6050_RA_I2C_SLV1_ADDR 0x28
lixianyu 0:a4d8f5b3c546 85 #define MPU6050_RA_I2C_SLV1_REG 0x29
lixianyu 0:a4d8f5b3c546 86 #define MPU6050_RA_I2C_SLV1_CTRL 0x2A
lixianyu 0:a4d8f5b3c546 87 #define MPU6050_RA_I2C_SLV2_ADDR 0x2B
lixianyu 0:a4d8f5b3c546 88 #define MPU6050_RA_I2C_SLV2_REG 0x2C
lixianyu 0:a4d8f5b3c546 89 #define MPU6050_RA_I2C_SLV2_CTRL 0x2D
lixianyu 0:a4d8f5b3c546 90 #define MPU6050_RA_I2C_SLV3_ADDR 0x2E
lixianyu 0:a4d8f5b3c546 91 #define MPU6050_RA_I2C_SLV3_REG 0x2F
lixianyu 0:a4d8f5b3c546 92 #define MPU6050_RA_I2C_SLV3_CTRL 0x30
lixianyu 0:a4d8f5b3c546 93 #define MPU6050_RA_I2C_SLV4_ADDR 0x31
lixianyu 0:a4d8f5b3c546 94 #define MPU6050_RA_I2C_SLV4_REG 0x32
lixianyu 0:a4d8f5b3c546 95 #define MPU6050_RA_I2C_SLV4_DO 0x33
lixianyu 0:a4d8f5b3c546 96 #define MPU6050_RA_I2C_SLV4_CTRL 0x34
lixianyu 0:a4d8f5b3c546 97 #define MPU6050_RA_I2C_SLV4_DI 0x35
lixianyu 0:a4d8f5b3c546 98 #define MPU6050_RA_I2C_MST_STATUS 0x36
lixianyu 0:a4d8f5b3c546 99 #define MPU6050_RA_INT_PIN_CFG 0x37
lixianyu 0:a4d8f5b3c546 100 #define MPU6050_RA_INT_ENABLE 0x38
lixianyu 0:a4d8f5b3c546 101 #define MPU6050_RA_DMP_INT_STATUS 0x39
lixianyu 0:a4d8f5b3c546 102 #define MPU6050_RA_INT_STATUS 0x3A
lixianyu 0:a4d8f5b3c546 103 #define MPU6050_RA_ACCEL_XOUT_H 0x3B
lixianyu 0:a4d8f5b3c546 104 #define MPU6050_RA_ACCEL_XOUT_L 0x3C
lixianyu 0:a4d8f5b3c546 105 #define MPU6050_RA_ACCEL_YOUT_H 0x3D
lixianyu 0:a4d8f5b3c546 106 #define MPU6050_RA_ACCEL_YOUT_L 0x3E
lixianyu 0:a4d8f5b3c546 107 #define MPU6050_RA_ACCEL_ZOUT_H 0x3F
lixianyu 0:a4d8f5b3c546 108 #define MPU6050_RA_ACCEL_ZOUT_L 0x40
lixianyu 0:a4d8f5b3c546 109 #define MPU6050_RA_TEMP_OUT_H 0x41
lixianyu 0:a4d8f5b3c546 110 #define MPU6050_RA_TEMP_OUT_L 0x42
lixianyu 0:a4d8f5b3c546 111 #define MPU6050_RA_GYRO_XOUT_H 0x43
lixianyu 0:a4d8f5b3c546 112 #define MPU6050_RA_GYRO_XOUT_L 0x44
lixianyu 0:a4d8f5b3c546 113 #define MPU6050_RA_GYRO_YOUT_H 0x45
lixianyu 0:a4d8f5b3c546 114 #define MPU6050_RA_GYRO_YOUT_L 0x46
lixianyu 0:a4d8f5b3c546 115 #define MPU6050_RA_GYRO_ZOUT_H 0x47
lixianyu 0:a4d8f5b3c546 116 #define MPU6050_RA_GYRO_ZOUT_L 0x48
lixianyu 0:a4d8f5b3c546 117 #define MPU6050_RA_EXT_SENS_DATA_00 0x49
lixianyu 0:a4d8f5b3c546 118 #define MPU6050_RA_EXT_SENS_DATA_01 0x4A
lixianyu 0:a4d8f5b3c546 119 #define MPU6050_RA_EXT_SENS_DATA_02 0x4B
lixianyu 0:a4d8f5b3c546 120 #define MPU6050_RA_EXT_SENS_DATA_03 0x4C
lixianyu 0:a4d8f5b3c546 121 #define MPU6050_RA_EXT_SENS_DATA_04 0x4D
lixianyu 0:a4d8f5b3c546 122 #define MPU6050_RA_EXT_SENS_DATA_05 0x4E
lixianyu 0:a4d8f5b3c546 123 #define MPU6050_RA_EXT_SENS_DATA_06 0x4F
lixianyu 0:a4d8f5b3c546 124 #define MPU6050_RA_EXT_SENS_DATA_07 0x50
lixianyu 0:a4d8f5b3c546 125 #define MPU6050_RA_EXT_SENS_DATA_08 0x51
lixianyu 0:a4d8f5b3c546 126 #define MPU6050_RA_EXT_SENS_DATA_09 0x52
lixianyu 0:a4d8f5b3c546 127 #define MPU6050_RA_EXT_SENS_DATA_10 0x53
lixianyu 0:a4d8f5b3c546 128 #define MPU6050_RA_EXT_SENS_DATA_11 0x54
lixianyu 0:a4d8f5b3c546 129 #define MPU6050_RA_EXT_SENS_DATA_12 0x55
lixianyu 0:a4d8f5b3c546 130 #define MPU6050_RA_EXT_SENS_DATA_13 0x56
lixianyu 0:a4d8f5b3c546 131 #define MPU6050_RA_EXT_SENS_DATA_14 0x57
lixianyu 0:a4d8f5b3c546 132 #define MPU6050_RA_EXT_SENS_DATA_15 0x58
lixianyu 0:a4d8f5b3c546 133 #define MPU6050_RA_EXT_SENS_DATA_16 0x59
lixianyu 0:a4d8f5b3c546 134 #define MPU6050_RA_EXT_SENS_DATA_17 0x5A
lixianyu 0:a4d8f5b3c546 135 #define MPU6050_RA_EXT_SENS_DATA_18 0x5B
lixianyu 0:a4d8f5b3c546 136 #define MPU6050_RA_EXT_SENS_DATA_19 0x5C
lixianyu 0:a4d8f5b3c546 137 #define MPU6050_RA_EXT_SENS_DATA_20 0x5D
lixianyu 0:a4d8f5b3c546 138 #define MPU6050_RA_EXT_SENS_DATA_21 0x5E
lixianyu 0:a4d8f5b3c546 139 #define MPU6050_RA_EXT_SENS_DATA_22 0x5F
lixianyu 0:a4d8f5b3c546 140 #define MPU6050_RA_EXT_SENS_DATA_23 0x60
lixianyu 0:a4d8f5b3c546 141 #define MPU6050_RA_MOT_DETECT_STATUS 0x61
lixianyu 0:a4d8f5b3c546 142 #define MPU6050_RA_I2C_SLV0_DO 0x63
lixianyu 0:a4d8f5b3c546 143 #define MPU6050_RA_I2C_SLV1_DO 0x64
lixianyu 0:a4d8f5b3c546 144 #define MPU6050_RA_I2C_SLV2_DO 0x65
lixianyu 0:a4d8f5b3c546 145 #define MPU6050_RA_I2C_SLV3_DO 0x66
lixianyu 0:a4d8f5b3c546 146 #define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67
lixianyu 0:a4d8f5b3c546 147 #define MPU6050_RA_SIGNAL_PATH_RESET 0x68
lixianyu 0:a4d8f5b3c546 148 #define MPU6050_RA_MOT_DETECT_CTRL 0x69
lixianyu 0:a4d8f5b3c546 149 #define MPU6050_RA_USER_CTRL 0x6A
lixianyu 0:a4d8f5b3c546 150 #define MPU6050_RA_PWR_MGMT_1 0x6B
lixianyu 0:a4d8f5b3c546 151 #define MPU6050_RA_PWR_MGMT_2 0x6C
lixianyu 0:a4d8f5b3c546 152 #define MPU6050_RA_BANK_SEL 0x6D
lixianyu 0:a4d8f5b3c546 153 #define MPU6050_RA_MEM_START_ADDR 0x6E
lixianyu 0:a4d8f5b3c546 154 #define MPU6050_RA_MEM_R_W 0x6F
lixianyu 0:a4d8f5b3c546 155 #define MPU6050_RA_DMP_CFG_1 0x70
lixianyu 0:a4d8f5b3c546 156 #define MPU6050_RA_DMP_CFG_2 0x71
lixianyu 0:a4d8f5b3c546 157 #define MPU6050_RA_FIFO_COUNTH 0x72
lixianyu 0:a4d8f5b3c546 158 #define MPU6050_RA_FIFO_COUNTL 0x73
lixianyu 0:a4d8f5b3c546 159 #define MPU6050_RA_FIFO_R_W 0x74
lixianyu 0:a4d8f5b3c546 160 #define MPU6050_RA_WHO_AM_I 0x75
lixianyu 0:a4d8f5b3c546 161
lixianyu 0:a4d8f5b3c546 162 #define MPU6050_TC_PWR_MODE_BIT 7
lixianyu 0:a4d8f5b3c546 163 #define MPU6050_TC_OFFSET_BIT 6
lixianyu 0:a4d8f5b3c546 164 #define MPU6050_TC_OFFSET_LENGTH 6
lixianyu 0:a4d8f5b3c546 165 #define MPU6050_TC_OTP_BNK_VLD_BIT 0
lixianyu 0:a4d8f5b3c546 166
lixianyu 0:a4d8f5b3c546 167 #define MPU6050_VDDIO_LEVEL_VLOGIC 0
lixianyu 0:a4d8f5b3c546 168 #define MPU6050_VDDIO_LEVEL_VDD 1
lixianyu 0:a4d8f5b3c546 169
lixianyu 0:a4d8f5b3c546 170 #define MPU6050_CFG_EXT_SYNC_SET_BIT 5
lixianyu 0:a4d8f5b3c546 171 #define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3
lixianyu 0:a4d8f5b3c546 172 #define MPU6050_CFG_DLPF_CFG_BIT 2
lixianyu 0:a4d8f5b3c546 173 #define MPU6050_CFG_DLPF_CFG_LENGTH 3
lixianyu 0:a4d8f5b3c546 174
lixianyu 0:a4d8f5b3c546 175 #define MPU6050_EXT_SYNC_DISABLED 0x0
lixianyu 0:a4d8f5b3c546 176 #define MPU6050_EXT_SYNC_TEMP_OUT_L 0x1
lixianyu 0:a4d8f5b3c546 177 #define MPU6050_EXT_SYNC_GYRO_XOUT_L 0x2
lixianyu 0:a4d8f5b3c546 178 #define MPU6050_EXT_SYNC_GYRO_YOUT_L 0x3
lixianyu 0:a4d8f5b3c546 179 #define MPU6050_EXT_SYNC_GYRO_ZOUT_L 0x4
lixianyu 0:a4d8f5b3c546 180 #define MPU6050_EXT_SYNC_ACCEL_XOUT_L 0x5
lixianyu 0:a4d8f5b3c546 181 #define MPU6050_EXT_SYNC_ACCEL_YOUT_L 0x6
lixianyu 0:a4d8f5b3c546 182 #define MPU6050_EXT_SYNC_ACCEL_ZOUT_L 0x7
lixianyu 0:a4d8f5b3c546 183
lixianyu 0:a4d8f5b3c546 184 #define MPU6050_DLPF_BW_256 0x00
lixianyu 0:a4d8f5b3c546 185 #define MPU6050_DLPF_BW_188 0x01
lixianyu 0:a4d8f5b3c546 186 #define MPU6050_DLPF_BW_98 0x02
lixianyu 0:a4d8f5b3c546 187 #define MPU6050_DLPF_BW_42 0x03
lixianyu 0:a4d8f5b3c546 188 #define MPU6050_DLPF_BW_20 0x04
lixianyu 0:a4d8f5b3c546 189 #define MPU6050_DLPF_BW_10 0x05
lixianyu 0:a4d8f5b3c546 190 #define MPU6050_DLPF_BW_5 0x06
lixianyu 0:a4d8f5b3c546 191
lixianyu 0:a4d8f5b3c546 192 #define MPU6050_GCONFIG_FS_SEL_BIT 4
lixianyu 0:a4d8f5b3c546 193 #define MPU6050_GCONFIG_FS_SEL_LENGTH 2
lixianyu 0:a4d8f5b3c546 194
lixianyu 0:a4d8f5b3c546 195 #define MPU6050_GYRO_FS_250 0x00
lixianyu 0:a4d8f5b3c546 196 #define MPU6050_GYRO_FS_500 0x01
lixianyu 0:a4d8f5b3c546 197 #define MPU6050_GYRO_FS_1000 0x02
lixianyu 0:a4d8f5b3c546 198 #define MPU6050_GYRO_FS_2000 0x03
lixianyu 0:a4d8f5b3c546 199
lixianyu 0:a4d8f5b3c546 200 #define MPU6050_ACONFIG_XA_ST_BIT 7
lixianyu 0:a4d8f5b3c546 201 #define MPU6050_ACONFIG_YA_ST_BIT 6
lixianyu 0:a4d8f5b3c546 202 #define MPU6050_ACONFIG_ZA_ST_BIT 5
lixianyu 0:a4d8f5b3c546 203 #define MPU6050_ACONFIG_AFS_SEL_BIT 4
lixianyu 0:a4d8f5b3c546 204 #define MPU6050_ACONFIG_AFS_SEL_LENGTH 2
lixianyu 0:a4d8f5b3c546 205 #define MPU6050_ACONFIG_ACCEL_HPF_BIT 2
lixianyu 0:a4d8f5b3c546 206 #define MPU6050_ACONFIG_ACCEL_HPF_LENGTH 3
lixianyu 0:a4d8f5b3c546 207
lixianyu 0:a4d8f5b3c546 208 #define MPU6050_ACCEL_FS_2 0x00
lixianyu 0:a4d8f5b3c546 209 #define MPU6050_ACCEL_FS_4 0x01
lixianyu 0:a4d8f5b3c546 210 #define MPU6050_ACCEL_FS_8 0x02
lixianyu 0:a4d8f5b3c546 211 #define MPU6050_ACCEL_FS_16 0x03
lixianyu 0:a4d8f5b3c546 212
lixianyu 0:a4d8f5b3c546 213 #define MPU6050_DHPF_RESET 0x00
lixianyu 0:a4d8f5b3c546 214 #define MPU6050_DHPF_5 0x01
lixianyu 0:a4d8f5b3c546 215 #define MPU6050_DHPF_2P5 0x02
lixianyu 0:a4d8f5b3c546 216 #define MPU6050_DHPF_1P25 0x03
lixianyu 0:a4d8f5b3c546 217 #define MPU6050_DHPF_0P63 0x04
lixianyu 0:a4d8f5b3c546 218 #define MPU6050_DHPF_HOLD 0x07
lixianyu 0:a4d8f5b3c546 219
lixianyu 0:a4d8f5b3c546 220 #define MPU6050_TEMP_FIFO_EN_BIT 7
lixianyu 0:a4d8f5b3c546 221 #define MPU6050_XG_FIFO_EN_BIT 6
lixianyu 0:a4d8f5b3c546 222 #define MPU6050_YG_FIFO_EN_BIT 5
lixianyu 0:a4d8f5b3c546 223 #define MPU6050_ZG_FIFO_EN_BIT 4
lixianyu 0:a4d8f5b3c546 224 #define MPU6050_ACCEL_FIFO_EN_BIT 3
lixianyu 0:a4d8f5b3c546 225 #define MPU6050_SLV2_FIFO_EN_BIT 2
lixianyu 0:a4d8f5b3c546 226 #define MPU6050_SLV1_FIFO_EN_BIT 1
lixianyu 0:a4d8f5b3c546 227 #define MPU6050_SLV0_FIFO_EN_BIT 0
lixianyu 0:a4d8f5b3c546 228
lixianyu 0:a4d8f5b3c546 229 #define MPU6050_MULT_MST_EN_BIT 7
lixianyu 0:a4d8f5b3c546 230 #define MPU6050_WAIT_FOR_ES_BIT 6
lixianyu 0:a4d8f5b3c546 231 #define MPU6050_SLV_3_FIFO_EN_BIT 5
lixianyu 0:a4d8f5b3c546 232 #define MPU6050_I2C_MST_P_NSR_BIT 4
lixianyu 0:a4d8f5b3c546 233 #define MPU6050_I2C_MST_CLK_BIT 3
lixianyu 0:a4d8f5b3c546 234 #define MPU6050_I2C_MST_CLK_LENGTH 4
lixianyu 0:a4d8f5b3c546 235
lixianyu 0:a4d8f5b3c546 236 #define MPU6050_CLOCK_DIV_348 0x0
lixianyu 0:a4d8f5b3c546 237 #define MPU6050_CLOCK_DIV_333 0x1
lixianyu 0:a4d8f5b3c546 238 #define MPU6050_CLOCK_DIV_320 0x2
lixianyu 0:a4d8f5b3c546 239 #define MPU6050_CLOCK_DIV_308 0x3
lixianyu 0:a4d8f5b3c546 240 #define MPU6050_CLOCK_DIV_296 0x4
lixianyu 0:a4d8f5b3c546 241 #define MPU6050_CLOCK_DIV_286 0x5
lixianyu 0:a4d8f5b3c546 242 #define MPU6050_CLOCK_DIV_276 0x6
lixianyu 0:a4d8f5b3c546 243 #define MPU6050_CLOCK_DIV_267 0x7
lixianyu 0:a4d8f5b3c546 244 #define MPU6050_CLOCK_DIV_258 0x8
lixianyu 0:a4d8f5b3c546 245 #define MPU6050_CLOCK_DIV_500 0x9
lixianyu 0:a4d8f5b3c546 246 #define MPU6050_CLOCK_DIV_471 0xA
lixianyu 0:a4d8f5b3c546 247 #define MPU6050_CLOCK_DIV_444 0xB
lixianyu 0:a4d8f5b3c546 248 #define MPU6050_CLOCK_DIV_421 0xC
lixianyu 0:a4d8f5b3c546 249 #define MPU6050_CLOCK_DIV_400 0xD
lixianyu 0:a4d8f5b3c546 250 #define MPU6050_CLOCK_DIV_381 0xE
lixianyu 0:a4d8f5b3c546 251 #define MPU6050_CLOCK_DIV_364 0xF
lixianyu 0:a4d8f5b3c546 252
lixianyu 0:a4d8f5b3c546 253 #define MPU6050_I2C_SLV_RW_BIT 7
lixianyu 0:a4d8f5b3c546 254 #define MPU6050_I2C_SLV_ADDR_BIT 6
lixianyu 0:a4d8f5b3c546 255 #define MPU6050_I2C_SLV_ADDR_LENGTH 7
lixianyu 0:a4d8f5b3c546 256 #define MPU6050_I2C_SLV_EN_BIT 7
lixianyu 0:a4d8f5b3c546 257 #define MPU6050_I2C_SLV_BYTE_SW_BIT 6
lixianyu 0:a4d8f5b3c546 258 #define MPU6050_I2C_SLV_REG_DIS_BIT 5
lixianyu 0:a4d8f5b3c546 259 #define MPU6050_I2C_SLV_GRP_BIT 4
lixianyu 0:a4d8f5b3c546 260 #define MPU6050_I2C_SLV_LEN_BIT 3
lixianyu 0:a4d8f5b3c546 261 #define MPU6050_I2C_SLV_LEN_LENGTH 4
lixianyu 0:a4d8f5b3c546 262
lixianyu 0:a4d8f5b3c546 263 #define MPU6050_I2C_SLV4_RW_BIT 7
lixianyu 0:a4d8f5b3c546 264 #define MPU6050_I2C_SLV4_ADDR_BIT 6
lixianyu 0:a4d8f5b3c546 265 #define MPU6050_I2C_SLV4_ADDR_LENGTH 7
lixianyu 0:a4d8f5b3c546 266 #define MPU6050_I2C_SLV4_EN_BIT 7
lixianyu 0:a4d8f5b3c546 267 #define MPU6050_I2C_SLV4_INT_EN_BIT 6
lixianyu 0:a4d8f5b3c546 268 #define MPU6050_I2C_SLV4_REG_DIS_BIT 5
lixianyu 0:a4d8f5b3c546 269 #define MPU6050_I2C_SLV4_MST_DLY_BIT 4
lixianyu 0:a4d8f5b3c546 270 #define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5
lixianyu 0:a4d8f5b3c546 271
lixianyu 0:a4d8f5b3c546 272 #define MPU6050_MST_PASS_THROUGH_BIT 7
lixianyu 0:a4d8f5b3c546 273 #define MPU6050_MST_I2C_SLV4_DONE_BIT 6
lixianyu 0:a4d8f5b3c546 274 #define MPU6050_MST_I2C_LOST_ARB_BIT 5
lixianyu 0:a4d8f5b3c546 275 #define MPU6050_MST_I2C_SLV4_NACK_BIT 4
lixianyu 0:a4d8f5b3c546 276 #define MPU6050_MST_I2C_SLV3_NACK_BIT 3
lixianyu 0:a4d8f5b3c546 277 #define MPU6050_MST_I2C_SLV2_NACK_BIT 2
lixianyu 0:a4d8f5b3c546 278 #define MPU6050_MST_I2C_SLV1_NACK_BIT 1
lixianyu 0:a4d8f5b3c546 279 #define MPU6050_MST_I2C_SLV0_NACK_BIT 0
lixianyu 0:a4d8f5b3c546 280
lixianyu 0:a4d8f5b3c546 281 #define MPU6050_INTCFG_INT_LEVEL_BIT 7
lixianyu 0:a4d8f5b3c546 282 #define MPU6050_INTCFG_INT_OPEN_BIT 6
lixianyu 0:a4d8f5b3c546 283 #define MPU6050_INTCFG_LATCH_INT_EN_BIT 5
lixianyu 0:a4d8f5b3c546 284 #define MPU6050_INTCFG_INT_RD_CLEAR_BIT 4
lixianyu 0:a4d8f5b3c546 285 #define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT 3
lixianyu 0:a4d8f5b3c546 286 #define MPU6050_INTCFG_FSYNC_INT_EN_BIT 2
lixianyu 0:a4d8f5b3c546 287 #define MPU6050_INTCFG_I2C_BYPASS_EN_BIT 1
lixianyu 0:a4d8f5b3c546 288 #define MPU6050_INTCFG_CLKOUT_EN_BIT 0
lixianyu 0:a4d8f5b3c546 289
lixianyu 0:a4d8f5b3c546 290 #define MPU6050_INTMODE_ACTIVEHIGH 0x00
lixianyu 0:a4d8f5b3c546 291 #define MPU6050_INTMODE_ACTIVELOW 0x01
lixianyu 0:a4d8f5b3c546 292
lixianyu 0:a4d8f5b3c546 293 #define MPU6050_INTDRV_PUSHPULL 0x00
lixianyu 0:a4d8f5b3c546 294 #define MPU6050_INTDRV_OPENDRAIN 0x01
lixianyu 0:a4d8f5b3c546 295
lixianyu 0:a4d8f5b3c546 296 #define MPU6050_INTLATCH_50USPULSE 0x00
lixianyu 0:a4d8f5b3c546 297 #define MPU6050_INTLATCH_WAITCLEAR 0x01
lixianyu 0:a4d8f5b3c546 298
lixianyu 0:a4d8f5b3c546 299 #define MPU6050_INTCLEAR_STATUSREAD 0x00
lixianyu 0:a4d8f5b3c546 300 #define MPU6050_INTCLEAR_ANYREAD 0x01
lixianyu 0:a4d8f5b3c546 301
lixianyu 0:a4d8f5b3c546 302 #define MPU6050_INTERRUPT_FF_BIT 7
lixianyu 0:a4d8f5b3c546 303 #define MPU6050_INTERRUPT_MOT_BIT 6
lixianyu 0:a4d8f5b3c546 304 #define MPU6050_INTERRUPT_ZMOT_BIT 5
lixianyu 0:a4d8f5b3c546 305 #define MPU6050_INTERRUPT_FIFO_OFLOW_BIT 4
lixianyu 0:a4d8f5b3c546 306 #define MPU6050_INTERRUPT_I2C_MST_INT_BIT 3
lixianyu 0:a4d8f5b3c546 307 #define MPU6050_INTERRUPT_PLL_RDY_INT_BIT 2
lixianyu 0:a4d8f5b3c546 308 #define MPU6050_INTERRUPT_DMP_INT_BIT 1
lixianyu 0:a4d8f5b3c546 309 #define MPU6050_INTERRUPT_DATA_RDY_BIT 0
lixianyu 0:a4d8f5b3c546 310
lixianyu 0:a4d8f5b3c546 311 // TODO: figure out what these actually do
lixianyu 0:a4d8f5b3c546 312 // UMPL source code is not very obivous
lixianyu 0:a4d8f5b3c546 313 #define MPU6050_DMPINT_5_BIT 5
lixianyu 0:a4d8f5b3c546 314 #define MPU6050_DMPINT_4_BIT 4
lixianyu 0:a4d8f5b3c546 315 #define MPU6050_DMPINT_3_BIT 3
lixianyu 0:a4d8f5b3c546 316 #define MPU6050_DMPINT_2_BIT 2
lixianyu 0:a4d8f5b3c546 317 #define MPU6050_DMPINT_1_BIT 1
lixianyu 0:a4d8f5b3c546 318 #define MPU6050_DMPINT_0_BIT 0
lixianyu 0:a4d8f5b3c546 319
lixianyu 0:a4d8f5b3c546 320 #define MPU6050_MOTION_MOT_XNEG_BIT 7
lixianyu 0:a4d8f5b3c546 321 #define MPU6050_MOTION_MOT_XPOS_BIT 6
lixianyu 0:a4d8f5b3c546 322 #define MPU6050_MOTION_MOT_YNEG_BIT 5
lixianyu 0:a4d8f5b3c546 323 #define MPU6050_MOTION_MOT_YPOS_BIT 4
lixianyu 0:a4d8f5b3c546 324 #define MPU6050_MOTION_MOT_ZNEG_BIT 3
lixianyu 0:a4d8f5b3c546 325 #define MPU6050_MOTION_MOT_ZPOS_BIT 2
lixianyu 0:a4d8f5b3c546 326 #define MPU6050_MOTION_MOT_ZRMOT_BIT 0
lixianyu 0:a4d8f5b3c546 327
lixianyu 0:a4d8f5b3c546 328 #define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT 7
lixianyu 0:a4d8f5b3c546 329 #define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4
lixianyu 0:a4d8f5b3c546 330 #define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3
lixianyu 0:a4d8f5b3c546 331 #define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2
lixianyu 0:a4d8f5b3c546 332 #define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1
lixianyu 0:a4d8f5b3c546 333 #define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0
lixianyu 0:a4d8f5b3c546 334
lixianyu 0:a4d8f5b3c546 335 #define MPU6050_PATHRESET_GYRO_RESET_BIT 2
lixianyu 0:a4d8f5b3c546 336 #define MPU6050_PATHRESET_ACCEL_RESET_BIT 1
lixianyu 0:a4d8f5b3c546 337 #define MPU6050_PATHRESET_TEMP_RESET_BIT 0
lixianyu 0:a4d8f5b3c546 338
lixianyu 0:a4d8f5b3c546 339 #define MPU6050_DETECT_ACCEL_ON_DELAY_BIT 5
lixianyu 0:a4d8f5b3c546 340 #define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH 2
lixianyu 0:a4d8f5b3c546 341 #define MPU6050_DETECT_FF_COUNT_BIT 3
lixianyu 0:a4d8f5b3c546 342 #define MPU6050_DETECT_FF_COUNT_LENGTH 2
lixianyu 0:a4d8f5b3c546 343 #define MPU6050_DETECT_MOT_COUNT_BIT 1
lixianyu 0:a4d8f5b3c546 344 #define MPU6050_DETECT_MOT_COUNT_LENGTH 2
lixianyu 0:a4d8f5b3c546 345
lixianyu 0:a4d8f5b3c546 346 #define MPU6050_DETECT_DECREMENT_RESET 0x0
lixianyu 0:a4d8f5b3c546 347 #define MPU6050_DETECT_DECREMENT_1 0x1
lixianyu 0:a4d8f5b3c546 348 #define MPU6050_DETECT_DECREMENT_2 0x2
lixianyu 0:a4d8f5b3c546 349 #define MPU6050_DETECT_DECREMENT_4 0x3
lixianyu 0:a4d8f5b3c546 350
lixianyu 0:a4d8f5b3c546 351 #define MPU6050_USERCTRL_DMP_EN_BIT 7
lixianyu 0:a4d8f5b3c546 352 #define MPU6050_USERCTRL_FIFO_EN_BIT 6
lixianyu 0:a4d8f5b3c546 353 #define MPU6050_USERCTRL_I2C_MST_EN_BIT 5
lixianyu 0:a4d8f5b3c546 354 #define MPU6050_USERCTRL_I2C_IF_DIS_BIT 4
lixianyu 0:a4d8f5b3c546 355 #define MPU6050_USERCTRL_DMP_RESET_BIT 3
lixianyu 0:a4d8f5b3c546 356 #define MPU6050_USERCTRL_FIFO_RESET_BIT 2
lixianyu 0:a4d8f5b3c546 357 #define MPU6050_USERCTRL_I2C_MST_RESET_BIT 1
lixianyu 0:a4d8f5b3c546 358 #define MPU6050_USERCTRL_SIG_COND_RESET_BIT 0
lixianyu 0:a4d8f5b3c546 359
lixianyu 0:a4d8f5b3c546 360 #define MPU6050_PWR1_DEVICE_RESET_BIT 7
lixianyu 0:a4d8f5b3c546 361 #define MPU6050_PWR1_SLEEP_BIT 6
lixianyu 0:a4d8f5b3c546 362 #define MPU6050_PWR1_CYCLE_BIT 5
lixianyu 0:a4d8f5b3c546 363 #define MPU6050_PWR1_TEMP_DIS_BIT 3
lixianyu 0:a4d8f5b3c546 364 #define MPU6050_PWR1_CLKSEL_BIT 2
lixianyu 0:a4d8f5b3c546 365 #define MPU6050_PWR1_CLKSEL_LENGTH 3
lixianyu 0:a4d8f5b3c546 366
lixianyu 0:a4d8f5b3c546 367 #define MPU6050_CLOCK_INTERNAL 0x00
lixianyu 0:a4d8f5b3c546 368 #define MPU6050_CLOCK_PLL_XGYRO 0x01
lixianyu 0:a4d8f5b3c546 369 #define MPU6050_CLOCK_PLL_YGYRO 0x02
lixianyu 0:a4d8f5b3c546 370 #define MPU6050_CLOCK_PLL_ZGYRO 0x03
lixianyu 0:a4d8f5b3c546 371 #define MPU6050_CLOCK_PLL_EXT32K 0x04
lixianyu 0:a4d8f5b3c546 372 #define MPU6050_CLOCK_PLL_EXT19M 0x05
lixianyu 0:a4d8f5b3c546 373 #define MPU6050_CLOCK_KEEP_RESET 0x07
lixianyu 0:a4d8f5b3c546 374
lixianyu 0:a4d8f5b3c546 375 #define MPU6050_PWR2_LP_WAKE_CTRL_BIT 7
lixianyu 0:a4d8f5b3c546 376 #define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH 2
lixianyu 0:a4d8f5b3c546 377 #define MPU6050_PWR2_STBY_XA_BIT 5
lixianyu 0:a4d8f5b3c546 378 #define MPU6050_PWR2_STBY_YA_BIT 4
lixianyu 0:a4d8f5b3c546 379 #define MPU6050_PWR2_STBY_ZA_BIT 3
lixianyu 0:a4d8f5b3c546 380 #define MPU6050_PWR2_STBY_XG_BIT 2
lixianyu 0:a4d8f5b3c546 381 #define MPU6050_PWR2_STBY_YG_BIT 1
lixianyu 0:a4d8f5b3c546 382 #define MPU6050_PWR2_STBY_ZG_BIT 0
lixianyu 0:a4d8f5b3c546 383
lixianyu 0:a4d8f5b3c546 384 #define MPU6050_WAKE_FREQ_1P25 0x0
lixianyu 0:a4d8f5b3c546 385 #define MPU6050_WAKE_FREQ_2P5 0x1
lixianyu 0:a4d8f5b3c546 386 #define MPU6050_WAKE_FREQ_5 0x2
lixianyu 0:a4d8f5b3c546 387 #define MPU6050_WAKE_FREQ_10 0x3
lixianyu 0:a4d8f5b3c546 388
lixianyu 0:a4d8f5b3c546 389 #define MPU6050_BANKSEL_PRFTCH_EN_BIT 6
lixianyu 0:a4d8f5b3c546 390 #define MPU6050_BANKSEL_CFG_USER_BANK_BIT 5
lixianyu 0:a4d8f5b3c546 391 #define MPU6050_BANKSEL_MEM_SEL_BIT 4
lixianyu 0:a4d8f5b3c546 392 #define MPU6050_BANKSEL_MEM_SEL_LENGTH 5
lixianyu 0:a4d8f5b3c546 393
lixianyu 0:a4d8f5b3c546 394 #define MPU6050_WHO_AM_I_BIT 6
lixianyu 0:a4d8f5b3c546 395 #define MPU6050_WHO_AM_I_LENGTH 6
lixianyu 0:a4d8f5b3c546 396
lixianyu 0:a4d8f5b3c546 397 #define MPU6050_DMP_MEMORY_BANKS 8
lixianyu 0:a4d8f5b3c546 398 #define MPU6050_DMP_MEMORY_BANK_SIZE 256
lixianyu 0:a4d8f5b3c546 399 #define MPU6050_DMP_MEMORY_CHUNK_SIZE 16
lixianyu 0:a4d8f5b3c546 400
lixianyu 0:a4d8f5b3c546 401 // note: DMP code memory blocks defined at end of header file
lixianyu 0:a4d8f5b3c546 402
lixianyu 0:a4d8f5b3c546 403 class MPU6050 {
lixianyu 0:a4d8f5b3c546 404 public:
lixianyu 0:a4d8f5b3c546 405 MPU6050();
lixianyu 0:a4d8f5b3c546 406 MPU6050(uint8_t address);
lixianyu 0:a4d8f5b3c546 407
lixianyu 0:a4d8f5b3c546 408 void initialize();
lixianyu 0:a4d8f5b3c546 409 bool testConnection();
lixianyu 0:a4d8f5b3c546 410
lixianyu 0:a4d8f5b3c546 411 // AUX_VDDIO register
lixianyu 0:a4d8f5b3c546 412 uint8_t getAuxVDDIOLevel();
lixianyu 0:a4d8f5b3c546 413 void setAuxVDDIOLevel(uint8_t level);
lixianyu 0:a4d8f5b3c546 414
lixianyu 0:a4d8f5b3c546 415 // SMPLRT_DIV register
lixianyu 0:a4d8f5b3c546 416 uint8_t getRate();
lixianyu 0:a4d8f5b3c546 417 void setRate(uint8_t rate);
lixianyu 0:a4d8f5b3c546 418
lixianyu 0:a4d8f5b3c546 419 // CONFIG register
lixianyu 0:a4d8f5b3c546 420 uint8_t getExternalFrameSync();
lixianyu 0:a4d8f5b3c546 421 void setExternalFrameSync(uint8_t sync);
lixianyu 0:a4d8f5b3c546 422 uint8_t getDLPFMode();
lixianyu 0:a4d8f5b3c546 423 void setDLPFMode(uint8_t bandwidth);
lixianyu 0:a4d8f5b3c546 424
lixianyu 0:a4d8f5b3c546 425 // GYRO_CONFIG register
lixianyu 0:a4d8f5b3c546 426 uint8_t getFullScaleGyroRange();
lixianyu 0:a4d8f5b3c546 427 void setFullScaleGyroRange(uint8_t range);
lixianyu 0:a4d8f5b3c546 428
lixianyu 0:a4d8f5b3c546 429 // ACCEL_CONFIG register
lixianyu 0:a4d8f5b3c546 430 bool getAccelXSelfTest();
lixianyu 0:a4d8f5b3c546 431 void setAccelXSelfTest(bool enabled);
lixianyu 0:a4d8f5b3c546 432 bool getAccelYSelfTest();
lixianyu 0:a4d8f5b3c546 433 void setAccelYSelfTest(bool enabled);
lixianyu 0:a4d8f5b3c546 434 bool getAccelZSelfTest();
lixianyu 0:a4d8f5b3c546 435 void setAccelZSelfTest(bool enabled);
lixianyu 0:a4d8f5b3c546 436 uint8_t getFullScaleAccelRange();
lixianyu 0:a4d8f5b3c546 437 void setFullScaleAccelRange(uint8_t range);
lixianyu 0:a4d8f5b3c546 438 uint8_t getDHPFMode();
lixianyu 0:a4d8f5b3c546 439 void setDHPFMode(uint8_t mode);
lixianyu 0:a4d8f5b3c546 440
lixianyu 0:a4d8f5b3c546 441 // FF_THR register
lixianyu 0:a4d8f5b3c546 442 uint8_t getFreefallDetectionThreshold();
lixianyu 0:a4d8f5b3c546 443 void setFreefallDetectionThreshold(uint8_t threshold);
lixianyu 0:a4d8f5b3c546 444
lixianyu 0:a4d8f5b3c546 445 // FF_DUR register
lixianyu 0:a4d8f5b3c546 446 uint8_t getFreefallDetectionDuration();
lixianyu 0:a4d8f5b3c546 447 void setFreefallDetectionDuration(uint8_t duration);
lixianyu 0:a4d8f5b3c546 448
lixianyu 0:a4d8f5b3c546 449 // MOT_THR register
lixianyu 0:a4d8f5b3c546 450 uint8_t getMotionDetectionThreshold();
lixianyu 0:a4d8f5b3c546 451 void setMotionDetectionThreshold(uint8_t threshold);
lixianyu 0:a4d8f5b3c546 452
lixianyu 0:a4d8f5b3c546 453 // MOT_DUR register
lixianyu 0:a4d8f5b3c546 454 uint8_t getMotionDetectionDuration();
lixianyu 0:a4d8f5b3c546 455 void setMotionDetectionDuration(uint8_t duration);
lixianyu 0:a4d8f5b3c546 456
lixianyu 0:a4d8f5b3c546 457 // ZRMOT_THR register
lixianyu 0:a4d8f5b3c546 458 uint8_t getZeroMotionDetectionThreshold();
lixianyu 0:a4d8f5b3c546 459 void setZeroMotionDetectionThreshold(uint8_t threshold);
lixianyu 0:a4d8f5b3c546 460
lixianyu 0:a4d8f5b3c546 461 // ZRMOT_DUR register
lixianyu 0:a4d8f5b3c546 462 uint8_t getZeroMotionDetectionDuration();
lixianyu 0:a4d8f5b3c546 463 void setZeroMotionDetectionDuration(uint8_t duration);
lixianyu 0:a4d8f5b3c546 464
lixianyu 0:a4d8f5b3c546 465 // FIFO_EN register
lixianyu 0:a4d8f5b3c546 466 bool getTempFIFOEnabled();
lixianyu 0:a4d8f5b3c546 467 void setTempFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 468 bool getXGyroFIFOEnabled();
lixianyu 0:a4d8f5b3c546 469 void setXGyroFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 470 bool getYGyroFIFOEnabled();
lixianyu 0:a4d8f5b3c546 471 void setYGyroFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 472 bool getZGyroFIFOEnabled();
lixianyu 0:a4d8f5b3c546 473 void setZGyroFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 474 bool getAccelFIFOEnabled();
lixianyu 0:a4d8f5b3c546 475 void setAccelFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 476 bool getSlave2FIFOEnabled();
lixianyu 0:a4d8f5b3c546 477 void setSlave2FIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 478 bool getSlave1FIFOEnabled();
lixianyu 0:a4d8f5b3c546 479 void setSlave1FIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 480 bool getSlave0FIFOEnabled();
lixianyu 0:a4d8f5b3c546 481 void setSlave0FIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 482
lixianyu 0:a4d8f5b3c546 483 // I2C_MST_CTRL register
lixianyu 0:a4d8f5b3c546 484 bool getMultiMasterEnabled();
lixianyu 0:a4d8f5b3c546 485 void setMultiMasterEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 486 bool getWaitForExternalSensorEnabled();
lixianyu 0:a4d8f5b3c546 487 void setWaitForExternalSensorEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 488 bool getSlave3FIFOEnabled();
lixianyu 0:a4d8f5b3c546 489 void setSlave3FIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 490 bool getSlaveReadWriteTransitionEnabled();
lixianyu 0:a4d8f5b3c546 491 void setSlaveReadWriteTransitionEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 492 uint8_t getMasterClockSpeed();
lixianyu 0:a4d8f5b3c546 493 void setMasterClockSpeed(uint8_t speed);
lixianyu 0:a4d8f5b3c546 494
lixianyu 0:a4d8f5b3c546 495 // I2C_SLV* registers (Slave 0-3)
lixianyu 0:a4d8f5b3c546 496 uint8_t getSlaveAddress(uint8_t num);
lixianyu 0:a4d8f5b3c546 497 void setSlaveAddress(uint8_t num, uint8_t address);
lixianyu 0:a4d8f5b3c546 498 uint8_t getSlaveRegister(uint8_t num);
lixianyu 0:a4d8f5b3c546 499 void setSlaveRegister(uint8_t num, uint8_t reg);
lixianyu 0:a4d8f5b3c546 500 bool getSlaveEnabled(uint8_t num);
lixianyu 0:a4d8f5b3c546 501 void setSlaveEnabled(uint8_t num, bool enabled);
lixianyu 0:a4d8f5b3c546 502 bool getSlaveWordByteSwap(uint8_t num);
lixianyu 0:a4d8f5b3c546 503 void setSlaveWordByteSwap(uint8_t num, bool enabled);
lixianyu 0:a4d8f5b3c546 504 bool getSlaveWriteMode(uint8_t num);
lixianyu 0:a4d8f5b3c546 505 void setSlaveWriteMode(uint8_t num, bool mode);
lixianyu 0:a4d8f5b3c546 506 bool getSlaveWordGroupOffset(uint8_t num);
lixianyu 0:a4d8f5b3c546 507 void setSlaveWordGroupOffset(uint8_t num, bool enabled);
lixianyu 0:a4d8f5b3c546 508 uint8_t getSlaveDataLength(uint8_t num);
lixianyu 0:a4d8f5b3c546 509 void setSlaveDataLength(uint8_t num, uint8_t length);
lixianyu 0:a4d8f5b3c546 510
lixianyu 0:a4d8f5b3c546 511 // I2C_SLV* registers (Slave 4)
lixianyu 0:a4d8f5b3c546 512 uint8_t getSlave4Address();
lixianyu 0:a4d8f5b3c546 513 void setSlave4Address(uint8_t address);
lixianyu 0:a4d8f5b3c546 514 uint8_t getSlave4Register();
lixianyu 0:a4d8f5b3c546 515 void setSlave4Register(uint8_t reg);
lixianyu 0:a4d8f5b3c546 516 void setSlave4OutputByte(uint8_t data);
lixianyu 0:a4d8f5b3c546 517 bool getSlave4Enabled();
lixianyu 0:a4d8f5b3c546 518 void setSlave4Enabled(bool enabled);
lixianyu 0:a4d8f5b3c546 519 bool getSlave4InterruptEnabled();
lixianyu 0:a4d8f5b3c546 520 void setSlave4InterruptEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 521 bool getSlave4WriteMode();
lixianyu 0:a4d8f5b3c546 522 void setSlave4WriteMode(bool mode);
lixianyu 0:a4d8f5b3c546 523 uint8_t getSlave4MasterDelay();
lixianyu 0:a4d8f5b3c546 524 void setSlave4MasterDelay(uint8_t delay);
lixianyu 0:a4d8f5b3c546 525 uint8_t getSlate4InputByte();
lixianyu 0:a4d8f5b3c546 526
lixianyu 0:a4d8f5b3c546 527 // I2C_MST_STATUS register
lixianyu 0:a4d8f5b3c546 528 bool getPassthroughStatus();
lixianyu 0:a4d8f5b3c546 529 bool getSlave4IsDone();
lixianyu 0:a4d8f5b3c546 530 bool getLostArbitration();
lixianyu 0:a4d8f5b3c546 531 bool getSlave4Nack();
lixianyu 0:a4d8f5b3c546 532 bool getSlave3Nack();
lixianyu 0:a4d8f5b3c546 533 bool getSlave2Nack();
lixianyu 0:a4d8f5b3c546 534 bool getSlave1Nack();
lixianyu 0:a4d8f5b3c546 535 bool getSlave0Nack();
lixianyu 0:a4d8f5b3c546 536
lixianyu 0:a4d8f5b3c546 537 // INT_PIN_CFG register
lixianyu 0:a4d8f5b3c546 538 bool getInterruptMode();
lixianyu 0:a4d8f5b3c546 539 void setInterruptMode(bool mode);
lixianyu 0:a4d8f5b3c546 540 bool getInterruptDrive();
lixianyu 0:a4d8f5b3c546 541 void setInterruptDrive(bool drive);
lixianyu 0:a4d8f5b3c546 542 bool getInterruptLatch();
lixianyu 0:a4d8f5b3c546 543 void setInterruptLatch(bool latch);
lixianyu 0:a4d8f5b3c546 544 bool getInterruptLatchClear();
lixianyu 0:a4d8f5b3c546 545 void setInterruptLatchClear(bool clear);
lixianyu 0:a4d8f5b3c546 546 bool getFSyncInterruptLevel();
lixianyu 0:a4d8f5b3c546 547 void setFSyncInterruptLevel(bool level);
lixianyu 0:a4d8f5b3c546 548 bool getFSyncInterruptEnabled();
lixianyu 0:a4d8f5b3c546 549 void setFSyncInterruptEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 550 bool getI2CBypassEnabled();
lixianyu 0:a4d8f5b3c546 551 void setI2CBypassEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 552 bool getClockOutputEnabled();
lixianyu 0:a4d8f5b3c546 553 void setClockOutputEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 554
lixianyu 0:a4d8f5b3c546 555 // INT_ENABLE register
lixianyu 0:a4d8f5b3c546 556 uint8_t getIntEnabled();
lixianyu 0:a4d8f5b3c546 557 void setIntEnabled(uint8_t enabled);
lixianyu 0:a4d8f5b3c546 558 bool getIntFreefallEnabled();
lixianyu 0:a4d8f5b3c546 559 void setIntFreefallEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 560 bool getIntMotionEnabled();
lixianyu 0:a4d8f5b3c546 561 void setIntMotionEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 562 bool getIntZeroMotionEnabled();
lixianyu 0:a4d8f5b3c546 563 void setIntZeroMotionEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 564 bool getIntFIFOBufferOverflowEnabled();
lixianyu 0:a4d8f5b3c546 565 void setIntFIFOBufferOverflowEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 566 bool getIntI2CMasterEnabled();
lixianyu 0:a4d8f5b3c546 567 void setIntI2CMasterEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 568 bool getIntDataReadyEnabled();
lixianyu 0:a4d8f5b3c546 569 void setIntDataReadyEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 570
lixianyu 0:a4d8f5b3c546 571 // INT_STATUS register
lixianyu 0:a4d8f5b3c546 572 uint8_t getIntStatus();
lixianyu 0:a4d8f5b3c546 573 bool getIntFreefallStatus();
lixianyu 0:a4d8f5b3c546 574 bool getIntMotionStatus();
lixianyu 0:a4d8f5b3c546 575 bool getIntZeroMotionStatus();
lixianyu 0:a4d8f5b3c546 576 bool getIntFIFOBufferOverflowStatus();
lixianyu 0:a4d8f5b3c546 577 bool getIntI2CMasterStatus();
lixianyu 0:a4d8f5b3c546 578 bool getIntDataReadyStatus();
lixianyu 0:a4d8f5b3c546 579
lixianyu 0:a4d8f5b3c546 580 // ACCEL_*OUT_* registers
lixianyu 0:a4d8f5b3c546 581 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);
lixianyu 0:a4d8f5b3c546 582 void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz);
lixianyu 0:a4d8f5b3c546 583 void getAcceleration(int16_t* x, int16_t* y, int16_t* z);
lixianyu 0:a4d8f5b3c546 584 int16_t getAccelerationX();
lixianyu 0:a4d8f5b3c546 585 int16_t getAccelerationY();
lixianyu 0:a4d8f5b3c546 586 int16_t getAccelerationZ();
lixianyu 0:a4d8f5b3c546 587
lixianyu 0:a4d8f5b3c546 588 // TEMP_OUT_* registers
lixianyu 0:a4d8f5b3c546 589 int16_t getTemperature();
lixianyu 0:a4d8f5b3c546 590
lixianyu 0:a4d8f5b3c546 591 // GYRO_*OUT_* registers
lixianyu 0:a4d8f5b3c546 592 void getRotation(int16_t* x, int16_t* y, int16_t* z);
lixianyu 0:a4d8f5b3c546 593 int16_t getRotationX();
lixianyu 0:a4d8f5b3c546 594 int16_t getRotationY();
lixianyu 0:a4d8f5b3c546 595 int16_t getRotationZ();
lixianyu 0:a4d8f5b3c546 596
lixianyu 0:a4d8f5b3c546 597 // EXT_SENS_DATA_* registers
lixianyu 0:a4d8f5b3c546 598 uint8_t getExternalSensorByte(int position);
lixianyu 0:a4d8f5b3c546 599 uint16_t getExternalSensorWord(int position);
lixianyu 0:a4d8f5b3c546 600 uint32_t getExternalSensorDWord(int position);
lixianyu 0:a4d8f5b3c546 601
lixianyu 0:a4d8f5b3c546 602 // MOT_DETECT_STATUS register
lixianyu 0:a4d8f5b3c546 603 bool getXNegMotionDetected();
lixianyu 0:a4d8f5b3c546 604 bool getXPosMotionDetected();
lixianyu 0:a4d8f5b3c546 605 bool getYNegMotionDetected();
lixianyu 0:a4d8f5b3c546 606 bool getYPosMotionDetected();
lixianyu 0:a4d8f5b3c546 607 bool getZNegMotionDetected();
lixianyu 0:a4d8f5b3c546 608 bool getZPosMotionDetected();
lixianyu 0:a4d8f5b3c546 609 bool getZeroMotionDetected();
lixianyu 0:a4d8f5b3c546 610
lixianyu 0:a4d8f5b3c546 611 // I2C_SLV*_DO register
lixianyu 0:a4d8f5b3c546 612 void setSlaveOutputByte(uint8_t num, uint8_t data);
lixianyu 0:a4d8f5b3c546 613
lixianyu 0:a4d8f5b3c546 614 // I2C_MST_DELAY_CTRL register
lixianyu 0:a4d8f5b3c546 615 bool getExternalShadowDelayEnabled();
lixianyu 0:a4d8f5b3c546 616 void setExternalShadowDelayEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 617 bool getSlaveDelayEnabled(uint8_t num);
lixianyu 0:a4d8f5b3c546 618 void setSlaveDelayEnabled(uint8_t num, bool enabled);
lixianyu 0:a4d8f5b3c546 619
lixianyu 0:a4d8f5b3c546 620 // SIGNAL_PATH_RESET register
lixianyu 0:a4d8f5b3c546 621 void resetGyroscopePath();
lixianyu 0:a4d8f5b3c546 622 void resetAccelerometerPath();
lixianyu 0:a4d8f5b3c546 623 void resetTemperaturePath();
lixianyu 0:a4d8f5b3c546 624
lixianyu 0:a4d8f5b3c546 625 // MOT_DETECT_CTRL register
lixianyu 0:a4d8f5b3c546 626 uint8_t getAccelerometerPowerOnDelay();
lixianyu 0:a4d8f5b3c546 627 void setAccelerometerPowerOnDelay(uint8_t delay);
lixianyu 0:a4d8f5b3c546 628 uint8_t getFreefallDetectionCounterDecrement();
lixianyu 0:a4d8f5b3c546 629 void setFreefallDetectionCounterDecrement(uint8_t decrement);
lixianyu 0:a4d8f5b3c546 630 uint8_t getMotionDetectionCounterDecrement();
lixianyu 0:a4d8f5b3c546 631 void setMotionDetectionCounterDecrement(uint8_t decrement);
lixianyu 0:a4d8f5b3c546 632
lixianyu 0:a4d8f5b3c546 633 // USER_CTRL register
lixianyu 0:a4d8f5b3c546 634 bool getFIFOEnabled();
lixianyu 0:a4d8f5b3c546 635 void setFIFOEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 636 bool getI2CMasterModeEnabled();
lixianyu 0:a4d8f5b3c546 637 void setI2CMasterModeEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 638 void switchSPIEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 639 void resetFIFO();
lixianyu 0:a4d8f5b3c546 640 void resetI2CMaster();
lixianyu 0:a4d8f5b3c546 641 void resetSensors();
lixianyu 0:a4d8f5b3c546 642
lixianyu 0:a4d8f5b3c546 643 // PWR_MGMT_1 register
lixianyu 0:a4d8f5b3c546 644 void reset();
lixianyu 0:a4d8f5b3c546 645 bool getSleepEnabled();
lixianyu 0:a4d8f5b3c546 646 void setSleepEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 647 bool getWakeCycleEnabled();
lixianyu 0:a4d8f5b3c546 648 void setWakeCycleEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 649 bool getTempSensorEnabled();
lixianyu 0:a4d8f5b3c546 650 void setTempSensorEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 651 uint8_t getClockSource();
lixianyu 0:a4d8f5b3c546 652 void setClockSource(uint8_t source);
lixianyu 0:a4d8f5b3c546 653
lixianyu 0:a4d8f5b3c546 654 // PWR_MGMT_2 register
lixianyu 0:a4d8f5b3c546 655 uint8_t getWakeFrequency();
lixianyu 0:a4d8f5b3c546 656 void setWakeFrequency(uint8_t frequency);
lixianyu 0:a4d8f5b3c546 657 bool getStandbyXAccelEnabled();
lixianyu 0:a4d8f5b3c546 658 void setStandbyXAccelEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 659 bool getStandbyYAccelEnabled();
lixianyu 0:a4d8f5b3c546 660 void setStandbyYAccelEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 661 bool getStandbyZAccelEnabled();
lixianyu 0:a4d8f5b3c546 662 void setStandbyZAccelEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 663 bool getStandbyXGyroEnabled();
lixianyu 0:a4d8f5b3c546 664 void setStandbyXGyroEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 665 bool getStandbyYGyroEnabled();
lixianyu 0:a4d8f5b3c546 666 void setStandbyYGyroEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 667 bool getStandbyZGyroEnabled();
lixianyu 0:a4d8f5b3c546 668 void setStandbyZGyroEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 669
lixianyu 0:a4d8f5b3c546 670 // FIFO_COUNT_* registers
lixianyu 0:a4d8f5b3c546 671 uint16_t getFIFOCount();
lixianyu 0:a4d8f5b3c546 672
lixianyu 0:a4d8f5b3c546 673 // FIFO_R_W register
lixianyu 0:a4d8f5b3c546 674 uint8_t getFIFOByte();
lixianyu 0:a4d8f5b3c546 675 void setFIFOByte(uint8_t data);
lixianyu 0:a4d8f5b3c546 676 void getFIFOBytes(uint8_t *data, uint8_t length);
lixianyu 0:a4d8f5b3c546 677
lixianyu 0:a4d8f5b3c546 678 // WHO_AM_I register
lixianyu 0:a4d8f5b3c546 679 uint8_t getDeviceID();
lixianyu 0:a4d8f5b3c546 680 void setDeviceID(uint8_t id);
lixianyu 0:a4d8f5b3c546 681
lixianyu 0:a4d8f5b3c546 682 // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ========
lixianyu 0:a4d8f5b3c546 683
lixianyu 0:a4d8f5b3c546 684 // XG_OFFS_TC register
lixianyu 0:a4d8f5b3c546 685 uint8_t getOTPBankValid();
lixianyu 0:a4d8f5b3c546 686 void setOTPBankValid(bool enabled);
lixianyu 0:a4d8f5b3c546 687 int8_t getXGyroOffsetTC();
lixianyu 0:a4d8f5b3c546 688 void setXGyroOffsetTC(int8_t offset);
lixianyu 0:a4d8f5b3c546 689
lixianyu 0:a4d8f5b3c546 690 // YG_OFFS_TC register
lixianyu 0:a4d8f5b3c546 691 int8_t getYGyroOffsetTC();
lixianyu 0:a4d8f5b3c546 692 void setYGyroOffsetTC(int8_t offset);
lixianyu 0:a4d8f5b3c546 693
lixianyu 0:a4d8f5b3c546 694 // ZG_OFFS_TC register
lixianyu 0:a4d8f5b3c546 695 int8_t getZGyroOffsetTC();
lixianyu 0:a4d8f5b3c546 696 void setZGyroOffsetTC(int8_t offset);
lixianyu 0:a4d8f5b3c546 697
lixianyu 0:a4d8f5b3c546 698 // X_FINE_GAIN register
lixianyu 0:a4d8f5b3c546 699 int8_t getXFineGain();
lixianyu 0:a4d8f5b3c546 700 void setXFineGain(int8_t gain);
lixianyu 0:a4d8f5b3c546 701
lixianyu 0:a4d8f5b3c546 702 // Y_FINE_GAIN register
lixianyu 0:a4d8f5b3c546 703 int8_t getYFineGain();
lixianyu 0:a4d8f5b3c546 704 void setYFineGain(int8_t gain);
lixianyu 0:a4d8f5b3c546 705
lixianyu 0:a4d8f5b3c546 706 // Z_FINE_GAIN register
lixianyu 0:a4d8f5b3c546 707 int8_t getZFineGain();
lixianyu 0:a4d8f5b3c546 708 void setZFineGain(int8_t gain);
lixianyu 0:a4d8f5b3c546 709
lixianyu 0:a4d8f5b3c546 710 // XA_OFFS_* registers
lixianyu 0:a4d8f5b3c546 711 int16_t getXAccelOffset();
lixianyu 0:a4d8f5b3c546 712 void setXAccelOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 713
lixianyu 0:a4d8f5b3c546 714 // YA_OFFS_* register
lixianyu 0:a4d8f5b3c546 715 int16_t getYAccelOffset();
lixianyu 0:a4d8f5b3c546 716 void setYAccelOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 717
lixianyu 0:a4d8f5b3c546 718 // ZA_OFFS_* register
lixianyu 0:a4d8f5b3c546 719 int16_t getZAccelOffset();
lixianyu 0:a4d8f5b3c546 720 void setZAccelOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 721
lixianyu 0:a4d8f5b3c546 722 // XG_OFFS_USR* registers
lixianyu 0:a4d8f5b3c546 723 int16_t getXGyroOffset();
lixianyu 0:a4d8f5b3c546 724 void setXGyroOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 725
lixianyu 0:a4d8f5b3c546 726 // YG_OFFS_USR* register
lixianyu 0:a4d8f5b3c546 727 int16_t getYGyroOffset();
lixianyu 0:a4d8f5b3c546 728 void setYGyroOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 729
lixianyu 0:a4d8f5b3c546 730 // ZG_OFFS_USR* register
lixianyu 0:a4d8f5b3c546 731 int16_t getZGyroOffset();
lixianyu 0:a4d8f5b3c546 732 void setZGyroOffset(int16_t offset);
lixianyu 0:a4d8f5b3c546 733
lixianyu 0:a4d8f5b3c546 734 // INT_ENABLE register (DMP functions)
lixianyu 0:a4d8f5b3c546 735 bool getIntPLLReadyEnabled();
lixianyu 0:a4d8f5b3c546 736 void setIntPLLReadyEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 737 bool getIntDMPEnabled();
lixianyu 0:a4d8f5b3c546 738 void setIntDMPEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 739
lixianyu 0:a4d8f5b3c546 740 // DMP_INT_STATUS
lixianyu 0:a4d8f5b3c546 741 bool getDMPInt5Status();
lixianyu 0:a4d8f5b3c546 742 bool getDMPInt4Status();
lixianyu 0:a4d8f5b3c546 743 bool getDMPInt3Status();
lixianyu 0:a4d8f5b3c546 744 bool getDMPInt2Status();
lixianyu 0:a4d8f5b3c546 745 bool getDMPInt1Status();
lixianyu 0:a4d8f5b3c546 746 bool getDMPInt0Status();
lixianyu 0:a4d8f5b3c546 747
lixianyu 0:a4d8f5b3c546 748 // INT_STATUS register (DMP functions)
lixianyu 0:a4d8f5b3c546 749 bool getIntPLLReadyStatus();
lixianyu 0:a4d8f5b3c546 750 bool getIntDMPStatus();
lixianyu 0:a4d8f5b3c546 751
lixianyu 0:a4d8f5b3c546 752 // USER_CTRL register (DMP functions)
lixianyu 0:a4d8f5b3c546 753 bool getDMPEnabled();
lixianyu 0:a4d8f5b3c546 754 void setDMPEnabled(bool enabled);
lixianyu 0:a4d8f5b3c546 755 void resetDMP();
lixianyu 0:a4d8f5b3c546 756
lixianyu 0:a4d8f5b3c546 757 // BANK_SEL register
lixianyu 0:a4d8f5b3c546 758 void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false);
lixianyu 0:a4d8f5b3c546 759
lixianyu 0:a4d8f5b3c546 760 // MEM_START_ADDR register
lixianyu 0:a4d8f5b3c546 761 void setMemoryStartAddress(uint8_t address);
lixianyu 0:a4d8f5b3c546 762
lixianyu 0:a4d8f5b3c546 763 // MEM_R_W register
lixianyu 0:a4d8f5b3c546 764 uint8_t readMemoryByte();
lixianyu 0:a4d8f5b3c546 765 void writeMemoryByte(uint8_t data);
lixianyu 0:a4d8f5b3c546 766 void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0);
lixianyu 0:a4d8f5b3c546 767 bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false);
lixianyu 0:a4d8f5b3c546 768 bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true);
lixianyu 0:a4d8f5b3c546 769
lixianyu 0:a4d8f5b3c546 770 bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false);
lixianyu 0:a4d8f5b3c546 771 bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize);
lixianyu 0:a4d8f5b3c546 772
lixianyu 0:a4d8f5b3c546 773 // DMP_CFG_1 register
lixianyu 0:a4d8f5b3c546 774 uint8_t getDMPConfig1();
lixianyu 0:a4d8f5b3c546 775 void setDMPConfig1(uint8_t config);
lixianyu 0:a4d8f5b3c546 776
lixianyu 0:a4d8f5b3c546 777 // DMP_CFG_2 register
lixianyu 0:a4d8f5b3c546 778 uint8_t getDMPConfig2();
lixianyu 0:a4d8f5b3c546 779 void setDMPConfig2(uint8_t config);
lixianyu 0:a4d8f5b3c546 780
lixianyu 0:a4d8f5b3c546 781 // special methods for MotionApps 2.0 implementation
lixianyu 0:a4d8f5b3c546 782 #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20
lixianyu 0:a4d8f5b3c546 783 uint8_t *dmpPacketBuffer;
lixianyu 0:a4d8f5b3c546 784 uint16_t dmpPacketSize;
lixianyu 0:a4d8f5b3c546 785
lixianyu 0:a4d8f5b3c546 786 uint8_t dmpInitialize();
lixianyu 0:a4d8f5b3c546 787 bool dmpPacketAvailable();
lixianyu 0:a4d8f5b3c546 788
lixianyu 0:a4d8f5b3c546 789 uint8_t dmpSetFIFORate(uint8_t fifoRate);
lixianyu 0:a4d8f5b3c546 790 uint8_t dmpGetFIFORate();
lixianyu 0:a4d8f5b3c546 791 uint8_t dmpGetSampleStepSizeMS();
lixianyu 0:a4d8f5b3c546 792 uint8_t dmpGetSampleFrequency();
lixianyu 0:a4d8f5b3c546 793 int32_t dmpDecodeTemperature(int8_t tempReg);
lixianyu 0:a4d8f5b3c546 794
lixianyu 0:a4d8f5b3c546 795 // Register callbacks after a packet of FIFO data is processed
lixianyu 0:a4d8f5b3c546 796 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
lixianyu 0:a4d8f5b3c546 797 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
lixianyu 0:a4d8f5b3c546 798 uint8_t dmpRunFIFORateProcesses();
lixianyu 0:a4d8f5b3c546 799
lixianyu 0:a4d8f5b3c546 800 // Setup FIFO for various output
lixianyu 0:a4d8f5b3c546 801 uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 802 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 803 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 804 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 805 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 806 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 807 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 808 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 809 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 810 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 811 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 812 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 813
lixianyu 0:a4d8f5b3c546 814 // Get Fixed Point data from FIFO
lixianyu 0:a4d8f5b3c546 815 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 816 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 817 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 818 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 819 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 820 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 821 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 822 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 823 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 824 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 825 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 826 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 827 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 828 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 829 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 830 uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
lixianyu 0:a4d8f5b3c546 831 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 832 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 833 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 834 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
lixianyu 0:a4d8f5b3c546 835 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 836 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 837 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 838 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
lixianyu 0:a4d8f5b3c546 839 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 840 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 841 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 842 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 843 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 844 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 845 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 846 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 847 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 848 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 849 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 850 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
lixianyu 0:a4d8f5b3c546 851 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 852 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 853 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 854 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 855 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 856 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 857 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 858 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 859
lixianyu 0:a4d8f5b3c546 860 uint8_t dmpGetEuler(float *data, Quaternion *q);
lixianyu 0:a4d8f5b3c546 861 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
lixianyu 0:a4d8f5b3c546 862
lixianyu 0:a4d8f5b3c546 863 // Get Floating Point data from FIFO
lixianyu 0:a4d8f5b3c546 864 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 865 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 866
lixianyu 0:a4d8f5b3c546 867 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
lixianyu 0:a4d8f5b3c546 868 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL);
lixianyu 0:a4d8f5b3c546 869
lixianyu 0:a4d8f5b3c546 870 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
lixianyu 0:a4d8f5b3c546 871
lixianyu 0:a4d8f5b3c546 872 uint8_t dmpInitFIFOParam();
lixianyu 0:a4d8f5b3c546 873 uint8_t dmpCloseFIFO();
lixianyu 0:a4d8f5b3c546 874 uint8_t dmpSetGyroDataSource(uint8_t source);
lixianyu 0:a4d8f5b3c546 875 uint8_t dmpDecodeQuantizedAccel();
lixianyu 0:a4d8f5b3c546 876 uint32_t dmpGetGyroSumOfSquare();
lixianyu 0:a4d8f5b3c546 877 uint32_t dmpGetAccelSumOfSquare();
lixianyu 0:a4d8f5b3c546 878 void dmpOverrideQuaternion(long *q);
lixianyu 0:a4d8f5b3c546 879 uint16_t dmpGetFIFOPacketSize();
lixianyu 0:a4d8f5b3c546 880 #endif
lixianyu 0:a4d8f5b3c546 881
lixianyu 0:a4d8f5b3c546 882 // special methods for MotionApps 4.1 implementation
lixianyu 0:a4d8f5b3c546 883 #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41
lixianyu 0:a4d8f5b3c546 884 uint8_t *dmpPacketBuffer;
lixianyu 0:a4d8f5b3c546 885 uint16_t dmpPacketSize;
lixianyu 0:a4d8f5b3c546 886
lixianyu 0:a4d8f5b3c546 887 uint8_t dmpInitialize();
lixianyu 0:a4d8f5b3c546 888 bool dmpPacketAvailable();
lixianyu 0:a4d8f5b3c546 889
lixianyu 0:a4d8f5b3c546 890 uint8_t dmpSetFIFORate(uint8_t fifoRate);
lixianyu 0:a4d8f5b3c546 891 uint8_t dmpGetFIFORate();
lixianyu 0:a4d8f5b3c546 892 uint8_t dmpGetSampleStepSizeMS();
lixianyu 0:a4d8f5b3c546 893 uint8_t dmpGetSampleFrequency();
lixianyu 0:a4d8f5b3c546 894 int32_t dmpDecodeTemperature(int8_t tempReg);
lixianyu 0:a4d8f5b3c546 895
lixianyu 0:a4d8f5b3c546 896 // Register callbacks after a packet of FIFO data is processed
lixianyu 0:a4d8f5b3c546 897 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
lixianyu 0:a4d8f5b3c546 898 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
lixianyu 0:a4d8f5b3c546 899 uint8_t dmpRunFIFORateProcesses();
lixianyu 0:a4d8f5b3c546 900
lixianyu 0:a4d8f5b3c546 901 // Setup FIFO for various output
lixianyu 0:a4d8f5b3c546 902 uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 903 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 904 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 905 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 906 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 907 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 908 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 909 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 910 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 911 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 912 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 913 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
lixianyu 0:a4d8f5b3c546 914
lixianyu 0:a4d8f5b3c546 915 // Get Fixed Point data from FIFO
lixianyu 0:a4d8f5b3c546 916 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 917 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 918 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 919 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 920 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 921 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 922 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 923 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 924 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 925 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 926 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 927 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 928 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 929 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 930 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 931 uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 932 uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
lixianyu 0:a4d8f5b3c546 933 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 934 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 935 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 936 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
lixianyu 0:a4d8f5b3c546 937 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 938 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 939 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 940 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
lixianyu 0:a4d8f5b3c546 941 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 942 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 943 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 944 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 945 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 946 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 947 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 948 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 949 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 950 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 951 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 952 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
lixianyu 0:a4d8f5b3c546 953 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 954 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 955 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 956 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 957 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 958 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 959 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 960 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 961
lixianyu 0:a4d8f5b3c546 962 uint8_t dmpGetEuler(float *data, Quaternion *q);
lixianyu 0:a4d8f5b3c546 963 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
lixianyu 0:a4d8f5b3c546 964
lixianyu 0:a4d8f5b3c546 965 // Get Floating Point data from FIFO
lixianyu 0:a4d8f5b3c546 966 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 967 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
lixianyu 0:a4d8f5b3c546 968
lixianyu 0:a4d8f5b3c546 969 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
lixianyu 0:a4d8f5b3c546 970 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL);
lixianyu 0:a4d8f5b3c546 971
lixianyu 0:a4d8f5b3c546 972 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
lixianyu 0:a4d8f5b3c546 973
lixianyu 0:a4d8f5b3c546 974 uint8_t dmpInitFIFOParam();
lixianyu 0:a4d8f5b3c546 975 uint8_t dmpCloseFIFO();
lixianyu 0:a4d8f5b3c546 976 uint8_t dmpSetGyroDataSource(uint8_t source);
lixianyu 0:a4d8f5b3c546 977 uint8_t dmpDecodeQuantizedAccel();
lixianyu 0:a4d8f5b3c546 978 uint32_t dmpGetGyroSumOfSquare();
lixianyu 0:a4d8f5b3c546 979 uint32_t dmpGetAccelSumOfSquare();
lixianyu 0:a4d8f5b3c546 980 void dmpOverrideQuaternion(long *q);
lixianyu 0:a4d8f5b3c546 981 uint16_t dmpGetFIFOPacketSize();
lixianyu 0:a4d8f5b3c546 982 #endif
lixianyu 0:a4d8f5b3c546 983
lixianyu 0:a4d8f5b3c546 984 private:
lixianyu 0:a4d8f5b3c546 985 uint8_t devAddr;
lixianyu 0:a4d8f5b3c546 986 uint8_t buffer[14];
lixianyu 0:a4d8f5b3c546 987 };
lixianyu 0:a4d8f5b3c546 988
lixianyu 0:a4d8f5b3c546 989 #endif /* _MPU6050_H_ */
lixianyu 0:a4d8f5b3c546 990