diff --git a/common_settings.ini b/common_settings.ini
index 0614467..fce3851 100644
--- a/common_settings.ini
+++ b/common_settings.ini
@@ -32,16 +32,16 @@ lib_deps =
adafruit/Adafruit Si7021 Library @ 1.5.3
arduino-libraries/NTPClient @ 3.2.1
ayushsharma82/ElegantOTA @ 3.1.7
- bblanchon/ArduinoJson @ 7.4.2
+ bblanchon/ArduinoJson @ 7.4.3
jgromes/RadioLib @ 7.6.0
knolleary/PubSubClient @ 2.8
ESP32Async/AsyncTCP @ 3.4.10
- ESP32Async/ESPAsyncWebServer @ 3.10.0
+ ESP32Async/ESPAsyncWebServer @ 3.11.1
mikalhart/TinyGPSPlus @ 1.0.3
richonguzman/APRSPacketLib @ 1.0.4
display_libs =
- adafruit/Adafruit GFX Library @ 1.11.9
- adafruit/Adafruit SSD1306 @ 2.5.10
+ adafruit/Adafruit GFX Library @ 1.12.6
+ adafruit/Adafruit SSD1306 @ 2.5.17
usb_flags=
-DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
\ No newline at end of file
diff --git a/data/igate_conf.json b/data/igate_conf.json
index 4d03837..19caecc 100644
--- a/data/igate_conf.json
+++ b/data/igate_conf.json
@@ -40,7 +40,6 @@
"backupDigiMode": false
},
"lora": {
- "cadActive": true,
"rxActive": true,
"rxFreq": 433775000,
"rxSpreadingFactor": 12,
@@ -48,10 +47,11 @@
"rxSignalBandwidth": 125000,
"txActive": false,
"txFreq": 433775000,
- "txSpreadingFactor": 12,
- "txCodingRate4": 5,
+ "txSpreadingFactor": 9,
+ "txCodingRate4": 7,
"txSignalBandwidth": 125000,
- "power": 20
+ "power": 20,
+ "cadActive": true
},
"display": {
"alwaysOn": true,
diff --git a/data_embed/index.html b/data_embed/index.html
index 0c4ab20..1c4c8cc 100644
--- a/data_embed/index.html
+++ b/data_embed/index.html
@@ -1,4 +1,5 @@
+
@@ -7,59 +8,186 @@
-
-
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
diff --git a/data_embed/script.js b/data_embed/script.js
index dab331f..38de7f6 100644
--- a/data_embed/script.js
+++ b/data_embed/script.js
@@ -118,7 +118,7 @@ function loadSettings(settings) {
document.getElementById("beacon.latitude").value = settings.beacon.latitude;
document.getElementById("beacon.longitude").value = settings.beacon.longitude;
document.getElementById("beacon.interval").value = settings.beacon.interval;
- document.getElementById("other.rememberStationTime").value = settings.other.rememberStationTime;
+ document.getElementById("other.rememberStationTime").value = settings.other.rememberStationTime;
document.getElementById("beacon.sendViaAPRSIS").checked = settings.beacon.sendViaAPRSIS;
document.getElementById("beacon.sendViaRF").checked = settings.beacon.sendViaRF;
@@ -148,12 +148,26 @@ function loadSettings(settings) {
document.getElementById("lora.rxSpreadingFactor").value = settings.lora.rxSpreadingFactor;
document.getElementById("lora.rxCodingRate4").value = settings.lora.rxCodingRate4;
document.getElementById("lora.rxSignalBandwidth").value = settings.lora.rxSignalBandwidth;
+ LoRaRxCheckbox.checked = settings.lora.rxActive;
+ LoRaRxFreq.disabled = !LoRaRxCheckbox.checked;
+ LoRaRxSpreadingFactor.disabled = !LoRaRxCheckbox.checked;
+ LoRaRxCodingRate.disabled = !LoRaRxCheckbox.checked;
+ LoRaRxSignalBandwidth.disabled = !LoRaRxCheckbox.checked;
+
document.getElementById("lora.txActive").checked = settings.lora.txActive;
document.getElementById("lora.txFreq").value = settings.lora.txFreq;
document.getElementById("lora.txSpreadingFactor").value = settings.lora.txSpreadingFactor;
document.getElementById("lora.txCodingRate4").value = settings.lora.txCodingRate4;
- document.getElementById("lora.txSignalBandwidth").value = settings.lora.txSignalBandwidth;
+ document.getElementById("lora.txSignalBandwidth").value = settings.lora.txSignalBandwidth;
document.getElementById("lora.power").value = settings.lora.power;
+ document.getElementById("lora.cadActive").checked = settings.lora.cadActive;
+ LoRaTxCheckbox.checked = settings.lora.txActive;
+ LoRaTxFreq.disabled = !LoRaTxCheckbox.checked;
+ LoRaTxSpreadingFactor.disabled = !LoRaTxCheckbox.checked;
+ LoRaTxCodingRate.disabled = !LoRaTxCheckbox.checked;
+ LoRaTxSignalBandwidth.disabled = !LoRaTxCheckbox.checked;
+ LoRaPower.disabled = !LoRaTxCheckbox.checked;
+ LoRaCadActive.disabled = !LoRaTxCheckbox.checked;
// Display
document.getElementById("display.alwaysOn").checked = settings.display.alwaysOn;
@@ -195,7 +209,7 @@ function loadSettings(settings) {
TelemetryCheckbox.checked = settings.wxsensor.active;
TelemetryHeightCorrection.disabled = !TelemetryCheckbox.checked;
TelemetryTempCorrection.disabled = !TelemetryCheckbox.checked;
-
+
// SYSLOG
document.getElementById("syslog.active").checked = settings.syslog.active;
document.getElementById("syslog.server").value = settings.syslog.server;
@@ -205,7 +219,7 @@ function loadSettings(settings) {
SyslogServer.disabled = !SyslogCheckbox.checked;
SyslogPort.disabled = !SyslogCheckbox.checked;
SyslogBeaconOverTCPIP.disabled = !SyslogCheckbox.checked;
-
+
// TNC
if (settings.tnc) {
document.getElementById("tnc.enableServer").checked = settings.tnc.enableServer;
@@ -390,6 +404,36 @@ TelemetryCheckbox.addEventListener("change", function () {
TelemetryTempCorrection.disabled = !this.checked;
});
+// LoRa Rx Switch
+const LoRaRxCheckbox = document.querySelector('input[name="lora.rxActive"]');
+const LoRaRxFreq = document.querySelector('[name="lora.rxFreq"]');
+const LoRaRxSpreadingFactor = document.querySelector('[name="lora.rxSpreadingFactor"]');
+const LoRaRxCodingRate = document.querySelector('[name="lora.rxCodingRate4"]');
+const LoRaRxSignalBandwidth = document.querySelector('[name="lora.rxSignalBandwidth"]');
+LoRaRxCheckbox.addEventListener("change", function () {
+ LoRaRxFreq.disabled = !this.checked;
+ LoRaRxSpreadingFactor.disabled = !this.checked;
+ LoRaRxCodingRate.disabled = !this.checked;
+ LoRaRxSignalBandwidth.disabled = !this.checked;
+});
+
+// LoRa Tx Switch
+const LoRaTxCheckbox = document.querySelector('input[name="lora.txActive"]');
+const LoRaTxFreq = document.querySelector('[name="lora.txFreq"]');
+const LoRaTxSpreadingFactor = document.querySelector('[name="lora.txSpreadingFactor"]');
+const LoRaTxCodingRate = document.querySelector('[name="lora.txCodingRate4"]');
+const LoRaTxSignalBandwidth = document.querySelector('[name="lora.txSignalBandwidth"]');
+const LoRaPower = document.querySelector('[name="lora.power"]');
+const LoRaCadActive = document.querySelector('[name="lora.cadActive"]');
+LoRaTxCheckbox.addEventListener("change", function () {
+ LoRaTxFreq.disabled = !this.checked;
+ LoRaTxSpreadingFactor.disabled = !this.checked;
+ LoRaTxCodingRate.disabled = !this.checked;
+ LoRaTxSignalBandwidth.disabled = !this.checked;
+ LoRaPower.disabled = !this.checked;
+ LoRaCadActive.disabled = !this.checked;
+});
+
// Syslog Switches
const SyslogCheckbox = document.querySelector('input[name="syslog.active"]');
const SyslogServer = document.querySelector('input[name="syslog.server"]');
@@ -559,7 +603,7 @@ function loadReceivedPackets(packets) {
packets.forEach((packet) => {
const element = document.createElement("tr");
-
+
element.innerHTML = `
${packet.rxTime} |
${packet.packet} |
@@ -592,7 +636,7 @@ document.querySelector('a[href="/received-packets"]').addEventListener('click',
document.getElementById('received-packets').classList.remove('d-none');
document.getElementById('configuration').classList.add('d-none');
-
+
document.querySelector('button[type=submit]').remove();
fetchReceivedPackets();
diff --git a/include/configuration.h b/include/configuration.h
index f87498e..863a400 100644
--- a/include/configuration.h
+++ b/include/configuration.h
@@ -75,7 +75,6 @@ public:
class LoraModule {
public:
- bool cadActive;
bool rxActive;
long rxFreq;
int rxSpreadingFactor;
@@ -87,6 +86,7 @@ public:
int txCodingRate4;
long txSignalBandwidth;
int power;
+ bool cadActive;
};
class Display {
diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp
index 7fb45c3..e678376 100644
--- a/src/LoRa_APRS_iGate.cpp
+++ b/src/LoRa_APRS_iGate.cpp
@@ -68,7 +68,7 @@ ___________________________________________________________________*/
#endif
-String versionDate = "2026-06-10";
+String versionDate = "2026-06-11";
String versionNumber = "3.3.0";
Configuration Config;
WiFiClient aprsIsClient;
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 27e9bd8..499a65e 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -97,7 +97,6 @@ bool Configuration::writeFile() {
#endif
data["digi"]["backupDigiMode"] = digi.backupDigiMode;
- data["lora"]["cadActive"] = loramodule.cadActive;
data["lora"]["rxActive"] = loramodule.rxActive;
data["lora"]["rxFreq"] = loramodule.rxFreq;
data["lora"]["rxCodingRate4"] = loramodule.rxCodingRate4;
@@ -107,6 +106,7 @@ bool Configuration::writeFile() {
data["lora"]["txCodingRate4"] = loramodule.txCodingRate4;
data["lora"]["txSignalBandwidth"] = loramodule.txSignalBandwidth;
data["lora"]["power"] = loramodule.power;
+ data["lora"]["cadActive"] = loramodule.cadActive;
int rxSpreadingFactor = loramodule.rxSpreadingFactor;
int txSpreadingFactor = loramodule.txSpreadingFactor;
@@ -291,9 +291,7 @@ bool Configuration::readFile() {
#endif
digi.backupDigiMode = data["digi"]["backupDigiMode"] | false;
-
- if (data["lora"]["cadActive"].isNull() ||
- data["lora"]["rxActive"].isNull() ||
+ if (data["lora"]["rxActive"].isNull() ||
data["lora"]["rxFreq"].isNull() ||
data["lora"]["rxSpreadingFactor"].isNull() ||
data["lora"]["rxCodingRate4"].isNull() ||
@@ -303,8 +301,8 @@ bool Configuration::readFile() {
data["lora"]["txSpreadingFactor"].isNull() ||
data["lora"]["txCodingRate4"].isNull() ||
data["lora"]["txSignalBandwidth"].isNull() ||
- data["lora"]["power"].isNull()) needsRewrite = true;
- loramodule.cadActive = data["lora"]["cadActive"] | true;
+ data["lora"]["power"].isNull() ||
+ data["lora"]["cadActive"].isNull()) needsRewrite = true;
loramodule.rxActive = data["lora"]["rxActive"] | true;
loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000;
loramodule.rxSpreadingFactor = data["lora"]["rxSpreadingFactor"] | 12;
@@ -316,6 +314,7 @@ bool Configuration::readFile() {
loramodule.txCodingRate4 = data["lora"]["txCodingRate4"] | 5;
loramodule.txSignalBandwidth = data["lora"]["txSignalBandwidth"] | 125000;
loramodule.power = data["lora"]["power"] | 20;
+ loramodule.cadActive = data["lora"]["cadActive"] | true;
if (data["display"]["alwaysOn"].isNull() ||
data["display"]["timeout"].isNull() ||
@@ -495,7 +494,6 @@ void Configuration::setDefaultValues() {
digi.ecoMode = 0;
digi.backupDigiMode = false;
- loramodule.cadActive = true;
loramodule.rxActive = true;
loramodule.rxFreq = 433775000;
loramodule.rxSpreadingFactor = 12;
@@ -507,6 +505,7 @@ void Configuration::setDefaultValues() {
loramodule.txCodingRate4 = 5;
loramodule.txSignalBandwidth = 125000;
loramodule.power = 20;
+ loramodule.cadActive = true;
display.alwaysOn = true;
display.timeout = 4;
diff --git a/src/web_utils.cpp b/src/web_utils.cpp
index f39273b..fe6f741 100644
--- a/src/web_utils.cpp
+++ b/src/web_utils.cpp
@@ -213,6 +213,8 @@ namespace WEB_Utils {
Config.loramodule.txCodingRate4 = getParamIntSafe("lora.txCodingRate4", Config.loramodule.txCodingRate4);
Config.loramodule.txSignalBandwidth = getParamIntSafe("lora.txSignalBandwidth", Config.loramodule.txSignalBandwidth);
Config.loramodule.power = getParamIntSafe("lora.power", Config.loramodule.power);
+ if (Config.loramodule.txActive)
+ Config.loramodule.cadActive = request->hasParam("lora.cadActive", true);
Config.display.alwaysOn = request->hasParam("display.alwaysOn", true);
if (!Config.display.alwaysOn) {