MSS / FXAS21002

Dependents:   test_FXAS21002 testSensor RD-KL25Z-AGMP01_SensorStream pelion-example-frdm ... more

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 }
00032 
00033 FXAS21002::~FXAS21002() { }
00034 
00035 uint8_t FXAS21002::getStatus(void) 
00036 {
00037     uint8_t status ;
00038     readRegs(REG_STATUS, &status, 1) ;
00039     return( status ) ;
00040 }
00041 
00042 int16_t FXAS21002::getX(void)
00043 {
00044     uint8_t data[2] ;
00045     int16_t value ;
00046     readRegs(REG_OUT_X_MSB, &data[0], 1) ;
00047     readRegs(REG_OUT_X_LSB, &data[1], 1) ;
00048     value = (data[0] << 8) | data[1] ;
00049     return(value) ;
00050 }
00051 
00052 int16_t FXAS21002::getY(void)
00053 {
00054     uint8_t data[2] ;
00055     int16_t value ;
00056     readRegs(REG_OUT_Y_MSB, &data[0], 1) ;
00057     readRegs(REG_OUT_Y_LSB, &data[1], 1) ;
00058     value = (data[0] << 8) | data[1] ;
00059     return(value) ;
00060 }
00061 
00062 int16_t FXAS21002::getZ(void)
00063 {
00064     uint8_t data[2] ;
00065     int16_t value ;
00066     readRegs(REG_OUT_Z_MSB, &data[0], 1) ;
00067     readRegs(REG_OUT_Z_LSB, &data[1], 1) ;
00068     value = (data[0] << 8) | data[1] ;
00069     return(value) ;
00070 }
00071 
00072 void FXAS21002::selftest(bool mode) 
00073 {
00074     uint8_t value ;
00075     value = getCTRL1() ;
00076     if (mode) {
00077         value |= 0x10 ;
00078     } else {
00079         value ^= 0x10 ;
00080     }
00081     setCTRL1(value) ;
00082 }
00083 
00084 void    FXAS21002::activate(bool mode) 
00085 {
00086     uint8_t value ;
00087     value = getCTRL1() ;
00088     if (mode) {
00089         value |= 0x02 ;
00090     } else {
00091         value ^= 0x02 ;
00092     }
00093     setCTRL1(value) ;
00094 }
00095 
00096 void FXAS21002::ready(bool mode) 
00097 {
00098     uint8_t value ;
00099     value = getCTRL1() ;
00100     if (mode) {
00101         value |= 0x01 ;
00102     } else {
00103         value ^= 0x01 ;
00104     }
00105     setCTRL1(value) ;   
00106 } 
00107 
00108 uint8_t FXAS21002::getCTRL1(void) 
00109 {
00110     uint8_t value ;
00111     readRegs(REG_CTRL_REG1, &value, 1) ;
00112     return(value) ;
00113 }
00114 
00115 void    FXAS21002::setCTRL1(uint8_t value) 
00116 {
00117     uint8_t data[2] ;
00118     data[0] = REG_CTRL_REG1 ;
00119     data[1] = value ;
00120     writeRegs(data, 2) ;
00121 }
00122 
00123 uint8_t FXAS21002::getCTRL2(void) 
00124 {
00125     uint8_t value ;
00126     readRegs(REG_CTRL_REG2, &value, 1) ;
00127     return(value) ;
00128 }
00129 
00130 void    FXAS21002::setCTRL2(uint8_t value) 
00131 {
00132     uint8_t data[2] ;
00133     data[0] = REG_CTRL_REG2 ;
00134     data[1] = value ;
00135     writeRegs(data, 2) ;
00136 }
00137 
00138 uint8_t FXAS21002::getCTRL3(void) 
00139 {
00140     uint8_t value ;
00141     readRegs(REG_CTRL_REG3, &value, 1) ;
00142     return(value) ;
00143 }
00144 
00145 void    FXAS21002::setCTRL3(uint8_t value) 
00146 {
00147     uint8_t data[2] ;
00148     data[0] = REG_CTRL_REG3 ;
00149     data[1] = value ;
00150     writeRegs(data, 2) ;
00151 }
00152 
00153 
00154 void FXAS21002::readRegs(int addr, uint8_t * data, int len) {
00155     char t[1] = {addr};
00156     m_i2c.write(m_addr, t, 1, true);
00157     m_i2c.read(m_addr, (char *)data, len);
00158 }
00159 
00160 void FXAS21002::writeRegs(uint8_t * data, int len) {
00161     m_i2c.write(m_addr, (char *)data, len);
00162 }