dsafeadf

Dependents:   DMP_tidy_working

Fork of MPU6050-DMP-Ian by Ian Hua

Files at this revision

API Documentation at this revision

Comitter:
majik
Date:
Tue May 27 09:21:09 2014 +0000
Parent:
13:b1b98e5c61df
Commit message:
tempory code

Changed in this revision

I2C/I2Cdev.cpp Show annotated file Show diff for this revision Revisions of this file
I2C/I2Cdev.h Show annotated file Show diff for this revision Revisions of this file
MPU/inc/MPU6050.h Show annotated file Show diff for this revision Revisions of this file
MPU/inc/MPU6050_6Axis_MotionApps20.h Show annotated file Show diff for this revision Revisions of this file
MPU/src/MPU6050.cpp Show annotated file Show diff for this revision Revisions of this file
MPU/src/MPU6050_6Axis_MotionApps20.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r b1b98e5c61df -r 3f0bc381e1dd I2C/I2Cdev.cpp
--- a/I2C/I2Cdev.cpp	Thu May 08 09:37:25 2014 +0000
+++ b/I2C/I2Cdev.cpp	Tue May 27 09:21:09 2014 +0000
@@ -9,14 +9,12 @@
 
 I2Cdev::I2Cdev(): i2c(I2C_SDA,I2C_SCL), debugSerial(USBTX, USBRX)
 {
-    i2c.frequency(400000);
-    debugSerial.baud(115200);
+
 }
 
 I2Cdev::I2Cdev(PinName i2cSda, PinName i2cScl): i2c(i2cSda,i2cScl), debugSerial(USBTX, USBRX)
 {
-    i2c.frequency(400000);
-    debugSerial.baud(115200);
+
 }
 
 /** Read a single bit from an 8-bit device register.
@@ -27,8 +25,7 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (true = success)
  */
-int8_t I2Cdev::readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout)
-{
+int8_t I2Cdev::readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout) {
     uint8_t b;
     uint8_t count = readByte(devAddr, regAddr, &b, timeout);
     *data = b & (1 << bitNum);
@@ -43,9 +40,8 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (true = success)
  */
-int8_t I2Cdev::readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout)
-{
-    uint16_t b = 0x0000;
+int8_t I2Cdev::readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout) {
+    uint16_t b;
     uint8_t count = readWord(devAddr, regAddr, &b, timeout);
     *data = b & (1 << bitNum);
     return count;
@@ -60,8 +56,7 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (true = success)
  */
-int8_t I2Cdev::readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout)
-{
+int8_t I2Cdev::readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout) {
     // 01101001 read byte
     // 76543210 bit numbers
     //    xxx   args: bitStart=4, length=3
@@ -86,8 +81,7 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (1 = success, 0 = failure, -1 = timeout)
  */
-int8_t I2Cdev::readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout)
-{
+int8_t I2Cdev::readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout) {
     // 1101011001101001 read byte
     // fedcba9876543210 bit numbers
     //    xxx           args: bitStart=12, length=3
@@ -110,8 +104,7 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (true = success)
  */
-int8_t I2Cdev::readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout)
-{
+int8_t I2Cdev::readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout) {
     return readBytes(devAddr, regAddr, 1, data, timeout);
 }
 
@@ -122,8 +115,7 @@
  * @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout)
  * @return Status of read operation (true = success)
  */
-int8_t I2Cdev::readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout)
-{
+int8_t I2Cdev::readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout) {
     return readWords(devAddr, regAddr, 1, data, timeout);
 }
 
@@ -161,8 +153,7 @@
  * @param value New bit value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data)
-{
+bool I2Cdev::writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data) {
     uint8_t b;
     readByte(devAddr, regAddr, &b);
     b = (data != 0) ? (b | (1 << bitNum)) : (b & ~(1 << bitNum));
@@ -176,8 +167,7 @@
  * @param value New bit value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data)
-{
+bool I2Cdev::writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data) {
     uint16_t w;
     readWord(devAddr, regAddr, &w);
     w = (data != 0) ? (w | (1 << bitNum)) : (w & ~(1 << bitNum));
@@ -192,8 +182,7 @@
  * @param data Right-aligned value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data)
-{
+bool I2Cdev::writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data) {
     //      010 value to write
     // 76543210 bit numbers
     //    xxx   args: bitStart=4, length=3
@@ -222,8 +211,7 @@
  * @param data Right-aligned value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data)
-{
+bool I2Cdev::writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data) {
     //              010 value to write
     // fedcba9876543210 bit numbers
     //    xxx           args: bitStart=12, length=3
@@ -250,8 +238,7 @@
  * @param data New byte value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data)
-{
+bool I2Cdev::writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data) {
     return writeBytes(devAddr, regAddr, 1, &data);
 }
 
@@ -261,8 +248,7 @@
  * @param data New word value to write
  * @return Status of operation (true = success)
  */
-bool I2Cdev::writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data)
-{
+bool I2Cdev::writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data) {
     return writeWords(devAddr, regAddr, 1, &data);
 }
 
@@ -286,4 +272,4 @@
 uint16_t I2Cdev::readTimeout(void)
 {
     return 0;
-}
+}
\ No newline at end of file
diff -r b1b98e5c61df -r 3f0bc381e1dd I2C/I2Cdev.h
--- a/I2C/I2Cdev.h	Thu May 08 09:37:25 2014 +0000
+++ b/I2C/I2Cdev.h	Tue May 27 09:21:09 2014 +0000
@@ -1,7 +1,7 @@
 //ported from arduino library: https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
 //written by szymon gaertig (email: szymon@gaertig.com.pl)
 //
-//Changelog:
+//Changelog: 
 //2013-01-08 - first beta release
 
 #ifndef I2Cdev_h
@@ -9,38 +9,36 @@
 
 #include "mbed.h"
 
-#define I2C_SDA p9
-#define I2C_SCL p10
-
-class I2Cdev
-{
-private:
-    I2C i2c;
-
-public:
-    Serial debugSerial;
-    I2Cdev();
-    I2Cdev(PinName i2cSda, PinName i2cScl);
+#define I2C_SDA PTE0
+#define I2C_SCL PTE1
 
-    int8_t readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
-    int8_t readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
+class I2Cdev {
+    private:
+        I2C i2c;
+        Serial debugSerial;
+    public:
+        I2Cdev();
+        I2Cdev(PinName i2cSda, PinName i2cScl);        
+        
+        int8_t readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout());
+        int8_t readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout());
 
