From 7a649c37e1229fcb9283ff15eb0024776b7ec87e Mon Sep 17 00:00:00 2001
From: Emilio Corigliano <emilio.corigliano@skywarder.eu>
Date: Wed, 2 Oct 2024 15:17:04 +0200
Subject: [PATCH] [AutomatedAntennas] Fixed sensors, buses and actuators to use
 new target for automated gs

---
 CMakeLists.txt                                |  3 +-
 cmake/dependencies.cmake                      |  1 +
 src/boards/AutomatedAntennas/Actuators.cpp    | 64 ++++++-------------
 .../AutomatedAntennas/ActuatorsConfig.h       | 26 ++++----
 src/boards/AutomatedAntennas/Buses.h          | 18 +-----
 src/boards/AutomatedAntennas/Sensors.cpp      | 16 +----
 src/boards/AutomatedAntennas/Sensors.h        |  4 +-
 .../AutomatedAntennas/test-steps.cpp          | 56 ++++++++--------
 8 files changed, 73 insertions(+), 115 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b447dd861..d1f5796f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -111,4 +111,5 @@ sbs_target(automated-antennas-entry stm32f407vg_stm32f4discovery)
 
 add_executable(test-steps src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp ${ANTENNAS})
 target_include_directories(test-steps PRIVATE ${OBSW_INCLUDE_DIRS})
