91 uint8_t cutoffFreq = 0x03)
92 : spislave(bus, cs, cfg), fs(range), odr(odr), cutoffFreq(cutoffFreq)
97 sensitivity = SENSITIVITY_250;
100 sensitivity = SENSITIVITY_500;
103 sensitivity = SENSITIVITY_2000;
203 uint64_t lastSampleTimestamp;
215 miosix::FastInterruptDisableLock dLock;
219 int16_t x = buf[0] | buf[1] << 8;
220 int16_t y = buf[2] | buf[3] << 8;
221 int16_t z = buf[4] | buf[5] << 8;
223 Eigen::Vector3f rads = toRadiansPerSecond(x, y, z);
224 return {lastSampleTimestamp, rads(0), rads(1), rads(2)};
229 miosix::Lock<miosix::FastMutex> l(
mutex);
234 uint8_t ovr = (fifoSrc & 0x40) >> 7;
235 uint8_t fifoLevel = (fifoSrc & 0x1F) + ovr;
242 uint8_t duplicates = 0;
243 for (uint8_t i = 0; i < fifoLevel; ++i)
249 if (i < fifoLevel - 1)
252 for (uint8_t j = 0; j < 6; ++j)
254 if (buf[i * 6 + j] != buf[(i + 1) * 6 + j])
280 Eigen::Vector3f rads =
281 toRadiansPerSecond(buf[i * 6] | buf[i * 6 + 1] << 8,
282 buf[i * 6 + 2] | buf[i * 6 + 3] << 8,
283 buf[i * 6 + 4] | buf[i * 6 + 5] << 8);
287 ((int)i - (
int)fifoWatermark - (int)duplicates) * dt,
288 rads(0), rads(1), rads(2)};