diff --git a/src/boards/Groundstation/Nokia/Buses.h b/src/boards/Groundstation/Nokia/Buses.h
index 8a3f17a1865b311d626f89ceb74b858fe26db83a..d167571c6ae835426613c9ec01f1e47c2382fd51 100644
--- a/src/boards/Groundstation/Nokia/Buses.h
+++ b/src/boards/Groundstation/Nokia/Buses.h
@@ -23,15 +23,14 @@
#pragma once
#include <drivers/spi/SPIBus.h>
-
-#include <utils/ModuleManager/ModuleManager.hpp>
+#include <utils/DependencyManager/DependencyManager.h>
#include "interfaces-impl/hwmapping.h"
namespace GroundstationNokia
{
-class Buses : public Boardcore::Module
+class Buses : public Boardcore::Injectable
{
public:
Boardcore::SPIBus radio_bus;
diff --git a/src/boards/Groundstation/Nokia/Hub.cpp b/src/boards/Groundstation/Nokia/Hub.cpp
index 769a2c8fa6f70e6e067d2be6dbf7439b6f9cee5a..1767efca300eee3581fbc04622c3e9b3e168c427 100644
--- a/src/boards/Groundstation/Nokia/Hub.cpp
+++ b/src/boards/Groundstation/Nokia/Hub.cpp
@@ -32,7 +32,7 @@ using namespace Boardcore;
void Hub::dispatchOutgoingMsg(const mavlink_message_t& msg)
{
- Radio* radio = ModuleManager::getInstance().get<Radio>();
+ Radio* radio = getModule<Radio>();
if (!radio->sendMsg(msg))
{
@@ -42,6 +42,6 @@ void Hub::dispatchOutgoingMsg(const mavlink_message_t& msg)
void Hub::dispatchIncomingMsg(const mavlink_message_t& msg)
{
- Serial* serial = ModuleManager::getInstance().get<Serial>();
+ Serial* serial = getModule<Serial>();
serial->sendMsg(msg);
}
\ No newline at end of file
diff --git a/src/boards/Groundstation/Nokia/Hub.h b/src/boards/Groundstation/Nokia/Hub.h
index 0351d7ab839d6b4c5e25faa51bfb8eebf0751cbf..920e151cde73e04d4c18317824763431d7f4ed05 100644
--- a/src/boards/Groundstation/Nokia/Hub.h
+++ b/src/boards/Groundstation/Nokia/Hub.h
@@ -23,9 +23,10 @@
#pragma once
#include <Groundstation/Common/HubBase.h>
+#include <Groundstation/Common/Ports/Serial.h>
+#include <Groundstation/Nokia/Radio/Radio.h>
#include <common/Mavlink.h>
-
-#include <utils/ModuleManager/ModuleManager.hpp>
+#include <utils/DependencyManager/DependencyManager.h>
namespace GroundstationNokia
{
@@ -33,7 +34,9 @@ namespace GroundstationNokia
/**
* @brief Central hub connecting all outgoing and ingoing modules.
*/
-class Hub : public Groundstation::HubBase
+class Hub : public Boardcore::InjectableWithDeps<
+ Boardcore::InjectableBase<Groundstation::HubBase>, Radio,
+ Groundstation::Serial>
{
public:
Hub() {}
diff --git a/src/boards/Groundstation/Nokia/Radio/Radio.cpp b/src/boards/Groundstation/Nokia/Radio/Radio.cpp
index 8a3911b82039ae4a2114ed7b787b18cdfdb5f0c8..77a4c41bd8d98107597addfee0de8d87f416f777 100644
--- a/src/boards/Groundstation/Nokia/Radio/Radio.cpp
+++ b/src/boards/Groundstation/Nokia/Radio/Radio.cpp
@@ -37,19 +37,24 @@ using namespace miosix;
#define SX1278_DIO1_IRQ EXTI4_IRQHandlerImpl
#define SX1278_DIO3_IRQ EXTI11_IRQHandlerImpl
+Radio* radioGlobal = nullptr;
+
void __attribute__((used)) SX1278_DIO0_IRQ()
{
- ModuleManager::getInstance().get<Radio>()->handleDioIRQ();
+ if (radioGlobal)
+ radioGlobal->handleDioIRQ();
}
void __attribute__((used)) SX1278_DIO1_IRQ()
{
- ModuleManager::getInstance().get<Radio>()->handleDioIRQ();
+ if (radioGlobal)
+ radioGlobal->handleDioIRQ();
}
void __attribute__((used)) SX1278_DIO3_IRQ()
{
- ModuleManager::getInstance().get<Radio>()->handleDioIRQ();
+ if (radioGlobal)
+ radioGlobal->handleDioIRQ();
}
bool Radio::start()
@@ -63,9 +68,7 @@ bool Radio::start()
std::unique_ptr<Boardcore::SX1278Fsk> sx1278 =
std::make_unique<Boardcore::SX1278Fsk>(
- ModuleManager::getInstance()
- .get<GroundstationNokia::Buses>()
- ->radio_bus,
+ getModule<GroundstationNokia::Buses>()->radio_bus,
peripherals::ra01::pc13::cs::getPin(),
peripherals::ra01::pc13::dio0::getPin(),
peripherals::ra01::pc13::dio1::getPin(),
diff --git a/src/boards/Groundstation/Nokia/Radio/Radio.h b/src/boards/Groundstation/Nokia/Radio/Radio.h
index 950b8243a3ccbded6daa6e9e9d58bcc18ff6f2f7..746310fa71a61aefaa7055d4ed0a44e27ac7036a 100644
--- a/src/boards/Groundstation/Nokia/Radio/Radio.h
+++ b/src/boards/Groundstation/Nokia/Radio/Radio.h
@@ -23,11 +23,14 @@
#pragma once
#include <Groundstation/Common/Radio/RadioBase.h>
+#include <Groundstation/Nokia/Buses.h>
namespace GroundstationNokia
{
-class Radio : public Groundstation::RadioBase, public Boardcore::Module
+class Radio : public Boardcore::InjectableWithDeps<
+ Boardcore::InjectableBase<Groundstation::RadioBase>,
+ GroundstationNokia::Buses>
{
public:
[[nodiscard]] bool start();
diff --git a/src/entrypoints/Groundstation/nokia-groundstation-entry.cpp b/src/entrypoints/Groundstation/nokia-groundstation-entry.cpp
index da685704b93e00882cb953e9e0a398d95714abd6..93d0f1e22be1bc2d51c1e7c501fb52361b598cee 100644
--- a/src/entrypoints/Groundstation/nokia-groundstation-entry.cpp
+++ b/src/entrypoints/Groundstation/nokia-groundstation-entry.cpp
@@ -25,6 +25,7 @@
#include <Groundstation/Nokia/Hub.h>
#include <Groundstation/Nokia/Radio/Radio.h>
#include <miosix.h>
+#include <utils/DependencyManager/DependencyManager.h>
using namespace Groundstation;
using namespace GroundstationNokia;
@@ -48,14 +49,14 @@ int main()
Radio *radio = new Radio();
Serial *serial = new Serial();
- ModuleManager &modules = ModuleManager::getInstance();
+ DependencyManager manager;
bool ok = true;
- ok &= modules.insert<HubBase>(hub);
- ok &= modules.insert(buses);
- ok &= modules.insert(serial);
- ok &= modules.insert(radio);
+ ok &= manager.insert<HubBase>(hub);
+ ok &= manager.insert(buses);
+ ok &= manager.insert(serial);
+ ok &= manager.insert(radio);
// If insertion failed, stop right here
if (!ok)
@@ -64,6 +65,12 @@ int main()
idleLoop();
}
+ if (!manager.inject())
+ {
+ printf("[error] Failed to inject the dependencies!\n");
+ idleLoop();
+ }
+
// Ok now start them
ok &= serial->start();