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;
}