a
Fork of FRDM_MMA8451Q by
Diff: MMA8451Q.cpp
- Revision:
- 10:fa532bf396fb
- Parent:
- 9:2aa9b1668d14
- Child:
- 11:13e2af71e2cf
diff -r 2aa9b1668d14 -r fa532bf396fb MMA8451Q.cpp --- a/MMA8451Q.cpp Tue May 28 20:19:38 2013 +0000 +++ b/MMA8451Q.cpp Thu Aug 22 15:21:47 2013 +0000 @@ -18,6 +18,7 @@ #include "MMA8451Q.h" +#define REG_STATUS 0x00 #define REG_WHO_AM_I 0x0D #define REG_CTRL_REG_1 0x2A #define REG_CTRL_REG_2 0x2B @@ -41,6 +42,12 @@ #define UINT14_MAX 16383 +// +#define ZYXDR 0x08 +#define ZDR 0x04 +#define YDR 0x02 +#define XDR 0x01 + /** Interrupt schema * * :: The FreeFall and Motion detection share the same IRQ2. @@ -471,6 +478,58 @@ return acc; } +unsigned int MMA8451Q::getAccRawAllAxis( int16_t * res) +{ + if ( isDataAvailable() & ZYXDR) + { + getAccRawX( &res[0]); + getAccRawY( &res[1]); + getAccRawZ( &res[2]); + return 1; + } else + return 0; +} + +int16_t MMA8451Q::getAccRawX( int16_t * res) +{ + if ( isDataAvailable() & XDR) + { + *res = getAccAxis(REG_OUT_X_MSB); + return 1; + } else + return 0; +} + +int16_t MMA8451Q::getAccRawY( int16_t * res) +{ + if ( isDataAvailable() & YDR) + { + *res = getAccAxis(REG_OUT_Y_MSB); + return 1; + } else + return 0; +} + +int16_t MMA8451Q::getAccRawZ( int16_t * res) +{ + if ( isDataAvailable() & ZDR) + { + *res = getAccAxis(REG_OUT_Z_MSB); + return 1; + } else + return 0; +} + +unsigned int MMA8451Q::isDataAvailable( void) +{ + unsigned char status; + + readRegs( REG_STATUS, &status, 1); + + return (status); + +} + void MMA8451Q::readRegs(int addr, uint8_t * data, int len) { char t[1] = {addr}; m_i2c.write(m_addr, t, 1, true);