Code to get all the data through serial port

Dependents:   payload_sensor payload_sensor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FXAS21002.cpp Source File

FXAS21002.cpp

00001 #include "mbed.h"
00002 #include "FXAS21002.h"
00003 
00004 /* Register Address definitions */
00005 #define REG_STATUS          0x00
00006 #define REG_OUT_X_MSB       0x01
00007 #define REG_OUT_X_LSB       0x02
00008 #define REG_OUT_Y_MSB       0x03
00009 #define REG_OUT_Y_LSB       0x04
00010 #define REG_OUT_Z_MSB       0x05
00011 #define REG_OUT_Z_LSB       0x06
00012 #define REG_DR_STATUS       0x07
00013 #define REG_F_STATUS        0x08
00014 #define REG_F_SETUP         0x09
00015 #define REG_F_EVENT         0x0A
00016 #define REG_INT_SRC_FLAG    0x0B
00017 #define REG_WHO_AM_I        0x0C
00018 #define REG_CTRL_REG0       0x0D
00019 #define REG_RT_CFG          0x0E
00020 #define REG_RT_SRC          0x0F
00021 #define REG_RT_THS          0x10
00022 #define REG_RT_COUNT        0x11
00023 #define REG_TEMP            0x12
00024 #define REG_CTRL_REG1       0x13
00025 #define REG_CTRL_REG2       0x14
00026 #define REG_CTRL_REG3       0x15
00027 
00028 
00029 FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
00030     // activate the peripheral
00031     FXAS21002::activate(1);
00032     FXAS21002::ready(1);
00033 }
00034 
00035 FXAS21002::~FXAS21002() { }
00036 
00037 uint8_t FXAS21002::getStatus(void) 
00038 {
00039     uint8_t status ;
00040     readRegs(REG_STATUS, &status, 1) ;
00041     return( status ) ;
00042 }
00043 
00044 int16_t FXAS21002::getX(void)
00045 {
00046     uint8_t data[2] ;
00047     int16_t value ;
00048     readRegs(REG_OUT_X_MSB, &data[0], 1) ;
00049     readRegs(REG_OUT_X_LSB, &data[1], 1) ;
00050     value = (data[0] << 8) | data[1] ;
00051 //    printf("X: %d,%d, %d\t", data[0], data[1], value);
00052     return(value) ;
00053 }
00054 
00055 int16_t FXAS21002::getY(void)
00056 {
00057     uint8_t data[2] ;
00058     int16_t value ;
00059     readRegs(REG_OUT_Y_MSB, &data[0], 1) ;
00060     readRegs(REG_OUT_Y_LSB, &data[1], 1) ;
00061     value = (data[0] << 8) | data[1] ;
00062 //    printf("Y: %d,%d, %d\t", data[0], data[1], value);
00063     return(value) ;
00064 }
00065 
00066 int16_t FXAS21002::getZ(void)
00067 {
00068     uint8_t data[2] ;
00069     int16_t value ;
00070     readRegs(REG_OUT_Z_MSB, &data[0], 1) ;
00071     readRegs(REG_OUT_Z_LSB, &data[1], 1) ;
00072     value = (data[0] << 8) | data[1] ;
00073 //    printf("Z: %d,%d, %d\t", data[0], data[1], value);
00074     return(value) ;
00075 }
00076 
00077 void FXAS21002::selftest(bool mode) 
00078 {
00079     uint8_t value ;
00080     value = getCTRL1() ;
00081     if (mode) {
00082         value |= 0x10 ;
00083     } else {
00084         value ^= 0x10 ;
00085     }
00086     setCTRL1(value) ;
00087 }
00088 
00089 void    FXAS21002::activate(bool mode) 
00090 {
00091     uint8_t value ;
00092     value = getCTRL1() ;
00093     if (mode) {
00094         value |= 0x02 ;
00095     } else {
00096         value ^= 0x02 ;
00097     }
00098     setCTRL1(value) ;
00099 }
00100 
00101 void FXAS21002::ready(bool mode) 
00102 {
00103     uint8_t value ;
00104     value = getCTRL1() ;
00105     if (mode) {
00106         value |= 0x01 ;
00107     } else {
00108         value ^= 0x01 ;
00109     }
00110     setCTRL1(value) ;   
00111 } 
00112 
00113 uint8_t FXAS21002::getCTRL1(void) 
00114 {
00115     uint8_t value ;
00116     readRegs(REG_CTRL_REG1, &value, 1) ;
00117     return(value) ;
00118 }
00119 
00120 void    FXAS21002::setCTRL1(uint8_t value) 
00121 {
00122     uint8_t data[2] ;
00123     data[0] = REG_CTRL_REG1 ;
00124     data[1] = value ;
00125     writeRegs(data, 2) ;
00126 }
00127 
00128 uint8_t FXAS21002::getCTRL2(void) 
00129 {
00130     uint8_t value ;
00131     readRegs(REG_CTRL_REG2, &value, 1) ;
00132     return(value) ;
00133 }
00134 
00135 void    FXAS21002::setCTRL2(uint8_t value) 
00136 {
00137     uint8_t data[2] ;
00138     data[0] = REG_CTRL_REG2 ;
00139     data[1] = value ;
00140     writeRegs(data, 2) ;
00141 }
00142 
00143 uint8_t FXAS21002::getCTRL3(void) 
00144 {
00145     uint8_t value ;
00146     readRegs(REG_CTRL_REG3, &value, 1) ;
00147     return(value) ;
00148 }
00149 
00150 void    FXAS21002::setCTRL3(uint8_t value) 
00151 {
00152     uint8_t data[2] ;
00153     data[0] = REG_CTRL_REG3 ;
00154     data[1] = value ;
00155     writeRegs(data, 2) ;
00156 }
00157 
00158 
00159 void FXAS21002::readRegs(int addr, uint8_t * data, int len) {
00160     char t[1] = {addr};
00161     m_i2c.write(m_addr, t, 1, true);
00162     m_i2c.read(m_addr, (char *)data, len);
00163 }
00164 
00165 void FXAS21002::writeRegs(uint8_t * data, int len) {
00166     m_i2c.write(m_addr, (char *)data, len);
00167 }