remove of smart pointers

This commit is contained in:
Peter Buchegger 2021-05-19 00:44:37 +02:00
parent c6d73c33b2
commit c1fd41a355
31 changed files with 203 additions and 194 deletions

View file

@ -15,11 +15,11 @@ ConfigurationManagement::ConfigurationManagement(String FilePath) : mFilePath(Fi
ConfigurationManagement::~ConfigurationManagement() { ConfigurationManagement::~ConfigurationManagement() {
} }
std::shared_ptr<Configuration> ConfigurationManagement::readConfiguration() { void ConfigurationManagement::readConfiguration(Configuration &conf) {
File file = SPIFFS.open(mFilePath); File file = SPIFFS.open(mFilePath);
if (!file) { if (!file) {
logPrintlnE("Failed to open file for reading..."); logPrintlnE("Failed to open file for reading, using default configuration.");
return 0; return;
} }
DynamicJsonDocument data(2048); DynamicJsonDocument data(2048);
DeserializationError error = deserializeJson(data, file); DeserializationError error = deserializeJson(data, file);
@ -30,15 +30,13 @@ std::shared_ptr<Configuration> ConfigurationManagement::readConfiguration() {
// Serial.println(); // Serial.println();
file.close(); file.close();
std::shared_ptr<Configuration> conf = readProjectConfiguration(data); readProjectConfiguration(data, conf);
// update config in memory to get the new fields: // update config in memory to get the new fields:
writeConfiguration(conf); writeConfiguration(conf);
return conf;
} }
void ConfigurationManagement::writeConfiguration(std::shared_ptr<Configuration> conf) { void ConfigurationManagement::writeConfiguration(Configuration &conf) {
File file = SPIFFS.open(mFilePath, "w"); File file = SPIFFS.open(mFilePath, "w");
if (!file) { if (!file) {
logPrintlnE("Failed to open file for writing..."); logPrintlnE("Failed to open file for writing...");

View file

@ -16,12 +16,12 @@ public:
explicit ConfigurationManagement(String FilePath); explicit ConfigurationManagement(String FilePath);
virtual ~ConfigurationManagement(); virtual ~ConfigurationManagement();
std::shared_ptr<Configuration> readConfiguration(); void readConfiguration(Configuration &conf);
void writeConfiguration(std::shared_ptr<Configuration> conf); void writeConfiguration(Configuration &conf);
private: private:
virtual std::shared_ptr<Configuration> readProjectConfiguration(DynamicJsonDocument &data) = 0; virtual void readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) = 0;
virtual void writeProjectConfiguration(std::shared_ptr<Configuration> conf, DynamicJsonDocument &data) = 0; virtual void writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) = 0;
const String mFilePath; const String mFilePath;
}; };

View file

@ -8,7 +8,7 @@ Display::Display() : _disp(0), _statusFrame(0), _displaySaveMode(false) {
Display::~Display() { Display::~Display() {
} }
void Display::setup(std::shared_ptr<BoardConfig> boardConfig) { void Display::setup(BoardConfig const *const boardConfig) {
if (boardConfig->OledReset != 0) { if (boardConfig->OledReset != 0) {
pinMode(boardConfig->OledReset, OUTPUT); pinMode(boardConfig->OledReset, OUTPUT);
digitalWrite(boardConfig->OledReset, HIGH); digitalWrite(boardConfig->OledReset, HIGH);

View file

@ -28,7 +28,7 @@ public:
Display(); Display();
~Display(); ~Display();
void setup(std::shared_ptr<BoardConfig> boardConfig); void setup(BoardConfig const *const boardConfig);
// setup functions // setup functions
void showSpashScreen(String firmwareTitle, String version); void showSpashScreen(String firmwareTitle, String version);
void setStatusFrame(std::shared_ptr<StatusFrame> frame); void setStatusFrame(std::shared_ptr<StatusFrame> frame);

View file

@ -1,6 +1,6 @@
#include "LoRa_APRS.h" #include "LoRa_APRS.h"
LoRa_APRS::LoRa_APRS(std::shared_ptr<BoardConfig> boardConfig) : _LastReceivedMsg(0), _RxFrequency(LORA_RX_FREQUENCY), _TxFrequency(LORA_TX_FREQUENCY) { LoRa_APRS::LoRa_APRS(BoardConfig const *const boardConfig) : _LastReceivedMsg(0), _RxFrequency(LORA_RX_FREQUENCY), _TxFrequency(LORA_TX_FREQUENCY) {
SPI.begin(boardConfig->LoraSck, boardConfig->LoraMiso, boardConfig->LoraMosi, boardConfig->LoraCS); SPI.begin(boardConfig->LoraSck, boardConfig->LoraMiso, boardConfig->LoraMosi, boardConfig->LoraCS);
setPins(boardConfig->LoraCS, boardConfig->LoraReset, boardConfig->LoraIRQ); setPins(boardConfig->LoraCS, boardConfig->LoraReset, boardConfig->LoraIRQ);
} }

View file

@ -16,7 +16,7 @@
class LoRa_APRS : public LoRaClass { class LoRa_APRS : public LoRaClass {
public: public:
explicit LoRa_APRS(std::shared_ptr<BoardConfig> boardConfig); explicit LoRa_APRS(BoardConfig const *const boardConfig);
bool checkMessage(); bool checkMessage();
std::shared_ptr<APRSMessage> getMessage(); std::shared_ptr<APRSMessage> getMessage();

View file

@ -1,17 +1,25 @@
#include "System.h" #include "System.h"
System::System(std::shared_ptr<BoardConfig> boardConfig, std::shared_ptr<Configuration> userConfig) : _boardConfig(boardConfig), _userConfig(userConfig), _isWifiEthConnected(false) { System::System() : _boardConfig(0), _userConfig(0), _isWifiEthConnected(false) {
} }
System::~System() { System::~System() {
} }
std::shared_ptr<BoardConfig> System::getBoardConfig() const { void System::setBoardConfig(BoardConfig const *const boardConfig) {
_boardConfig = boardConfig;
}
void System::setUserConfig(Configuration const *const userConfig) {
_userConfig = userConfig;
}
BoardConfig const *const System::getBoardConfig() const {
return _boardConfig; return _boardConfig;
} }
std::shared_ptr<Configuration> System::getUserConfig() const { Configuration const *const System::getUserConfig() const {
return _userConfig; return _userConfig;
} }

View file

@ -10,22 +10,25 @@
class System { class System {
public: public:
System(std::shared_ptr<BoardConfig> boardConfig, std::shared_ptr<Configuration> userConfig); System();
~System(); ~System();
std::shared_ptr<BoardConfig> getBoardConfig() const; void setBoardConfig(BoardConfig const *const boardConfig);
std::shared_ptr<Configuration> getUserConfig() const; void setUserConfig(Configuration const *const userConfig);
TaskManager & getTaskManager();
Display & getDisplay(); BoardConfig const *const getBoardConfig() const;
bool isWifiEthConnected() const; Configuration const *const getUserConfig() const;
void connectedViaWifiEth(bool status); TaskManager & getTaskManager();
Display & getDisplay();
bool isWifiEthConnected() const;
void connectedViaWifiEth(bool status);
private: private:
std::shared_ptr<BoardConfig> _boardConfig; BoardConfig const * _boardConfig;
std::shared_ptr<Configuration> _userConfig; Configuration const *_userConfig;
TaskManager _taskManager; TaskManager _taskManager;
Display _display; Display _display;
bool _isWifiEthConnected; bool _isWifiEthConnected;
}; };
#endif #endif

View file

@ -27,7 +27,7 @@ std::list<std::shared_ptr<Task>> TaskManager::getTasks() {
return _tasks; return _tasks;
} }
bool TaskManager::setup(std::shared_ptr<System> system) { bool TaskManager::setup(System &system) {
logPrintlnV("will setup all tasks..."); logPrintlnV("will setup all tasks...");
for (std::shared_ptr<Task> &elem : _alwaysRunTasks) { for (std::shared_ptr<Task> &elem : _alwaysRunTasks) {
logPrintD("call setup from "); logPrintD("call setup from ");
@ -43,7 +43,7 @@ bool TaskManager::setup(std::shared_ptr<System> system) {
return true; return true;
} }
bool TaskManager::loop(std::shared_ptr<System> system) { bool TaskManager::loop(System &system) {
// logPrintlnD("will loop all tasks..."); // logPrintlnD("will loop all tasks...");
for (std::shared_ptr<Task> &elem : _alwaysRunTasks) { for (std::shared_ptr<Task> &elem : _alwaysRunTasks) {
// logPrintD("call loop from "); // logPrintD("call loop from ");

View file

@ -43,8 +43,8 @@ public:
return _stateInfo; return _stateInfo;
} }
virtual bool setup(std::shared_ptr<System> system) = 0; virtual bool setup(System &system) = 0;
virtual bool loop(std::shared_ptr<System> system) = 0; virtual bool loop(System &system) = 0;
protected: protected:
TaskDisplayState _state; TaskDisplayState _state;
@ -66,8 +66,8 @@ public:
std::shared_ptr<Task> getTask(const char *name); std::shared_ptr<Task> getTask(const char *name);
std::list<std::shared_ptr<Task>> getTasks(); std::list<std::shared_ptr<Task>> getTasks();
bool setup(std::shared_ptr<System> system); bool setup(System &system);
bool loop(std::shared_ptr<System> system); bool loop(System &system);
private: private:
std::list<std::shared_ptr<Task>> _tasks; std::list<std::shared_ptr<Task>> _tasks;

View file

@ -24,7 +24,7 @@
String create_lat_aprs(double lat); String create_lat_aprs(double lat);
String create_long_aprs(double lng); String create_long_aprs(double lng);
std::shared_ptr<System> LoRaSystem; System LoRaSystem;
TaskQueue<std::shared_ptr<APRSMessage>> toAprsIs; TaskQueue<std::shared_ptr<APRSMessage>> toAprsIs;
TaskQueue<std::shared_ptr<APRSMessage>> fromModem; TaskQueue<std::shared_ptr<APRSMessage>> fromModem;
@ -50,9 +50,11 @@ void setup() {
// clang-format on // clang-format on
ProjectConfigurationManagement confmg; ProjectConfigurationManagement confmg;
std::shared_ptr<Configuration> userConfig = confmg.readConfiguration(); Configuration userConfig;
BoardFinder finder(boardConfigs); confmg.readConfiguration(userConfig);
std::shared_ptr<BoardConfig> boardConfig = finder.getBoardConfig(userConfig->board);
BoardFinder finder(boardConfigs);
std::shared_ptr<BoardConfig> boardConfig = finder.getBoardConfig(userConfig.board);
if (boardConfig == 0) { if (boardConfig == 0) {
boardConfig = finder.searchBoardConfig(); boardConfig = finder.searchBoardConfig();
if (boardConfig == 0) { if (boardConfig == 0) {
@ -60,7 +62,7 @@ void setup() {
while (true) { while (true) {
} }
} }
userConfig->board = boardConfig->Name; userConfig.board = boardConfig->Name;
confmg.writeConfiguration(userConfig); confmg.writeConfiguration(userConfig);
logPrintlnI("will restart board now!"); logPrintlnI("will restart board now!");
ESP.restart(); ESP.restart();
@ -82,36 +84,37 @@ void setup() {
powerManagement->deactivateGPS(); powerManagement->deactivateGPS();
} }
LoRaSystem = std::shared_ptr<System>(new System(boardConfig, userConfig)); LoRaSystem.setBoardConfig(boardConfig.get());
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new DisplayTask())); LoRaSystem.setUserConfig(&userConfig);
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new ModemTask(fromModem))); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new DisplayTask()));
LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new ModemTask(fromModem)));
if (boardConfig->Type == eETH_BOARD) { if (boardConfig->Type == eETH_BOARD) {
LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr<Task>(new EthTask())); LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr<Task>(new EthTask()));
} else { } else {
LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr<Task>(new WifiTask())); LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr<Task>(new WifiTask()));
} }
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new OTATask())); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new OTATask()));
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new NTPTask())); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new NTPTask()));
if (userConfig->ftp.active) { if (userConfig.ftp.active) {
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new FTPTask())); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new FTPTask()));
} }
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new AprsIsTask(toAprsIs))); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new AprsIsTask(toAprsIs)));
LoRaSystem->getTaskManager().addTask(std::shared_ptr<Task>(new RouterTask(fromModem, toAprsIs))); LoRaSystem.getTaskManager().addTask(std::shared_ptr<Task>(new RouterTask(fromModem, toAprsIs)));
LoRaSystem->getTaskManager().setup(LoRaSystem); LoRaSystem.getTaskManager().setup(LoRaSystem);
LoRaSystem->getDisplay().showSpashScreen("LoRa APRS iGate", VERSION); LoRaSystem.getDisplay().showSpashScreen("LoRa APRS iGate", VERSION);
if (userConfig->callsign == "NOCALL-10") { if (userConfig.callsign == "NOCALL-10") {
logPrintlnE("You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!"); logPrintlnE("You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!");
LoRaSystem->getDisplay().showStatusScreen("ERROR", "You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!"); LoRaSystem.getDisplay().showStatusScreen("ERROR", "You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!");
while (true) while (true)
; ;
} }
if (userConfig->display.overwritePin != 0) { if (userConfig.display.overwritePin != 0) {
pinMode(userConfig->display.overwritePin, INPUT); pinMode(userConfig.display.overwritePin, INPUT);
pinMode(userConfig->display.overwritePin, INPUT_PULLUP); pinMode(userConfig.display.overwritePin, INPUT_PULLUP);
} }
delay(5000); delay(5000);
@ -120,7 +123,7 @@ void setup() {
// cppcheck-suppress unusedFunction // cppcheck-suppress unusedFunction
void loop() { void loop() {
LoRaSystem->getTaskManager().loop(LoRaSystem); LoRaSystem.getTaskManager().loop(LoRaSystem);
} }
String create_lat_aprs(double lat) { String create_lat_aprs(double lat) {

View file

@ -11,14 +11,14 @@ AprsIsTask::AprsIsTask(TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs) : Task
AprsIsTask::~AprsIsTask() { AprsIsTask::~AprsIsTask() {
} }
bool AprsIsTask::setup(std::shared_ptr<System> system) { bool AprsIsTask::setup(System &system) {
_aprs_is = std::shared_ptr<APRS_IS>(new APRS_IS(system->getUserConfig()->callsign, system->getUserConfig()->aprs_is.passcode, "ESP32-APRS-IS", "0.2")); _aprs_is = std::shared_ptr<APRS_IS>(new APRS_IS(system.getUserConfig()->callsign, system.getUserConfig()->aprs_is.passcode, "ESP32-APRS-IS", "0.2"));
return true; return true;
} }
bool AprsIsTask::loop(std::shared_ptr<System> system) { bool AprsIsTask::loop(System &system) {
if (!system->isWifiEthConnected()) { if (!system.isWifiEthConnected()) {
return false; return false;
} }
if (!_aprs_is->connected()) { if (!_aprs_is->connected()) {
@ -42,12 +42,12 @@ bool AprsIsTask::loop(std::shared_ptr<System> system) {
return true; return true;
} }
bool AprsIsTask::connect(std::shared_ptr<System> system) { bool AprsIsTask::connect(System &system) {
logPrintI("connecting to APRS-IS server: "); logPrintI("connecting to APRS-IS server: ");
logPrintI(system->getUserConfig()->aprs_is.server); logPrintI(system.getUserConfig()->aprs_is.server);
logPrintI(" on port: "); logPrintI(" on port: ");
logPrintlnI(String(system->getUserConfig()->aprs_is.port)); logPrintlnI(String(system.getUserConfig()->aprs_is.port));
if (!_aprs_is->connect(system->getUserConfig()->aprs_is.server, system->getUserConfig()->aprs_is.port)) { if (!_aprs_is->connect(system.getUserConfig()->aprs_is.server, system.getUserConfig()->aprs_is.port)) {
logPrintlnE("Connection failed."); logPrintlnE("Connection failed.");
return false; return false;
} }

View file

@ -11,15 +11,15 @@ public:
explicit AprsIsTask(TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs); explicit AprsIsTask(TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs);
virtual ~AprsIsTask(); virtual ~AprsIsTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<APRS_IS> _aprs_is; std::shared_ptr<APRS_IS> _aprs_is;
TaskQueue<std::shared_ptr<APRSMessage>> &_toAprsIs; TaskQueue<std::shared_ptr<APRSMessage>> &_toAprsIs;
bool connect(std::shared_ptr<System> system); bool connect(System &system);
}; };
#endif #endif

View file

@ -10,22 +10,22 @@ DisplayTask::DisplayTask() : Task("DisplayTask", 0) {
DisplayTask::~DisplayTask() { DisplayTask::~DisplayTask() {
} }
bool DisplayTask::setup(std::shared_ptr<System> system) { bool DisplayTask::setup(System &system) {
system->getDisplay().setup(system->getBoardConfig()); system.getDisplay().setup(system.getBoardConfig());
if (system->getUserConfig()->display.turn180) { if (system.getUserConfig()->display.turn180) {
system->getDisplay().turn180(); system.getDisplay().turn180();
} }
std::shared_ptr<StatusFrame> statusFrame = std::shared_ptr<StatusFrame>(new StatusFrame(system->getTaskManager().getTasks())); std::shared_ptr<StatusFrame> statusFrame = std::shared_ptr<StatusFrame>(new StatusFrame(system.getTaskManager().getTasks()));
system->getDisplay().setStatusFrame(statusFrame); system.getDisplay().setStatusFrame(statusFrame);
if (!system->getUserConfig()->display.alwaysOn) { if (!system.getUserConfig()->display.alwaysOn) {
system->getDisplay().activateDisplaySaveMode(); system.getDisplay().activateDisplaySaveMode();
system->getDisplay().setDisplaySaveTimeout(system->getUserConfig()->display.timeout); system.getDisplay().setDisplaySaveTimeout(system.getUserConfig()->display.timeout);
} }
_stateInfo = system->getUserConfig()->callsign; _stateInfo = system.getUserConfig()->callsign;
return true; return true;
} }
bool DisplayTask::loop(std::shared_ptr<System> system) { bool DisplayTask::loop(System &system) {
system->getDisplay().update(); system.getDisplay().update();
return true; return true;
} }

View file

@ -9,8 +9,8 @@ public:
DisplayTask(); DisplayTask();
virtual ~DisplayTask(); virtual ~DisplayTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
}; };
#endif #endif

View file

@ -48,7 +48,7 @@ EthTask::EthTask() : Task(TASK_ETH, TaskEth) {
EthTask::~EthTask() { EthTask::~EthTask() {
} }
bool EthTask::setup(std::shared_ptr<System> system) { bool EthTask::setup(System &system) {
WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiEvent);
constexpr uint8_t ETH_NRST = 5; constexpr uint8_t ETH_NRST = 5;
@ -73,14 +73,14 @@ bool EthTask::setup(std::shared_ptr<System> system) {
return true; return true;
} }
bool EthTask::loop(std::shared_ptr<System> system) { bool EthTask::loop(System &system) {
if (!eth_connected) { if (!eth_connected) {
system->connectedViaWifiEth(false); system.connectedViaWifiEth(false);
_stateInfo = "Ethernet not connected"; _stateInfo = "Ethernet not connected";
_state = Error; _state = Error;
return false; return false;
} }
system->connectedViaWifiEth(true); system.connectedViaWifiEth(true);
_stateInfo = ETH.localIP().toString(); _stateInfo = ETH.localIP().toString();
_state = Okay; _state = Okay;
return true; return true;

View file

@ -8,8 +8,8 @@ public:
EthTask(); EthTask();
virtual ~EthTask(); virtual ~EthTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
}; };

View file

@ -12,9 +12,9 @@ FTPTask::FTPTask() : Task(TASK_FTP, TaskFtp), _beginCalled(false) {
FTPTask::~FTPTask() { FTPTask::~FTPTask() {
} }
bool FTPTask::setup(std::shared_ptr<System> system) { bool FTPTask::setup(System &system) {
_ftpServer = std::shared_ptr<FTPServer>(new FTPServer()); _ftpServer = std::shared_ptr<FTPServer>(new FTPServer());
for (Configuration::Ftp::User user : system->getUserConfig()->ftp.users) { for (Configuration::Ftp::User user : system.getUserConfig()->ftp.users) {
logPrintD("Adding user to FTP Server: "); logPrintD("Adding user to FTP Server: ");
logPrintlnD(user.name); logPrintlnD(user.name);
_ftpServer->addUser(user.name, user.password); _ftpServer->addUser(user.name, user.password);
@ -24,7 +24,7 @@ bool FTPTask::setup(std::shared_ptr<System> system) {
return true; return true;
} }
bool FTPTask::loop(std::shared_ptr<System> system) { bool FTPTask::loop(System &system) {
if (!_beginCalled) { if (!_beginCalled) {
_ftpServer->begin(); _ftpServer->begin();
_beginCalled = true; _beginCalled = true;

View file

@ -9,8 +9,8 @@ public:
FTPTask(); FTPTask();
virtual ~FTPTask(); virtual ~FTPTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<FTPServer> _ftpServer; std::shared_ptr<FTPServer> _ftpServer;

View file

@ -12,8 +12,8 @@ ModemTask::ModemTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem) : Task(
ModemTask::~ModemTask() { ModemTask::~ModemTask() {
} }
bool ModemTask::setup(std::shared_ptr<System> system) { bool ModemTask::setup(System &system) {
_lora_aprs = std::shared_ptr<LoRa_APRS>(new LoRa_APRS(system->getBoardConfig())); _lora_aprs = std::shared_ptr<LoRa_APRS>(new LoRa_APRS(system.getBoardConfig()));
if (!_lora_aprs->begin(_lora_aprs->getRxFrequency())) { if (!_lora_aprs->begin(_lora_aprs->getRxFrequency())) {
logPrintlnE("Starting LoRa failed!"); logPrintlnE("Starting LoRa failed!");
_stateInfo = "LoRa-Modem failed"; _stateInfo = "LoRa-Modem failed";
@ -21,19 +21,19 @@ bool ModemTask::setup(std::shared_ptr<System> system) {
while (true) while (true)
; ;
} }
_lora_aprs->setRxFrequency(system->getUserConfig()->lora.frequencyRx); _lora_aprs->setRxFrequency(system.getUserConfig()->lora.frequencyRx);
_lora_aprs->setTxFrequency(system->getUserConfig()->lora.frequencyTx); _lora_aprs->setTxFrequency(system.getUserConfig()->lora.frequencyTx);
_lora_aprs->setTxPower(system->getUserConfig()->lora.power); _lora_aprs->setTxPower(system.getUserConfig()->lora.power);
_lora_aprs->setSpreadingFactor(system->getUserConfig()->lora.spreadingFactor); _lora_aprs->setSpreadingFactor(system.getUserConfig()->lora.spreadingFactor);
_lora_aprs->setSignalBandwidth(system->getUserConfig()->lora.signalBandwidth); _lora_aprs->setSignalBandwidth(system.getUserConfig()->lora.signalBandwidth);
_lora_aprs->setCodingRate4(system->getUserConfig()->lora.codingRate4); _lora_aprs->setCodingRate4(system.getUserConfig()->lora.codingRate4);
_lora_aprs->enableCrc(); _lora_aprs->enableCrc();
_stateInfo = ""; _stateInfo = "";
return true; return true;
} }
bool ModemTask::loop(std::shared_ptr<System> system) { bool ModemTask::loop(System &system) {
if (_lora_aprs->checkMessage()) { if (_lora_aprs->checkMessage()) {
std::shared_ptr<APRSMessage> msg = _lora_aprs->getMessage(); std::shared_ptr<APRSMessage> msg = _lora_aprs->getMessage();
// msg->getAPRSBody()->setData(msg->getAPRSBody()->getData() + " 123"); // msg->getAPRSBody()->setData(msg->getAPRSBody()->getData() + " 123");
@ -53,10 +53,10 @@ bool ModemTask::loop(std::shared_ptr<System> system) {
if (!path.isEmpty()) { if (!path.isEmpty()) {
path += ","; path += ",";
} }
msg->setPath(path + "qAR," + system->getUserConfig()->callsign); msg->setPath(path + "qAR," + system.getUserConfig()->callsign);
_fromModem.addElement(msg); _fromModem.addElement(msg);
system->getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("LoRa", msg->toString()))); system.getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("LoRa", msg->toString())));
} }
return true; return true;

View file

@ -10,8 +10,8 @@ public:
explicit ModemTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem); explicit ModemTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem);
virtual ~ModemTask(); virtual ~ModemTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<LoRa_APRS> _lora_aprs; std::shared_ptr<LoRa_APRS> _lora_aprs;

View file

@ -11,13 +11,13 @@ NTPTask::NTPTask() : Task(TASK_NTP, TaskNtp), _beginCalled(false) {
NTPTask::~NTPTask() { NTPTask::~NTPTask() {
} }
bool NTPTask::setup(std::shared_ptr<System> system) { bool NTPTask::setup(System &system) {
_ntpClient = std::shared_ptr<NTPClient>(new NTPClient(system->getUserConfig()->ntpServer.c_str())); _ntpClient = std::shared_ptr<NTPClient>(new NTPClient(system.getUserConfig()->ntpServer.c_str()));
return true; return true;
} }
bool NTPTask::loop(std::shared_ptr<System> system) { bool NTPTask::loop(System &system) {
if (!system->isWifiEthConnected()) { if (!system.isWifiEthConnected()) {
return false; return false;
} }
if (!_beginCalled) { if (!_beginCalled) {

View file

@ -9,8 +9,8 @@ public:
NTPTask(); NTPTask();
virtual ~NTPTask(); virtual ~NTPTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<NTPClient> _ntpClient; std::shared_ptr<NTPClient> _ntpClient;

View file

@ -10,7 +10,7 @@ OTATask::OTATask() : Task(TASK_OTA, TaskOta), _beginCalled(false) {
OTATask::~OTATask() { OTATask::~OTATask() {
} }
bool OTATask::setup(std::shared_ptr<System> system) { bool OTATask::setup(System &system) {
_ota = std::shared_ptr<ArduinoOTAClass>(new ArduinoOTAClass()); _ota = std::shared_ptr<ArduinoOTAClass>(new ArduinoOTAClass());
_ota->onStart([&]() { _ota->onStart([&]() {
String type; String type;
@ -44,12 +44,12 @@ bool OTATask::setup(std::shared_ptr<System> system) {
else if (error == OTA_END_ERROR) else if (error == OTA_END_ERROR)
logPrintlnE("End Failed"); logPrintlnE("End Failed");
}); });
_ota->setHostname(system->getUserConfig()->callsign.c_str()); _ota->setHostname(system.getUserConfig()->callsign.c_str());
_stateInfo = ""; _stateInfo = "";
return true; return true;
} }
bool OTATask::loop(std::shared_ptr<System> system) { bool OTATask::loop(System &system) {
if (!_beginCalled) { if (!_beginCalled) {
_ota->begin(); _ota->begin();
_beginCalled = true; _beginCalled = true;

View file

@ -9,8 +9,8 @@ public:
OTATask(); OTATask();
virtual ~OTATask(); virtual ~OTATask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<ArduinoOTAClass> _ota; std::shared_ptr<ArduinoOTAClass> _ota;

View file

@ -13,20 +13,20 @@ RouterTask::RouterTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem, TaskQ
RouterTask::~RouterTask() { RouterTask::~RouterTask() {
} }
bool RouterTask::setup(std::shared_ptr<System> system) { bool RouterTask::setup(System &system) {
// setup beacon // setup beacon
_beacon_timer.setTimeout(system->getUserConfig()->beacon.timeout * 60 * 1000); _beacon_timer.setTimeout(system.getUserConfig()->beacon.timeout * 60 * 1000);
_beaconMsg = std::shared_ptr<APRSMessage>(new APRSMessage()); _beaconMsg = std::shared_ptr<APRSMessage>(new APRSMessage());
_beaconMsg->setSource(system->getUserConfig()->callsign); _beaconMsg->setSource(system.getUserConfig()->callsign);
_beaconMsg->setDestination("APLG01"); _beaconMsg->setDestination("APLG01");
String lat = create_lat_aprs(system->getUserConfig()->beacon.positionLatitude); String lat = create_lat_aprs(system.getUserConfig()->beacon.positionLatitude);
String lng = create_long_aprs(system->getUserConfig()->beacon.positionLongitude); String lng = create_long_aprs(system.getUserConfig()->beacon.positionLongitude);
_beaconMsg->getBody()->setData(String("=") + lat + "L" + lng + "&" + system->getUserConfig()->beacon.message); _beaconMsg->getBody()->setData(String("=") + lat + "L" + lng + "&" + system.getUserConfig()->beacon.message);
return true; return true;
} }
bool RouterTask::loop(std::shared_ptr<System> system) { bool RouterTask::loop(System &system) {
// do routing // do routing
if (!_fromModem.empty()) { if (!_fromModem.empty()) {
_toAprsIs.addElement(_fromModem.getElement()); _toAprsIs.addElement(_fromModem.getElement());
@ -37,7 +37,7 @@ bool RouterTask::loop(std::shared_ptr<System> system) {
logPrintD("[" + timeString() + "] "); logPrintD("[" + timeString() + "] ");
logPrintlnD(_beaconMsg->encode()); logPrintlnD(_beaconMsg->encode());
_toAprsIs.addElement(_beaconMsg); _toAprsIs.addElement(_beaconMsg);
system->getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("BEACON", _beaconMsg->toString()))); system.getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("BEACON", _beaconMsg->toString())));
_beacon_timer.start(); _beacon_timer.start();
} }
time_t diff = _beacon_timer.getTriggerTimeInSec(); time_t diff = _beacon_timer.getTriggerTimeInSec();

View file

@ -9,8 +9,8 @@ public:
RouterTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem, TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs); RouterTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem, TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs);
virtual ~RouterTask(); virtual ~RouterTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
TaskQueue<std::shared_ptr<APRSMessage>> &_fromModem; TaskQueue<std::shared_ptr<APRSMessage>> &_fromModem;

View file

@ -11,12 +11,12 @@ WifiTask::WifiTask() : Task(TASK_WIFI, TaskWifi), _oldWifiStatus(WL_IDLE_STATUS)
WifiTask::~WifiTask() { WifiTask::~WifiTask() {
} }
bool WifiTask::setup(std::shared_ptr<System> system) { bool WifiTask::setup(System &system) {
// WiFi.onEvent(WiFiEvent); // WiFi.onEvent(WiFiEvent);
WiFi.setHostname(system->getUserConfig()->callsign.c_str()); WiFi.setHostname(system.getUserConfig()->callsign.c_str());
_wiFiMulti = std::shared_ptr<WiFiMulti>(new WiFiMulti()); _wiFiMulti = std::shared_ptr<WiFiMulti>(new WiFiMulti());
; ;
for (Configuration::Wifi::AP ap : system->getUserConfig()->wifi.APs) { for (Configuration::Wifi::AP ap : system.getUserConfig()->wifi.APs) {
logPrintD("Looking for AP: "); logPrintD("Looking for AP: ");
logPrintlnD(ap.SSID); logPrintlnD(ap.SSID);
_wiFiMulti->addAP(ap.SSID.c_str(), ap.password.c_str()); _wiFiMulti->addAP(ap.SSID.c_str(), ap.password.c_str());
@ -24,10 +24,10 @@ bool WifiTask::setup(std::shared_ptr<System> system) {
return true; return true;
} }
bool WifiTask::loop(std::shared_ptr<System> system) { bool WifiTask::loop(System &system) {
const uint8_t wifi_status = _wiFiMulti->run(); const uint8_t wifi_status = _wiFiMulti->run();
if (wifi_status != WL_CONNECTED) { if (wifi_status != WL_CONNECTED) {
system->connectedViaWifiEth(false); system.connectedViaWifiEth(false);
logPrintlnE("WiFi not connected!"); logPrintlnE("WiFi not connected!");
_oldWifiStatus = wifi_status; _oldWifiStatus = wifi_status;
_stateInfo = "WiFi not connected"; _stateInfo = "WiFi not connected";
@ -39,7 +39,7 @@ bool WifiTask::loop(std::shared_ptr<System> system) {
_oldWifiStatus = wifi_status; _oldWifiStatus = wifi_status;
return false; return false;
} }
system->connectedViaWifiEth(true); system.connectedViaWifiEth(true);
_stateInfo = WiFi.localIP().toString(); _stateInfo = WiFi.localIP().toString();
_state = Okay; _state = Okay;
return true; return true;

View file

@ -9,8 +9,8 @@ public:
WifiTask(); WifiTask();
virtual ~WifiTask(); virtual ~WifiTask();
virtual bool setup(std::shared_ptr<System> system) override; virtual bool setup(System &system) override;
virtual bool loop(std::shared_ptr<System> system) override; virtual bool loop(System &system) override;
private: private:
std::shared_ptr<WiFiMulti> _wiFiMulti; std::shared_ptr<WiFiMulti> _wiFiMulti;

View file

@ -4,96 +4,93 @@
#include "project_configuration.h" #include "project_configuration.h"
std::shared_ptr<Configuration> ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocument &data) { void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) {
std::shared_ptr<Configuration> conf = std::shared_ptr<Configuration>(new Configuration);
if (data.containsKey("callsign")) if (data.containsKey("callsign"))
conf->callsign = data["callsign"].as<String>(); conf.callsign = data["callsign"].as<String>();
JsonArray aps = data["wifi"]["AP"].as<JsonArray>(); JsonArray aps = data["wifi"]["AP"].as<JsonArray>();
for (JsonVariant v : aps) { for (JsonVariant v : aps) {
Configuration::Wifi::AP ap; Configuration::Wifi::AP ap;
ap.SSID = v["SSID"].as<String>(); ap.SSID = v["SSID"].as<String>();
ap.password = v["password"].as<String>(); ap.password = v["password"].as<String>();
conf->wifi.APs.push_back(ap); conf.wifi.APs.push_back(ap);
} }
if (data.containsKey("beacon") && data["beacon"].containsKey("message")) if (data.containsKey("beacon") && data["beacon"].containsKey("message"))
conf->beacon.message = data["beacon"]["message"].as<String>(); conf.beacon.message = data["beacon"]["message"].as<String>();
conf->beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0; conf.beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0;
conf->beacon.positionLongitude = data["beacon"]["position"]["longitude"] | 0.0; conf.beacon.positionLongitude = data["beacon"]["position"]["longitude"] | 0.0;
conf->beacon.timeout = data["beacon"]["timeout"] | 15; conf.beacon.timeout = data["beacon"]["timeout"] | 15;
if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("passcode")) if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("passcode"))
conf->aprs_is.passcode = data["aprs_is"]["passcode"].as<String>(); conf.aprs_is.passcode = data["aprs_is"]["passcode"].as<String>();
if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("server")) if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("server"))
conf->aprs_is.server = data["aprs_is"]["server"].as<String>(); conf.aprs_is.server = data["aprs_is"]["server"].as<String>();
conf->aprs_is.port = data["aprs_is"]["port"] | 14580; conf.aprs_is.port = data["aprs_is"]["port"] | 14580;
conf->lora.frequencyRx = data["lora"]["frequency_rx"] | 433775000; conf.lora.frequencyRx = data["lora"]["frequency_rx"] | 433775000;
conf->lora.frequencyTx = data["lora"]["frequency_tx"] | 433775000; conf.lora.frequencyTx = data["lora"]["frequency_tx"] | 433775000;
conf->lora.power = data["lora"]["power"] | 20; conf.lora.power = data["lora"]["power"] | 20;
conf->lora.spreadingFactor = data["lora"]["spreading_factor"] | 12; conf.lora.spreadingFactor = data["lora"]["spreading_factor"] | 12;
conf->lora.signalBandwidth = data["lora"]["signal_bandwidth"] | 125000; conf.lora.signalBandwidth = data["lora"]["signal_bandwidth"] | 125000;
conf->lora.codingRate4 = data["lora"]["coding_rate4"] | 5; conf.lora.codingRate4 = data["lora"]["coding_rate4"] | 5;
conf->display.alwaysOn = data["display"]["always_on"] | true; conf.display.alwaysOn = data["display"]["always_on"] | true;
conf->display.timeout = data["display"]["timeout"] | 10; conf.display.timeout = data["display"]["timeout"] | 10;
conf->display.overwritePin = data["display"]["overwrite_pin"] | 0; conf.display.overwritePin = data["display"]["overwrite_pin"] | 0;
conf->display.turn180 = data["display"]["turn180"] | true; conf.display.turn180 = data["display"]["turn180"] | true;
conf->ftp.active = data["ftp"]["active"] | false; conf.ftp.active = data["ftp"]["active"] | false;
JsonArray users = data["ftp"]["user"].as<JsonArray>(); JsonArray users = data["ftp"]["user"].as<JsonArray>();
for (JsonVariant u : users) { for (JsonVariant u : users) {
Configuration::Ftp::User us; Configuration::Ftp::User us;
us.name = u["name"].as<String>(); us.name = u["name"].as<String>();
us.password = u["password"].as<String>(); us.password = u["password"].as<String>();
conf->ftp.users.push_back(us); conf.ftp.users.push_back(us);
} }
if (conf->ftp.users.empty()) { if (conf.ftp.users.empty()) {
Configuration::Ftp::User us; Configuration::Ftp::User us;
us.name = "ftp"; us.name = "ftp";
us.password = "ftp"; us.password = "ftp";
conf->ftp.users.push_back(us); conf.ftp.users.push_back(us);
} }
if (data.containsKey("ntp_server")) if (data.containsKey("ntp_server"))
conf->ntpServer = data["ntp_server"].as<String>(); conf.ntpServer = data["ntp_server"].as<String>();
if (data.containsKey("board")) if (data.containsKey("board"))
conf->board = data["board"].as<String>(); conf.board = data["board"].as<String>();
return conf;
} }
void ProjectConfigurationManagement::writeProjectConfiguration(std::shared_ptr<Configuration> conf, DynamicJsonDocument &data) { void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) {
data["callsign"] = conf->callsign; data["callsign"] = conf.callsign;
JsonArray aps = data["wifi"].createNestedArray("AP"); JsonArray aps = data["wifi"].createNestedArray("AP");
for (Configuration::Wifi::AP ap : conf->wifi.APs) { for (Configuration::Wifi::AP ap : conf.wifi.APs) {
JsonObject v = aps.createNestedObject(); JsonObject v = aps.createNestedObject();
v["SSID"] = ap.SSID; v["SSID"] = ap.SSID;
v["password"] = ap.password; v["password"] = ap.password;
} }
data["beacon"]["message"] = conf->beacon.message; data["beacon"]["message"] = conf.beacon.message;
data["beacon"]["position"]["latitude"] = conf->beacon.positionLatitude; data["beacon"]["position"]["latitude"] = conf.beacon.positionLatitude;
data["beacon"]["position"]["longitude"] = conf->beacon.positionLongitude; data["beacon"]["position"]["longitude"] = conf.beacon.positionLongitude;
data["beacon"]["timeout"] = conf->beacon.timeout; data["beacon"]["timeout"] = conf.beacon.timeout;
data["aprs_is"]["passcode"] = conf->aprs_is.passcode; data["aprs_is"]["passcode"] = conf.aprs_is.passcode;
data["aprs_is"]["server"] = conf->aprs_is.server; data["aprs_is"]["server"] = conf.aprs_is.server;
data["aprs_is"]["port"] = conf->aprs_is.port; data["aprs_is"]["port"] = conf.aprs_is.port;
data["lora"]["frequency_rx"] = conf->lora.frequencyRx; data["lora"]["frequency_rx"] = conf.lora.frequencyRx;
data["lora"]["frequency_tx"] = conf->lora.frequencyTx; data["lora"]["frequency_tx"] = conf.lora.frequencyTx;
data["lora"]["power"] = conf->lora.power; data["lora"]["power"] = conf.lora.power;
data["lora"]["spreading_factor"] = conf->lora.spreadingFactor; data["lora"]["spreading_factor"] = conf.lora.spreadingFactor;
data["lora"]["signal_bandwidth"] = conf->lora.signalBandwidth; data["lora"]["signal_bandwidth"] = conf.lora.signalBandwidth;
data["lora"]["coding_rate4"] = conf->lora.codingRate4; data["lora"]["coding_rate4"] = conf.lora.codingRate4;
data["display"]["always_on"] = conf->display.alwaysOn; data["display"]["always_on"] = conf.display.alwaysOn;
data["display"]["timeout"] = conf->display.timeout; data["display"]["timeout"] = conf.display.timeout;
data["display"]["overwrite_pin"] = conf->display.overwritePin; data["display"]["overwrite_pin"] = conf.display.overwritePin;
data["display"]["turn180"] = conf->display.turn180; data["display"]["turn180"] = conf.display.turn180;
data["ftp"]["active"] = conf->ftp.active; data["ftp"]["active"] = conf.ftp.active;
JsonArray users = data["ftp"].createNestedArray("user"); JsonArray users = data["ftp"].createNestedArray("user");
for (Configuration::Ftp::User u : conf->ftp.users) { for (Configuration::Ftp::User u : conf.ftp.users) {
JsonObject v = users.createNestedObject(); JsonObject v = users.createNestedObject();
v["name"] = u.name; v["name"] = u.name;
v["password"] = u.password; v["password"] = u.password;
} }
data["ntp_server"] = conf->ntpServer; data["ntp_server"] = conf.ntpServer;
data["board"] = conf->board; data["board"] = conf.board;
} }

View file

@ -101,8 +101,8 @@ public:
} }
private: private:
virtual std::shared_ptr<Configuration> readProjectConfiguration(DynamicJsonDocument &data) override; virtual void readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) override;
virtual void writeProjectConfiguration(std::shared_ptr<Configuration> conf, DynamicJsonDocument &data) override; virtual void writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) override;
}; };
std::shared_ptr<Configuration> load_config(std::shared_ptr<BoardConfig> boardConfig); std::shared_ptr<Configuration> load_config(std::shared_ptr<BoardConfig> boardConfig);