2021-05-15 22:58:15 +02:00
|
|
|
#include <logger.h>
|
|
|
|
|
|
2023-09-23 15:37:35 +02:00
|
|
|
#include "TimeLib/TimeLib.h"
|
2021-05-19 01:17:23 +02:00
|
|
|
|
2021-05-15 22:58:15 +02:00
|
|
|
#include "Task.h"
|
|
|
|
|
#include "TaskRouter.h"
|
|
|
|
|
#include "project_configuration.h"
|
|
|
|
|
|
2022-02-23 19:40:31 +01:00
|
|
|
RouterTask::RouterTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem, TaskQueue<std::shared_ptr<APRSMessage>> &toModem, TaskQueue<std::shared_ptr<APRSMessage>> &toAprsIs, TaskQueue<std::shared_ptr<APRSMessage>> &toMQTT) : Task(TASK_ROUTER, TaskRouter), _fromModem(fromModem), _toModem(toModem), _toAprsIs(toAprsIs), _toMQTT(toMQTT) {
|
2021-05-15 22:58:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RouterTask::~RouterTask() {
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-19 00:44:37 +02:00
|
|
|
bool RouterTask::setup(System &system) {
|
2021-05-15 22:58:15 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-19 00:44:37 +02:00
|
|
|
bool RouterTask::loop(System &system) {
|
2021-05-16 03:52:28 +02:00
|
|
|
if (!_fromModem.empty()) {
|
2021-05-25 13:00:44 +02:00
|
|
|
std::shared_ptr<APRSMessage> modemMsg = _fromModem.getElement();
|
2022-02-23 19:40:31 +01:00
|
|
|
|
|
|
|
|
if (system.getUserConfig()->mqtt.active) {
|
2022-02-24 15:36:17 +01:00
|
|
|
_toMQTT.addElement(modemMsg);
|
2022-02-23 19:40:31 +01:00
|
|
|
}
|
2021-05-23 23:04:10 +02:00
|
|
|
|
2021-05-24 16:50:30 +02:00
|
|
|
if (system.getUserConfig()->aprs_is.active && modemMsg->getSource() != system.getUserConfig()->callsign) {
|
2021-05-24 17:10:20 +02:00
|
|
|
std::shared_ptr<APRSMessage> aprsIsMsg = std::make_shared<APRSMessage>(*modemMsg);
|
2021-05-25 13:21:55 +02:00
|
|
|
String path = aprsIsMsg->getPath();
|
2021-05-24 16:50:30 +02:00
|
|
|
|
|
|
|
|
if (!(path.indexOf("RFONLY") != -1 || path.indexOf("NOGATE") != -1 || path.indexOf("TCPIP") != -1)) {
|
|
|
|
|
if (!path.isEmpty()) {
|
|
|
|
|
path += ",";
|
|
|
|
|
}
|
2021-05-23 23:04:10 +02:00
|
|
|
|
2022-02-17 22:09:29 +01:00
|
|
|
aprsIsMsg->setPath(path + "qAO," + system.getUserConfig()->callsign);
|
2021-05-24 17:10:20 +02:00
|
|
|
|
2022-03-20 10:56:06 +01:00
|
|
|
system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "APRS-IS: %s", aprsIsMsg->toString().c_str());
|
2021-05-24 17:10:20 +02:00
|
|
|
_toAprsIs.addElement(aprsIsMsg);
|
|
|
|
|
} else {
|
2022-03-19 22:36:33 +01:00
|
|
|
system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "APRS-IS: no forward => RFonly");
|
2021-05-24 16:50:30 +02:00
|
|
|
}
|
2021-05-24 17:10:20 +02:00
|
|
|
} else {
|
2022-03-19 22:36:33 +01:00
|
|
|
if (!system.getUserConfig()->aprs_is.active) {
|
|
|
|
|
system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "APRS-IS: disabled");
|
|
|
|
|
}
|
2021-05-24 17:10:20 +02:00
|
|
|
|
2022-03-19 22:36:33 +01:00
|
|
|
if (modemMsg->getSource() == system.getUserConfig()->callsign) {
|
|
|
|
|
system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "APRS-IS: no forward => own packet received");
|
|
|
|
|
}
|
2021-05-23 23:04:10 +02:00
|
|
|
}
|
2021-05-24 18:48:39 +02:00
|
|
|
|
|
|
|
|
if (system.getUserConfig()->digi.active && modemMsg->getSource() != system.getUserConfig()->callsign) {
|
|
|
|
|
std::shared_ptr<APRSMessage> digiMsg = std::make_shared<APRSMessage>(*modemMsg);
|
2021-05-25 13:21:55 +02:00
|
|
|
String path = digiMsg->getPath();
|
2021-05-24 18:48:39 +02:00
|
|
|
|
|
|
|
|
// simple loop check
|
2021-07-15 11:21:01 +02:00
|
|
|
if (path.indexOf("WIDE1-1") >= 0 && path.indexOf(system.getUserConfig()->callsign) == -1) {
|
2021-05-24 18:48:39 +02:00
|
|
|
// fixme
|
|
|
|
|
digiMsg->setPath(system.getUserConfig()->callsign + "*");
|
|
|
|
|
|
2022-03-20 10:56:06 +01:00
|
|
|
system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "DIGI: %s", digiMsg->toString().c_str());
|
2021-05-24 18:48:39 +02:00
|
|
|
|
|
|
|
|
_toModem.addElement(digiMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-05-15 22:58:15 +02:00
|
|
|
}
|
|
|
|
|
|
2022-03-20 13:39:45 +01:00
|
|
|
_stateInfo = "Router done ";
|
2021-05-24 14:22:16 +02:00
|
|
|
|
2021-05-15 22:58:15 +02:00
|
|
|
return true;
|
|
|
|
|
}
|