-    bool writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
-    bool writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data);
-    bool writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
-    bool writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data);
-    bool writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data);
-    bool writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data);
-    bool writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
-    bool writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data);
+        bool writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
+        bool writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data);
+        bool writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
+        bool writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data);
+        bool writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data);
+        bool writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data);
+        bool writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
+        bool writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data);
 
-    static uint16_t readTimeout(void);
+        static uint16_t readTimeout(void);
 };
 
 #endif
\ No newline at end of file
diff -r b1b98e5c61df -r 3f0bc381e1dd MPU/inc/MPU6050.h
--- a/MPU/inc/MPU6050.h	Thu May 08 09:37:25 2014 +0000
+++ b/MPU/inc/MPU6050.h	Tue May 27 09:21:09 2014 +0000
@@ -1,35 +1,35 @@
 //ported from arduino library: https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
 //written by szymon gaertig (email: szymon@gaertig.com.pl)
 //
-//Changelog:
+//Changelog: 
 //2013-01-08 - first beta release
- 
+
 // I2Cdev library collection - MPU6050 I2C device class
 // Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00)
-// 8/24/2011 by Jeff Rowberg <jeff@rowberg.net>
+// 10/3/2011 by Jeff Rowberg <jeff@rowberg.net>
 // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
 //
 // Changelog:
 //     ... - ongoing debug release
- 
+
 // NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE
 // DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF
 // YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING.
