Works with 8g
Fork of MMA8452 by
Diff: MMA8452.h
- Revision:
- 12:172540ff6b8b
- Parent:
- 11:dfd1e0afcb7b
- Child:
- 13:4bd8b4cd479d
--- a/MMA8452.h Tue Mar 04 16:23:40 2014 +0000 +++ b/MMA8452.h Tue Mar 04 17:50:47 2014 +0000 @@ -74,42 +74,44 @@ #endif // Register descriptions found in section 6 of pdf -#define STATUS 0x00 // Type 'read' : Real time status, should return 0x00 -#define OUT_X_MSB 0x01 // Type 'read' : x axis - 8 most significatn bit of a 12 bit sample -#define OUT_X_LSB 0x02 // Type 'read' : x axis - 4 least significatn bit of a 12 bit sample -#define OUT_Y_MSB 0x03 // Type 'read' : y axis - 8 most significatn bit of a 12 bit sample -#define OUT_Y_LSB 0x04 // Type 'read' : y axis - 4 least significatn bit of a 12 bit sample -#define OUT_Z_MSB 0x05 // Type 'read' : z axis - 8 most significatn bit of a 12 bit sample -#define OUT_Z_LSB 0x06 // Type 'read' : z axis - 4 least significatn bit of a 12 bit sample +#define MMA8452_STATUS 0x00 // Type 'read' : Status of the data registers +#define MMA8452_OUT_X_MSB 0x01 // Type 'read' : x axis - MSB of 2 byte sample +#define MMA8452_OUT_X_LSB 0x02 // Type 'read' : x axis - LSB of 2 byte sample +#define MMA8452_OUT_Y_MSB 0x03 // Type 'read' : y axis - MSB of 2 byte sample +#define MMA8452_OUT_Y_LSB 0x04 // Type 'read' : y axis - LSB of 2 byte sample +#define MMA8452_OUT_Z_MSB 0x05 // Type 'read' : z axis - MSB of 2 byte sample +#define MMA8452_OUT_Z_LSB 0x06 // Type 'read' : z axis - LSB of 2 byte sample -#define SYSMOD 0x0B // Type 'read' : This tells you if device is active, sleep or standy 0x00=STANDBY 0x01=WAKE 0x02=SLEEP -#define WHO_AM_I 0x0D // Type 'read' : This should return the device id of 0x2A +// register definitions +#define MMA8452_XYZ_DATA_CFG 0x0E + +#define MMA8452_SYSMOD 0x0B // Type 'read' : This tells you if device is active, sleep or standy 0x00=STANDBY 0x01=WAKE 0x02=SLEEP +#define MMA8452_WHO_AM_I 0x0D // Type 'read' : This should return the device id of 0x2A -#define PL_STATUS 0x10 // Type 'read' : This shows portrait landscape mode orientation -#define PL_CFG 0x11 // Type 'read/write' : This allows portrait landscape configuration -#define PL_COUNT 0x12 // Type 'read' : This is the portraint landscape debounce counter -#define PL_BF_ZCOMP 0x13 // Type 'read' : -#define PL_THS_REG 0x14 // Type 'read' : +#define MMA8452_PL_STATUS 0x10 // Type 'read' : This shows portrait landscape mode orientation +#define MMA8452_PL_CFG 0x11 // Type 'read/write' : This allows portrait landscape configuration +#define MMA8452_PL_COUNT 0x12 // Type 'read' : This is the portraint landscape debounce counter +#define MMA8452_PL_BF_ZCOMP 0x13 // Type 'read' : +#define MMA8452_PL_THS_REG 0x14 // Type 'read' : -#define FF_MT_CFG 0X15 // Type 'read/write' : Freefaul motion functional block configuration -#define FF_MT_SRC 0X16 // Type 'read' : Freefaul motion event source register -#define FF_MT_THS 0X17 // Type 'read' : Freefaul motion threshold register -#define FF_COUNT 0X18 // Type 'read' : Freefaul motion debouce counter +#define MMA8452_FF_MT_CFG 0X15 // Type 'read/write' : Freefaul motion functional block configuration +#define MMA8452_FF_MT_SRC 0X16 // Type 'read' : Freefaul motion event source register +#define MMA8452_FF_MT_THS 0X17 // Type 'read' : Freefaul motion threshold register +#define MMA8452_FF_COUNT 0X18 // Type 'read' : Freefaul motion debouce counter -#define ASLP_COUNT 0x29 // Type 'read/write' : Counter settings for auto sleep -#define CTRL_REG_1 0x2A // Type 'read/write' : -#define CTRL_REG_2 0x2B // Type 'read/write' : -#define CTRL_REG_3 0x2C // Type 'read/write' : -#define CTRL_REG_4 0x2D // Type 'read/write' : -#define CTRL_REG_5 0x2E // Type 'read/write' : +#define MMA8452_ASLP_COUNT 0x29 // Type 'read/write' : Counter settings for auto sleep +#define MMA8452_CTRL_REG_1 0x2A // Type 'read/write' : +#define MMA8452_CTRL_REG_2 0x2B // Type 'read/write' : +#define MMA8452_CTRL_REG_3 0x2C // Type 'read/write' : +#define MMA8452_CTRL_REG_4 0x2D // Type 'read/write' : +#define MMA8452_CTRL_REG_5 0x2E // Type 'read/write' : // Defined in table 13 of the Freescale PDF +/// xxx these all need to have better names #define STANDBY 0x00 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP #define WAKE 0x01 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP #define SLEEP 0x02 // State value returned after a SYSMOD request, it can be in state STANDBY, WAKE or SLEEP #define ACTIVE 0x01 // Stage value returned and set in Control Register 1, it can be STANDBY=00, or ACTIVE=01 - - #define TILT_STATUS 0x03 // Tilt Status (Read only) #define SRST_STATUS 0x04 // Sample Rate Status Register (Read only) @@ -120,23 +122,27 @@ #define PDET_STATUS 0x09 // Tap/Pulse Detection Register (Read/Write) #define PD_STATUS 0xA // Tap/Pulse Debounce Count Register (Read/Write) +// masks for enabling/disabling standby #define MMA8452_ACTIVE_MASK 0x01 #define MMA8452_STANDBY_MASK 0xFE - -#define MMA8452_XYZ_DATA_CFG 0x0E -#define MMA8452_CTRL_REG_1 0x2A +// mask for dynamic range reading and writing #define MMA8452_DYNAMIC_RANGE_MASK 0xFC - +// mask and shift for data rate reading and writing #define MMA8452_DATA_RATE_MASK 0xC7 #define MMA8452_DATA_RATE_MASK_SHIFT 0x03 +// mask and shift for general reading and writing #define MMA8452_WRITE_MASK 0xFE #define MMA8452_READ_MASK 0x01 +// mask and shift for bit depth reading and writing #define MMA8452_BIT_DEPTH_MASK 0xFD #define MMA8452_BIT_DEPTH_MASK_SHIFT 0x01 + +// status masks and shifts +#define MMA8452_STATUS_ZYXDR_MASK 0x08 class MMA8452 { @@ -151,7 +157,8 @@ enum BitDepth { BIT_DEPTH_12=0x00, - BIT_DEPTH_8 // 1 sets fast read mode, hence the inversion + BIT_DEPTH_8, // 1 sets fast read mode, hence the inversion + BIT_DEPTH_UNKNOWN }; enum DataRateHz { @@ -228,21 +235,19 @@ */ int getDeviceID(char* dst); - int read_y(); - - int read_z(); + int getStatus(char* dst); /** Read the x register of the MMA8452 * * @returns The value of x acceleration */ - int readRawX(char *xaxis); - //int read_x(int& xaxisLSB); + int readRawX(char *dst); + /** Read the y register of the MMA8452 - * - * @returns The value of y acceleration - */ - int readRawY(char *yaxis); + * @param dst The destination buffer + * @returns The value of y acceleration + */ + int readRawY(char *dst); /** Read the z register of the MMA8452 * @@ -250,30 +255,41 @@ */ int readRawZ(char * zaxis); - /** Read the x,y and z registers of the MMA8452 + /** + * Read the x,y, and z registers of the MMA8452. * - * takes a 2 byte char buffer to store the value - * for each axis. - * returns 0 for success, and 1 for failure - * + * @param dst The destination buffer. Note that this needs to be 3 bytes for + * BIT_DEPTH_8 and 6 bytes for BIT_DEPTH_12. It is upto the caller to ensure this. + * @return 0 for success, and 1 for failure */ - int readRawXYZ(char *x, char *y, char *z); + int readRawXYZ(char *dst); + + int isXYZReady(); - /** Read from specified MMA8452 register - * - * @param addr The internal registeraddress of the MMA8452 - * @returns The value of the register - */ + /** Read from specified MMA8452 register + * + * @param addr The internal registeraddress of the MMA8452 + * @return The value of the register + */ int readRegister(char addr, char *dst); int readRegister(char addr, char *dst, int nbytes); - /** Write to specified MMA8452 register + /** + * Write to the specified MMA8452 register. * - * @param addr The internal registeraddress of the MMA8452 - * @param data New value of the register + * @param addr The internal register address + * @param data Data to write */ int writeRegister(char addr, char data); + + /** + * Write a data buffer to the specified MMA8452 register. + * + * @param addr The internal register address + * @param data Data buffer to write + * @param nbytes The length of the data buffer to write + */ int writeRegister(char addr, char *data, int nbytes); int logicalANDRegister(char addr, char mask); @@ -285,6 +301,7 @@ int setDataRate(DataRateHz dataRate, int toggleActivation=1); DynamicRange getDynamicRange(); DataRateHz getDataRate(); + BitDepth getBitDepth(); void debugRegister(char reg); @@ -296,6 +313,8 @@ int _frequency; int _readAddress; int _writeAddress; + + BitDepth _bitDepth; };