diff --git a/lib/ConfigurationManagement/configuration.cpp b/lib/ConfigurationManagement/configuration.cpp index 7f75d9e..5f50550 100644 --- a/lib/ConfigurationManagement/configuration.cpp +++ b/lib/ConfigurationManagement/configuration.cpp @@ -15,11 +15,11 @@ ConfigurationManagement::ConfigurationManagement(String FilePath) : mFilePath(Fi ConfigurationManagement::~ConfigurationManagement() { } -std::shared_ptr ConfigurationManagement::readConfiguration() { +void ConfigurationManagement::readConfiguration(Configuration &conf) { File file = SPIFFS.open(mFilePath); if (!file) { - logPrintlnE("Failed to open file for reading..."); - return 0; + logPrintlnE("Failed to open file for reading, using default configuration."); + return; } DynamicJsonDocument data(2048); DeserializationError error = deserializeJson(data, file); @@ -30,15 +30,13 @@ std::shared_ptr ConfigurationManagement::readConfiguration() { // Serial.println(); file.close(); - std::shared_ptr conf = readProjectConfiguration(data); + readProjectConfiguration(data, conf); // update config in memory to get the new fields: writeConfiguration(conf); - - return conf; } -void ConfigurationManagement::writeConfiguration(std::shared_ptr conf) { +void ConfigurationManagement::writeConfiguration(Configuration &conf) { File file = SPIFFS.open(mFilePath, "w"); if (!file) { logPrintlnE("Failed to open file for writing..."); diff --git a/lib/ConfigurationManagement/configuration.h b/lib/ConfigurationManagement/configuration.h index cb7b6d3..6ebcf75 100644 --- a/lib/ConfigurationManagement/configuration.h +++ b/lib/ConfigurationManagement/configuration.h @@ -16,12 +16,12 @@ public: explicit ConfigurationManagement(String FilePath); virtual ~ConfigurationManagement(); - std::shared_ptr readConfiguration(); - void writeConfiguration(std::shared_ptr conf); + void readConfiguration(Configuration &conf); + void writeConfiguration(Configuration &conf); private: - virtual std::shared_ptr readProjectConfiguration(DynamicJsonDocument &data) = 0; - virtual void writeProjectConfiguration(std::shared_ptr conf, DynamicJsonDocument &data) = 0; + virtual void readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) = 0; + virtual void writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) = 0; const String mFilePath; }; diff --git a/lib/Display/Display.cpp b/lib/Display/Display.cpp index b62074e..865eb34 100644 --- a/lib/Display/Display.cpp +++ b/lib/Display/Display.cpp @@ -8,7 +8,7 @@ Display::Display() : _disp(0), _statusFrame(0), _displaySaveMode(false) { Display::~Display() { } -void Display::setup(std::shared_ptr boardConfig) { +void Display::setup(BoardConfig const *const boardConfig) { if (boardConfig->OledReset != 0) { pinMode(boardConfig->OledReset, OUTPUT); digitalWrite(boardConfig->OledReset, HIGH); diff --git a/lib/Display/Display.h b/lib/Display/Display.h index 2259291..4ff69ff 100644 --- a/lib/Display/Display.h +++ b/lib/Display/Display.h @@ -28,7 +28,7 @@ public: Display(); ~Display(); - void setup(std::shared_ptr boardConfig); + void setup(BoardConfig const *const boardConfig); // setup functions void showSpashScreen(String firmwareTitle, String version); void setStatusFrame(std::shared_ptr frame); diff --git a/lib/LoRa_APRS/LoRa_APRS.cpp b/lib/LoRa_APRS/LoRa_APRS.cpp index d3279b2..6221f2b 100644 --- a/lib/LoRa_APRS/LoRa_APRS.cpp +++ b/lib/LoRa_APRS/LoRa_APRS.cpp @@ -1,6 +1,6 @@ #include "LoRa_APRS.h" -LoRa_APRS::LoRa_APRS(std::shared_ptr 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); setPins(boardConfig->LoraCS, boardConfig->LoraReset, boardConfig->LoraIRQ); } diff --git a/lib/LoRa_APRS/LoRa_APRS.h b/lib/LoRa_APRS/LoRa_APRS.h index 1c29b41..e0b9b87 100644 --- a/lib/LoRa_APRS/LoRa_APRS.h +++ b/lib/LoRa_APRS/LoRa_APRS.h @@ -16,7 +16,7 @@ class LoRa_APRS : public LoRaClass { public: - explicit LoRa_APRS(std::shared_ptr boardConfig); + explicit LoRa_APRS(BoardConfig const *const boardConfig); bool checkMessage(); std::shared_ptr getMessage(); diff --git a/lib/System/System.cpp b/lib/System/System.cpp index 6c77c3f..e074745 100644 --- a/lib/System/System.cpp +++ b/lib/System/System.cpp @@ -1,17 +1,25 @@ #include "System.h" -System::System(std::shared_ptr boardConfig, std::shared_ptr userConfig) : _boardConfig(boardConfig), _userConfig(userConfig), _isWifiEthConnected(false) { +System::System() : _boardConfig(0), _userConfig(0), _isWifiEthConnected(false) { } System::~System() { } -std::shared_ptr 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; } -std::shared_ptr System::getUserConfig() const { +Configuration const *const System::getUserConfig() const { return _userConfig; } diff --git a/lib/System/System.h b/lib/System/System.h index ab3d655..376741b 100644 --- a/lib/System/System.h +++ b/lib/System/System.h @@ -10,22 +10,25 @@ class System { public: - System(std::shared_ptr boardConfig, std::shared_ptr userConfig); + System(); ~System(); - std::shared_ptr getBoardConfig() const; - std::shared_ptr getUserConfig() const; - TaskManager & getTaskManager(); - Display & getDisplay(); - bool isWifiEthConnected() const; - void connectedViaWifiEth(bool status); + void setBoardConfig(BoardConfig const *const boardConfig); + void setUserConfig(Configuration const *const userConfig); + + BoardConfig const *const getBoardConfig() const; + Configuration const *const getUserConfig() const; + TaskManager & getTaskManager(); + Display & getDisplay(); + bool isWifiEthConnected() const; + void connectedViaWifiEth(bool status); private: - std::shared_ptr _boardConfig; - std::shared_ptr _userConfig; - TaskManager _taskManager; - Display _display; - bool _isWifiEthConnected; + BoardConfig const * _boardConfig; + Configuration const *_userConfig; + TaskManager _taskManager; + Display _display; + bool _isWifiEthConnected; }; #endif diff --git a/lib/System/TaskManager.cpp b/lib/System/TaskManager.cpp index 5c506cb..e2741c2 100644 --- a/lib/System/TaskManager.cpp +++ b/lib/System/TaskManager.cpp @@ -27,7 +27,7 @@ std::list> TaskManager::getTasks() { return _tasks; } -bool TaskManager::setup(std::shared_ptr system) { +bool TaskManager::setup(System &system) { logPrintlnV("will setup all tasks..."); for (std::shared_ptr &elem : _alwaysRunTasks) { logPrintD("call setup from "); @@ -43,7 +43,7 @@ bool TaskManager::setup(std::shared_ptr system) { return true; } -bool TaskManager::loop(std::shared_ptr system) { +bool TaskManager::loop(System &system) { // logPrintlnD("will loop all tasks..."); for (std::shared_ptr &elem : _alwaysRunTasks) { // logPrintD("call loop from "); diff --git a/lib/System/TaskManager.h b/lib/System/TaskManager.h index edb8f14..ffb7ff6 100644 --- a/lib/System/TaskManager.h +++ b/lib/System/TaskManager.h @@ -43,8 +43,8 @@ public: return _stateInfo; } - virtual bool setup(std::shared_ptr system) = 0; - virtual bool loop(std::shared_ptr system) = 0; + virtual bool setup(System &system) = 0; + virtual bool loop(System &system) = 0; protected: TaskDisplayState _state; @@ -66,8 +66,8 @@ public: std::shared_ptr getTask(const char *name); std::list> getTasks(); - bool setup(std::shared_ptr system); - bool loop(std::shared_ptr system); + bool setup(System &system); + bool loop(System &system); private: std::list> _tasks; diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 354dab9..e02448e 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -24,7 +24,7 @@ String create_lat_aprs(double lat); String create_long_aprs(double lng); -std::shared_ptr LoRaSystem; +System LoRaSystem; TaskQueue> toAprsIs; TaskQueue> fromModem; @@ -50,9 +50,11 @@ void setup() { // clang-format on ProjectConfigurationManagement confmg; - std::shared_ptr userConfig = confmg.readConfiguration(); - BoardFinder finder(boardConfigs); - std::shared_ptr boardConfig = finder.getBoardConfig(userConfig->board); + Configuration userConfig; + confmg.readConfiguration(userConfig); + + BoardFinder finder(boardConfigs); + std::shared_ptr boardConfig = finder.getBoardConfig(userConfig.board); if (boardConfig == 0) { boardConfig = finder.searchBoardConfig(); if (boardConfig == 0) { @@ -60,7 +62,7 @@ void setup() { while (true) { } } - userConfig->board = boardConfig->Name; + userConfig.board = boardConfig->Name; confmg.writeConfiguration(userConfig); logPrintlnI("will restart board now!"); ESP.restart(); @@ -82,36 +84,37 @@ void setup() { powerManagement->deactivateGPS(); } - LoRaSystem = std::shared_ptr(new System(boardConfig, userConfig)); - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new DisplayTask())); - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new ModemTask(fromModem))); + LoRaSystem.setBoardConfig(boardConfig.get()); + LoRaSystem.setUserConfig(&userConfig); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new DisplayTask())); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new ModemTask(fromModem))); if (boardConfig->Type == eETH_BOARD) { - LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr(new EthTask())); + LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr(new EthTask())); } else { - LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr(new WifiTask())); + LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr(new WifiTask())); } - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new OTATask())); - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new NTPTask())); - if (userConfig->ftp.active) { - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new FTPTask())); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new OTATask())); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new NTPTask())); + if (userConfig.ftp.active) { + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new FTPTask())); } - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new AprsIsTask(toAprsIs))); - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new RouterTask(fromModem, toAprsIs))); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(new AprsIsTask(toAprsIs))); + LoRaSystem.getTaskManager().addTask(std::shared_ptr(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\"!"); - 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) ; } - if (userConfig->display.overwritePin != 0) { - pinMode(userConfig->display.overwritePin, INPUT); - pinMode(userConfig->display.overwritePin, INPUT_PULLUP); + if (userConfig.display.overwritePin != 0) { + pinMode(userConfig.display.overwritePin, INPUT); + pinMode(userConfig.display.overwritePin, INPUT_PULLUP); } delay(5000); @@ -120,7 +123,7 @@ void setup() { // cppcheck-suppress unusedFunction void loop() { - LoRaSystem->getTaskManager().loop(LoRaSystem); + LoRaSystem.getTaskManager().loop(LoRaSystem); } String create_lat_aprs(double lat) { diff --git a/src/TaskAprsIs.cpp b/src/TaskAprsIs.cpp index b03c2e0..af69735 100644 --- a/src/TaskAprsIs.cpp +++ b/src/TaskAprsIs.cpp @@ -11,14 +11,14 @@ AprsIsTask::AprsIsTask(TaskQueue> &toAprsIs) : Task AprsIsTask::~AprsIsTask() { } -bool AprsIsTask::setup(std::shared_ptr system) { - _aprs_is = std::shared_ptr(new APRS_IS(system->getUserConfig()->callsign, system->getUserConfig()->aprs_is.passcode, "ESP32-APRS-IS", "0.2")); +bool AprsIsTask::setup(System &system) { + _aprs_is = std::shared_ptr(new APRS_IS(system.getUserConfig()->callsign, system.getUserConfig()->aprs_is.passcode, "ESP32-APRS-IS", "0.2")); return true; } -bool AprsIsTask::loop(std::shared_ptr system) { - if (!system->isWifiEthConnected()) { +bool AprsIsTask::loop(System &system) { + if (!system.isWifiEthConnected()) { return false; } if (!_aprs_is->connected()) { @@ -42,12 +42,12 @@ bool AprsIsTask::loop(std::shared_ptr system) { return true; } -bool AprsIsTask::connect(std::shared_ptr system) { +bool AprsIsTask::connect(System &system) { logPrintI("connecting to APRS-IS server: "); - logPrintI(system->getUserConfig()->aprs_is.server); + logPrintI(system.getUserConfig()->aprs_is.server); logPrintI(" on port: "); - logPrintlnI(String(system->getUserConfig()->aprs_is.port)); - if (!_aprs_is->connect(system->getUserConfig()->aprs_is.server, 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)) { logPrintlnE("Connection failed."); return false; } diff --git a/src/TaskAprsIs.h b/src/TaskAprsIs.h index 69fd66d..2b1955a 100644 --- a/src/TaskAprsIs.h +++ b/src/TaskAprsIs.h @@ -11,15 +11,15 @@ public: explicit AprsIsTask(TaskQueue> &toAprsIs); virtual ~AprsIsTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _aprs_is; TaskQueue> &_toAprsIs; - bool connect(std::shared_ptr system); + bool connect(System &system); }; #endif diff --git a/src/TaskDisplay.cpp b/src/TaskDisplay.cpp index 06d74ec..1f5fc00 100644 --- a/src/TaskDisplay.cpp +++ b/src/TaskDisplay.cpp @@ -10,22 +10,22 @@ DisplayTask::DisplayTask() : Task("DisplayTask", 0) { DisplayTask::~DisplayTask() { } -bool DisplayTask::setup(std::shared_ptr system) { - system->getDisplay().setup(system->getBoardConfig()); - if (system->getUserConfig()->display.turn180) { - system->getDisplay().turn180(); +bool DisplayTask::setup(System &system) { + system.getDisplay().setup(system.getBoardConfig()); + if (system.getUserConfig()->display.turn180) { + system.getDisplay().turn180(); } - std::shared_ptr statusFrame = std::shared_ptr(new StatusFrame(system->getTaskManager().getTasks())); - system->getDisplay().setStatusFrame(statusFrame); - if (!system->getUserConfig()->display.alwaysOn) { - system->getDisplay().activateDisplaySaveMode(); - system->getDisplay().setDisplaySaveTimeout(system->getUserConfig()->display.timeout); + std::shared_ptr statusFrame = std::shared_ptr(new StatusFrame(system.getTaskManager().getTasks())); + system.getDisplay().setStatusFrame(statusFrame); + if (!system.getUserConfig()->display.alwaysOn) { + system.getDisplay().activateDisplaySaveMode(); + system.getDisplay().setDisplaySaveTimeout(system.getUserConfig()->display.timeout); } - _stateInfo = system->getUserConfig()->callsign; + _stateInfo = system.getUserConfig()->callsign; return true; } -bool DisplayTask::loop(std::shared_ptr system) { - system->getDisplay().update(); +bool DisplayTask::loop(System &system) { + system.getDisplay().update(); return true; } diff --git a/src/TaskDisplay.h b/src/TaskDisplay.h index 80cb98e..95dff61 100644 --- a/src/TaskDisplay.h +++ b/src/TaskDisplay.h @@ -9,8 +9,8 @@ public: DisplayTask(); virtual ~DisplayTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; }; #endif diff --git a/src/TaskEth.cpp b/src/TaskEth.cpp index 77ef9c6..bfbab2e 100644 --- a/src/TaskEth.cpp +++ b/src/TaskEth.cpp @@ -48,7 +48,7 @@ EthTask::EthTask() : Task(TASK_ETH, TaskEth) { EthTask::~EthTask() { } -bool EthTask::setup(std::shared_ptr system) { +bool EthTask::setup(System &system) { WiFi.onEvent(WiFiEvent); constexpr uint8_t ETH_NRST = 5; @@ -73,14 +73,14 @@ bool EthTask::setup(std::shared_ptr system) { return true; } -bool EthTask::loop(std::shared_ptr system) { +bool EthTask::loop(System &system) { if (!eth_connected) { - system->connectedViaWifiEth(false); + system.connectedViaWifiEth(false); _stateInfo = "Ethernet not connected"; _state = Error; return false; } - system->connectedViaWifiEth(true); + system.connectedViaWifiEth(true); _stateInfo = ETH.localIP().toString(); _state = Okay; return true; diff --git a/src/TaskEth.h b/src/TaskEth.h index 8597369..e4baefe 100644 --- a/src/TaskEth.h +++ b/src/TaskEth.h @@ -8,8 +8,8 @@ public: EthTask(); virtual ~EthTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: }; diff --git a/src/TaskFTP.cpp b/src/TaskFTP.cpp index b2e67fb..0f4a05d 100644 --- a/src/TaskFTP.cpp +++ b/src/TaskFTP.cpp @@ -12,9 +12,9 @@ FTPTask::FTPTask() : Task(TASK_FTP, TaskFtp), _beginCalled(false) { FTPTask::~FTPTask() { } -bool FTPTask::setup(std::shared_ptr system) { +bool FTPTask::setup(System &system) { _ftpServer = std::shared_ptr(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: "); logPrintlnD(user.name); _ftpServer->addUser(user.name, user.password); @@ -24,7 +24,7 @@ bool FTPTask::setup(std::shared_ptr system) { return true; } -bool FTPTask::loop(std::shared_ptr system) { +bool FTPTask::loop(System &system) { if (!_beginCalled) { _ftpServer->begin(); _beginCalled = true; diff --git a/src/TaskFTP.h b/src/TaskFTP.h index 46d27cf..6d5bf2b 100644 --- a/src/TaskFTP.h +++ b/src/TaskFTP.h @@ -9,8 +9,8 @@ public: FTPTask(); virtual ~FTPTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _ftpServer; diff --git a/src/TaskModem.cpp b/src/TaskModem.cpp index a7590a2..deac31c 100644 --- a/src/TaskModem.cpp +++ b/src/TaskModem.cpp @@ -12,8 +12,8 @@ ModemTask::ModemTask(TaskQueue> &fromModem) : Task( ModemTask::~ModemTask() { } -bool ModemTask::setup(std::shared_ptr system) { - _lora_aprs = std::shared_ptr(new LoRa_APRS(system->getBoardConfig())); +bool ModemTask::setup(System &system) { + _lora_aprs = std::shared_ptr(new LoRa_APRS(system.getBoardConfig())); if (!_lora_aprs->begin(_lora_aprs->getRxFrequency())) { logPrintlnE("Starting LoRa failed!"); _stateInfo = "LoRa-Modem failed"; @@ -21,19 +21,19 @@ bool ModemTask::setup(std::shared_ptr system) { while (true) ; } - _lora_aprs->setRxFrequency(system->getUserConfig()->lora.frequencyRx); - _lora_aprs->setTxFrequency(system->getUserConfig()->lora.frequencyTx); - _lora_aprs->setTxPower(system->getUserConfig()->lora.power); - _lora_aprs->setSpreadingFactor(system->getUserConfig()->lora.spreadingFactor); - _lora_aprs->setSignalBandwidth(system->getUserConfig()->lora.signalBandwidth); - _lora_aprs->setCodingRate4(system->getUserConfig()->lora.codingRate4); + _lora_aprs->setRxFrequency(system.getUserConfig()->lora.frequencyRx); + _lora_aprs->setTxFrequency(system.getUserConfig()->lora.frequencyTx); + _lora_aprs->setTxPower(system.getUserConfig()->lora.power); + _lora_aprs->setSpreadingFactor(system.getUserConfig()->lora.spreadingFactor); + _lora_aprs->setSignalBandwidth(system.getUserConfig()->lora.signalBandwidth); + _lora_aprs->setCodingRate4(system.getUserConfig()->lora.codingRate4); _lora_aprs->enableCrc(); _stateInfo = ""; return true; } -bool ModemTask::loop(std::shared_ptr system) { +bool ModemTask::loop(System &system) { if (_lora_aprs->checkMessage()) { std::shared_ptr msg = _lora_aprs->getMessage(); // msg->getAPRSBody()->setData(msg->getAPRSBody()->getData() + " 123"); @@ -53,10 +53,10 @@ bool ModemTask::loop(std::shared_ptr system) { if (!path.isEmpty()) { path += ","; } - msg->setPath(path + "qAR," + system->getUserConfig()->callsign); + msg->setPath(path + "qAR," + system.getUserConfig()->callsign); _fromModem.addElement(msg); - system->getDisplay().addFrame(std::shared_ptr(new TextFrame("LoRa", msg->toString()))); + system.getDisplay().addFrame(std::shared_ptr(new TextFrame("LoRa", msg->toString()))); } return true; diff --git a/src/TaskModem.h b/src/TaskModem.h index 7d324fd..890b3c7 100644 --- a/src/TaskModem.h +++ b/src/TaskModem.h @@ -10,8 +10,8 @@ public: explicit ModemTask(TaskQueue> &fromModem); virtual ~ModemTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _lora_aprs; diff --git a/src/TaskNTP.cpp b/src/TaskNTP.cpp index 8bac58f..ada8c02 100644 --- a/src/TaskNTP.cpp +++ b/src/TaskNTP.cpp @@ -11,13 +11,13 @@ NTPTask::NTPTask() : Task(TASK_NTP, TaskNtp), _beginCalled(false) { NTPTask::~NTPTask() { } -bool NTPTask::setup(std::shared_ptr system) { - _ntpClient = std::shared_ptr(new NTPClient(system->getUserConfig()->ntpServer.c_str())); +bool NTPTask::setup(System &system) { + _ntpClient = std::shared_ptr(new NTPClient(system.getUserConfig()->ntpServer.c_str())); return true; } -bool NTPTask::loop(std::shared_ptr system) { - if (!system->isWifiEthConnected()) { +bool NTPTask::loop(System &system) { + if (!system.isWifiEthConnected()) { return false; } if (!_beginCalled) { diff --git a/src/TaskNTP.h b/src/TaskNTP.h index a18103e..d7e53bc 100644 --- a/src/TaskNTP.h +++ b/src/TaskNTP.h @@ -9,8 +9,8 @@ public: NTPTask(); virtual ~NTPTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _ntpClient; diff --git a/src/TaskOTA.cpp b/src/TaskOTA.cpp index 45ba900..86b0365 100644 --- a/src/TaskOTA.cpp +++ b/src/TaskOTA.cpp @@ -10,7 +10,7 @@ OTATask::OTATask() : Task(TASK_OTA, TaskOta), _beginCalled(false) { OTATask::~OTATask() { } -bool OTATask::setup(std::shared_ptr system) { +bool OTATask::setup(System &system) { _ota = std::shared_ptr(new ArduinoOTAClass()); _ota->onStart([&]() { String type; @@ -44,12 +44,12 @@ bool OTATask::setup(std::shared_ptr system) { else if (error == OTA_END_ERROR) logPrintlnE("End Failed"); }); - _ota->setHostname(system->getUserConfig()->callsign.c_str()); + _ota->setHostname(system.getUserConfig()->callsign.c_str()); _stateInfo = ""; return true; } -bool OTATask::loop(std::shared_ptr system) { +bool OTATask::loop(System &system) { if (!_beginCalled) { _ota->begin(); _beginCalled = true; diff --git a/src/TaskOTA.h b/src/TaskOTA.h index ab781d8..546b4eb 100644 --- a/src/TaskOTA.h +++ b/src/TaskOTA.h @@ -9,8 +9,8 @@ public: OTATask(); virtual ~OTATask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _ota; diff --git a/src/TaskRouter.cpp b/src/TaskRouter.cpp index 1bcf7b8..68a2b8a 100644 --- a/src/TaskRouter.cpp +++ b/src/TaskRouter.cpp @@ -13,20 +13,20 @@ RouterTask::RouterTask(TaskQueue> &fromModem, TaskQ RouterTask::~RouterTask() { } -bool RouterTask::setup(std::shared_ptr system) { +bool RouterTask::setup(System &system) { // setup beacon - _beacon_timer.setTimeout(system->getUserConfig()->beacon.timeout * 60 * 1000); + _beacon_timer.setTimeout(system.getUserConfig()->beacon.timeout * 60 * 1000); _beaconMsg = std::shared_ptr(new APRSMessage()); - _beaconMsg->setSource(system->getUserConfig()->callsign); + _beaconMsg->setSource(system.getUserConfig()->callsign); _beaconMsg->setDestination("APLG01"); - String lat = create_lat_aprs(system->getUserConfig()->beacon.positionLatitude); - String lng = create_long_aprs(system->getUserConfig()->beacon.positionLongitude); - _beaconMsg->getBody()->setData(String("=") + lat + "L" + lng + "&" + system->getUserConfig()->beacon.message); + String lat = create_lat_aprs(system.getUserConfig()->beacon.positionLatitude); + String lng = create_long_aprs(system.getUserConfig()->beacon.positionLongitude); + _beaconMsg->getBody()->setData(String("=") + lat + "L" + lng + "&" + system.getUserConfig()->beacon.message); return true; } -bool RouterTask::loop(std::shared_ptr system) { +bool RouterTask::loop(System &system) { // do routing if (!_fromModem.empty()) { _toAprsIs.addElement(_fromModem.getElement()); @@ -37,7 +37,7 @@ bool RouterTask::loop(std::shared_ptr system) { logPrintD("[" + timeString() + "] "); logPrintlnD(_beaconMsg->encode()); _toAprsIs.addElement(_beaconMsg); - system->getDisplay().addFrame(std::shared_ptr(new TextFrame("BEACON", _beaconMsg->toString()))); + system.getDisplay().addFrame(std::shared_ptr(new TextFrame("BEACON", _beaconMsg->toString()))); _beacon_timer.start(); } time_t diff = _beacon_timer.getTriggerTimeInSec(); diff --git a/src/TaskRouter.h b/src/TaskRouter.h index 0ed8092..b6e4289 100644 --- a/src/TaskRouter.h +++ b/src/TaskRouter.h @@ -9,8 +9,8 @@ public: RouterTask(TaskQueue> &fromModem, TaskQueue> &toAprsIs); virtual ~RouterTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: TaskQueue> &_fromModem; diff --git a/src/TaskWifi.cpp b/src/TaskWifi.cpp index db0cce9..8fa528e 100644 --- a/src/TaskWifi.cpp +++ b/src/TaskWifi.cpp @@ -11,12 +11,12 @@ WifiTask::WifiTask() : Task(TASK_WIFI, TaskWifi), _oldWifiStatus(WL_IDLE_STATUS) WifiTask::~WifiTask() { } -bool WifiTask::setup(std::shared_ptr system) { +bool WifiTask::setup(System &system) { // WiFi.onEvent(WiFiEvent); - WiFi.setHostname(system->getUserConfig()->callsign.c_str()); + WiFi.setHostname(system.getUserConfig()->callsign.c_str()); _wiFiMulti = std::shared_ptr(new WiFiMulti()); ; - for (Configuration::Wifi::AP ap : system->getUserConfig()->wifi.APs) { + for (Configuration::Wifi::AP ap : system.getUserConfig()->wifi.APs) { logPrintD("Looking for AP: "); logPrintlnD(ap.SSID); _wiFiMulti->addAP(ap.SSID.c_str(), ap.password.c_str()); @@ -24,10 +24,10 @@ bool WifiTask::setup(std::shared_ptr system) { return true; } -bool WifiTask::loop(std::shared_ptr system) { +bool WifiTask::loop(System &system) { const uint8_t wifi_status = _wiFiMulti->run(); if (wifi_status != WL_CONNECTED) { - system->connectedViaWifiEth(false); + system.connectedViaWifiEth(false); logPrintlnE("WiFi not connected!"); _oldWifiStatus = wifi_status; _stateInfo = "WiFi not connected"; @@ -39,7 +39,7 @@ bool WifiTask::loop(std::shared_ptr system) { _oldWifiStatus = wifi_status; return false; } - system->connectedViaWifiEth(true); + system.connectedViaWifiEth(true); _stateInfo = WiFi.localIP().toString(); _state = Okay; return true; diff --git a/src/TaskWifi.h b/src/TaskWifi.h index b6758e2..8d6d92d 100644 --- a/src/TaskWifi.h +++ b/src/TaskWifi.h @@ -9,8 +9,8 @@ public: WifiTask(); virtual ~WifiTask(); - virtual bool setup(std::shared_ptr system) override; - virtual bool loop(std::shared_ptr system) override; + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; private: std::shared_ptr _wiFiMulti; diff --git a/src/project_configuration.cpp b/src/project_configuration.cpp index 57a23c7..1a68b74 100644 --- a/src/project_configuration.cpp +++ b/src/project_configuration.cpp @@ -4,96 +4,93 @@ #include "project_configuration.h" -std::shared_ptr ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocument &data) { - std::shared_ptr conf = std::shared_ptr(new Configuration); +void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) { if (data.containsKey("callsign")) - conf->callsign = data["callsign"].as(); + conf.callsign = data["callsign"].as(); JsonArray aps = data["wifi"]["AP"].as(); for (JsonVariant v : aps) { Configuration::Wifi::AP ap; ap.SSID = v["SSID"].as(); ap.password = v["password"].as(); - conf->wifi.APs.push_back(ap); + conf.wifi.APs.push_back(ap); } if (data.containsKey("beacon") && data["beacon"].containsKey("message")) - conf->beacon.message = data["beacon"]["message"].as(); - conf->beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0; - conf->beacon.positionLongitude = data["beacon"]["position"]["longitude"] | 0.0; - conf->beacon.timeout = data["beacon"]["timeout"] | 15; + conf.beacon.message = data["beacon"]["message"].as(); + conf.beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0; + conf.beacon.positionLongitude = data["beacon"]["position"]["longitude"] | 0.0; + conf.beacon.timeout = data["beacon"]["timeout"] | 15; if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("passcode")) - conf->aprs_is.passcode = data["aprs_is"]["passcode"].as(); + conf.aprs_is.passcode = data["aprs_is"]["passcode"].as(); if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("server")) - conf->aprs_is.server = data["aprs_is"]["server"].as(); - conf->aprs_is.port = data["aprs_is"]["port"] | 14580; + conf.aprs_is.server = data["aprs_is"]["server"].as(); + conf.aprs_is.port = data["aprs_is"]["port"] | 14580; - conf->lora.frequencyRx = data["lora"]["frequency_rx"] | 433775000; - conf->lora.frequencyTx = data["lora"]["frequency_tx"] | 433775000; - conf->lora.power = data["lora"]["power"] | 20; - conf->lora.spreadingFactor = data["lora"]["spreading_factor"] | 12; - conf->lora.signalBandwidth = data["lora"]["signal_bandwidth"] | 125000; - conf->lora.codingRate4 = data["lora"]["coding_rate4"] | 5; - conf->display.alwaysOn = data["display"]["always_on"] | true; - conf->display.timeout = data["display"]["timeout"] | 10; - conf->display.overwritePin = data["display"]["overwrite_pin"] | 0; - conf->display.turn180 = data["display"]["turn180"] | true; + conf.lora.frequencyRx = data["lora"]["frequency_rx"] | 433775000; + conf.lora.frequencyTx = data["lora"]["frequency_tx"] | 433775000; + conf.lora.power = data["lora"]["power"] | 20; + conf.lora.spreadingFactor = data["lora"]["spreading_factor"] | 12; + conf.lora.signalBandwidth = data["lora"]["signal_bandwidth"] | 125000; + conf.lora.codingRate4 = data["lora"]["coding_rate4"] | 5; + conf.display.alwaysOn = data["display"]["always_on"] | true; + conf.display.timeout = data["display"]["timeout"] | 10; + conf.display.overwritePin = data["display"]["overwrite_pin"] | 0; + conf.display.turn180 = data["display"]["turn180"] | true; - conf->ftp.active = data["ftp"]["active"] | false; - JsonArray users = data["ftp"]["user"].as(); + conf.ftp.active = data["ftp"]["active"] | false; + JsonArray users = data["ftp"]["user"].as(); for (JsonVariant u : users) { Configuration::Ftp::User us; us.name = u["name"].as(); us.password = u["password"].as(); - 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; us.name = "ftp"; us.password = "ftp"; - conf->ftp.users.push_back(us); + conf.ftp.users.push_back(us); } if (data.containsKey("ntp_server")) - conf->ntpServer = data["ntp_server"].as(); + conf.ntpServer = data["ntp_server"].as(); if (data.containsKey("board")) - conf->board = data["board"].as(); - - return conf; + conf.board = data["board"].as(); } -void ProjectConfigurationManagement::writeProjectConfiguration(std::shared_ptr conf, DynamicJsonDocument &data) { - data["callsign"] = conf->callsign; +void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) { + data["callsign"] = conf.callsign; 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(); v["SSID"] = ap.SSID; v["password"] = ap.password; } - data["beacon"]["message"] = conf->beacon.message; - data["beacon"]["position"]["latitude"] = conf->beacon.positionLatitude; - data["beacon"]["position"]["longitude"] = conf->beacon.positionLongitude; - data["beacon"]["timeout"] = conf->beacon.timeout; - data["aprs_is"]["passcode"] = conf->aprs_is.passcode; - data["aprs_is"]["server"] = conf->aprs_is.server; - data["aprs_is"]["port"] = conf->aprs_is.port; - data["lora"]["frequency_rx"] = conf->lora.frequencyRx; - data["lora"]["frequency_tx"] = conf->lora.frequencyTx; - data["lora"]["power"] = conf->lora.power; - data["lora"]["spreading_factor"] = conf->lora.spreadingFactor; - data["lora"]["signal_bandwidth"] = conf->lora.signalBandwidth; - data["lora"]["coding_rate4"] = conf->lora.codingRate4; - data["display"]["always_on"] = conf->display.alwaysOn; - data["display"]["timeout"] = conf->display.timeout; - data["display"]["overwrite_pin"] = conf->display.overwritePin; - data["display"]["turn180"] = conf->display.turn180; - data["ftp"]["active"] = conf->ftp.active; + data["beacon"]["message"] = conf.beacon.message; + data["beacon"]["position"]["latitude"] = conf.beacon.positionLatitude; + data["beacon"]["position"]["longitude"] = conf.beacon.positionLongitude; + data["beacon"]["timeout"] = conf.beacon.timeout; + data["aprs_is"]["passcode"] = conf.aprs_is.passcode; + data["aprs_is"]["server"] = conf.aprs_is.server; + data["aprs_is"]["port"] = conf.aprs_is.port; + data["lora"]["frequency_rx"] = conf.lora.frequencyRx; + data["lora"]["frequency_tx"] = conf.lora.frequencyTx; + data["lora"]["power"] = conf.lora.power; + data["lora"]["spreading_factor"] = conf.lora.spreadingFactor; + data["lora"]["signal_bandwidth"] = conf.lora.signalBandwidth; + data["lora"]["coding_rate4"] = conf.lora.codingRate4; + data["display"]["always_on"] = conf.display.alwaysOn; + data["display"]["timeout"] = conf.display.timeout; + data["display"]["overwrite_pin"] = conf.display.overwritePin; + data["display"]["turn180"] = conf.display.turn180; + data["ftp"]["active"] = conf.ftp.active; 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(); v["name"] = u.name; v["password"] = u.password; } - data["ntp_server"] = conf->ntpServer; + data["ntp_server"] = conf.ntpServer; - data["board"] = conf->board; + data["board"] = conf.board; } diff --git a/src/project_configuration.h b/src/project_configuration.h index 00ebefa..9399386 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -101,8 +101,8 @@ public: } private: - virtual std::shared_ptr readProjectConfiguration(DynamicJsonDocument &data) override; - virtual void writeProjectConfiguration(std::shared_ptr conf, DynamicJsonDocument &data) override; + virtual void readProjectConfiguration(DynamicJsonDocument &data, Configuration &conf) override; + virtual void writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) override; }; std::shared_ptr load_config(std::shared_ptr boardConfig);