- 
+
 /* ============================================
 I2Cdev device library code is placed under the MIT license
 Copyright (c) 2012 Jeff Rowberg
- 
+
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
- 
+
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
- 
+
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -50,8 +50,6 @@
 #define MPU6050_ADDRESS_AD0_HIGH    0x69 // address pin high (VCC)
 #define MPU6050_DEFAULT_ADDRESS     MPU6050_ADDRESS_AD0_LOW
 
-#define MPU6050_INCLUDE_DMP_MOTIONAPPS20
-
 #define MPU6050_RA_XG_OFFS_TC       0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
 #define MPU6050_RA_YG_OFFS_TC       0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
 #define MPU6050_RA_ZG_OFFS_TC       0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
@@ -416,604 +414,593 @@
 
 // note: DMP code memory blocks defined at end of header file
 
-class MPU6050
-{
-private:
-    I2Cdev i2Cdev;
+class MPU6050 {
+    private:
+        I2Cdev i2Cdev;
+        Serial debugSerial;
+    public:
+        MPU6050();
+        MPU6050(uint8_t address);
 
-public:
-    Serial debugSerial;
-    MPU6050();
-    MPU6050(uint8_t address);
-    MPU6050(PinName i2cSDA, PinName i2cSCL);
-
-    void initialize();
-    bool testConnection();
+        void initialize();
+        bool testConnection();
 
-    // AUX_VDDIO register
-    uint8_t getAuxVDDIOLevel();
-    void setAuxVDDIOLevel(uint8_t level);
+        // AUX_VDDIO register
+        uint8_t getAuxVDDIOLevel();
+        void setAuxVDDIOLevel(uint8_t level);
 
-    // SMPLRT_DIV register
-    uint8_t getRate();
-    void setRate(uint8_t rate);
+        // SMPLRT_DIV register
+        uint8_t getRate();
+        void setRate(uint8_t rate);
 
-    // CONFIG register
-    uint8_t getExternalFrameSync();
-    void setExternalFrameSync(uint8_t sync);
-    uint8_t getDLPFMode();
-    void setDLPFMode(uint8_t bandwidth);
+        // CONFIG register
+        uint8_t getExternalFrameSync();
+        void setExternalFrameSync(uint8_t sync);
+        uint8_t getDLPFMode();
+        void setDLPFMode(uint8_t bandwidth);
 
-    // GYRO_CONFIG register
-    uint8_t getFullScaleGyroRange();
-    void setFullScaleGyroRange(uint8_t range);
+        // GYRO_CONFIG register
+        uint8_t getFullScaleGyroRange();
+        void setFullScaleGyroRange(uint8_t range);
 
-    // ACCEL_CONFIG register
-    bool getAccelXSelfTest();
-    void setAccelXSelfTest(bool enabled);
-    bool getAccelYSelfTest();
-    void setAccelYSelfTest(bool enabled);
-    bool getAccelZSelfTest();
-    void setAccelZSelfTest(bool enabled);
-    uint8_t getFullScaleAccelRange();
-    void setFullScaleAccelRange(uint8_t range);
-    uint8_t getDHPFMode();
-    void setDHPFMode(uint8_t mode);
+        // ACCEL_CONFIG register
+        bool getAccelXSelfTest();
+        void setAccelXSelfTest(bool enabled);
+        bool getAccelYSelfTest();
+        void setAccelYSelfTest(bool enabled);
+        bool getAccelZSelfTest();
+        void setAccelZSelfTest(bool enabled);
+        uint8_t getFullScaleAccelRange();
+        void setFullScaleAccelRange(uint8_t range);
+        uint8_t getDHPFMode();
+        void setDHPFMode(uint8_t mode);
 
-    // FF_THR register
-    uint8_t getFreefallDetectionThreshold();
-    void setFreefallDetectionThreshold(uint8_t threshold);
+        // FF_THR register
+        uint8_t getFreefallDetectionThreshold();
+        void setFreefallDetectionThreshold(uint8_t threshold);
 
-    // FF_DUR register
-    uint8_t getFreefallDetectionDuration();
-    void setFreefallDetectionDuration(uint8_t duration);
+        // FF_DUR register
+        uint8_t getFreefallDetectionDuration();
+        void setFreefallDetectionDuration(uint8_t duration);
 
-    // MOT_THR register
-    uint8_t getMotionDetectionThreshold();
-    void setMotionDetectionThreshold(uint8_t threshold);
+        // MOT_THR register
+        uint8_t getMotionDetectionThreshold();
+        void setMotionDetectionThreshold(uint8_t threshold);
 
-    // MOT_DUR register
-    uint8_t getMotionDetectionDuration();
-    void setMotionDetectionDuration(uint8_t duration);
+        // MOT_DUR register
+        uint8_t getMotionDetectionDuration();
+        void setMotionDetectionDuration(uint8_t duration);
 
-    // ZRMOT_THR register
-    uint8_t getZeroMotionDetectionThreshold();
-    void setZeroMotionDetectionThreshold(uint8_t threshold);
+        // ZRMOT_THR register
+        uint8_t getZeroMotionDetectionThreshold();
+        void setZeroMotionDetectionThreshold(uint8_t threshold);
 
-    // ZRMOT_DUR register
-    uint8_t getZeroMotionDetectionDuration();
-    void setZeroMotionDetectionDuration(uint8_t duration);
+        // ZRMOT_DUR register
+        uint8_t getZeroMotionDetectionDuration();
+        void setZeroMotionDetectionDuration(uint8_t duration);
 
-    // FIFO_EN register
-    bool getTempFIFOEnabled();
-    void setTempFIFOEnabled(bool enabled);
-    bool getXGyroFIFOEnabled();
-    void setXGyroFIFOEnabled(bool enabled);
-    bool getYGyroFIFOEnabled();
-    void setYGyroFIFOEnabled(bool enabled);
-    bool getZGyroFIFOEnabled();
-    void setZGyroFIFOEnabled(bool enabled);
-    bool getAccelFIFOEnabled();
-    void setAccelFIFOEnabled(bool enabled);
-    bool getSlave2FIFOEnabled();
-    void setSlave2FIFOEnabled(bool enabled);
-    bool getSlave1FIFOEnabled();
-    void setSlave1FIFOEnabled(bool enabled);
-    bool getSlave0FIFOEnabled();
-    void setSlave0FIFOEnabled(bool enabled);
+        // FIFO_EN register
+        bool getTempFIFOEnabled();
+        void setTempFIFOEnabled(bool enabled);
+        bool getXGyroFIFOEnabled();
+        void setXGyroFIFOEnabled(bool enabled);
+        bool getYGyroFIFOEnabled();
+        void setYGyroFIFOEnabled(bool enabled);
+        bool getZGyroFIFOEnabled();
+        void setZGyroFIFOEnabled(bool enabled);
+        bool getAccelFIFOEnabled();
+        void setAccelFIFOEnabled(bool enabled);
+        bool getSlave2FIFOEnabled();
+        void setSlave2FIFOEnabled(bool enabled);
+        bool getSlave1FIFOEnabled();
+        void setSlave1FIFOEnabled(bool enabled);
+        bool getSlave0FIFOEnabled();
+        void setSlave0FIFOEnabled(bool enabled);
 
-    // I2C_MST_CTRL register
-    bool getMultiMasterEnabled();
-    void setMultiMasterEnabled(bool enabled);
-    bool getWaitForExternalSensorEnabled();
-    void setWaitForExternalSensorEnabled(bool enabled);
-    bool getSlave3FIFOEnabled();
-    void setSlave3FIFOEnabled(bool enabled);
-    bool getSlaveReadWriteTransitionEnabled();
-    void setSlaveReadWriteTransitionEnabled(bool enabled);
-    uint8_t getMasterClockSpeed();
-    void setMasterClockSpeed(uint8_t speed);
+        // I2C_MST_CTRL register
+        bool getMultiMasterEnabled();
+        void setMultiMasterEnabled(bool enabled);
+        bool getWaitForExternalSensorEnabled();
+        void setWaitForExternalSensorEnabled(bool enabled);
+        bool getSlave3FIFOEnabled();
+        void setSlave3FIFOEnabled(bool enabled);
+        bool getSlaveReadWriteTransitionEnabled();
+        void setSlaveReadWriteTransitionEnabled(bool enabled);
+        uint8_t getMasterClockSpeed();
+        void setMasterClockSpeed(uint8_t speed);
 
-    // I2C_SLV* registers (Slave 0-3)
-    uint8_t getSlaveAddress(uint8_t num);
-    void setSlaveAddress(uint8_t num, uint8_t address);
-    uint8_t getSlaveRegister(uint8_t num);
-    void setSlaveRegister(uint8_t num, uint8_t reg);
-    bool getSlaveEnabled(uint8_t num);
-    void setSlaveEnabled(uint8_t num, bool enabled);
-    bool getSlaveWordByteSwap(uint8_t num);
-    void setSlaveWordByteSwap(uint8_t num, bool enabled);
-    bool getSlaveWriteMode(uint8_t num);
-    void setSlaveWriteMode(uint8_t num, bool mode);
-    bool getSlaveWordGroupOffset(uint8_t num);
-    void setSlaveWordGroupOffset(uint8_t num, bool enabled);
-    uint8_t getSlaveDataLength(uint8_t num);
-    void setSlaveDataLength(uint8_t num, uint8_t length);
+        // I2C_SLV* registers (Slave 0-3)
+        uint8_t getSlaveAddress(uint8_t num);
+        void setSlaveAddress(uint8_t num, uint8_t address);
+        uint8_t getSlaveRegister(uint8_t num);
+        void setSlaveRegister(uint8_t num, uint8_t reg);
+        bool getSlaveEnabled(uint8_t num);
+        void setSlaveEnabled(uint8_t num, bool enabled);
+        bool getSlaveWordByteSwap(uint8_t num);
+        void setSlaveWordByteSwap(uint8_t num, bool enabled);
+        bool getSlaveWriteMode(uint8_t num);
+        void setSlaveWriteMode(uint8_t num, bool mode);
+        bool getSlaveWordGroupOffset(uint8_t num);
+        void setSlaveWordGroupOffset(uint8_t num, bool enabled);
+        uint8_t getSlaveDataLength(uint8_t num);
+        void setSlaveDataLength(uint8_t num, uint8_t length);
 
-    // I2C_SLV* registers (Slave 4)
-    uint8_t getSlave4Address();
-    void setSlave4Address(uint8_t address);
-    uint8_t getSlave4Register();
-    void setSlave4Register(uint8_t reg);
-    void setSlave4OutputByte(uint8_t data);
-    bool getSlave4Enabled();
-    void setSlave4Enabled(bool enabled);
-    bool getSlave4InterruptEnabled();
-    void setSlave4InterruptEnabled(bool enabled);
-    bool getSlave4WriteMode();
-    void setSlave4WriteMode(bool mode);
-    uint8_t getSlave4MasterDelay();
-    void setSlave4MasterDelay(uint8_t delay);
-    uint8_t getSlate4InputByte();
+        // I2C_SLV* registers (Slave 4)
+        uint8_t getSlave4Address();
+        void setSlave4Address(uint8_t address);
+        uint8_t getSlave4Register();
+        void setSlave4Register(uint8_t reg);
+        void setSlave4OutputByte(uint8_t data);
+        bool getSlave4Enabled();
+        void setSlave4Enabled(bool enabled);
+        bool getSlave4InterruptEnabled();
+        void setSlave4InterruptEnabled(bool enabled);
+        bool getSlave4WriteMode();
+        void setSlave4WriteMode(bool mode);
+        uint8_t getSlave4MasterDelay();
+        void setSlave4MasterDelay(uint8_t delay);
+        uint8_t getSlate4InputByte();
 
-    // I2C_MST_STATUS register
-    bool getPassthroughStatus();
-    bool getSlave4IsDone();
-    bool getLostArbitration();
-    bool getSlave4Nack();
-    bool getSlave3Nack();
-    bool getSlave2Nack();
-    bool getSlave1Nack();
-    bool getSlave0Nack();
+        // I2C_MST_STATUS register
+        bool getPassthroughStatus();
+        bool getSlave4IsDone();
+        bool getLostArbitration();
+        bool getSlave4Nack();
+        bool getSlave3Nack();
+        bool getSlave2Nack();
+        bool getSlave1Nack();
+        bool getSlave0Nack();
 
-    // INT_PIN_CFG register
-    bool getInterruptMode();
-    void setInterruptMode(bool mode);
-    bool getInterruptDrive();
-    void setInterruptDrive(bool drive);
-    bool getInterruptLatch();
-    void setInterruptLatch(bool latch);
-    bool getInterruptLatchClear();
-    void setInterruptLatchClear(bool clear);
-    bool getFSyncInterruptLevel();
-    void setFSyncInterruptLevel(bool level);
-    bool getFSyncInterruptEnabled();
-    void setFSyncInterruptEnabled(bool enabled);
-    bool getI2CBypassEnabled();
-    void setI2CBypassEnabled(bool enabled);
-    bool getClockOutputEnabled();
-    void setClockOutputEnabled(bool enabled);
+        // INT_PIN_CFG register
+        bool getInterruptMode();
+        void setInterruptMode(bool mode);
+        bool getInterruptDrive();
+        void setInterruptDrive(bool drive);
+        bool getInterruptLatch();
+        void setInterruptLatch(bool latch);
+        bool getInterruptLatchClear();
+        void setInterruptLatchClear(bool clear);
+        bool getFSyncInterruptLevel();
+        void setFSyncInterruptLevel(bool level);
+        bool getFSyncInterruptEnabled();
+        void setFSyncInterruptEnabled(bool enabled);
+        bool getI2CBypassEnabled();
+        void setI2CBypassEnabled(bool enabled);
+        bool getClockOutputEnabled();
+        void setClockOutputEnabled(bool enabled);
 
-    // INT_ENABLE register
-    uint8_t getIntEnabled();
-    void setIntEnabled(uint8_t enabled);
-    bool getIntFreefallEnabled();
-    void setIntFreefallEnabled(bool enabled);
-    bool getIntMotionEnabled();
-    void setIntMotionEnabled(bool enabled);
-    bool getIntZeroMotionEnabled();
-    void setIntZeroMotionEnabled(bool enabled);
-    bool getIntFIFOBufferOverflowEnabled();
-    void setIntFIFOBufferOverflowEnabled(bool enabled);
-    bool getIntI2CMasterEnabled();
-    void setIntI2CMasterEnabled(bool enabled);
-    bool getIntDataReadyEnabled();
-    void setIntDataReadyEnabled(bool enabled);
+        // INT_ENABLE register
+        uint8_t getIntEnabled();
+        void setIntEnabled(uint8_t enabled);
+        bool getIntFreefallEnabled();
+        void setIntFreefallEnabled(bool enabled);
+        bool getIntMotionEnabled();
+        void setIntMotionEnabled(bool enabled);
+        bool getIntZeroMotionEnabled();
+        void setIntZeroMotionEnabled(bool enabled);
+        bool getIntFIFOBufferOverflowEnabled();
+        void setIntFIFOBufferOverflowEnabled(bool enabled);
+        bool getIntI2CMasterEnabled();
+        void setIntI2CMasterEnabled(bool enabled);
+        bool getIntDataReadyEnabled();
+        void setIntDataReadyEnabled(bool enabled);
 
-    // INT_STATUS register
-    uint8_t getIntStatus();
-    bool getIntFreefallStatus();
-    bool getIntMotionStatus();
-    bool getIntZeroMotionStatus();
-    bool getIntFIFOBufferOverflowStatus();
-    bool getIntI2CMasterStatus();
-    bool getIntDataReadyStatus();
+        // INT_STATUS register
+        uint8_t getIntStatus();
+        bool getIntFreefallStatus();
+        bool getIntMotionStatus();
+        bool getIntZeroMotionStatus();
+        bool getIntFIFOBufferOverflowStatus();
+        bool getIntI2CMasterStatus();
+        bool getIntDataReadyStatus();
 
-    // ACCEL_*OUT_* registers
-    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);
-    void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz);
-    void getAcceleration(int16_t* x, int16_t* y, int16_t* z);
-    int16_t getAccelerationX();
-    int16_t getAccelerationY();
-    int16_t getAccelerationZ();
+        // ACCEL_*OUT_* registers
+        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);
+        void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz);
+        void getAcceleration(int16_t* x, int16_t* y, int16_t* z);
+        int16_t getAccelerationX();
+        int16_t getAccelerationY();
+        int16_t getAccelerationZ();
 
-    // TEMP_OUT_* registers
-    int16_t getTemperature();
+        // TEMP_OUT_* registers
+        int16_t getTemperature();
 
-    // GYRO_*OUT_* registers
-    void getRotation(int16_t* x, int16_t* y, int16_t* z);
-    int16_t getRotationX();
-    int16_t getRotationY();
-    int16_t getRotationZ();
+        // GYRO_*OUT_* registers
+        void getRotation(int16_t* x, int16_t* y, int16_t* z);
+        int16_t getRotationX();
+        int16_t getRotationY();
+        int16_t getRotationZ();
 
-    // EXT_SENS_DATA_* registers
-    uint8_t getExternalSensorByte(int position);
-    uint16_t getExternalSensorWord(int position);
-    uint32_t getExternalSensorDWord(int position);
+        // EXT_SENS_DATA_* registers
+        uint8_t getExternalSensorByte(int position);
+        uint16_t getExternalSensorWord(int position);
+        uint32_t getExternalSensorDWord(int position);
 
-    // MOT_DETECT_STATUS register
-    bool getXNegMotionDetected();
-    bool getXPosMotionDetected();
-    bool getYNegMotionDetected();
-    bool getYPosMotionDetected();
-    bool getZNegMotionDetected();
-    bool getZPosMotionDetected();
-    bool getZeroMotionDetected();
+        // MOT_DETECT_STATUS register
+        bool getXNegMotionDetected();
+        bool getXPosMotionDetected();
+        bool getYNegMotionDetected();
+        bool getYPosMotionDetected();
+        bool getZNegMotionDetected();
+        bool getZPosMotionDetected();
+        bool getZeroMotionDetected();
 
-    // I2C_SLV*_DO register
-    void setSlaveOutputByte(uint8_t num, uint8_t data);
+        // I2C_SLV*_DO register
+        void setSlaveOutputByte(uint8_t num, uint8_t data);
 
-    // I2C_MST_DELAY_CTRL register
-    bool getExternalShadowDelayEnabled();
-    void setExternalShadowDelayEnabled(bool enabled);
-    bool getSlaveDelayEnabled(uint8_t num);
-    void setSlaveDelayEnabled(uint8_t num, bool enabled);
+        // I2C_MST_DELAY_CTRL register
+        bool getExternalShadowDelayEnabled();
+        void setExternalShadowDelayEnabled(bool enabled);
+        bool getSlaveDelayEnabled(uint8_t num);
+        void setSlaveDelayEnabled(uint8_t num, bool enabled);
 
-    // SIGNAL_PATH_RESET register
-    void resetGyroscopePath();
-    void resetAccelerometerPath();
-    void resetTemperaturePath();
+        // SIGNAL_PATH_RESET register
+        void resetGyroscopePath();
+        void resetAccelerometerPath();
+        void resetTemperaturePath();
 
-    // MOT_DETECT_CTRL register
-    uint8_t getAccelerometerPowerOnDelay();
-    void setAccelerometerPowerOnDelay(uint8_t delay);
-    uint8_t getFreefallDetectionCounterDecrement();
-    void setFreefallDetectionCounterDecrement(uint8_t decrement);
-    uint8_t getMotionDetectionCounterDecrement();
-    void setMotionDetectionCounterDecrement(uint8_t decrement);
+        // MOT_DETECT_CTRL register
+        uint8_t getAccelerometerPowerOnDelay();
+        void setAccelerometerPowerOnDelay(uint8_t delay);
+        uint8_t getFreefallDetectionCounterDecrement();
+        void setFreefallDetectionCounterDecrement(uint8_t decrement);
+        uint8_t getMotionDetectionCounterDecrement();
+        void setMotionDetectionCounterDecrement(uint8_t decrement);
 
-    // USER_CTRL register
-    bool getFIFOEnabled();
-    void setFIFOEnabled(bool enabled);
-    bool getI2CMasterModeEnabled();
-    void setI2CMasterModeEnabled(bool enabled);
-    void switchSPIEnabled(bool enabled);
-    void resetFIFO();
-    void resetI2CMaster();
-    void resetSensors();
+        // USER_CTRL register
+        bool getFIFOEnabled();
+        void setFIFOEnabled(bool enabled);
+        bool getI2CMasterModeEnabled();
+        void setI2CMasterModeEnabled(bool enabled);
+        void switchSPIEnabled(bool enabled);
+        void resetFIFO();
+        void resetI2CMaster();
+        void resetSensors();
 
-    // PWR_MGMT_1 register
-    void reset();
-    bool getSleepEnabled();
-    void setSleepEnabled(bool enabled);
-    bool getWakeCycleEnabled();
-    void setWakeCycleEnabled(bool enabled);
-    bool getTempSensorEnabled();
-    void setTempSensorEnabled(bool enabled);
-    uint8_t getClockSource();
-    void setClockSource(uint8_t source);
+        // PWR_MGMT_1 register
+        void reset();
+        bool getSleepEnabled();
+        void setSleepEnabled(bool enabled);
+        bool getWakeCycleEnabled();
+        void setWakeCycleEnabled(bool enabled);
+        bool getTempSensorEnabled();
+        void setTempSensorEnabled(bool enabled);
+        uint8_t getClockSource();
+        void setClockSource(uint8_t source);
 
-    // PWR_MGMT_2 register
-    uint8_t getWakeFrequency();
-    void setWakeFrequency(uint8_t frequency);
-    bool getStandbyXAccelEnabled();
-    void setStandbyXAccelEnabled(bool enabled);
-    bool getStandbyYAccelEnabled();
-    void setStandbyYAccelEnabled(bool enabled);
-    bool getStandbyZAccelEnabled();
-    void setStandbyZAccelEnabled(bool enabled);
-    bool getStandbyXGyroEnabled();
-    void setStandbyXGyroEnabled(bool enabled);
-    bool getStandbyYGyroEnabled();
-    void setStandbyYGyroEnabled(bool enabled);
-    bool getStandbyZGyroEnabled();
-    void setStandbyZGyroEnabled(bool enabled);
+        // PWR_MGMT_2 register
+        uint8_t getWakeFrequency();
+        void setWakeFrequency(uint8_t frequency);
+        bool getStandbyXAccelEnabled();
+        void setStandbyXAccelEnabled(bool enabled);
+        bool getStandbyYAccelEnabled();
+        void setStandbyYAccelEnabled(bool enabled);
+        bool getStandbyZAccelEnabled();
+        void setStandbyZAccelEnabled(bool enabled);
+        bool getStandbyXGyroEnabled();
+        void setStandbyXGyroEnabled(bool enabled);
+        bool getStandbyYGyroEnabled();
+        void setStandbyYGyroEnabled(bool enabled);
+        bool getStandbyZGyroEnabled();
+        void setStandbyZGyroEnabled(bool enabled);
 
-    // FIFO_COUNT_* registers
-    uint16_t getFIFOCount();
+        // FIFO_COUNT_* registers
+        uint16_t getFIFOCount();
 
-    // FIFO_R_W register
-    uint8_t getFIFOByte();
-    void setFIFOByte(uint8_t data);
-    void getFIFOBytes(uint8_t *data, uint8_t length);
-
-    // WHO_AM_I register
-    uint8_t getDeviceID();
-    void setDeviceID(uint8_t id);
+        // FIFO_R_W register
+        uint8_t getFIFOByte();
+        void setFIFOByte(uint8_t data);
+        void getFIFOBytes(uint8_t *data, uint8_t length);
 
-    // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ========
+        // WHO_AM_I register
+        uint8_t getDeviceID();
+        void setDeviceID(uint8_t id);
+        
+        // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ========
+        
+        // XG_OFFS_TC register
+        uint8_t getOTPBankValid();
+        void setOTPBankValid(bool enabled);
+        int8_t getXGyroOffset();
+        void setXGyroOffset(int8_t offset);
 
-    // XG_OFFS_TC register
-    uint8_t getOTPBankValid();
-    void setOTPBankValid(bool enabled);
-    int8_t getXGyroOffset();
-    void setXGyroOffset(int8_t offset);
-
-    // YG_OFFS_TC register
-    int8_t getYGyroOffset();
-    void setYGyroOffset(int8_t offset);
+        // YG_OFFS_TC register
+        int8_t getYGyroOffset();
+        void setYGyroOffset(int8_t offset);
 
-    // ZG_OFFS_TC register
-    int8_t getZGyroOffset();
-    void setZGyroOffset(int8_t offset);
-
-    // X_FINE_GAIN register
-    int8_t getXFineGain();
-    void setXFineGain(int8_t gain);
+        // ZG_OFFS_TC register
+        int8_t getZGyroOffset();
+        void setZGyroOffset(int8_t offset);
 
-    // Y_FINE_GAIN register
-    int8_t getYFineGain();
-    void setYFineGain(int8_t gain);
+        // X_FINE_GAIN register
+        int8_t getXFineGain();
+        void setXFineGain(int8_t gain);
 
-    // Z_FINE_GAIN register
-    int8_t getZFineGain();
-    void setZFineGain(int8_t gain);
+        // Y_FINE_GAIN register
+        int8_t getYFineGain();
+        void setYFineGain(int8_t gain);
 
-    // XA_OFFS_* registers
-    int16_t getXAccelOffset();
-    void setXAccelOffset(int16_t offset);
-
-    // YA_OFFS_* register
-    int16_t getYAccelOffset();
-    void setYAccelOffset(int16_t offset);
+        // Z_FINE_GAIN register
+        int8_t getZFineGain();
+        void setZFineGain(int8_t gain);
 
-    // ZA_OFFS_* register
-    int16_t getZAccelOffset();
-    void setZAccelOffset(int16_t offset);
+        // XA_OFFS_* registers
+        int16_t getXAccelOffset();
+        void setXAccelOffset(int16_t offset);
 
-    // XG_OFFS_USR* registers
-    int16_t getXGyroOffsetUser();
-    void setXGyroOffsetUser(int16_t offset);
+        // YA_OFFS_* register
+        int16_t getYAccelOffset();
+        void setYAccelOffset(int16_t offset);
 
-    // YG_OFFS_USR* register
-    int16_t getYGyroOffsetUser();
-    void setYGyroOffsetUser(int16_t offset);
+        // ZA_OFFS_* register
+        int16_t getZAccelOffset();
+        void setZAccelOffset(int16_t offset);
 
-    // ZG_OFFS_USR* register
-    int16_t getZGyroOffsetUser();
-    void setZGyroOffsetUser(int16_t offset);
+        // XG_OFFS_USR* registers
+        int16_t getXGyroOffsetUser();
+        void setXGyroOffsetUser(int16_t offset);
 
-    // INT_ENABLE register (DMP functions)
-    bool getIntPLLReadyEnabled();
-    void setIntPLLReadyEnabled(bool enabled);
-    bool getIntDMPEnabled();
-    void setIntDMPEnabled(bool enabled);
+        // YG_OFFS_USR* register
+        int16_t getYGyroOffsetUser();
+        void setYGyroOffsetUser(int16_t offset);
 
-    // DMP_INT_STATUS
-    bool getDMPInt5Status();
-    bool getDMPInt4Status();
-    bool getDMPInt3Status();
-    bool getDMPInt2Status();
-    bool getDMPInt1Status();
-    bool getDMPInt0Status();
-
-    // INT_STATUS register (DMP functions)
-    bool getIntPLLReadyStatus();
-    bool getIntDMPStatus();
-
-    // USER_CTRL register (DMP functions)
-    bool getDMPEnabled();
-    void setDMPEnabled(bool enabled);
-    void resetDMP();
-
-    // BANK_SEL register
-    void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false);
-
-    // MEM_START_ADDR register
-    void setMemoryStartAddress(uint8_t address);
+        // ZG_OFFS_USR* register
+        int16_t getZGyroOffsetUser();
+        void setZGyroOffsetUser(int16_t offset);
+        
+        // INT_ENABLE register (DMP functions)
+        bool getIntPLLReadyEnabled();
+        void setIntPLLReadyEnabled(bool enabled);
+        bool getIntDMPEnabled();
+        void setIntDMPEnabled(bool enabled);
+        
+        // DMP_INT_STATUS
+        bool getDMPInt5Status();
+        bool getDMPInt4Status();
+        bool getDMPInt3Status();
+        bool getDMPInt2Status();
+        bool getDMPInt1Status();
+        bool getDMPInt0Status();
 
-    // MEM_R_W register
-    uint8_t readMemoryByte();
-    void writeMemoryByte(uint8_t data);
-    void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0);
-    bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false);
-    bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true);
-
-    bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false);
-    bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize);
-
-    // DMP_CFG_1 register
-    uint8_t getDMPConfig1();
-    void setDMPConfig1(uint8_t config);
-
-    // DMP_CFG_2 register
-    uint8_t getDMPConfig2();
-    void setDMPConfig2(uint8_t config);
+        // INT_STATUS register (DMP functions)
+        bool getIntPLLReadyStatus();
+        bool getIntDMPStatus();
+        
+        // USER_CTRL register (DMP functions)
+        bool getDMPEnabled();
+        void setDMPEnabled(bool enabled);
+        void resetDMP();
+        
+        // BANK_SEL register
+        void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false);
+        
+        // MEM_START_ADDR register
+        void setMemoryStartAddress(uint8_t address);
+        
+        // MEM_R_W register
+        uint8_t readMemoryByte();
+        void writeMemoryByte(uint8_t data);
+        void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0);
+        bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false);
+        bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true);
 
-    // special methods for MotionApps 2.0 implementation
-#ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20
-    /* From MotionApps header: */
-    uint8_t dmpInitialize();
-    bool dmpPacketAvailable();
+        bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false);
+        bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize);
 
