From 77537a36e67bb406fbcca580beaafc466cafe76e Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Fri, 17 Mar 2023 17:47:00 +0100
Subject: [PATCH] [LIS2MDL] Updated temperature register reading

---
 src/shared/sensors/LIS2MDL/LIS2MDL.cpp | 14 ++++++++++----
 src/shared/sensors/LIS2MDL/LIS2MDL.h   |  2 ++
 src/tests/sensors/test-lis2mdl.cpp     |  4 +---
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/shared/sensors/LIS2MDL/LIS2MDL.cpp b/src/shared/sensors/LIS2MDL/LIS2MDL.cpp
index ae2bb907a..9d8ab3479 100644
--- a/src/shared/sensors/LIS2MDL/LIS2MDL.cpp
+++ b/src/shared/sensors/LIS2MDL/LIS2MDL.cpp
@@ -35,6 +35,15 @@ LIS2MDL::LIS2MDL(SPIBusInterface& bus, miosix::GpioPin pin,
 {
 }
 
+SPIBusConfig LIS2MDL::getDefaultSPIConfig()
+{
+    SPIBusConfig spiConfig;
+    spiConfig.clockDivider = SPI::ClockDivider::DIV_256;
+    spiConfig.mode         = SPI::Mode::MODE_3;
+    spiConfig.byteOrder    = SPI::Order::LSB_FIRST;
+    return spiConfig;
+}
+
 bool LIS2MDL::init()
 {
     if (isInitialized)
@@ -187,10 +196,7 @@ LIS2MDLData LIS2MDL::sampleImpl()
     if (configuration.temperatureDivider != 0 &&
         tempCounter % configuration.temperatureDivider == 0)
     {
-        uint8_t values[2];
-        spi.readRegisters(TEMP_OUT_L_REG, values, sizeof(values));
-
-        int16_t outTemp              = values[1] << 8 | values[0];
+        int16_t outTemp              = spi.readRegister16(TEMP_OUT_L_REG);
         newData.temperatureTimestamp = TimestampTimer::getTimestamp();
         newData.temperature          = DEG_PER_LSB * outTemp;
         newData.temperature += REFERENCE_TEMPERATURE;
diff --git a/src/shared/sensors/LIS2MDL/LIS2MDL.h b/src/shared/sensors/LIS2MDL/LIS2MDL.h
index 7e82c8fd4..3fdaf0887 100644
--- a/src/shared/sensors/LIS2MDL/LIS2MDL.h
+++ b/src/shared/sensors/LIS2MDL/LIS2MDL.h
@@ -79,6 +79,8 @@ public:
     LIS2MDL(SPIBusInterface& bus, miosix::GpioPin pin,
             SPIBusConfig spiConfig = {}, Config config = {});
 
+    static SPIBusConfig getDefaultSPIConfig();
+
     bool init() override;
 
     bool selfTest() override;
diff --git a/src/tests/sensors/test-lis2mdl.cpp b/src/tests/sensors/test-lis2mdl.cpp
index bcab4bc63..a0060c76e 100644
--- a/src/tests/sensors/test-lis2mdl.cpp
+++ b/src/tests/sensors/test-lis2mdl.cpp
@@ -48,9 +48,7 @@ int main()
 
     SPIBus bus(SPI1);
 
-    SPIBusConfig busConfig;
-    busConfig.clockDivider = SPI::ClockDivider::DIV_256;
-    busConfig.mode         = SPI::Mode::MODE_3;
+    SPIBusConfig busConfig = LIS2MDL::getDefaultSPIConfig();
 
     LIS2MDL::Config config;
     config.odr                = LIS2MDL::ODR_10_HZ;
-- 
GitLab