Fork

Dependents:   BG96_K6xF_pelion-example-frdm BG96_K6xF_pelion-example-frdm_Temp

Files at this revision

API Documentation at this revision

Comitter:
Rhyme
Date:
Fri Jul 22 08:31:32 2016 +0000
Child:
1:8461f7fe0a7f
Commit message:
First commit before publishing

Changed in this revision

FXAS21002.cpp Show annotated file Show diff for this revision Revisions of this file
FXAS21002.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FXAS21002.cpp	Fri Jul 22 08:31:32 2016 +0000
@@ -0,0 +1,162 @@
+#include "mbed.h"
+#include "FXAS21002.h"
+
+/* Register Address definitions */
+#define REG_STATUS          0x00
+#define REG_OUT_X_MSB       0x01
+#define REG_OUT_X_LSB       0x02
+#define REG_OUT_Y_MSB       0x03
+#define REG_OUT_Y_LSB       0x04
+#define REG_OUT_Z_MSB       0x05
+#define REG_OUT_Z_LSB       0x06
+#define REG_DR_STATUS       0x07
+#define REG_F_STATUS        0x08
+#define REG_F_SETUP         0x09
+#define REG_F_EVENT         0x0A
+#define REG_INT_SRC_FLAG    0x0B
+#define REG_WHO_AM_I        0x0C
+#define REG_CTRL_REG0       0x0D
+#define REG_RT_CFG          0x0E
+#define REG_RT_SRC          0x0F
+#define REG_RT_THS          0x10
+#define REG_RT_COUNT        0x11
+#define REG_TEMP            0x12
+#define REG_CTRL_REG1       0x13
+#define REG_CTRL_REG2       0x14
+#define REG_CTRL_REG3       0x15
+
+
+FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
+    // activate the peripheral
+}
+
+FXAS21002::~FXAS21002() { }
+
+uint8_t FXAS21002::getStatus(void) 
+{
+    uint8_t status ;
+    readRegs(REG_STATUS, &status, 1) ;
+    return( status ) ;
+}
+
+int16_t FXAS21002::getX(void)
+{
+    uint8_t data[2] ;
+    int16_t value ;
+    readRegs(REG_OUT_X_MSB, &data[0], 1) ;
+    readRegs(REG_OUT_X_LSB, &data[1], 1) ;
+    value = (data[0] << 8) | data[1] ;
+    return(value) ;
+}
+
+int16_t FXAS21002::getY(void)
+{
+    uint8_t data[2] ;
+    int16_t value ;
+    readRegs(REG_OUT_Y_MSB, &data[0], 1) ;
+    readRegs(REG_OUT_Y_LSB, &data[1], 1) ;
+    value = (data[0] << 8) | data[1] ;
+    return(value) ;
+}
+
+int16_t FXAS21002::getZ(void)
+{
+    uint8_t data[2] ;
+    int16_t value ;
+    readRegs(REG_OUT_Z_MSB, &data[0], 1) ;
+    readRegs(REG_OUT_Z_LSB, &data[1], 1) ;
+    value = (data[0] << 8) | data[1] ;
+    return(value) ;
+}
+
+void selftest(bool mode) 
+{
+    uint8_t value ;
+    value = getCTRL1() ;
+    if (mode) {
+        value |= 0x10 ;
+    } else {
+        value ^= 0x10 ;
+    }
+    setCTRL1(value) ;
+}
+
+void    FXAS21002::activate(bool mode) 
+{
+    uint8_t value ;
+    value = getCTRL1() ;
+    if (mode) {
+        value |= 0x02 ;
+    } else {
+        value ^= 0x02 ;
+    }
+    setCTRL1(value) ;
+}
+
+void FXAS21002::ready(bool mode) 
+{
+    uint8_t value ;
+    value = getCTRL1() ;
+    if (mode) {
+        value |= 0x01 ;
+    } else {
+        value ^= 0x01 ;
+    }
+    setCTRL1(value) ;   
+} 
+
+uint8_t FXAS21002::getCTRL1(void) 
+{
+    uint8_t value ;
+    readRegs(REG_CTRL_REG1, &value, 1) ;
+    return(value) ;
+}
+
+void    FXAS21002::setCTRL1(uint8_t value) 
+{
+    uint8_t data[2] ;
+    data[0] = REG_CTRL_REG1 ;
+    data[1] = value ;
+    writeRegs(data, 2) ;
+}
+
+uint8_t FXAS21002::getCTRL2(void) 
+{
+    uint8_t value ;
+    readRegs(REG_CTRL_REG2, &value, 1) ;
+    return(value) ;
+}
+
+void    FXAS21002::setCTRL2(uint8_t value) 
+{
+    uint8_t data[2] ;
+    data[0] = REG_CTRL_REG2 ;
+    data[1] = value ;
+    writeRegs(data, 2) ;
+}
+
+uint8_t FXAS21002::getCTRL3(void) 
+{
+    uint8_t value ;
+    readRegs(REG_CTRL_REG3, &value, 1) ;
+    return(value) ;
+}
+
+void    FXAS21002::setCTRL3(uint8_t value) 
+{
+    uint8_t data[2] ;
+    data[0] = REG_CTRL_REG3 ;
+    data[1] = value ;
+    writeRegs(data, 2) ;
+}
+
+
+void FXAS21002::readRegs(int addr, uint8_t * data, int len) {
+    char t[1] = {addr};
+    m_i2c.write(m_addr, t, 1, true);
+    m_i2c.read(m_addr, (char *)data, len);
+}
+
+void FXAS21002::writeRegs(uint8_t * data, int len) {
+    m_i2c.write(m_addr, (char *)data, len);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FXAS21002.h	Fri Jul 22 08:31:32 2016 +0000
@@ -0,0 +1,166 @@
+/**
+ * FXAS21002
+ * 3-Axis Digital Angular Rate Gyroscope
+ */
+#ifndef FXAS21002_H
+#define FXAS21002_H
+
+#include "mbed.h"
+
+/**
+* 
+*
+* @code
+#include "mbed.h"
+#include "FXAS21002.h"
+#define FXAS21002_I2C_ADDRESS (0x20)
+
+#if defined (TARGET_KL25Z)
+#define PIN_SCL  PTE1
+#define PIN_SDA  PTE0
+#elif defined (TARGET_KL46Z)
+#define PIN_SCL  PTE1
+#define PIN_SDA  PTE0
+#elif defined (TARGET_K64F)
+#define PIN_SCL  PTE24
+#define PIN_SDA  PTE25
+#elif defined (TARGET_K22F)
+#define PIN_SCL  PTE1
+#define PIN_SDA  PTE0
+#elif defined (TARGET_KL05Z)
+#define PIN_SCL  PTB3
+#define PIN_SDA  PTB4
+#elif defined (TARGET_NUCLEO_F411RE)
+#define PIN_SCL  PB_8
+#define PIN_SDA  PB_9
+#else
+ #error TARGET NOT DEFINED
+#endif
+
+int main() {
+    uint16_t result = 0 ;
+    int16_t temperature = 0 ;
+    FXAS21002 FXAS21002(PIN_SDA, PIN_SCL, FXAS21002_I2C_ADDRESS) ;
+    
+    while(1) {
+        result = FXAS21002.getValue(&temperature) ;
+        printf("Temp %d C\n", temperature) ;
+        wait(1) ;
+    }
+}
+* @endcode
+*/
+class FXAS21002
+{
+public:
+  /**
+  * FXAS21002 constructor
+  *
+  * @param sda SDA pin
+  * @param sdl SCL pin
+  * @param addr addr of the I2C peripheral
+  */
+  FXAS21002(PinName sda, PinName scl, int addr);
+
+  /**
+  * FXAS21002 destructor
+  */
+  ~FXAS21002();
+  
+  /**
+   * status register
+   */
+  uint8_t getStatus(void) ;
+  
+  /**
+   * getX returns the value of 
+   *  REG_OUT_X_MSB  
+   *  REG_OUT_X_LSB
+   * as a signed 16bit integer
+   */
+  int16_t getX(void) ;
+  
+    /**
+   * getY returns the value of 
+   *  REG_OUT_Y_MSB  
+   *  REG_OUT_Y_LSB
+   * as a signed 16bit integer
+   */
+  int16_t getY(void) ;
+  
+    /**
+   * getZ returns the value of 
+   *  REG_OUT_Z_MSB  
+   *  REG_OUT_Z_LSB
+   * as a signed 16bit integer
+   */
+  int16_t getZ(void) ;
+  
+  /**
+   * activate/deactivate the sensor
+   *
+   * @param mode true: Active false: Standby
+   */ 
+  void    activate(bool mode) ;
+  
+   /**
+   * Self-Test enable
+   *
+   * @param mode true: Self-Test enabled, false: Self-Test disabled
+   */
+   void selftest(bool mode) ;
+   
+   /**
+    * Standby/Ready mode selection
+    *
+    * @param mode true: Ready, false: Standby
+    */
+   void ready(bool mode) ; 
+   
+  /**
+   * get value of CTRL_REG1
+   */
+  uint8_t getCTRL1(void) ;
+  
+  /**
+   * set value to CTRL_REG1
+   *
+   * @param value value for CTRL_REG1
+   */
+  void    setCTRL1(uint8_t value) ;
+  
+  /** 
+   * get value of CTRL_REG2
+   */
+  uint8_t getCTRL2(void) ;
+  
+  /**
+   * set value to CTRL_REG2
+   *
+   * @param value value for CTRL_REG2
+   */
+  void    setCTRL2(uint8_t value) ;
+  
+  /**
+   * get value of CTRL_REG3
+   */
+  uint8_t getCTRL3(void) ;
+  
+  /**
+   * set value to CTRL_REG3
+   *
+   * @param value value for CTRL_REG3
+   */
+  void    setCTRL3(uint8_t value) ;
+  
+
+
+private:
+  I2C m_i2c;
+  int m_addr;
+  void readRegs(int addr, uint8_t * data, int len);
+  void writeRegs(uint8_t * data, int len);
+
+};
+
+#endif
\ No newline at end of file