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