From 646260706e3c29f02d78da8eda11381d1fcb6df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Caruso?= <niccolo.caruso@skywarder.eu> Date: Wed, 2 Oct 2024 15:17:11 +0200 Subject: [PATCH] [GS] Fixes and dipSwitch now read in initial part of the entrypoint Submodules: Update on skyward-boardcore Dipswitch: Removed from the radio and created custom constructor to pass its parameters CMakeList: Added also Base things to the entrypoint of lyra-s TODO: The Interrupts of the radio must be changed. --- CMakeLists.txt | 2 +- .../Groundstation/Automated/Radio/Radio.cpp | 20 ++++++--------- .../Groundstation/Automated/Radio/Radio.h | 9 +++++++ src/boards/Groundstation/Base/Radio/Radio.cpp | 25 ++++++++----------- src/boards/Groundstation/Base/Radio/Radio.h | 18 +++++++++++++ src/boards/Groundstation/DipReader.h | 21 +++++++--------- 6 files changed, 56 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bb168dbf..e2d327a37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,7 +126,7 @@ sbs_target(test-actuators stm32f767zi_automated_antennas) add_executable(lyra-gs-entry src/entrypoints/Groundstation/lyra-gs-entry.cpp - ${ANTENNAS} ${GROUNDSTATION_COMMON} ${GROUNDSTATION_AUTOMATED} + ${ANTENNAS} ${GROUNDSTATION_COMMON} ${GROUNDSTATION_AUTOMATED} ${GROUNDSTATION_BASE} ) target_include_directories(lyra-gs-entry PRIVATE ${OBSW_INCLUDE_DIRS}) sbs_target(lyra-gs-entry stm32f767zi_lyra_gs) diff --git a/src/boards/Groundstation/Automated/Radio/Radio.cpp b/src/boards/Groundstation/Automated/Radio/Radio.cpp index fcfc6e95e..c652e9ea2 100644 --- a/src/boards/Groundstation/Automated/Radio/Radio.cpp +++ b/src/boards/Groundstation/Automated/Radio/Radio.cpp @@ -26,7 +26,6 @@ #include <Groundstation/Automated/Buses.h> #include <Groundstation/Automated/Hub.h> #include <Groundstation/Common/Ports/Serial.h> -#include <Groundstation/DipReader.h> #include <interfaces-impl/hwmapping.h> #include <radio/SX1278/SX1278Frontends.h> @@ -54,23 +53,20 @@ namespace Antennas bool RadioMain::start() { - DipReader dipSwitch; - DipStatus dipStatus = dipSwitch.readDip(); + std::unique_ptr<Boardcore::SX1278Fsk> sx1278; std::unique_ptr<SX1278::ISX1278Frontend> frontend; - if (dipStatus.hasBackup) - frontend = std::make_unique<EbyteFrontend>(radio1::txen::getPin(), - radio1::rxen::getPin()); + if (hasBackup) + frontend = std::make_unique<EbyteFrontend>(radio::txen::getPin(), + radio::rxen::getPin()); else frontend = std::make_unique<Skyward433Frontend>(); - std::unique_ptr<Boardcore::SX1278Fsk> sx1278 = - std::make_unique<Boardcore::SX1278Fsk>( - ModuleManager::getInstance().get<Antennas::Buses>()->radio_bus, - radio::cs::getPin(), radio::dio0::getPin(), radio::dio1::getPin(), - radio::dio3::getPin(), SPI::ClockDivider::DIV_64, - std::move(frontend)); + sx1278 = std::make_unique<Boardcore::SX1278Fsk>( + ModuleManager::getInstance().get<Antennas::Buses>()->radio_bus, + radio::cs::getPin(), radio::dio0::getPin(), radio::dio1::getPin(), + radio::dio3::getPin(), SPI::ClockDivider::DIV_64, std::move(frontend)); // First check if the device is even connected bool present = sx1278->checkVersion(); diff --git a/src/boards/Groundstation/Automated/Radio/Radio.h b/src/boards/Groundstation/Automated/Radio/Radio.h index 4feaa8738..fbf769656 100644 --- a/src/boards/Groundstation/Automated/Radio/Radio.h +++ b/src/boards/Groundstation/Automated/Radio/Radio.h @@ -31,6 +31,15 @@ class RadioMain : public Groundstation::RadioBase, public Boardcore::Module { public: [[nodiscard]] bool start(); + + RadioMain(bool hasBackup, uint8_t ipConfig) + : hasBackup{hasBackup}, ipConfig{ipConfig} {}; + + RadioMain() : hasBackup{false}, ipConfig{0} {}; + +private: + bool hasBackup = false; + uint8_t ipConfig = 0; }; } // namespace Antennas \ No newline at end of file diff --git a/src/boards/Groundstation/Base/Radio/Radio.cpp b/src/boards/Groundstation/Base/Radio/Radio.cpp index 3996b0999..d7c763f90 100644 --- a/src/boards/Groundstation/Base/Radio/Radio.cpp +++ b/src/boards/Groundstation/Base/Radio/Radio.cpp @@ -26,7 +26,6 @@ #include <Groundstation/Base/Buses.h> #include <Groundstation/Base/Hub.h> #include <Groundstation/Common/Ports/Serial.h> -#include <Groundstation/DipReader.h> #include <radio/SX1278/SX1278Frontends.h> using namespace Groundstation; @@ -66,12 +65,10 @@ void __attribute__((used)) MIOSIX_RADIO2_DIO3_IRQ() bool RadioMain::start() { - DipReader dipSwitch; - DipStatus dipStatus = dipSwitch.readDip(); std::unique_ptr<SX1278::ISX1278Frontend> frontend; - if (dipStatus.hasBackup) + if (hasBackup) frontend = std::make_unique<EbyteFrontend>(radio1::txen::getPin(), radio1::rxen::getPin()); else @@ -111,21 +108,21 @@ bool RadioMain::start() bool RadioPayload::start() { -#ifdef SKYWARD_GS_PAYLOAD_USE_BACKUP_RF - std::unique_ptr<SX1278::ISX1278Frontend> frontend = - std::make_unique<EbyteFrontend>(radio2::txen::getPin(), - radio2::rxen::getPin()); -#else - std::unique_ptr<SX1278::ISX1278Frontend> frontend = - std::make_unique<Skyward433Frontend>(); -#endif + std::unique_ptr<SX1278::ISX1278Frontend> frontend; + std::unique_ptr<Boardcore::SX1278Fsk> sx1278; + if (hasBackup) + frontend = std::make_unique<EbyteFrontend>(radio2::txen::getPin(), + radio2::rxen::getPin()); + else + { + frontend = std::make_unique<Skyward433Frontend>(); - std::unique_ptr<Boardcore::SX1278Fsk> sx1278 = - std::make_unique<Boardcore::SX1278Fsk>( + sx1278 = std::make_unique<Boardcore::SX1278Fsk>( ModuleManager::getInstance().get<Buses>()->radio2_bus, radio2::cs::getPin(), radio2::dio0::getPin(), radio2::dio1::getPin(), radio2::dio3::getPin(), SPI::ClockDivider::DIV_64, std::move(frontend)); + } // First check if the device is even connected bool present = sx1278->checkVersion(); diff --git a/src/boards/Groundstation/Base/Radio/Radio.h b/src/boards/Groundstation/Base/Radio/Radio.h index e09d207c9..9e4881596 100644 --- a/src/boards/Groundstation/Base/Radio/Radio.h +++ b/src/boards/Groundstation/Base/Radio/Radio.h @@ -31,12 +31,30 @@ class RadioMain : public Groundstation::RadioBase, public Boardcore::Module { public: [[nodiscard]] bool start(); + + RadioMain(bool hasBackup, uint8_t ipConfig) + : hasBackup{hasBackup}, ipConfig{ipConfig} {}; + + RadioMain() : hasBackup{false}, ipConfig{0} {}; + +private: + bool hasBackup = false; + uint8_t ipConfig = 0; }; class RadioPayload : public Groundstation::RadioBase, public Boardcore::Module { public: [[nodiscard]] bool start(); + + RadioPayload(bool hasBackup, uint8_t ipConfig) + : hasBackup{hasBackup}, ipConfig{ipConfig} {}; + + RadioPayload() : hasBackup{false}, ipConfig{0} {}; + +private: + bool hasBackup = false; + uint8_t ipConfig = 0; }; } // namespace GroundstationBase \ No newline at end of file diff --git a/src/boards/Groundstation/DipReader.h b/src/boards/Groundstation/DipReader.h index 5681b6f29..ad6878677 100644 --- a/src/boards/Groundstation/DipReader.h +++ b/src/boards/Groundstation/DipReader.h @@ -20,6 +20,7 @@ * THE SOFTWARE. */ +#include <interfaces-impl/hwmapping.h> #include <miosix.h> /** @@ -29,12 +30,7 @@ struct DipStatus { bool isARP; bool hasBackup; - bool ip0; - bool ip1; - bool ip2; - bool ip3; - bool ip4; - bool ip5; + uint8_t ipConfig; }; /** @@ -46,6 +42,7 @@ public: static DipStatus readDip() { DipStatus dipReading; + dipReading.ipConfig = 0; // Write to the shift register (CS == Not LD) miosix::dipSwitch::sh::low(); @@ -58,12 +55,12 @@ public: // Read first register GS(0)/ARP(1) dipReading.isARP = readBit(); dipReading.hasBackup = readBit(); - dipReading.ip0 = readBit(); - dipReading.ip1 = readBit(); - dipReading.ip2 = readBit(); - dipReading.ip3 = readBit(); - dipReading.ip4 = readBit(); - dipReading.ip5 = readBit(); + dipReading.ipConfig |= readBit(); + dipReading.ipConfig |= readBit() << 1; + dipReading.ipConfig |= readBit() << 2; + dipReading.ipConfig |= readBit() << 3; + dipReading.ipConfig |= readBit() << 4; + dipReading.ipConfig |= readBit() << 5; return dipReading; } -- GitLab