24#ifndef TAPROOT_BMI088_HAL_HPP_
25#define TAPROOT_BMI088_HAL_HPP_
27#if defined(ENV_UNIT_TESTS)
41#if defined(ENV_UNIT_TESTS)
43 static std::deque<uint8_t> rxData;
46 static inline void chipSelectAccelLow()
48#if !defined(PLATFORM_HOSTED)
49 Board::ImuCS1Accel::setOutput(modm::GpioOutput::Low);
53 static inline void chipSelectAccelHigh()
55#if !defined(PLATFORM_HOSTED)
56 Board::ImuCS1Accel::setOutput(modm::GpioOutput::High);
60 static inline void chipSelectGyroLow()
62#if !defined(PLATFORM_HOSTED)
63 Board::ImuCS1Gyro::setOutput(modm::GpioOutput::Low);
67 static inline void chipSelectGyroHigh()
69#if !defined(PLATFORM_HOSTED)
70 Board::ImuCS1Gyro::setOutput(modm::GpioOutput::High);
74 static inline uint8_t bmi088ReadWriteByte(uint8_t tx)
76#if !defined(PLATFORM_HOSTED)
78 Board::ImuSpiMaster::transferBlocking(&tx, &rx, 1);
80#elif defined(ENV_UNIT_TESTS)
82 if (rxData.size() != 0)
84 uint8_t data = rxData.front();
101 static inline void bmi088WriteSingleReg(uint8_t reg, uint8_t data)
104 bmi088ReadWriteByte(data);
110 static inline uint8_t bmi088ReadSingleReg(uint8_t reg)
113 return bmi088ReadWriteByte(0x55);
116 static inline void bmi088ReadMultiReg(
126 bmi088ReadWriteByte(0x55);
131 *rxBuff = bmi088ReadWriteByte(0x55);
142 chipSelectAccelLow();
143 bmi088WriteSingleReg(
static_cast<uint8_t
>(reg), data.value);
144 chipSelectAccelHigh();
157 chipSelectAccelLow();
158 bmi088ReadSingleReg(
static_cast<uint8_t
>(reg));
159 uint8_t res = bmi088ReadWriteByte(0x55);
160 chipSelectAccelHigh();
169 chipSelectAccelLow();
170 bmi088ReadMultiReg(
static_cast<uint8_t
>(reg), rxBuff, len,
true);
171 chipSelectAccelHigh();
179 bmi088WriteSingleReg(
static_cast<uint8_t
>(reg), data.value);
180 chipSelectGyroHigh();
186 uint8_t res = bmi088ReadSingleReg(
static_cast<uint8_t
>(reg));
187 chipSelectGyroHigh();
197 bmi088ReadMultiReg(
static_cast<uint8_t
>(reg), rxBuff, len,
false);
198 chipSelectGyroHigh();
201#if defined(ENV_UNIT_TESTS)
206 static void setRxData(uint8_t data) { rxData.push_back(data); }
208 static void expectAccWriteSingleReg()
214 static void expectAccReadSingleReg(uint8_t data)
221 static void expectAccMultiRead(uint8_t *data, uint8_t len)
225 for (uint8_t
i = 0;
i < len;
i++)
231 static void expectGyroWriteSingleReg()
237 static void expectGyroReadSingleReg(uint8_t data)
243 static void expectGyroMultiRead(uint8_t *data, uint8_t len)
246 for (uint8_t
i = 0;
i < len;
i++)
252 static void clearData() { rxData.clear(); }
static constexpr uint8_t BMI088_READ_BIT
Definition bmi088_data.hpp:42
Definition bmi088_hal.hpp:39
static void bmi088AccWriteSingleReg(Bmi088Data::Acc::Register reg, Bmi088Data::Acc::Registers_t data)
Definition bmi088_hal.hpp:138
static void bmi088GyroReadMultiReg(Bmi088Data::Gyro::Register reg, uint8_t *rxBuff, uint8_t len)
Definition bmi088_hal.hpp:191
static void bmi088GyroWriteSingleReg(Bmi088Data::Gyro::Register reg, Bmi088Data::Gyro::Registers_t data)
Definition bmi088_hal.hpp:174
static void bmi088AccReadMultiReg(Bmi088Data::Acc::Register reg, uint8_t *rxBuff, uint8_t len)
Definition bmi088_hal.hpp:164
static uint8_t bmi088GyroReadSingleReg(Bmi088Data::Gyro::Register reg)
Definition bmi088_hal.hpp:183
static uint8_t bmi088AccReadSingleReg(Bmi088Data::Acc::Register reg)
Definition bmi088_hal.hpp:155
IUnit i
Definition dimensional_smooth_pid.hpp:2
modm::FlagsGroup< AccErr_t, AccStatus_t, AccIntStat1_t, AccConf_t, Int1IoConf_t, Int2IoConf_t, AccSelfTest_t, AccRange_t, AccPwrConf_t, AccPwrCtrl_t, AccSoftreset_t, IntMapData_t > Registers_t
Definition bmi088_data.hpp:443
Register
List of register addresses for the bmi088's accelerometer.
Definition bmi088_data.hpp:255
Register
Definition bmi088_data.hpp:47
modm::FlagsGroup< GyroIntStat1_t, FifoStatus_t, GyroRange_t, GyroBandwidth_t, GyroLpm1_t, GyroSoftreset_t, GyroIntCtrl_t, Int3Int4IoConf_t, Int3Int4IoMap_t, FifoWmEnable_t, FifoExtIntS_t, GyroSelfTest_t, FifoConfig0_t, FifoConfig1_t > Registers_t
Definition bmi088_data.hpp:248
#define UNUSED(var)
Definition util_macros.hpp:43