The MPU9150s biggest selling point was its internal Motion Processor to offload the sensor fusion from the host processor, this library uploads the firmware to generate quaternions from the sensors. The API needs work but as other libraries don't support the DMP supplying as is.

Dependents:   MPU9150_Example CANSAT_COMBINED MPU9150_Example mbed_rifletool

Revision:
1:8ff0beb54dd4
Parent:
0:74f0ae286b03
Child:
2:e523a92390b6
--- a/MPU9150.cpp	Sun Aug 31 12:52:29 2014 +0000
+++ b/MPU9150.cpp	Mon Sep 01 13:35:07 2014 +0000
@@ -67,32 +67,23 @@
     reset();
     wait_ms(20);
     sleep(false);
-    
-//does this exist in the 9150?
-    char product[6] = {0,0,0,0,0,0};
-    read(0x77, product, 6 );
-    int rev = ((product[5] & 0x01) << 2) | ((product[3] & 0x01) << 1) |
-        (product[1] & 0x01);
-    debug.printf("%02X, %02X, %02X, %02X, %02X, %02X\r\n", product[0], product[1], product[2], product[3], product[4], product[5]);   
-    debug.printf("Product Revision: %d\r\n", rev);
-
 
     setMemoryBank(0x10, true, true);
     setMemoryStartAddress(0x06);
-    debug.printf("Hardware Version: %d\r\n", readMemoryByte());
+//    debug.printf("Hardware Version: %d\r\n", readMemoryByte());
 
     setMemoryBank(0);
     // check OTP bank valid
     uint8_t otpValid = getOTPBankValid();
-    debug.printf("optValid: %d\r\n", otpValid);
+//    debug.printf("optValid: %d\r\n", otpValid);
     
     //Enabling interrupt latch, clear on any read, AUX bypass enabled
     write(MPU6050_RA_INT_PIN_CFG, 0x32);
     
     if (writeMemoryBlock(dmpMemory, MPU6050_DMP_CODE_SIZE, 0 ,0, true)) {
-        debug.printf("Success! DMP code written and verified.\r\n");
+ //       debug.printf("Success! DMP code written and verified.\r\n");
         if (writeDMPConfigurationSet(dmpConfig, MPU6050_DMP_CONFIG_SIZE)) {
-            debug.printf("Success! DMP configuration written and verified.\r\n");
+//            debug.printf("Success! DMP configuration written and verified.\r\n");
             setIntDMPEnabled(true);
             setInterruptFifoOverflowEnable(true);
             setSampleRateDivider(4);
@@ -208,7 +199,7 @@
             
             setDMPEnabled(false);
             
-            debug.printf("finished\r\n");
+ //           debug.printf("finished\r\n");
 
         }
     }
@@ -609,10 +600,10 @@
     
         // make sure this chunk doesn't go past the bank boundary (256 bytes)
         if (chunkSize > 256 - address) chunkSize = 256 - address;
-        debug.printf("reading %d", chunkSize);
+        //debug.printf("reading %d", chunkSize);
         // read the chunk of data as specified
         read(MPU6050_RA_MEM_R_W, (char*)(data+i), chunkSize);
-        debug.printf("read");
+        //debug.printf("read");
         // increase byte index by [chunkSize]
         i += chunkSize;
     
@@ -658,7 +649,7 @@
             read(MPU6050_RA_MEM_R_W, (char*)verifyBuffer, chunkSize);
             if (memcmp(progBuffer, verifyBuffer, chunkSize) != 0) {
                 free(verifyBuffer);
-                debug.printf("invalid(%d, %d)\r\n", bank, read_errors, write_errors);
+                //debug.printf("invalid(%d, %d)\r\n", bank, read_errors, write_errors);
                 return false; // uh oh.
             }
         }
@@ -757,7 +748,7 @@
     
 int16_t MPU9150::get16(char reg_addr){
     char data[2];
-    if(!read(reg_addr, data, 2))debug.printf("get16: read fail:%02X\r\n", reg_addr);
+    read(reg_addr, data, 2);
     return (data[0]<<8) + data[1];
 }
 
@@ -778,7 +769,7 @@
     for(int i = 0; i < length; i++) {
         if(!i2c.write(data[i])){
             write_errors++;
-            debug.printf("Write Error %d\r\n", reg_addr);
+            //debug.printf("Write Error %d\r\n", reg_addr);
             return false;
         }
     }
@@ -814,12 +805,12 @@
 bool MPU9150::read(char reg_addr, char* data, int length){
     if(i2c.write(device_address << 1, &reg_addr, 1, true)){
         read_errors ++;
-        debug.printf("Read: Address Write Error %d\r\n", reg_addr);
+        //debug.printf("Read: Address Write Error %d\r\n", reg_addr);
         return false;
     }
     if(i2c.read(device_address << 1, data, length)){
         read_errors ++;
-        debug.printf("Read: Error %d\r\n", reg_addr);
+        //debug.printf("Read: Error %d\r\n", reg_addr);
         return false;
     }
     return true;