-    uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet);
-    uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet);
-    uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet);
-    uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet);
-    uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet);
-    uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet);
+        // DMP_CFG_1 register
+        uint8_t getDMPConfig1();
+        void setDMPConfig1(uint8_t config);
 
-    uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet);
-    uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet);
-
-    uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
-
-    uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
+        // DMP_CFG_2 register
+        uint8_t getDMPConfig2();
+        void setDMPConfig2(uint8_t config);
 
-    uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
-
-    uint8_t dmpGetEuler(float *data, Quaternion *q);
-    uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
+        // special methods for MotionApps 2.0 implementation
+        #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20
+            uint8_t *dmpPacketBuffer;
+            uint16_t dmpPacketSize;
 
-    uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
-    uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed);
-
-    uint16_t dmpGetFIFOPacketSize();
-    /* End from MotionApps header */
-
-    uint8_t *dmpPacketBuffer;
-    uint16_t dmpPacketSize;
+            uint8_t dmpInitialize();
+            bool dmpPacketAvailable();
 
-    uint8_t dmpSetFIFORate(uint8_t fifoRate);
-    uint8_t dmpGetFIFORate();
-    uint8_t dmpGetSampleStepSizeMS();
-    uint8_t dmpGetSampleFrequency();
-    int32_t dmpDecodeTemperature(int8_t tempReg);
-
-    // Register callbacks after a packet of FIFO data is processed
-    //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
-    //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
-    uint8_t dmpRunFIFORateProcesses();
-
-    // Setup FIFO for various output
-    uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
-    uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
-    uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSetFIFORate(uint8_t fifoRate);
+            uint8_t dmpGetFIFORate();
+            uint8_t dmpGetSampleStepSizeMS();
+            uint8_t dmpGetSampleFrequency();
+            int32_t dmpDecodeTemperature(int8_t tempReg);
+            
+            // Register callbacks after a packet of FIFO data is processed
+            //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
+            //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
+            uint8_t dmpRunFIFORateProcesses();
+            
+            // Setup FIFO for various output
+            uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
+            uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
+            uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
 
