From 28fc4f93435a32341f65a694920e60b75cf6baef Mon Sep 17 00:00:00 2001 From: Davide Basso <davide.basso@skywarder.eu> Date: Wed, 7 May 2025 21:03:33 +0000 Subject: [PATCH] [SensorFIFO] Fix BMX160 SensorFIFO deadlock --- src/shared/sensors/BMX160/BMX160.cpp | 2 +- src/shared/sensors/L3GD20/L3GD20.h | 2 +- src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp | 2 +- src/shared/sensors/Sensor.h | 12 ++++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/shared/sensors/BMX160/BMX160.cpp b/src/shared/sensors/BMX160/BMX160.cpp index f175ad873..8d2ee05f3 100644 --- a/src/shared/sensors/BMX160/BMX160.cpp +++ b/src/shared/sensors/BMX160/BMX160.cpp @@ -751,7 +751,7 @@ void BMX160::readFifo(bool headerless) uint64_t timestamp = 0; uint64_t watermarkTimestamp = 0; int idx = 0; - miosix::Lock<miosix::FastMutex> l(fifoMutex); + miosix::Lock<miosix::FastMutex> l(mutex); while (idx < len && buf[idx] != BMX160Defs::FIFO_STOP_BYTE) { diff --git a/src/shared/sensors/L3GD20/L3GD20.h b/src/shared/sensors/L3GD20/L3GD20.h index 5d50608e8..30409f27c 100644 --- a/src/shared/sensors/L3GD20/L3GD20.h +++ b/src/shared/sensors/L3GD20/L3GD20.h @@ -226,7 +226,7 @@ public: else // FIFO is enabled { // Lock mutex for thread safe Fifo reading - miosix::Lock<miosix::FastMutex> l(fifoMutex); + miosix::Lock<miosix::FastMutex> l(mutex); SPITransaction spi(spislave); // Read last fifo level diff --git a/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp b/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp index 9beacbe95..d3d776dd8 100644 --- a/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp +++ b/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp @@ -793,7 +793,7 @@ float LSM6DSRX::getSensorTimestampResolution() void LSM6DSRX::readFromFifo() { // Lock mutex for thread safe Fifo reading - miosix::Lock<miosix::FastMutex> l(fifoMutex); + miosix::Lock<miosix::FastMutex> l(mutex); SPITransaction spi{spiSlave}; diff --git a/src/shared/sensors/Sensor.h b/src/shared/sensors/Sensor.h index 11cbf3709..e740cf85b 100644 --- a/src/shared/sensors/Sensor.h +++ b/src/shared/sensors/Sensor.h @@ -147,14 +147,15 @@ public: template <typename Data, uint32_t FifoSize> class SensorFIFO : public Sensor<Data> { + using Super = Sensor<Data>; + protected: std::array<Data, FifoSize> lastFifo; uint16_t lastFifoLevel = 1; //< number of samples in lastFifo uint64_t lastInterruptTimestamp = 0; uint64_t interruptTimestampDelta = - 0; //< delta between previous interrupt - // timestamp and the last received one - miosix::FastMutex fifoMutex; // thread safe mutex to read FIFO + 0; //< delta between previous interrupt + // timestamp and the last received one public: SensorFIFO() {} @@ -163,8 +164,7 @@ public: : lastFifo{std::move(other.lastFifo)}, lastFifoLevel{std::move(other.lastFifoLevel)}, lastInterruptTimestamp{std::move(other.lastInterruptTimestamp)}, - interruptTimestampDelta{std::move(other.interruptTimestampDelta)}, - fifoMutex{} + interruptTimestampDelta{std::move(other.interruptTimestampDelta)} { } @@ -174,7 +174,7 @@ public: */ const std::array<Data, FifoSize> getLastFifo(uint16_t& lastFifoSize) { - miosix::Lock<miosix::FastMutex> l(fifoMutex); + miosix::Lock<miosix::FastMutex> l(Super::mutex); lastFifoSize = lastFifoLevel; return lastFifo; } -- GitLab