BMI160 Initial
Dependents: MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_Pitch_Charles Maxim_Squeeks
Diff: bmi160.h
- 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