Quadcopter Attitude Control(Yaw-Pitch-Roll)

Dependencies:   mbed

Committer:
khaledelmadawi
Date:
Fri Jul 03 11:16:02 2015 +0000
Revision:
0:e63996fd7d3e
Quadcopter Attitude Control(Yaw-Pitch-Roll)

Who changed what in which revision?

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