LoRa_APRS_iGate/src/LoRa_APRS_iGate.cpp

174 lines
5.8 KiB
C++
Raw Normal View History

2023-02-18 11:51:39 +01:00
#ifndef UNIT_TEST
#include <map>
2023-10-22 12:39:20 +02:00
#include <esp_task_wdt.h>
#include <logger.h>
2023-09-23 15:37:35 +02:00
#include "APRS-IS/APRS-IS.h"
2023-10-22 12:39:20 +02:00
#include "Board.h"
2023-09-23 15:37:35 +02:00
#include "PowerManagement/power_management.h"
#include "System/System.h"
#include "System/TaskManager.h"
2020-03-18 19:49:59 +01:00
#include "TaskAprsIs.h"
#include "TaskBeacon.h"
2021-01-19 23:12:55 +01:00
#include "TaskDisplay.h"
#include "TaskEth.h"
#include "TaskFTP.h"
2022-02-24 16:02:28 +01:00
#include "TaskMQTT.h"
#include "TaskNTP.h"
#include "TaskOTA.h"
2022-04-02 03:38:51 +02:00
#include "TaskRadiolib.h"
2021-05-15 22:58:15 +02:00
#include "TaskRouter.h"
2021-05-15 23:10:24 +02:00
#include "TaskWifi.h"
#include "project_configuration.h"
2023-08-06 22:54:20 +02:00
#define VERSION "23.31.01"
2022-03-20 00:03:43 +01:00
#define MODULE_NAME "Main"
String create_lat_aprs(double lat);
String create_long_aprs(double lng);
2020-03-19 13:29:21 +01:00
2021-05-15 22:58:15 +02:00
TaskQueue<std::shared_ptr<APRSMessage>> toAprsIs;
TaskQueue<std::shared_ptr<APRSMessage>> fromModem;
2021-05-24 15:12:31 +02:00
TaskQueue<std::shared_ptr<APRSMessage>> toModem;
TaskQueue<std::shared_ptr<APRSMessage>> toMQTT;
2021-05-15 22:58:15 +02:00
2021-05-19 01:29:08 +02:00
System LoRaSystem;
Configuration userConfig;
2021-05-19 01:01:10 +02:00
2023-09-27 21:31:35 +02:00
#ifdef HAS_AXP192
AXP192 axp;
PowerManagement *powerManagement = &axp;
#endif
#ifdef HAS_AXP2101
AXP2101 axp;
PowerManagement *powerManagement = &axp;
#endif
2021-05-19 01:01:10 +02:00
DisplayTask displayTask;
2023-04-28 18:01:50 +02:00
// ModemTask modemTask(fromModem, toModem);
2022-04-02 03:20:16 +02:00
RadiolibTask modemTask(fromModem, toModem);
EthTask ethTask;
WifiTask wifiTask;
OTATask otaTask;
NTPTask ntpTask;
FTPTask ftpTask;
MQTTTask mqttTask(toMQTT);
AprsIsTask aprsIsTask(toAprsIs, toModem);
2022-04-02 03:20:16 +02:00
RouterTask routerTask(fromModem, toModem, toAprsIs, toMQTT);
BeaconTask beaconTask(toModem, toAprsIs);
2021-05-19 01:01:10 +02:00
void setup() {
Serial.begin(115200);
2022-03-20 00:03:43 +01:00
LoRaSystem.getLogger().setSerial(&Serial);
2022-03-20 01:03:42 +01:00
setWiFiLogger(&LoRaSystem.getLogger());
2023-10-22 12:39:20 +02:00
delay(1000);
2022-03-20 00:03:43 +01:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "LoRa APRS iGate by OE5BPA (Peter Buchegger)");
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Version: %s", VERSION);
2023-10-22 12:39:20 +02:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Board: %s", getBoardName().c_str());
2022-03-20 00:37:29 +01:00
ProjectConfigurationManagement confmg(LoRaSystem.getLogger());
confmg.readConfiguration(LoRaSystem.getLogger(), userConfig);
2021-05-19 00:44:37 +02:00
2023-10-22 12:39:20 +02:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Will start watchdog now...");
2023-01-23 11:12:32 +01:00
if (esp_task_wdt_init(10, true) != ESP_OK) {
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog init failed!");
} else {
if (esp_task_wdt_add(NULL) != ESP_OK) {
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog add failed!");
}
2023-10-22 12:39:20 +02:00
}
2023-01-23 11:12:32 +01:00
2023-09-27 21:31:35 +02:00
#if defined(HAS_AXP192) || defined(HAS_AXP2101)
Wire.begin(SDA, SCL);
2023-09-27 21:31:35 +02:00
if (powerManagement->begin(Wire)) {
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "PMU", "init done!");
} else {
2023-09-27 21:31:35 +02:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, "PMU", "init failed!");
}
2023-09-27 21:31:35 +02:00
powerManagement->activateLoRa();
powerManagement->activateOLED();
if (userConfig.beacon.use_gps) {
2023-09-27 21:31:35 +02:00
powerManagement->activateGPS();
} else {
2023-09-27 21:31:35 +02:00
powerManagement->deactivateGPS();
}
2023-09-27 21:31:35 +02:00
// powerManagement->activateMeasurement();
#endif
2021-05-19 00:44:37 +02:00
LoRaSystem.setUserConfig(&userConfig);
2021-05-19 01:01:10 +02:00
LoRaSystem.getTaskManager().addTask(&displayTask);
LoRaSystem.getTaskManager().addTask(&modemTask);
LoRaSystem.getTaskManager().addTask(&routerTask);
LoRaSystem.getTaskManager().addTask(&beaconTask);
bool tcpip = false;
if (userConfig.wifi.active) {
LoRaSystem.getTaskManager().addAlwaysRunTask(&wifiTask);
tcpip = true;
2022-04-07 11:12:45 +02:00
}
2023-09-27 21:31:35 +02:00
#ifdef T_INTERNET_POE
LoRaSystem.getTaskManager().addAlwaysRunTask(&ethTask);
tcpip = true;
#endif
if (tcpip) {
LoRaSystem.getTaskManager().addTask(&otaTask);
LoRaSystem.getTaskManager().addTask(&ntpTask);
if (userConfig.ftp.active) {
LoRaSystem.getTaskManager().addTask(&ftpTask);
}
if (userConfig.aprs_is.active) {
LoRaSystem.getTaskManager().addTask(&aprsIsTask);
}
if (userConfig.mqtt.active) {
LoRaSystem.getTaskManager().addTask(&mqttTask);
}
}
2023-10-22 12:39:20 +02:00
esp_task_wdt_reset();
2021-05-19 00:44:37 +02:00
LoRaSystem.getTaskManager().setup(LoRaSystem);
2023-10-22 12:39:20 +02:00
LoRaSystem.getDisplay().showSpashScreen("LoRa APRS iGate", VERSION, getBoardName());
2021-05-19 00:44:37 +02:00
if (userConfig.callsign == "NOCALL-10") {
2022-03-20 00:03:43 +01:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "You have to change your settings in 'data/is-cfg.json' and upload it via 'Upload File System image'!");
2021-05-19 00:44:37 +02:00
LoRaSystem.getDisplay().showStatusScreen("ERROR", "You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!");
2023-01-23 11:12:32 +01:00
while (true) {
2023-10-22 12:39:20 +02:00
esp_task_wdt_reset();
2023-01-23 11:12:32 +01:00
}
}
if ((!userConfig.aprs_is.active) && !(userConfig.digi.active)) {
2022-03-20 00:03:43 +01:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "No mode selected (iGate or Digi)! You have to activate one of iGate or Digi.");
LoRaSystem.getDisplay().showStatusScreen("ERROR", "No mode selected (iGate or Digi)! You have to activate one of iGate or Digi.");
while (true)
;
}
2021-05-19 00:44:37 +02:00
if (userConfig.display.overwritePin != 0) {
pinMode(userConfig.display.overwritePin, INPUT);
pinMode(userConfig.display.overwritePin, INPUT_PULLUP);
}
2022-03-20 00:03:43 +01:00
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "setup done...");
2020-03-18 19:49:59 +01:00
}
2022-03-20 13:38:24 +01:00
volatile bool syslogSet = false;
void loop() {
2023-10-22 12:39:20 +02:00
esp_task_wdt_reset();
2021-05-19 00:44:37 +02:00
LoRaSystem.getTaskManager().loop(LoRaSystem);
if (LoRaSystem.isWifiOrEthConnected() && LoRaSystem.getUserConfig()->syslog.active && !syslogSet) {
2022-03-20 13:38:24 +01:00
LoRaSystem.getLogger().setSyslogServer(LoRaSystem.getUserConfig()->syslog.server, LoRaSystem.getUserConfig()->syslog.port, LoRaSystem.getUserConfig()->callsign);
LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "System connected after a restart to the network, syslog server set");
syslogSet = true;
2022-03-20 12:16:37 +01:00
}
2020-11-03 23:35:19 +01:00
}
2023-02-18 11:51:39 +01:00
#endif