Library for Bosch Sensortech BMI160 IMU
Fork of BMI160 by
Diff: bmi160.h
- Revision:
- 2:598e601e5846
- Parent:
- 1:a4c911640569
- Child:
- 3:e1770675eca4
diff -r a4c911640569 -r 598e601e5846 bmi160.h --- 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