diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bb168dbf9cdf0d37f7ca9f8505e1080e69bf7d8..e2d327a3722185972d8ad0290231b19f793045fc 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 fcfc6e95e12990044f4d221207aea828c8c69f88..c652e9ea20846be6ebc1e149e39cbd0274e39ad5 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 4feaa87380a4cec0bfcc8ab73778a6ba2f730dd5..fbf76965629f7aa26c75052b8ca5b00cc71d8691 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 3996b099982afc1f47dbf8363887f5d57b4f8a02..d7c763f90794934f8680e238d38b9704b64a8a99 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 e09d207c9166a97403167b204dc25681b059cc8e..9e488159641357278d7ecd66392fd2beb11578db 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 5681b6f297fd9805a2cc5cd6749df0b410d8e63b..ad6878677e8386935dfbd695a5dd7f0c5d2cfd17 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; }