From aa2640cf6504afe6f32d278b90ee1eb0a7badf2a Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Sat, 24 Jun 2023 19:44:49 +0200
Subject: [PATCH] [LIS3MDL] Implemented SPI readRegister16 function instead of
 directly using the shift

---
 src/shared/sensors/LIS3MDL/LIS3MDL.cpp | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
index 23ba605df..d19af0f6f 100644
--- a/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
+++ b/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
@@ -31,6 +31,7 @@ LIS3MDL::LIS3MDL(SPIBusInterface& bus, miosix::GpioPin pin,
                  SPIBusConfig spiConfig, Config config)
     : slave(bus, pin, spiConfig), configuration(config)
 {
+    spiConfig.byteOrder = SPI::Order::LSB_FIRST;
 }
 
 bool LIS3MDL::init()
@@ -213,38 +214,23 @@ LIS3MDLData LIS3MDL::sampleImpl()
 
     SPITransaction spi(slave);
     LIS3MDLData newData;
-    int16_t val;
     tempCounter++;
     if (configuration.temperatureDivider != 0 &&
         tempCounter % configuration.temperatureDivider == 0)
     {
-        val = spi.readRegister(TEMP_OUT_H);
-        val = (val << 8);
-        val |= spi.readRegister(TEMP_OUT_L);
 
         newData.temperatureTimestamp = TimestampTimer::getTimestamp();
-        newData.temperature =
-            static_cast<float>(val) * DEG_PER_LSB + REFERENCE_TEMPERATURE;
+        newData.temperature = spi.readRegister16(TEMP_OUT_L) * DEG_PER_LSB +
+                              REFERENCE_TEMPERATURE;
     }
     else
     {
         newData.temperature = lastSample.temperature;
     }
 
-    val = spi.readRegister(OUT_X_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_X_L);
-    newData.magneticFieldX = currentUnit * val;
-
-    val = spi.readRegister(OUT_Y_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_Y_L);
-    newData.magneticFieldY = currentUnit * val;
-
-    val = spi.readRegister(OUT_Z_H);
-    val = (val << 8);
-    val |= spi.readRegister(OUT_Z_L);
-    newData.magneticFieldZ = currentUnit * val;
+    newData.magneticFieldX = spi.readRegister16(OUT_X_L) * currentUnit;
+    newData.magneticFieldY = spi.readRegister16(OUT_Y_L) * currentUnit;
+    newData.magneticFieldZ = spi.readRegister16(OUT_Z_L) * currentUnit;
 
     return newData;
 }
-- 
GitLab