72 BMX160(SPIBusInterface& bus, miosix::GpioPin cs, BMX160Config config,
73 SPIBusConfig busConfig);
124 void pushSample(BMX160Data
sample);
131 void confMag(SPITransaction& spi, uint8_t value);
138 void mapMag(SPITransaction& spi, uint8_t reg);
146 uint8_t readMag(SPITransaction& spi, uint8_t reg);
155 void readMag(SPITransaction& spi, uint8_t reg, uint8_t* data,
size_t size);
163 void writeMag(SPITransaction& spi, uint8_t reg, uint8_t value);
236 MagnetometerData buildMagData(BMX160Defs::MagRaw data, uint64_t timestamp);
244 AccelerometerData buildAccData(BMX160Defs::AccRaw data, uint64_t timestamp);
252 GyroscopeData buildGyrData(BMX160Defs::GyrRaw data, uint64_t timestamp);
259 const char* debugErr(SPITransaction& spi);
288 void readFifo(
bool headerless);
296 template <
typename T>
297 T parseStruct(uint8_t* buf,
int& idx);
309 void boschReadTrim(SPITransaction& spi);
314 float boschMagCompensateX(int16_t x, uint16_t rhall);
319 float boschMagCompensateY(int16_t y, uint16_t rhall);
324 float boschMagCompensateZ(int16_t z, uint16_t rhall);
326 float temperature = 0.0f;
327 MagnetometerData oldMag;
328 GyroscopeData oldGyr;
329 AccelerometerData oldAcc;
334 BMX160Defs::TrimData trimData = {};
337 BMX160FifoStats stats = {};
339 float gyrSensibility = 0.0f;
340 float accSensibility = 0.0f;
345 static constexpr unsigned int FIFO_BUF_SIZE = 1100;
352 bool irqEnabled =
true;