From 1bda1299478d1b0a72ea9db7224ca676be0e7005 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Thu, 20 Apr 2023 17:46:56 +0200 Subject: [PATCH 1/2] send messages which are coming from aprs is --- src/LoRa_APRS_iGate.cpp | 2 +- src/TaskAprsIs.cpp | 7 +++++-- src/TaskAprsIs.h | 3 ++- src/TaskRadiolib.cpp | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 440949a..5f3f863 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -45,7 +45,7 @@ OTATask otaTask; NTPTask ntpTask; FTPTask ftpTask; MQTTTask mqttTask(toMQTT); -AprsIsTask aprsIsTask(toAprsIs); +AprsIsTask aprsIsTask(toAprsIs, toModem); RouterTask routerTask(fromModem, toModem, toAprsIs, toMQTT); BeaconTask beaconTask(toModem, toAprsIs); diff --git a/src/TaskAprsIs.cpp b/src/TaskAprsIs.cpp index 3fa3da6..b8fccf5 100644 --- a/src/TaskAprsIs.cpp +++ b/src/TaskAprsIs.cpp @@ -4,7 +4,7 @@ #include "TaskAprsIs.h" #include "project_configuration.h" -AprsIsTask::AprsIsTask(TaskQueue> &toAprsIs) : Task(TASK_APRS_IS, TaskAprsIs), _toAprsIs(toAprsIs) { +AprsIsTask::AprsIsTask(TaskQueue> &toAprsIs, TaskQueue> &toModem) : Task(TASK_APRS_IS, TaskAprsIs), _toAprsIs(toAprsIs), _toModem(toModem) { } AprsIsTask::~AprsIsTask() { @@ -30,7 +30,10 @@ bool AprsIsTask::loop(System &system) { return false; } - _aprs_is.getAPRSMessage(); + std::shared_ptr msg = _aprs_is.getAPRSMessage(); + if (msg) { + _toModem.addElement(msg); + } if (!_toAprsIs.empty()) { std::shared_ptr msg = _toAprsIs.getElement(); diff --git a/src/TaskAprsIs.h b/src/TaskAprsIs.h index 30679db..d2de355 100644 --- a/src/TaskAprsIs.h +++ b/src/TaskAprsIs.h @@ -8,7 +8,7 @@ class AprsIsTask : public Task { public: - explicit AprsIsTask(TaskQueue> &toAprsIs); + explicit AprsIsTask(TaskQueue> &toAprsIs, TaskQueue> &toModem); virtual ~AprsIsTask(); virtual bool setup(System &system) override; @@ -18,6 +18,7 @@ private: APRS_IS _aprs_is; TaskQueue> &_toAprsIs; + TaskQueue> &_toModem; bool connect(System &system); }; diff --git a/src/TaskRadiolib.cpp b/src/TaskRadiolib.cpp index 71b6795..7ddf9fc 100644 --- a/src/TaskRadiolib.cpp +++ b/src/TaskRadiolib.cpp @@ -164,6 +164,7 @@ bool RadiolibTask::loop(System &system) { } else { if (!txEnable) { // system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] TX is not enabled", timeString().c_str()); + _toModem.getElement(); // empty list, otherwise memory will get full. } else { if (transmitFlag) { // system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] TX signal detected. Waiting TX", timeString().c_str()); From 8474d837993246a65e78c41a5b713e6685ab38b3 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Thu, 20 Apr 2023 17:55:30 +0200 Subject: [PATCH 2/2] add aprs is filter --- data/is-cfg.json | 3 ++- src/TaskAprsIs.cpp | 9 +++++++-- src/project_configuration.cpp | 3 +++ src/project_configuration.h | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/data/is-cfg.json b/data/is-cfg.json index 20e836e..6f40fbb 100644 --- a/data/is-cfg.json +++ b/data/is-cfg.json @@ -36,7 +36,8 @@ "active": true, "passcode": "", "server": "euro.aprs2.net", - "port": 14580 + "port": 14580, + "filter": "" }, "digi": { "active": false, diff --git a/src/TaskAprsIs.cpp b/src/TaskAprsIs.cpp index b8fccf5..2b880ac 100644 --- a/src/TaskAprsIs.cpp +++ b/src/TaskAprsIs.cpp @@ -44,8 +44,13 @@ bool AprsIsTask::loop(System &system) { } bool AprsIsTask::connect(System &system) { - system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "connecting to APRS-IS server: %s on port: %d", system.getUserConfig()->aprs_is.server.c_str(), system.getUserConfig()->aprs_is.port); - APRS_IS::ConnectionStatus status = _aprs_is.connect(system.getUserConfig()->aprs_is.server, system.getUserConfig()->aprs_is.port); + system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "connecting to APRS-IS server: %s on port: %d, with filter: '%s'", system.getUserConfig()->aprs_is.server.c_str(), system.getUserConfig()->aprs_is.port, system.getUserConfig()->aprs_is.filter); + APRS_IS::ConnectionStatus status = APRS_IS::ConnectionStatus::ERROR_CONNECTION; + if (system.getUserConfig()->aprs_is.filter.isEmpty()) { + status = _aprs_is.connect(system.getUserConfig()->aprs_is.server, system.getUserConfig()->aprs_is.port); + } else { + status = _aprs_is.connect(system.getUserConfig()->aprs_is.server, system.getUserConfig()->aprs_is.port, system.getUserConfig()->aprs_is.filter); + } if (status == APRS_IS::ERROR_CONNECTION) { system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, getName(), "Something went wrong on connecting! Is the server reachable?"); system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, getName(), "Connection failed."); diff --git a/src/project_configuration.cpp b/src/project_configuration.cpp index 393d608..47e0fc3 100644 --- a/src/project_configuration.cpp +++ b/src/project_configuration.cpp @@ -52,6 +52,8 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen 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; + if (data.containsKey("aprs_is") && data["aprs_is"].containsKey("filter")) + conf.aprs_is.filter = data["aprs_is"]["filter"].as(); conf.digi.active = data["digi"]["active"] | false; conf.digi.beacon = data["digi"]["beacon"] | false; @@ -147,6 +149,7 @@ void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &co 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["aprs_is"]["filter"] = conf.aprs_is.filter; data["digi"]["active"] = conf.digi.active; data["digi"]["beacon"] = conf.digi.beacon; data["lora"]["frequency_rx"] = conf.lora.frequencyRx; diff --git a/src/project_configuration.h b/src/project_configuration.h index fd3b13a..7ca1274 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -67,6 +67,7 @@ public: String passcode; String server; int port; + String filter; }; class Digi {