diff --git a/src/boards/Groundstation/Automated/Leds/Leds.cpp b/src/boards/Groundstation/Automated/Leds/Leds.cpp index e01d49c24981b62eaab31bd78d97a8a5871b5099..80d82cd63f815e0834028b322f85675211ce9efd 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 f1f2d358dc01115a7ebfd60e94978dbf97aa6b33..a2e1da63f4163835cc0e4c0c4c534ec7fda2669e 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 b7d1b6407baf528d7102aa78209d49b21aaf2946..5eb7dcd692d4a199cbd72e6d8e8a7a695fd66ce1 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