From a618383617bef36f71a96f7433b083db260ec8be Mon Sep 17 00:00:00 2001 From: richonguzman Date: Wed, 15 Oct 2025 15:11:07 -0300 Subject: [PATCH] APRS Bridge for TNC --- data/igate_conf.json | 3 ++- data_embed/index.html | 54 ++++++++++++++++++++++++++--------------- data_embed/script.js | 1 + include/configuration.h | 1 + src/aprs_is_utils.cpp | 5 ++++ src/configuration.cpp | 6 ++++- src/tnc_utils.cpp | 8 ++++-- src/web_utils.cpp | 1 + 8 files changed, 55 insertions(+), 24 deletions(-) diff --git a/data/igate_conf.json b/data/igate_conf.json index ab32f61..231658d 100644 --- a/data/igate_conf.json +++ b/data/igate_conf.json @@ -82,7 +82,8 @@ "tnc": { "enableServer": false, "enableSerial": false, - "acceptOwn": false + "acceptOwn": false, + "aprsBrigdeActive": false }, "mqtt": { "active": false, diff --git a/data_embed/index.html b/data_embed/index.html index 218c807..2f0b21b 100644 --- a/data_embed/index.html +++ b/data_embed/index.html @@ -1511,25 +1511,7 @@
-
-
-
- Server will be available at port 8001 -
- - -
-
-
+
-
+
+
+ + +
+
+
+
+
+
+
+ + +
+
diff --git a/data_embed/script.js b/data_embed/script.js index 326f388..a6c68fb 100644 --- a/data_embed/script.js +++ b/data_embed/script.js @@ -206,6 +206,7 @@ function loadSettings(settings) { document.getElementById("tnc.enableServer").checked = settings.tnc.enableServer; document.getElementById("tnc.enableSerial").checked = settings.tnc.enableSerial; document.getElementById("tnc.acceptOwn").checked = settings.tnc.acceptOwn; + document.getElementById("tnc.aprsBridgeActive").checked = settings.tnc.aprsBridgeActive; } // MQTT diff --git a/include/configuration.h b/include/configuration.h index 4985da2..22d0bb3 100644 --- a/include/configuration.h +++ b/include/configuration.h @@ -127,6 +127,7 @@ public: bool enableServer; bool enableSerial; bool acceptOwn; + bool aprsBridgeActive; }; class OTA { diff --git a/src/aprs_is_utils.cpp b/src/aprs_is_utils.cpp index a1ee089..1e79493 100644 --- a/src/aprs_is_utils.cpp +++ b/src/aprs_is_utils.cpp @@ -25,6 +25,7 @@ #include "query_utils.h" #include "A7670_utils.h" #include "digi_utils.h" +#include "tnc_utils.h" #include "display.h" #include "utils.h" @@ -367,6 +368,10 @@ namespace APRS_IS_Utils { Serial.println(" ---> Rejected (Time): No Tx"); } } + if (Config.tnc.aprsBridgeActive) { + if (Config.tnc.enableServer) TNC_Utils::sendToClients(packet); // Send received packet to TNC KISS + if (Config.tnc.enableSerial) TNC_Utils::sendToSerial(packet); // Send received packet to Serial KISS + } } } diff --git a/src/configuration.cpp b/src/configuration.cpp index 31d83ba..7a2c1e7 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -131,6 +131,7 @@ bool Configuration::writeFile() { data["tnc"]["enableServer"] = tnc.enableServer; data["tnc"]["enableSerial"] = tnc.enableSerial; data["tnc"]["acceptOwn"] = tnc.acceptOwn; + data["tnc"]["aprsBridgeActive"] = tnc.aprsBridgeActive; data["mqtt"]["active"] = mqtt.active; data["mqtt"]["server"] = mqtt.server; @@ -331,10 +332,12 @@ bool Configuration::readFile() { if (!data["tnc"].containsKey("enableServer") || !data["tnc"].containsKey("enableSerial") || - !data["tnc"].containsKey("acceptOwn")) needsRewrite = true; + !data["tnc"].containsKey("acceptOwn") || + !data["tnc"].containsKey("aprsBridgeActive")) needsRewrite = true; tnc.enableServer = data["tnc"]["enableServer"] | false; tnc.enableSerial = data["tnc"]["enableSerial"] | false; tnc.acceptOwn = data["tnc"]["acceptOwn"] | false; + tnc.aprsBridgeActive = data["tnc"]["aprsBridgeActive"] | false; if (!data["mqtt"].containsKey("active") || !data["mqtt"].containsKey("server") || @@ -496,6 +499,7 @@ void Configuration::setDefaultValues() { tnc.enableServer = false; tnc.enableSerial = false; tnc.acceptOwn = false; + tnc.aprsBridgeActive = false; mqtt.active = false; mqtt.server = ""; diff --git a/src/tnc_utils.cpp b/src/tnc_utils.cpp index 60689a3..73492de 100644 --- a/src/tnc_utils.cpp +++ b/src/tnc_utils.cpp @@ -21,12 +21,15 @@ #include "configuration.h" #include "station_utils.h" #include "kiss_protocol.h" +#include "aprs_is_utils.h" #include "kiss_utils.h" #include "tnc_utils.h" #include "utils.h" -extern Configuration Config; +extern Configuration Config; +extern WiFiClient aprsIsClient; +extern bool passcodeValid; #define MAX_CLIENTS 4 #define INPUT_BUFFER_SIZE (2 + MAX_CLIENTS) @@ -94,7 +97,8 @@ namespace TNC_Utils { String sender = frame.substring(0,frame.indexOf(">")); if (Config.tnc.acceptOwn || sender != Config.callsign) { - STATION_Utils::addToOutputPacketBuffer(frame); + if (Config.loramodule.txActive) STATION_Utils::addToOutputPacketBuffer(frame); + if (Config.tnc.aprsBridgeActive && Config.aprs_is.active && passcodeValid && aprsIsClient.connected()) APRS_IS_Utils::upload(frame); } else { Utils::println("Ignored own frame from KISS"); } diff --git a/src/web_utils.cpp b/src/web_utils.cpp index ae01373..72fcf25 100644 --- a/src/web_utils.cpp +++ b/src/web_utils.cpp @@ -259,6 +259,7 @@ namespace WEB_Utils { Config.tnc.enableServer = request->hasParam("tnc.enableServer", true); Config.tnc.enableSerial = request->hasParam("tnc.enableSerial", true); Config.tnc.acceptOwn = request->hasParam("tnc.acceptOwn", true); + Config.tnc.aprsBridgeActive = request->hasParam("tnc.aprsBridgeActive", true); Config.mqtt.active = request->hasParam("mqtt.active", true);