-    // Get Fixed Point data from FIFO
-    uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
-    uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
-    uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
+            // Get Fixed Point data from FIFO
+            uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
+            uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
+            uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
+            uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
+            uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
+            uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
+            
+            uint8_t dmpGetEuler(float *data, Quaternion *q);
+            uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
 
-    // Get Floating Point data from FIFO
-    uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
-
-    uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
+            // Get Floating Point data from FIFO
+            uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
 
-    uint8_t dmpInitFIFOParam();
-    uint8_t dmpCloseFIFO();
-    uint8_t dmpSetGyroDataSource(uint8_t source);
-    uint8_t dmpDecodeQuantizedAccel();
-    uint32_t dmpGetGyroSumOfSquare();
-    uint32_t dmpGetAccelSumOfSquare();
-    void dmpOverrideQuaternion(long *q);
-#endif
+            uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
+            uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL);
+
+            uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
 
-    // special methods for MotionApps 4.1 implementation
-#ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41
-    uint8_t *dmpPacketBuffer;
-    uint16_t dmpPacketSize;
-
-    uint8_t dmpInitialize();
-    bool dmpPacketAvailable();
+            uint8_t dmpInitFIFOParam();
+            uint8_t dmpCloseFIFO();
+            uint8_t dmpSetGyroDataSource(uint8_t source);
+            uint8_t dmpDecodeQuantizedAccel();
+            uint32_t dmpGetGyroSumOfSquare();
+            uint32_t dmpGetAccelSumOfSquare();
+            void dmpOverrideQuaternion(long *q);
+            uint16_t dmpGetFIFOPacketSize();
+        #endif
 
