From 4c22639015b5227c08a3ce7fd45e533b28248c33 Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Sun, 12 May 2024 15:01:01 +0200
Subject: [PATCH] [ARP] Fix cppcheck

---
 .../Groundstation/Automated/Leds/Leds.cpp     | 10 ++++++----
 .../Groundstation/Automated/Leds/Leds.h       | 19 ++++++++++---------
 .../Automated/SMController/SMController.h     |  2 +-
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/boards/Groundstation/Automated/Leds/Leds.cpp b/src/boards/Groundstation/Automated/Leds/Leds.cpp
index e01d49c24..80d82cd63 100644
--- a/src/boards/Groundstation/Automated/Leds/Leds.cpp
+++ b/src/boards/Groundstation/Automated/Leds/Leds.cpp
@@ -33,10 +33,12 @@ namespace Antennas
 
 Leds::Leds(TaskScheduler* scheduler) : scheduler(scheduler)
 {
-    *led_ref(LedColor::RED)    = LedState::OFF;
-    *led_ref(LedColor::YELLOW) = LedState::OFF;
-    *led_ref(LedColor::ORANGE) = LedState::OFF;
-    *led_ref(LedColor::GREEN)  = LedState::OFF;
+    for (size_t i = 0; i < led_states.size(); i++)
+    {
+        led_states[i]  = LedState::OFF;
+        led_mutexes[i] = make_unique<mutex>();
+        led_cvs[i]     = make_unique<condition_variable>();
+    }
 }
 
 bool Leds::start()
diff --git a/src/boards/Groundstation/Automated/Leds/Leds.h b/src/boards/Groundstation/Automated/Leds/Leds.h
index f1f2d358d..a2e1da63f 100644
--- a/src/boards/Groundstation/Automated/Leds/Leds.h
+++ b/src/boards/Groundstation/Automated/Leds/Leds.h
@@ -24,6 +24,7 @@
 
 #include <scheduler/TaskScheduler.h>
 
+#include <array>
 #include <condition_variable>
 #include <map>
 #include <mutex>
@@ -47,7 +48,7 @@ enum class LedColor : uint8_t
 class Leds : public Boardcore::Module
 {
 public:
-    Leds(Boardcore::TaskScheduler* scheduler);
+    explicit Leds(Boardcore::TaskScheduler* scheduler);
 
     /**
      * @brief Start the blinking LED thread
@@ -75,9 +76,9 @@ public:
     void endless_blink(LedColor color);
 
 protected:
-    enum class LedState
+    enum class LedState : uint8_t
     {
-        OFF,
+        OFF = 0,
         ON,
         BLINKING
     };
@@ -88,23 +89,23 @@ protected:
 
     LedState* led_ref(LedColor color)
     {
-        return &leds[static_cast<uint8_t>(color)];
+        return &led_states[static_cast<uint8_t>(color)];
     }
 
     std::mutex* mutex_ref(LedColor color)
     {
-        return &led_mutex[static_cast<uint8_t>(color)];
+        return led_mutexes[static_cast<uint8_t>(color)].get();
     }
 
     std::condition_variable* cv_ref(LedColor color)
     {
-        return &cv[static_cast<uint8_t>(color)];
+        return led_cvs[static_cast<uint8_t>(color)].get();
     }
 
     Boardcore::TaskScheduler* scheduler;
-    LedState leds[4];
-    std::mutex led_mutex[4];
-    std::condition_variable cv[4];
+    std::array<LedState, 4> led_states;
+    std::array<unique_ptr<std::mutex>, 4> led_mutexes;
+    std::array<unique_ptr<std::condition_variable>, 4> led_cvs;
 };
 
 }  // namespace Antennas
diff --git a/src/boards/Groundstation/Automated/SMController/SMController.h b/src/boards/Groundstation/Automated/SMController/SMController.h
index b7d1b6407..5eb7dcd69 100644
--- a/src/boards/Groundstation/Automated/SMController/SMController.h
+++ b/src/boards/Groundstation/Automated/SMController/SMController.h
@@ -42,7 +42,7 @@ class SMController : public Boardcore::Module,
                      public Boardcore::HSM<SMController>
 {
 public:
-    SMController(Boardcore::TaskScheduler* scheduler);
+    explicit SMController(Boardcore::TaskScheduler* scheduler);
 
     // FSM States
 
-- 
GitLab