Library for Bosch Sensortec BMI160 IMU

Dependents:   Rocket MAX32630FTHR_JOYSTICK MAX32630FTHR_IMU_Hello_World Pike_the_Flipper_Main_Branch ... more

Fork of BMI160 by Justin Jordan

Revision:
2:598e601e5846
Parent:
1:a4c911640569
Child:
3:e1770675eca4
--- a/bmi160.h	Wed Dec 07 20:17:43 2016 +0000
+++ b/bmi160.h	Thu Dec 08 00:32:41 2016 +0000
@@ -45,16 +45,15 @@
 current consumption is typically 950 μA, enabling always-on applications in
 battery driven devices. It is available in a compact 14-pin 2.5 x 3.0 x 0.8 mm³
 LGA package."
+
+This class is an abstract base class and can not be instaniated, use BMI160_I2C 
+or BMI160_SPI.
 */
 class BMI160
 {
 public:
 
-    ///BMI160 default I2C address
-    static const uint8_t I2C_ADRS_SDO_LO = 0x68;
-    ///BMI160 optional I2C address
-    static const uint8_t I2C_ADRS_SDO_HI = 0x69;
-    
+    ///Return value on success.
     static const uint8_t NO_ERROR = 0;
     
     ///BMI160 registers
@@ -154,18 +153,6 @@
         CMD = 0x7E
     };
     
-    ///@brief BMI160 Constructor.\n
-    ///
-    ///On Entry:
-    ///@param[in] i2cBus - reference to I2C bus for this device
-    ///@param[in] i2cAdrs - 7-bit I2C address
-    ///
-    ///On Exit:
-    ///@param[out] none
-    ///
-    ///@returns none
-    BMI160(I2C &i2cBus, uint8_t i2cAdrs);
-    
     
     ///@brief BMI160 Destructor.\n
     ///
@@ -176,7 +163,7 @@
     ///@param[out] none
     ///
     ///@returns none
-    ~BMI160();
+    virtual ~BMI160(){ }
     
     
     ///@brief Reads a single register.\n
@@ -188,7 +175,7 @@
     ///@param[out] data - holds contents of read register on success
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t readRegister(Registers reg, uint8_t *data);
+    virtual int32_t readRegister(Registers reg, uint8_t *data) = 0;
     
     
     ///@brief Writes a single register.\n
@@ -200,7 +187,7 @@
     ///@param[out] none
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t writeRegister(Registers reg, uint8_t data);
+    virtual int32_t writeRegister(Registers reg, const uint8_t data) = 0;
     
     
     ///@brief Reads a block of registers.\n
@@ -217,7 +204,7 @@
     ///@param[out] data - holds contents of read registers on success
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t readBlock(Registers startReg, Registers stopReg, uint8_t *data);
+    virtual int32_t readBlock(Registers startReg, Registers stopReg, uint8_t *data) = 0;
     
     
     ///@brief Writes a block of registers.\n
@@ -234,23 +221,90 @@
     ///@param[out] none
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t writeBlock(Registers startReg, Registers stopReg, uint8_t *data);
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg, const uint8_t *data) = 0;
     
+private:
+
+};
+
+
+/**
+@brief BMI160_I2C - supports BMI160 object with I2C interface
+*/
+class BMI160_I2C: public BMI160
+{
+public:
+
+    ///BMI160 default I2C address.
+    static const uint8_t I2C_ADRS_SDO_LO = 0x68;
+    ///BMI160 optional I2C address.
+    static const uint8_t I2C_ADRS_SDO_HI = 0x69;
     
-    ///@brief fx documentation template.\n
+
+    ///@brief BMI160_I2C Constructor.\n
     ///
     ///On Entry:
-    ///@param[in] none 
+    ///@param[in] i2cBus - reference to I2C bus for this device
+    ///@param[in] i2cAdrs - 7-bit I2C address
     ///
     ///On Exit:
     ///@param[out] none
     ///
     ///@returns none
-
+    BMI160_I2C(I2C &i2cBus, uint8_t i2cAdrs);
+    
+    
+    virtual int32_t readRegister(Registers reg, uint8_t *data);
+    virtual int32_t writeRegister(Registers reg, const uint8_t data);
+    virtual int32_t readBlock(Registers startReg, Registers stopReg, uint8_t *data);
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg, const uint8_t *data);
+    
 private:
 
     I2C m_i2cBus;
     uint8_t m_Wadrs, m_Radrs;
 };
 
+
+/**
+@brief BMI160_SPI - supports BMI160 object with SPI interface
+*/
+class BMI160_SPI: public BMI160
+{
+public:
+
+    ///@brief BMI160_SPI Constructor.\n
+    ///
+    ///On Entry:
+    ///@param[in] spiBus - reference to SPI bus for this device
+    ///@param[in] cs - reference to DigitalOut used for chip select
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns none
+    BMI160_SPI(SPI &spiBus, DigitalOut &cs);
+    
+    virtual int32_t readRegister(Registers reg, uint8_t *data);
+    virtual int32_t writeRegister(Registers reg, const uint8_t data);
+    virtual int32_t readBlock(Registers startReg, Registers stopReg, uint8_t *data);
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg, const uint8_t *data);
+    
+private:
+
+    SPI m_spiBus;
+    DigitalOut m_cs;
+};
+
 #endif /* BMI160_H */
+
+
+///@brief fx documentation template.\n
+///
+///On Entry:
+///@param[in] none 
+///
+///On Exit:
+///@param[out] none
+///
+///@returns none