-    uint8_t dmpSetFIFORate(uint8_t fifoRate);
-    uint8_t dmpGetFIFORate();
-    uint8_t dmpGetSampleStepSizeMS();
-    uint8_t dmpGetSampleFrequency();
-    int32_t dmpDecodeTemperature(int8_t tempReg);
+        // special methods for MotionApps 4.1 implementation
+        #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41
+            uint8_t *dmpPacketBuffer;
+            uint16_t dmpPacketSize;
 
-    // Register callbacks after a packet of FIFO data is processed
-    //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
-    //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
-    uint8_t dmpRunFIFORateProcesses();
+            uint8_t dmpInitialize();
+            bool dmpPacketAvailable();
 
-    // Setup FIFO for various output
-    uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
-    uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
-    uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
-    uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSetFIFORate(uint8_t fifoRate);
+            uint8_t dmpGetFIFORate();
+            uint8_t dmpGetSampleStepSizeMS();
+            uint8_t dmpGetSampleFrequency();
+            int32_t dmpDecodeTemperature(int8_t tempReg);
+            
+            // Register callbacks after a packet of FIFO data is processed
+            //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
+            //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
+            uint8_t dmpRunFIFORateProcesses();
+            
+            // Setup FIFO for various output
+            uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
+            uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
+            uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+            uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
 