-sbs_target(test-steps stm32f767zi_nucleo)
+# target_compile_definitions(test-steps PRIVATE NO_SD_LOGGING)
+sbs_target(test-steps stm32f767zi_automated_antennas)
diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
index bd8e4077e..cab11e955 100644
--- a/cmake/dependencies.cmake
+++ b/cmake/dependencies.cmake
@@ -141,4 +141,5 @@ set(GROUNDSTATION_BASE
 
 set(ANTENNAS
     src/boards/AutomatedAntennas/Actuators.cpp
+    src/boards/AutomatedAntennas/Sensors.cpp
 )
\ No newline at end of file
diff --git a/src/boards/AutomatedAntennas/Actuators.cpp b/src/boards/AutomatedAntennas/Actuators.cpp
index b80ea34ad..46572347d 100644
--- a/src/boards/AutomatedAntennas/Actuators.cpp
+++ b/src/boards/AutomatedAntennas/Actuators.cpp
@@ -22,6 +22,8 @@
 
 #include "Actuators.h"
 
+#include <interfaces-impl/hwmapping.h>
+
 #include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "ActuatorsConfig.h"
@@ -40,58 +42,32 @@ namespace Antennas
 //      |
 // TIM8_CH4 PC9  AF3
 
-GpioPin stepPinX      = GpioPin(GPIOD_BASE, 12);  // tim4_ch1
-GpioPin countPinX     = GpioPin(GPIOC_BASE, 9);   // tim8_ch4
-GpioPin directionPinX = GpioPin(GPIOD_BASE, 13);
-GpioPin enablePinX    = GpioPin(GPIOD_BASE, 3);
-
-GpioPin stepPinY      = GpioPin(GPIOA_BASE, 11);  // tim1_ch4
-GpioPin countPinY     = GpioPin(GPIOC_BASE, 7);   // tim3_ch2
-GpioPin directionPinY = GpioPin(GPIOA_BASE, 12);
-GpioPin enablePinY    = GpioPin(GPIOA_BASE, 8);
-
 GpioPin ledRGB = GpioPin(GPIOG_BASE, 14);
 
-CountedPWM countedPwmX(Config::StepperConfig::SERVO2_PULSE_TIM,
-                       Config::StepperConfig::SERVO2_PULSE_CH,
-                       Config::StepperConfig::SERVO2_PULSE_ITR,
-                       Config::StepperConfig::SERVO2_COUNT_TIM,
-                       Config::StepperConfig::SERVO2_COUNT_CH,
-                       Config::StepperConfig::SERVO2_COUNT_ITR);
-
-CountedPWM countedPwmY(Config::StepperConfig::SERVO1_PULSE_TIM,
+CountedPWM countedPwmX(Config::StepperConfig::SERVO1_PULSE_TIM,
                        Config::StepperConfig::SERVO1_PULSE_CH,
                        Config::StepperConfig::SERVO1_PULSE_ITR,
                        Config::StepperConfig::SERVO1_COUNT_TIM,
                        Config::StepperConfig::SERVO1_COUNT_CH,
                        Config::StepperConfig::SERVO1_COUNT_ITR);
 
+CountedPWM countedPwmY(Config::StepperConfig::SERVO2_PULSE_TIM,
+                       Config::StepperConfig::SERVO2_PULSE_CH,
+                       Config::StepperConfig::SERVO2_PULSE_ITR,
+                       Config::StepperConfig::SERVO2_COUNT_TIM,
+                       Config::StepperConfig::SERVO2_COUNT_CH,
+                       Config::StepperConfig::SERVO2_COUNT_ITR);
+
 Actuators::Actuators()
-    : stepperX(countedPwmX, stepPinX, directionPinX, 1, 1.8, false, 4,
-               Stepper::PinConfiguration::COMMON_CATHODE, enablePinX),
-      stepperY(countedPwmY, stepPinY, directionPinY, 1, 1.8, false, 4,
-               Stepper::PinConfiguration::COMMON_CATHODE, enablePinY)
+    : stepperX(countedPwmX, stepper1::pulseTimer::getPin(),
+               stepper1::direction::getPin(), 1, 1.8, false, 4,
+               Stepper::PinConfiguration::COMMON_CATHODE,
+               stepper1::enable::getPin()),
+      stepperY(countedPwmY, stepper2::pulseTimer::getPin(),
+               stepper2::direction::getPin(), 1, 1.8, false, 4,
+               Stepper::PinConfiguration::COMMON_CATHODE,
+               stepper2::enable::getPin())
 {
-    // set LED to Yellow
-
-    stepPinX.mode(Mode::ALTERNATE);
-    stepPinX.alternateFunction(2);
-    stepPinY.mode(Mode::ALTERNATE);
-    stepPinY.alternateFunction(1);
-
-    directionPinX.mode(Mode::OUTPUT);
-    enablePinX.mode(Mode::OUTPUT);
-    directionPinY.mode(Mode::OUTPUT);
-    enablePinY.mode(Mode::OUTPUT);
-
-#ifdef NO_SD_LOGGING
-    countPinX.mode(Mode::ALTERNATE);
-    countPinX.alternateFunction(3);
-    countPinY.mode(Mode::ALTERNATE);
-    countPinY.alternateFunction(2);
-#endif
-
-    // Set LED to GREEN
 }
 
 /**
@@ -187,7 +163,7 @@ void Actuators::moveDeg(StepperList axis, float degrees)
                           stepperX.getCurrentDegPosition();
             }
 
-            stepperX.moveDeg(degrees);
+            stepperX.moveDeg(degrees / Config::HORIZONTAL_MULTIPLIER);
             Logger::getInstance().log(stepperX.getState(degrees));
             break;
         case StepperList::VERTICAL:
@@ -204,7 +180,7 @@ void Actuators::moveDeg(StepperList axis, float degrees)
                           stepperY.getCurrentDegPosition();
             }
 
-            stepperY.moveDeg(degrees);
+            stepperY.moveDeg(degrees / Config::VERTICAL_MULTIPLIER);
             Logger::getInstance().log(stepperY.getState(degrees));
             break;
         default:
diff --git a/src/boards/AutomatedAntennas/ActuatorsConfig.h b/src/boards/AutomatedAntennas/ActuatorsConfig.h
index 81b38d68c..44a844843 100644
--- a/src/boards/AutomatedAntennas/ActuatorsConfig.h
+++ b/src/boards/AutomatedAntennas/ActuatorsConfig.h
@@ -28,13 +28,15 @@ namespace Antennas
 {
 namespace Config
 {
-constexpr float MIN_ANGLE_HORIZONTAL = -45.0;
-constexpr float MAX_ANGLE_HORIZONTAL = 1000000.0;
-constexpr float MAX_SPEED_HORIZONTAL = 1.3;
+constexpr float HORIZONTAL_MULTIPLIER = 2;
+constexpr float MIN_ANGLE_HORIZONTAL  = -90.0;
+constexpr float MAX_ANGLE_HORIZONTAL  = 90.0;
+constexpr float MAX_SPEED_HORIZONTAL  = 1.3;
 
-constexpr float MIN_ANGLE_VERTICAL = 0;
-constexpr float MAX_ANGLE_VERTICAL = 45.0;
-constexpr float MAX_SPEED_VERTICAL = 1.3;
+constexpr float VERTICAL_MULTIPLIER = 2;
+constexpr float MIN_ANGLE_VERTICAL  = 0;
+constexpr float MAX_ANGLE_VERTICAL  = 90.0;
+constexpr float MAX_SPEED_VERTICAL  = 1.3;
 
 namespace StepperConfig
 {
@@ -45,24 +47,24 @@ namespace StepperConfig
 // TIM4_CH1 PD12 AF2
 //      |
 // TIM8_CH4 PC9  AF3
-static TIM_TypeDef* const SERVO1_PULSE_TIM = TIM1;
-static TIM_TypeDef* const SERVO1_COUNT_TIM = TIM3;
+static TIM_TypeDef* const SERVO1_PULSE_TIM = TIM3;
+static TIM_TypeDef* const SERVO1_COUNT_TIM = TIM1;
 static TIM_TypeDef* const SERVO2_PULSE_TIM = TIM4;
 static TIM_TypeDef* const SERVO2_COUNT_TIM = TIM8;
 
 constexpr Boardcore::TimerUtils::Channel SERVO1_PULSE_CH =
-    Boardcore::TimerUtils::Channel::CHANNEL_4;
-constexpr Boardcore::TimerUtils::Channel SERVO1_COUNT_CH =
     Boardcore::TimerUtils::Channel::CHANNEL_2;
+constexpr Boardcore::TimerUtils::Channel SERVO1_COUNT_CH =
+    Boardcore::TimerUtils::Channel::CHANNEL_4;
 constexpr Boardcore::TimerUtils::Channel SERVO2_PULSE_CH =
     Boardcore::TimerUtils::Channel::CHANNEL_1;
 constexpr Boardcore::TimerUtils::Channel SERVO2_COUNT_CH =
     Boardcore::TimerUtils::Channel::CHANNEL_4;
 
 constexpr Boardcore::TimerUtils::TriggerSource SERVO1_PULSE_ITR =
-    Boardcore::TimerUtils::TriggerSource::ITR2;
-constexpr Boardcore::TimerUtils::TriggerSource SERVO1_COUNT_ITR =
     Boardcore::TimerUtils::TriggerSource::ITR0;
+constexpr Boardcore::TimerUtils::TriggerSource SERVO1_COUNT_ITR =
+    Boardcore::TimerUtils::TriggerSource::ITR2;
 constexpr Boardcore::TimerUtils::TriggerSource SERVO2_PULSE_ITR =
     Boardcore::TimerUtils::TriggerSource::ITR3;
 constexpr Boardcore::TimerUtils::TriggerSource SERVO2_COUNT_ITR =
diff --git a/src/boards/AutomatedAntennas/Buses.h b/src/boards/AutomatedAntennas/Buses.h
index 8f6d7ff2b..ea59ac3f9 100644
--- a/src/boards/AutomatedAntennas/Buses.h
+++ b/src/boards/AutomatedAntennas/Buses.h
@@ -28,28 +28,12 @@
 namespace Antennas
 {
 
-miosix::GpioPin usart2_tx = miosix::GpioPin(GPIOA_BASE, 2);
-miosix::GpioPin usart2_rx = miosix::GpioPin(GPIOA_BASE, 3);
-miosix::GpioPin uart4_tx  = miosix::GpioPin(GPIOA_BASE, 0);
-miosix::GpioPin uart4_rx  = miosix::GpioPin(GPIOA_BASE, 1);
-
 class Buses : public Boardcore::Module
 {
 public:
     Boardcore::USART usart2;
     Boardcore::USART uart4;
 
-    Buses() : usart2(USART2, 115200), uart4(UART4, 115200)
-    {
-        usart2_tx.mode(miosix::Mode::ALTERNATE);
-        usart2_tx.alternateFunction(7);
-        usart2_rx.mode(miosix::Mode::ALTERNATE_PULL_UP);
-        usart2_rx.alternateFunction(7);
-
-        uart4_tx.mode(miosix::Mode::ALTERNATE);
-        uart4_tx.alternateFunction(8);
-        uart4_rx.mode(miosix::Mode::ALTERNATE_PULL_UP);
-        uart4_rx.alternateFunction(8);
-    }
+    Buses() : usart2(USART2, 115200), uart4(UART4, 115200) {}
 };
 }  // namespace Antennas
\ No newline at end of file
diff --git a/src/boards/AutomatedAntennas/Sensors.cpp b/src/boards/AutomatedAntennas/Sensors.cpp
index f17f52883..776b8a021 100644
--- a/src/boards/AutomatedAntennas/Sensors.cpp
+++ b/src/boards/AutomatedAntennas/Sensors.cpp
@@ -47,24 +47,14 @@ bool Sensors::start()
         LOG_ERR(logger, "Sensor Manager failed to start");
         return false;
     }
+
+    return true;
 }
 
 bool Sensors::vn300Init()
 {
     vn300 = new Boardcore::VN300(
-        ModuleManager::getInstance().get<Buses>()->uart4, 115200);
-
-    if (!vn300->init())
-    {
-        LOG_ERR(logger, "VN300 not initialized");
-        return false;
-    }
-
-    if (!vn300->selfTest())
-    {
-        LOG_ERR(logger, "VN300 self-test failed");
-        return false;
-    }
+        ModuleManager::getInstance().get<Buses>()->usart2, 115200);
 
     SensorInfo info("VN300", SAMPLE_PERIOD_VN300,
                     bind(&Sensors::vn300Callback, this));
diff --git a/src/boards/AutomatedAntennas/Sensors.h b/src/boards/AutomatedAntennas/Sensors.h
index 852607ec8..281eb763a 100644
--- a/src/boards/AutomatedAntennas/Sensors.h
+++ b/src/boards/AutomatedAntennas/Sensors.h
@@ -42,7 +42,7 @@ public:
     /**
      * @brief Returns the last sample of the VN300.
      */
-    VN300Data getVN300LastSample();
+    Boardcore::VN300Data getVN300LastSample();
 
 private:
     bool vn300Init();
@@ -50,7 +50,7 @@ private:
 
     Boardcore::VN300 *vn300 = nullptr;
 
-    SensorManager *sm = nullptr;
+    Boardcore::SensorManager *sm = nullptr;
     Boardcore::SensorManager::SensorMap_t sensorsMap;
     Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("sensors");
 };
diff --git a/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp b/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp
index a8c810946..3e1e9a7b7 100644
--- a/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp
+++ b/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp
@@ -33,6 +33,7 @@
 #include <scheduler/TaskScheduler.h>
 #include <utils/ButtonHandler/ButtonHandler.h>
 
+#include <iostream>
 #include <utils/ModuleManager/ModuleManager.hpp>
 
 #include "actuators/stepper/StepperPWM.h"
@@ -140,7 +141,7 @@ int main()
         // Starting the Actuators
         modules.get<Actuators>()->start();
 
-        // Starting the Actuators
+        // Starting the Sensors
         if (!modules.get<Sensors>()->start())
         {
             initResult = false;
@@ -167,6 +168,8 @@ int main()
 
     modules.get<Actuators>()->setSpeed(Actuators::StepperList::HORIZONTAL,
                                        speed);
+
+    modules.get<Actuators>()->setSpeed(Actuators::StepperList::VERTICAL, speed);
     // scheduler->addTask(
     //     [&]()
     //     {
@@ -198,37 +201,38 @@ int main()
     //         }
     //     },
     //     100);
-
-    for (;;)
+    VN300Data data;
+    while (!ModuleManager::getInstance().get<Actuators>()->isEmergencyStopped())
     {
-        // speed = speed0;
-        // for (int i = 0; i < 10; i++)
-        // {
-        modules.get<Actuators>()->moveDeg(Actuators::StepperList::HORIZONTAL,
-                                          360);
-        Thread::sleep(500);
-
-        speed += stepSpeed;
-        modules.get<Actuators>()->setSpeed(Actuators::StepperList::HORIZONTAL,
-                                           speed);
-        // }
-
-        // speed = speed0;
-        // for (int i = 0; i < 10; i++)
-        // {
-        //     modules.get<Actuators>()->moveDeg(
-        //         Actuators::StepperList::HORIZONTAL, -360);
-        //     Thread::sleep(400);
-
-        //     speed += stepSpeed;
-        //     modules.get<Actuators>()->setSpeed(
-        //         Actuators::StepperList::HORIZONTAL, speed);
-        // }
+        {
+            data = modules.get<Sensors>()->getVN300LastSample();
+            printf("acc[%.3f,%.3f,%.3f] ypr[%.3f,%.3f,%.3f]\n",
+                   data.accelerationX, data.accelerationY, data.accelerationZ,
+                   data.yaw, data.pitch, data.roll);
+            modules.get<Actuators>()->moveDeg(
+                Actuators::StepperList::HORIZONTAL, 10);
+            modules.get<Actuators>()->moveDeg(Actuators::StepperList::VERTICAL,
+                                              10);
+            Thread::sleep(1000);
+        }
+
+        {
+            data = modules.get<Sensors>()->getVN300LastSample();
+            printf("acc[%.3f,%.3f,%.3f] ypr[%.3f,%.3f,%.3f]\n",
+                   data.accelerationX, data.accelerationY, data.accelerationZ,
+                   data.yaw, data.pitch, data.roll);
+            modules.get<Actuators>()->moveDeg(
+                Actuators::StepperList::HORIZONTAL, -10);
+            modules.get<Actuators>()->moveDeg(Actuators::StepperList::VERTICAL,
+                                              -10);
+            Thread::sleep(1000);
+        }
     }
 
     // Stopping threads
     {
         Logger::getInstance().stop();
+        printf("Logger stopped! Board can be reset/shutdown9\n");
     }
 
     while (1)
-- 
GitLab