1

Revision:
20:d55e9d7eb17e
Parent:
19:4d6cd7140a71
Child:
21:a92a632a0cc7
--- a/MMA8452.cpp	Thu Mar 06 18:07:43 2014 +0000
+++ b/MMA8452.cpp	Fri Mar 07 11:55:30 2014 +0000
@@ -244,34 +244,51 @@
    return 0;
 }
 
-int readXCount(int *x) {
+int MMA8452::readXCount(int *x) {
    char buf[2];
    if(readXRaw((char*)&buf)) {
        return 1;
    }
    if(_bitDepth==BIT_DEPTH_12) {
      *x = twelveBitToSigned(&buf[0]);
-     *y = twelveBitToSigned(&buf[2]);
-     *z = twelveBitToSigned(&buf[4]);
    } else {
      *x = eightBitToSigned(&buf[0]);
-     *y = eightBitToSigned(&buf[1]);
-     *z = eightBitToSigned(&buf[2]);
+   }
+   return 0;
+}
+
+int MMA8452::readYCount(int *y) {
+   char buf[2];
+   if(readYRaw((char*)&buf)) {
+       return 1;
+   }
+   if(_bitDepth==BIT_DEPTH_12) {
+     *y = twelveBitToSigned(&buf[0]);
+   } else {
+     *y = eightBitToSigned(&buf[0]);
    }
-   
+   return 0;
+}
+
+int MMA8452::readZCount(int *z) {
+   char buf[2];
+   if(readZRaw((char*)&buf)) {
+       return 1;
+   }
+   if(_bitDepth==BIT_DEPTH_12) {
+     *z = twelveBitToSigned(&buf[0]);
+   } else {
+     *z = eightBitToSigned(&buf[0]);
+   }
+   return 0;
 }
 
 double MMA8452::convertCountToGravity(int count, int countsPerG) {
    return (double)count/(double)countsPerG;
 }
 
-int MMA8452::readXYZGravity(double *x, double *y, double *z) {
-   int xCount = 0, yCount = 0, zCount = 0;
-   if(readXYZCounts(&xCount,&yCount,&zCount)) {
-      return 1;
-   }
-   
-   // assume starting with DYNAMIC_RANGE_2G and BIT_DEPTH_12
+int MMA8452::getCountsPerG() {
+ // assume starting with DYNAMIC_RANGE_2G and BIT_DEPTH_12
    int countsPerG = 1024;
    if(_bitDepth==BIT_DEPTH_8) {
       countsPerG = 64;
@@ -284,6 +301,15 @@
          countsPerG /= 4;
       break;
    }
+   return countsPerG;
+}
+
+int MMA8452::readXYZGravity(double *x, double *y, double *z) {
+   int xCount = 0, yCount = 0, zCount = 0;
+   if(readXYZCounts(&xCount,&yCount,&zCount)) {
+      return 1;
+   }
+   int countsPerG = getCountsPerG();
    
    *x = convertCountToGravity(xCount,countsPerG);
    *y = convertCountToGravity(yCount,countsPerG);
@@ -291,6 +317,39 @@
    return 0;
 }
 
+int MMA8452::readXGravity(double *x) {
+   int xCount = 0;
+   if(readXCount(&xCount)) {
+      return 1;
+   }
+   int countsPerG = getCountsPerG();
+   
+   *x = convertCountToGravity(xCount,countsPerG);
+   return 0;
+}
+
+int MMA8452::readYGravity(double *y) {
+   int yCount = 0;
+   if(readYCount(&yCount)) {
+      return 1;
+   }
+   int countsPerG = getCountsPerG();
+   
+   *y = convertCountToGravity(yCount,countsPerG);
+   return 0;
+}
+
+int MMA8452::readZGravity(double *z) {
+   int zCount = 0;
+   if(readZCount(&zCount)) {
+      return 1;
+   }
+   int countsPerG = getCountsPerG();
+   
+   *z = convertCountToGravity(zCount,countsPerG);
+   return 0;
+}
+
 // apply an AND mask to a register. read register value, apply mask, write it back
 int MMA8452::logicalANDRegister(char addr, char mask) {
    char value = 0;