-    // Get Fixed Point data from FIFO
-    uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0);
-    uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
-    uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
-    uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
-    uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
-    uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
-    uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
-    uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
+            // Get Fixed Point data from FIFO
+            uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
+            uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity);
+            uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q);
+            uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q);
+            uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0);
+            uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0);
+            uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0);
+            
+            uint8_t dmpGetEuler(float *data, Quaternion *q);
+            uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
 
-    uint8_t dmpGetEuler(float *data, Quaternion *q);
-    uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity);
+            // Get Floating Point data from FIFO
+            uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
+            uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
 
-    // Get Floating Point data from FIFO
-    uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0);
-    uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0);
+            uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
+            uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL);
 
-    uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData);
-    uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL);
-
-    uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
+            uint8_t dmpSetFIFOProcessedCallback(void (*func) (void));
 
-    uint8_t dmpInitFIFOParam();
-    uint8_t dmpCloseFIFO();
-    uint8_t dmpSetGyroDataSource(uint8_t source);
-    uint8_t dmpDecodeQuantizedAccel();
-    uint32_t dmpGetGyroSumOfSquare();
-    uint32_t dmpGetAccelSumOfSquare();
-    void dmpOverrideQuaternion(long *q);
-    uint16_t dmpGetFIFOPacketSize();
-#endif
+            uint8_t dmpInitFIFOParam();
+            uint8_t dmpCloseFIFO();
+            uint8_t dmpSetGyroDataSource(uint8_t source);
+            uint8_t dmpDecodeQuantizedAccel();
+            uint32_t dmpGetGyroSumOfSquare();
+            uint32_t dmpGetAccelSumOfSquare();
+            void dmpOverrideQuaternion(long *q);
+            uint16_t dmpGetFIFOPacketSize();
+        #endif
 
