My implementation of Bosh BMI160 Only I2C is tested so far.

Dependents:   test_BMI160 TFT_test_MAX32630FTHR

BMI160.h

Committer:
Rhyme
Date:
2017-08-25
Revision:
1:d56df81c389b
Parent:
0:9aed6f5a35c0
Child:
2:4cc456503e9f

File content as of revision 1:d56df81c389b:

#ifndef _BMI160_H_
#define _BMI160_H_
class BMI160 {
public:
 /**
  * BMI160 I2C Interface
  *
  * @param sda SDA pin
  * @param scl SCL pin
  * @param addr address of the I2C peripheral
  */
  BMI160(PinName sda, PinName scl, int addr) ;

 /**
  * BMI160 SPI Interface
  *
  * @param sck  SPI SCKL pin
  * @param miso SPI Master In Slave Out pin
  * @param mosi SPI Master Out Slave In pin
  * @param cs   SPI Chip Select pin
  */
  BMI160(PinName sck, PinName miso, PinName mosi, PinName cs) ;

/**
 * BMI160 destructor
 */
  ~BMI160() ;
  
  void setCMD(uint8_t cmd) ;
  uint8_t getStatus(void) ;
  uint8_t getChipID(void) ;
  uint8_t getAccRange(void) ;
  int16_t getGyrRange(void) ;
  int16_t getAccX(void) ;
  int16_t getAccY(void) ;
  int16_t getAccZ(void) ;
  int16_t getGyrX(void) ;
  int16_t getGyrY(void) ;
  int16_t getGyrZ(void) ;
  void getAcc(int16_t *value) ;
  void getGyr(int16_t *value) ;
  

private:
  SPI *m_spi ;
  I2C *m_i2c ;
  DigitalOut *m_cs ;
  int m_addr ;
  
  void init(void) ;
  void i2c_readRegs(int addr, uint8_t *data, int len) ;
  void i2c_writeRegs(uint8_t *data, int len) ;
  void spi_readRegs(int addr, uint8_t *data, int len) ;
  void spi_writeRegs(uint8_t *data, int len) ;
  void readRegs(int addr, uint8_t *data, int len) ;
  void writeRegs(uint8_t *data, int len) ;
} ;

#define ACC_PMU_SUSPEND  0x00
#define ACC_PMU_NORMAL   0x01
#define ACC_PMU_LOWPOWER 0x02
#define GYR_PMU_SUSPEND  0x00
#define GYR_PMU_NORMAL   0x01
#define GYR_PMU_FASTSU   0x03
#define MAG_PMU_SUSPEND  0x00
#define MAG_PMU_NORMAL   0x01
#define MAG_PMU_LOWPOWER 0x02
#endif /* _BMI160_H_ */