mirror of
https://github.com/richonguzman/LoRa_APRS_iGate.git
synced 2026-07-14 05:41:01 +02:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aaa44200b5 | |||
| c17ad32650 | |||
| 26b5df1bd7 | |||
| 0c3555bdbe | |||
| cf858ffad2 | |||
| cbac8b0365 | |||
| b76aed4d57 |
@@ -51,6 +51,7 @@ ____________________________________________________
|
|||||||
<br />
|
<br />
|
||||||
|
|
||||||
# Timeline (Versions):
|
# Timeline (Versions):
|
||||||
|
- 2026-06-29 New UI (Web) and also Live View over a Map to see Rx stations.
|
||||||
- 2026-06-10 CAD (Channel Activity Detection) and DIFS (Distributed Inter-Frame Space) added.
|
- 2026-06-10 CAD (Channel Activity Detection) and DIFS (Distributed Inter-Frame Space) added.
|
||||||
- 2026-03-25 More Boards, SDK update, OTA fix, GPS process update.
|
- 2026-03-25 More Boards, SDK update, OTA fix, GPS process update.
|
||||||
- 2026-02-26 9M2IBR ESP32 1W (400M30S) + GPS board added.
|
- 2026-02-26 9M2IBR ESP32 1W (400M30S) + GPS board added.
|
||||||
|
|||||||
@@ -1007,10 +1007,14 @@ body{background:var(--msh-bg);color:var(--msh-text);font-family:"Inter",system-u
|
|||||||
id="digi.mode"
|
id="digi.mode"
|
||||||
>
|
>
|
||||||
<option value="0" selected>OFF</option>
|
<option value="0" selected>OFF</option>
|
||||||
<option value="2">WIDE1 (fill-in) Digi</option>
|
<option value="1">WIDE1 (fill-in) Digi</option>
|
||||||
<option value="3">WIDE2 (+WIDE1) Digi</option>
|
<option value="2">WIDE2 (+WIDE1) Digi</option>
|
||||||
|
<option value="3">Own Callsign Path Digi</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-12 mt-2">
|
||||||
|
+ <small class="text-muted">Mode 4 digipeats packets whose path already contains your callsign, preserving the path and appending a * to your callsign.</small>
|
||||||
|
+ </div>
|
||||||
<div class="col-12 mt-3">
|
<div class="col-12 mt-3">
|
||||||
<label
|
<label
|
||||||
for="digi.ecoMode"
|
for="digi.ecoMode"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
|
*
|
||||||
|
* This file is part of LoRa APRS iGate.
|
||||||
|
*
|
||||||
|
* LoRa APRS iGate is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* LoRa APRS iGate is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
@@ -68,7 +68,7 @@ ___________________________________________________________________*/
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
String versionDate = "2026-06-12";
|
String versionDate = "2026-07-06";
|
||||||
String versionNumber = "4.0.0";
|
String versionNumber = "4.0.0";
|
||||||
Configuration Config;
|
Configuration Config;
|
||||||
WiFiClient aprsIsClient;
|
WiFiClient aprsIsClient;
|
||||||
@@ -196,7 +196,7 @@ void loop() {
|
|||||||
APRS_IS_Utils::processLoRaPacket(packet); // Send received packet to APRSIS
|
APRS_IS_Utils::processLoRaPacket(packet); // Send received packet to APRSIS
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config.loramodule.txActive && (Config.digi.mode == 2 || Config.digi.mode == 3 || backupDigiMode)) { // If Digi enabled
|
if (Config.loramodule.txActive && (Config.digi.mode == 1 || Config.digi.mode == 2 || Config.digi.mode == 3 || backupDigiMode)) { // If Digi enabled
|
||||||
DIGI_Utils::processLoRaPacket(packet); // Send received packet to Digi
|
DIGI_Utils::processLoRaPacket(packet); // Send received packet to Digi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+48
-10
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
@@ -42,8 +42,8 @@ extern bool backupDigiMode;
|
|||||||
|
|
||||||
namespace DIGI_Utils {
|
namespace DIGI_Utils {
|
||||||
|
|
||||||
String cleanPathAsterisks(String path) {
|
String cleanPath(String path) {
|
||||||
String terms[] = {",WIDE1*", ",WIDE2*", "*"};
|
String terms[] = {"WIDE1*,", "WIDE2*,", "*"};
|
||||||
for (String term : terms) {
|
for (String term : terms) {
|
||||||
int index = path.indexOf(term);
|
int index = path.indexOf(term);
|
||||||
if (index != -1) path.remove(index, term.length()); // less memory than: tempPath.replace("*", "");
|
if (index != -1) path.remove(index, term.length()); // less memory than: tempPath.replace("*", "");
|
||||||
@@ -51,6 +51,35 @@ namespace DIGI_Utils {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String processMode3Path(const String& path, const String& stationCallsign) {
|
||||||
|
int start = 0;
|
||||||
|
bool prevTokensAllStar = true;
|
||||||
|
int ownTokenEnd = -1;
|
||||||
|
|
||||||
|
while (start < path.length()) {
|
||||||
|
int delim = path.indexOf(',', start);
|
||||||
|
if (delim == -1) delim = path.length(); // busca todo hasta lograr encontra una coma o el final del string
|
||||||
|
|
||||||
|
String token = path.substring(start, delim);
|
||||||
|
bool tokenIsOwn = (token == stationCallsign) || (token == stationCallsign + "*");
|
||||||
|
bool tokenStar = token.endsWith("*");
|
||||||
|
|
||||||
|
if (tokenIsOwn) {
|
||||||
|
if (tokenStar) return ""; // already digipeated
|
||||||
|
if (!prevTokensAllStar) return ""; // earlier tokens must be marked
|
||||||
|
ownTokenEnd = delim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tokenStar) prevTokensAllStar = false;
|
||||||
|
start = delim + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ownTokenEnd == -1) return "";
|
||||||
|
String tempPacket = cleanPath(path.substring(0, ownTokenEnd));
|
||||||
|
return tempPacket + "*" + path.substring(ownTokenEnd);
|
||||||
|
}
|
||||||
|
|
||||||
String buildPacket(const String& path, const String& packet, bool thirdParty, bool crossFreq) {
|
String buildPacket(const String& path, const String& packet, bool thirdParty, bool crossFreq) {
|
||||||
String stationCallsign = (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign);
|
String stationCallsign = (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign);
|
||||||
String suffix = thirdParty ? ":}" : ":";
|
String suffix = thirdParty ? ":}" : ":";
|
||||||
@@ -60,11 +89,11 @@ namespace DIGI_Utils {
|
|||||||
int digiMode = Config.digi.mode;
|
int digiMode = Config.digi.mode;
|
||||||
String tempPath = path;
|
String tempPath = path;
|
||||||
|
|
||||||
if (tempPath.indexOf("WIDE1-1") != -1 && (digiMode == 2 || digiMode == 3)) { // WIDE1-1
|
if (tempPath.indexOf("WIDE1-1") != -1 && (digiMode == 1 || digiMode == 2)) { // WIDE1-1
|
||||||
if (tempPath.indexOf("*") != -1 ) return ""; // "*" shouldn't be in WIDE1-1 (only) type of packet
|
if (tempPath.indexOf("*") != -1 ) return ""; // "*" shouldn't be in WIDE1-1 (only) type of packet
|
||||||
tempPath.replace("WIDE1-1", stationCallsign + "*");
|
tempPath.replace("WIDE1-1", stationCallsign + "*");
|
||||||
} else if (tempPath.indexOf("WIDE2-") != -1 && digiMode == 3) { // WIDE2-n Digipeater
|
} else if (tempPath.indexOf("WIDE2-") != -1 && digiMode == 2) { // WIDE2-n Digipeater
|
||||||
tempPath = cleanPathAsterisks(path);
|
tempPath = cleanPath(path);
|
||||||
if (tempPath.indexOf("WIDE2-1") != -1) {
|
if (tempPath.indexOf("WIDE2-1") != -1) {
|
||||||
tempPath.replace("WIDE2-1", stationCallsign + "*");
|
tempPath.replace("WIDE2-1", stationCallsign + "*");
|
||||||
} else if (tempPath.indexOf("WIDE2-2") != -1) {
|
} else if (tempPath.indexOf("WIDE2-2") != -1) {
|
||||||
@@ -72,11 +101,14 @@ namespace DIGI_Utils {
|
|||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
} else if (digiMode == 3) { // Repeat if station callsign is in path (free to repeat).
|
||||||
|
tempPath = processMode3Path(tempPath, stationCallsign);
|
||||||
|
if (tempPath == "") return "";
|
||||||
}
|
}
|
||||||
packetToRepeat = packet.substring(0, packet.indexOf(",") + 1);
|
packetToRepeat = packet.substring(0, packet.indexOf(",") + 1);
|
||||||
packetToRepeat += tempPath;
|
packetToRepeat += tempPath;
|
||||||
} else { // CrossFreq Digipeater
|
} else { // CrossFreq Digipeater
|
||||||
packetToRepeat = cleanPathAsterisks(packet.substring(0, suffixIndex));
|
packetToRepeat = cleanPath(packet.substring(0, suffixIndex));
|
||||||
if (packetToRepeat.indexOf(stationCallsign) != -1) return ""; // stationCallsign shouldn't be in path
|
if (packetToRepeat.indexOf(stationCallsign) != -1) return ""; // stationCallsign shouldn't be in path
|
||||||
packetToRepeat += ",";
|
packetToRepeat += ",";
|
||||||
packetToRepeat += stationCallsign;
|
packetToRepeat += stationCallsign;
|
||||||
@@ -100,14 +132,14 @@ namespace DIGI_Utils {
|
|||||||
|
|
||||||
if (commaIndex > 2) { // "path" found
|
if (commaIndex > 2) { // "path" found
|
||||||
const String& path = temp.substring(commaIndex + 1);
|
const String& path = temp.substring(commaIndex + 1);
|
||||||
if (digiMode == 2 || backupDigiMode) {
|
if (digiMode == 1 || backupDigiMode) {
|
||||||
bool hasWide = path.indexOf("WIDE1-1") != -1;
|
bool hasWide = path.indexOf("WIDE1-1") != -1;
|
||||||
if (hasWide || crossFreq) {
|
if (hasWide || crossFreq) {
|
||||||
return buildPacket(path, packet, thirdParty, !hasWide);
|
return buildPacket(path, packet, thirdParty, !hasWide);
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
if (digiMode == 3) {
|
if (digiMode == 2) {
|
||||||
int wide1Index = path.indexOf("WIDE1-1");
|
int wide1Index = path.indexOf("WIDE1-1");
|
||||||
int wide2Index = path.indexOf("WIDE2-");
|
int wide2Index = path.indexOf("WIDE2-");
|
||||||
bool hasWide1 = wide1Index != -1;
|
bool hasWide1 = wide1Index != -1;
|
||||||
@@ -121,10 +153,16 @@ namespace DIGI_Utils {
|
|||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
if (digiMode == 3) {
|
||||||
|
String stationCallsign = (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign);
|
||||||
|
bool containsOwnCall = path.indexOf(stationCallsign) != -1;
|
||||||
|
if (containsOwnCall) return buildPacket(path, packet, thirdParty, false);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commaIndex == -1 && (digiMode == 2 || backupDigiMode || digiMode == 3) && crossFreq) return buildPacket("", packet, thirdParty, true); // no "path" but is CrossFreq Digi
|
if (commaIndex == -1 && (digiMode == 1 || backupDigiMode || digiMode == 2) && crossFreq) return buildPacket("", packet, thirdParty, true); // no "path" but is CrossFreq Digi
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
|
*
|
||||||
|
* This file is part of LoRa APRS iGate.
|
||||||
|
*
|
||||||
|
* LoRa APRS iGate is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* LoRa APRS iGate is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#include "network_manager.h"
|
#include "network_manager.h"
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
@@ -82,7 +82,7 @@ namespace QUERY_Utils {
|
|||||||
int radioTxActive = Config.loramodule.txActive;
|
int radioTxActive = Config.loramodule.txActive;
|
||||||
bool onlyRadioActive = radioTxActive && Config.loramodule.rxActive && !Config.aprs_is.active;
|
bool onlyRadioActive = radioTxActive && Config.loramodule.rxActive && !Config.aprs_is.active;
|
||||||
if (queryQuestion.startsWith("?EM=OFF")) {
|
if (queryQuestion.startsWith("?EM=OFF")) {
|
||||||
if ((digiMode == 2 || digiMode == 3) && onlyRadioActive) {
|
if ((digiMode == 1 || digiMode == 2 || digiMode == 3) && onlyRadioActive) {
|
||||||
if (digiEcoMode == 1 || digiEcoMode == 2) { // Exit Digipeater EcoMode or Digipeater without WiFiAP
|
if (digiEcoMode == 1 || digiEcoMode == 2) { // Exit Digipeater EcoMode or Digipeater without WiFiAP
|
||||||
answer = (digiEcoMode == 1) ? "DigiEcoMode:OFF" : "Digipeater + WiFiAP enabled";
|
answer = (digiEcoMode == 1) ? "DigiEcoMode:OFF" : "Digipeater + WiFiAP enabled";
|
||||||
Config.digi.ecoMode = 0;
|
Config.digi.ecoMode = 0;
|
||||||
@@ -97,7 +97,7 @@ namespace QUERY_Utils {
|
|||||||
answer = "Digipeater Mode control not possible";
|
answer = "Digipeater Mode control not possible";
|
||||||
}
|
}
|
||||||
} else if (queryQuestion.startsWith("?EM=ON")) {
|
} else if (queryQuestion.startsWith("?EM=ON")) {
|
||||||
if ((digiMode == 2 || digiMode == 3) && onlyRadioActive) {
|
if ((digiMode == 1 || digiMode == 2 || digiMode == 3) && onlyRadioActive) {
|
||||||
if (digiEcoMode == 0) { // Start Digipeater EcoMode
|
if (digiEcoMode == 0) { // Start Digipeater EcoMode
|
||||||
answer = "DigiEcoMode:ON";
|
answer = "DigiEcoMode:ON";
|
||||||
Config.digi.ecoMode = 1;
|
Config.digi.ecoMode = 1;
|
||||||
@@ -139,7 +139,7 @@ namespace QUERY_Utils {
|
|||||||
|
|
||||||
if (answer == "") return "";
|
if (answer == "") return "";
|
||||||
|
|
||||||
String queryAnswer = Config.callsign;
|
String queryAnswer = (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign);
|
||||||
queryAnswer += ">APLRG1";
|
queryAnswer += ">APLRG1";
|
||||||
if (queryFromAPRSIS) {
|
if (queryFromAPRSIS) {
|
||||||
queryAnswer += ",TCPIP,qAC";
|
queryAnswer += ",TCPIP,qAC";
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
+12
-12
@@ -1,17 +1,17 @@
|
|||||||
# Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
# Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
#
|
#
|
||||||
# This file is part of LoRa APRS iGate.
|
# This file is part of LoRa APRS iGate.
|
||||||
#
|
#
|
||||||
# LoRa APRS iGate is free software: you can redistribute it and/or modify
|
# LoRa APRS iGate is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# LoRa APRS iGate is distributed in the hope that it will be useful,
|
# LoRa APRS iGate is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
|
# along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -40,20 +40,20 @@ with open('src/LoRa_APRS_iGate.cpp', encoding='utf-8') as cpp_file:
|
|||||||
if start > 0 and end > start:
|
if start > 0 and end > start:
|
||||||
versionDate = line[start:end]
|
versionDate = line[start:end]
|
||||||
break
|
break
|
||||||
|
|
||||||
for src in files:
|
for src in files:
|
||||||
out = src + ".gz"
|
out = src + ".gz"
|
||||||
|
|
||||||
|
|
||||||
with open(src, 'rb') as f:
|
with open(src, 'rb') as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
if src == 'data_embed/index.html':
|
if src == 'data_embed/index.html':
|
||||||
env_vars = env["BOARD"] + "<br>" + ','.join(env["BUILD_FLAGS"]).replace('-Werror -Wall,', '').replace(',-DELEGANTOTA_USE_ASYNC_WEBSERVER=1', '') + "<br>" + "Version date: " + versionDate
|
env_vars = env["BOARD"] + "<br>" + ','.join(env["BUILD_FLAGS"]).replace('-Werror -Wall,', '').replace(',-DELEGANTOTA_USE_ASYNC_WEBSERVER=1', '') + "<br>" + "Version date: " + versionDate
|
||||||
current_date = datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S') + " UTC"
|
current_date = datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S') + " UTC"
|
||||||
build_info = f'{env_vars}<br>Build date: {current_date}'.encode()
|
build_info = f'{env_vars}<br>Build date: {current_date}'.encode()
|
||||||
|
|
||||||
content = content.replace(b'%BUILD_INFO%', build_info)
|
content = content.replace(b'%BUILD_INFO%', build_info)
|
||||||
|
|
||||||
with open(out, 'wb') as f:
|
with open(out, 'wb') as f:
|
||||||
f.write(gzip.compress(content, compresslevel=9))
|
f.write(gzip.compress(content, compresslevel=9))
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
|
/* Copyright (C) 2026 Ricardo Guzman - CA2RXU
|
||||||
*
|
*
|
||||||
* This file is part of LoRa APRS iGate.
|
* This file is part of LoRa APRS iGate.
|
||||||
*
|
*
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user