-private:
-    uint8_t devAddr;
-    uint8_t buffer[14];
+    private:
+        uint8_t devAddr;
+        uint8_t buffer[14];
 };
 
 #endif /* _MPU6050_H_ */
\ No newline at end of file
diff -r b1b98e5c61df -r 3f0bc381e1dd MPU/inc/MPU6050_6Axis_MotionApps20.h
--- a/MPU/inc/MPU6050_6Axis_MotionApps20.h	Thu May 08 09:37:25 2014 +0000
+++ b/MPU/inc/MPU6050_6Axis_MotionApps20.h	Tue May 27 09:21:09 2014 +0000
@@ -30,7 +30,7 @@
 ===============================================
 */
 
-#include "tasks.h"
+//#include "tasks.h"
 
 #ifndef _MPU6050_6AXIS_MOTIONAPPS20_H_
 #define _MPU6050_6AXIS_MOTIONAPPS20_H_
@@ -305,7 +305,7 @@
     0x07,   0x46,   0x01,   0x9A,                     // CFG_GYRO_SOURCE inv_send_gyro
     0x07,   0x47,   0x04,   0xF1, 0x28, 0x30, 0x38,   // CFG_9 inv_send_gyro -> inv_construct3_fifo
     0x07,   0x6C,   0x04,   0xF1, 0x28, 0x30, 0x38,   // CFG_12 inv_send_accel -> inv_construct3_fifo
-    0x02,   0x16,   0x02,   0x00, IMU_FIFO_RATE_DIVIDER                // D_0_22 inv_set_fifo_rate
+    0x02,   0x16,   0x02,   0x00, 0x01                // D_0_22 inv_set_fifo_rate
 
     // This very last 0x01 WAS a 0x09, which drops the FIFO rate down to 20 Hz. 0x07 is 25 Hz,
     // 0x01 is 100Hz. Going faster than 100Hz (0x00=200Hz) tends to result in very noisy data.
diff -r b1b98e5c61df -r 3f0bc381e1dd MPU/src/MPU6050.cpp
--- a/MPU/src/MPU6050.cpp	Thu May 08 09:37:25 2014 +0000
+++ b/MPU/src/MPU6050.cpp	Tue May 27 09:21:09 2014 +0000
@@ -3,7 +3,7 @@
 //
 //Changelog:
 //2013-01-08 - first beta release
- 
+
 // I2Cdev library collection - MPU6050 I2C device class
 // Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00)
 // 8/24/2011 by Jeff Rowberg <jeff@rowberg.net>
@@ -11,25 +11,25 @@
 //
 // Changelog:
 //     ... - ongoing debug release
- 
+
 // NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE
 // DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF
 // YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING.
- 
+
 /* ============================================
 I2Cdev device library code is placed under the MIT license
 Copyright (c) 2012 Jeff Rowberg
- 
+
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
- 
+
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
- 
+
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -57,11 +57,6 @@
     devAddr = MPU6050_DEFAULT_ADDRESS;
 }
 
-MPU6050::MPU6050(PinName i2cSDA, PinName i2cSCL) : i2Cdev(i2cSDA, i2cSCL), debugSerial(USBTX, USBRX)
-{
-    devAddr = MPU6050_DEFAULT_ADDRESS;
-}
-
 /** Specific address constructor.
  * @param address I2C address
  * @see MPU6050_DEFAULT_ADDRESS
@@ -82,6 +77,7 @@
  */
 void MPU6050::initialize()
 {
+
 #ifdef useDebugSerial
     debugSerial.printf("MPU6050::initialize start\n");
 #endif
@@ -1053,7 +1049,7 @@
 }
 /** Set the enabled value for the specified slave (0-3).
  * @param num Slave number (0-3)
- * @param enabled New enabled value for specified slave
+ * @param enabled New enabled value for specified slave 
  * @see getSlaveEnabled()
  * @see MPU6050_RA_I2C_SLV0_CTRL
  */
@@ -1886,7 +1882,7 @@
 void MPU6050::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)
 {
     getMotion6(ax, ay, az, gx, gy, gz);
-
+    
     // magnetometer reading
     i2Cdev.writeByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0x02); //set i2c bypass enable pin to true to access magnetometer
     wait_ms(10); // necessary wait >=6ms
diff -r b1b98e5c61df -r 3f0bc381e1dd MPU/src/MPU6050_6Axis_MotionApps20.cpp
--- a/MPU/src/MPU6050_6Axis_MotionApps20.cpp	Thu May 08 09:37:25 2014 +0000
+++ b/MPU/src/MPU6050_6Axis_MotionApps20.cpp	Tue May 27 09:21:09 2014 +0000
@@ -113,7 +113,7 @@
             setIntEnabled(0x12);
 
             //DEBUG_PRINT("Setting sample rate to 200Hz...");
-            setRate(IMU_SAMPLE_RATE_DIVIDER); // 1khz / (1 + 4) = 200 Hz
+            setRate(4); // 1khz / (1 + 4) = 200 Hz
 
             //DEBUG_PRINT("Setting external frame sync to TEMP_OUT_L[0]...\n");
             setExternalFrameSync(MPU6050_EXT_SYNC_TEMP_OUT_L);