From fcf403b2ebb52eb6abb6680e710f159fa696603b Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Sat, 1 Jul 2023 17:14:15 +0200
Subject: [PATCH] [ADS131] Fixed channel numbers and better defined constants

---
 src/shared/sensors/ADS131M04/ADS131M04.cpp | 18 +++++----------
 src/shared/sensors/ADS131M04/ADS131M04.h   | 15 +++++++------
 src/shared/sensors/ADS131M08/ADS131M08.cpp | 15 ++-----------
 src/shared/sensors/ADS131M08/ADS131M08.h   | 26 ++++++++++++----------
 4 files changed, 29 insertions(+), 45 deletions(-)

diff --git a/src/shared/sensors/ADS131M04/ADS131M04.cpp b/src/shared/sensors/ADS131M04/ADS131M04.cpp
index 646466586..ab9cebda4 100644
--- a/src/shared/sensors/ADS131M04/ADS131M04.cpp
+++ b/src/shared/sensors/ADS131M04/ADS131M04.cpp
@@ -38,14 +38,7 @@ ADS131M04::ADS131M04(SPIBusInterface &bus, miosix::GpioPin cs,
 {
 }
 
-ADS131M04::ADS131M04(SPISlave spiSlave) : spiSlave(spiSlave)
-{
-    // Reset the configuration
-    channelsPGAGain[0] = PGA::PGA_1;
-    channelsPGAGain[1] = PGA::PGA_1;
-    channelsPGAGain[2] = PGA::PGA_1;
-    channelsPGAGain[3] = PGA::PGA_1;
-}
+ADS131M04::ADS131M04(SPISlave spiSlave) : spiSlave(spiSlave) {}
 
 SPIBusConfig ADS131M04::getDefaultSPIConfig()
 {
@@ -89,7 +82,7 @@ bool ADS131M04::reset()
     uint16_t response = data[0] << 8 | data[1];
 
     // Check for the correct response
-    if (response != 0xFF24)
+    if (response != RESET_CMD_RESPONSE)
     {
         lastError = SensorErrors::COMMAND_FAILED;
         LOG_ERR(logger, "Reset command failed, response was {:X}", response);
@@ -148,10 +141,9 @@ void ADS131M04::setChannelPGA(Channel channel, PGA gain)
 {
     channelsPGAGain[static_cast<int>(channel)] = gain;
 
-    changeRegister(Registers::REG_GAIN,
-                   static_cast<uint16_t>(gain)
-                       << (static_cast<int>(channel) * 4),
-                   REG_GAIN_PGAGAIN0 << (static_cast<int>(channel) * 4));
+    int shift = static_cast<int>(channel) * 4;
+    changeRegister(Registers::REG_GAIN, static_cast<uint16_t>(gain) << shift,
+                   REG_GAIN_PGAGAIN0 << shift);
 }
 
 void ADS131M04::setChannelOffset(Channel channel, uint32_t offset)
diff --git a/src/shared/sensors/ADS131M04/ADS131M04.h b/src/shared/sensors/ADS131M04/ADS131M04.h
index c2857a4f8..4f4615ac1 100644
--- a/src/shared/sensors/ADS131M04/ADS131M04.h
+++ b/src/shared/sensors/ADS131M04/ADS131M04.h
@@ -248,17 +248,18 @@ private:
         WREG     = 0x6000
     };
 
+    SPISlave spiSlave;
+
+    PGA channelsPGAGain[4] = {PGA::PGA_1, PGA::PGA_1, PGA::PGA_1, PGA::PGA_1};
+
+    PrintLogger logger = Logging::getLogger("ads131m04");
+
+    static constexpr uint16_t RESET_CMD_RESPONSE = 0xFF24;
+
     ///< Digit value in mV for each pga configurations
     const float PGA_LSB_SIZE[8] = {143.0511e-9, 71.5256e-9, 35.7628e-9,
                                    17.8814e-9,  8.9407e-9,  4.4703e-9,
                                    2.2352e-9,   1.1176e-9};
-
-    PGA channelsPGAGain[4] = {PGA::PGA_1};
-
-protected:
-    SPISlave spiSlave;
-
-    PrintLogger logger = Logging::getLogger("ads131m04");
 };
 
 namespace ADS131M04RegisterBitMasks
diff --git a/src/shared/sensors/ADS131M08/ADS131M08.cpp b/src/shared/sensors/ADS131M08/ADS131M08.cpp
index 9db582e2c..4b926068b 100644
--- a/src/shared/sensors/ADS131M08/ADS131M08.cpp
+++ b/src/shared/sensors/ADS131M08/ADS131M08.cpp
@@ -38,18 +38,7 @@ ADS131M08::ADS131M08(SPIBusInterface &bus, miosix::GpioPin cs,
 {
 }
 
-ADS131M08::ADS131M08(SPISlave spiSlave) : spiSlave(spiSlave)
-{
-    // Reset the configuration
-    channelsPGAGain[0] = PGA::PGA_1;
-    channelsPGAGain[1] = PGA::PGA_1;
-    channelsPGAGain[2] = PGA::PGA_1;
-    channelsPGAGain[3] = PGA::PGA_1;
-    channelsPGAGain[4] = PGA::PGA_1;
-    channelsPGAGain[5] = PGA::PGA_1;
-    channelsPGAGain[6] = PGA::PGA_1;
-    channelsPGAGain[7] = PGA::PGA_1;
-}
+ADS131M08::ADS131M08(SPISlave spiSlave) : spiSlave(spiSlave) {}
 
 SPIBusConfig ADS131M08::getDefaultSPIConfig()
 {
@@ -93,7 +82,7 @@ bool ADS131M08::reset()
     uint16_t response = data[0] << 8 | data[1];
 
     // Check for the correct response
-    if (response != 0xFF28)
+    if (response != RESET_CMD_RESPONSE)
     {
         lastError = SensorErrors::COMMAND_FAILED;
         LOG_ERR(logger, "Reset command failed, response was {:X}", response);
diff --git a/src/shared/sensors/ADS131M08/ADS131M08.h b/src/shared/sensors/ADS131M08/ADS131M08.h
index 6dca0801f..374288a80 100644
--- a/src/shared/sensors/ADS131M08/ADS131M08.h
+++ b/src/shared/sensors/ADS131M08/ADS131M08.h
@@ -34,7 +34,7 @@ namespace Boardcore
 /**
  * @brief Driver for ADS131M08 8 simultaneous channels adc.
  *
- * The ADS131M08 is a four-channel, simultaneously-sampling, 24-bit,
+ * The ADS131M08 is an eight-channel, simultaneously-sampling, 24-bit,
  * delta-sigma (ΔΣ), analog-to-digital converter (ADC). The individual ADC
  * channels can be independently configured depending on the sensor input. A
  * low-noise, programmable gain amplifier (PGA) provides gains ranging from 1
@@ -114,10 +114,10 @@ public:
         CHANNEL_1 = 1,
         CHANNEL_2 = 2,
         CHANNEL_3 = 3,
-        CHANNEL_4 = 3,
-        CHANNEL_5 = 3,
-        CHANNEL_6 = 3,
-        CHANNEL_7 = 3
+        CHANNEL_4 = 4,
+        CHANNEL_5 = 5,
+        CHANNEL_6 = 6,
+        CHANNEL_7 = 7
     };
 
     enum class Input : uint8_t
@@ -273,17 +273,19 @@ private:
         WREG     = 0x6000
     };
 
+    SPISlave spiSlave;
+
+    PGA channelsPGAGain[8] = {PGA::PGA_1, PGA::PGA_1, PGA::PGA_1, PGA::PGA_1,
+                              PGA::PGA_1, PGA::PGA_1, PGA::PGA_1, PGA::PGA_1};
+
+    PrintLogger logger = Logging::getLogger("ads131m08");
+
+    static constexpr uint16_t RESET_CMD_RESPONSE = 0xFF28;
+
     ///< Digit value in mV for each pga configurations
     const float PGA_LSB_SIZE[8] = {143.0511e-9, 71.5256e-9, 35.7628e-9,
                                    17.8814e-9,  8.9407e-9,  4.4703e-9,
                                    2.2352e-9,   1.1176e-9};
-
-    PGA channelsPGAGain[8] = {PGA::PGA_1};
-
-protected:
-    SPISlave spiSlave;
-
-    PrintLogger logger = Logging::getLogger("ads131m08");
 };
 
 namespace ADS131M08RegisterBitMasks
-- 
GitLab