diff --git a/data/igate_conf.json b/data/igate_conf.json
index 7324498..ab32f61 100644
--- a/data/igate_conf.json
+++ b/data/igate_conf.json
@@ -17,7 +17,7 @@
"path": "WIDE1-1",
"sendViaAPRSIS": false,
"sendViaRF": false,
- "beaconOnRxFreq": false,
+ "beaconFreq": 1,
"statusActive": false,
"statusPacket": "",
"gpsActive": false,
diff --git a/data_embed/index.html b/data_embed/index.html
index f8b0467..218c807 100644
--- a/data_embed/index.html
+++ b/data_embed/index.html
@@ -569,29 +569,26 @@
-
-
+
+
+ for="beacon.beaconFreq"
+ class="form-label">
+ (Select LoRa Beacon Frequency)
+
diff --git a/data_embed/script.js b/data_embed/script.js
index 382913d..326f388 100644
--- a/data_embed/script.js
+++ b/data_embed/script.js
@@ -119,8 +119,11 @@ function loadSettings(settings) {
document.getElementById("beacon.interval").value = settings.beacon.interval;
document.getElementById("other.rememberStationTime").value = settings.other.rememberStationTime;
document.getElementById("beacon.sendViaAPRSIS").checked = settings.beacon.sendViaAPRSIS;
+
document.getElementById("beacon.sendViaRF").checked = settings.beacon.sendViaRF;
- document.getElementById("beacon.beaconOnRxFreq").value = settings.beacon.beaconOnRxFreq;
+ document.getElementById("beacon.beaconFreq").value = settings.beacon.beaconFreq;
+ BeaconingViaRFCheckbox.checked = settings.beacon.sendViaRF;
+ BeaconingFrequency.disabled = !BeaconingViaRFCheckbox.checked;
document.getElementById("beacon.statusActive").checked = settings.beacon.statusActive;
document.getElementById("beacon.statusPacket").value = settings.beacon.statusPacket;
@@ -306,6 +309,12 @@ function updateImage() {
}
}
+// Beaconing Switches
+const BeaconingViaRFCheckbox = document.querySelector('input[name="beacon.sendViaRF"]');
+const BeaconingFrequency = document.querySelector('select[name="beacon.beaconFreq"]');
+BeaconingViaRFCheckbox.addEventListener("change", function() {
+ BeaconingFrequency.disabled = !this.checked;
+});
// Status Switch
const StatusCheckbox = document.querySelector('input[name="beacon.statusActive"]');
diff --git a/include/configuration.h b/include/configuration.h
index 0c78990..4985da2 100644
--- a/include/configuration.h
+++ b/include/configuration.h
@@ -47,7 +47,7 @@ public:
String path;
bool sendViaAPRSIS;
bool sendViaRF;
- bool beaconOnRxFreq;
+ int beaconFreq;
bool statusActive;
String statusPacket;
bool gpsActive;
diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp
index baf1c87..4f98b50 100644
--- a/src/LoRa_APRS_iGate.cpp
+++ b/src/LoRa_APRS_iGate.cpp
@@ -67,8 +67,8 @@ ___________________________________________________________________*/
#endif
-String versionDate = "2025-10-13";
-String versionNumber = "3.1.3";
+String versionDate = "2025-10-15";
+String versionNumber = "3.1.4";
Configuration Config;
WiFiClient aprsIsClient;
WiFiClient mqttClient;
diff --git a/src/configuration.cpp b/src/configuration.cpp
index d6564b1..31d83ba 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -72,7 +72,7 @@ bool Configuration::writeFile() {
data["beacon"]["sendViaAPRSIS"] = beacon.sendViaAPRSIS;
data["beacon"]["sendViaRF"] = beacon.sendViaRF;
- data["beacon"]["beaconOnRxFreq"] = beacon.beaconOnRxFreq;
+ data["beacon"]["beaconFreq"] = beacon.beaconFreq;
data["beacon"]["statusActive"] = beacon.statusActive;
data["beacon"]["statusPacket"] = beacon.statusPacket;
@@ -227,7 +227,7 @@ bool Configuration::readFile() {
!data["beacon"].containsKey("path") ||
!data["beacon"].containsKey("sendViaAPRSIS") ||
!data["beacon"].containsKey("sendViaRF") ||
- !data["beacon"].containsKey("beaconOnRxFreq") ||
+ !data["beacon"].containsKey("beaconFreq") ||
!data["beacon"].containsKey("statusActive") ||
!data["beacon"].containsKey("statusPacket") ||
!data["beacon"].containsKey("gpsActive") ||
@@ -241,7 +241,7 @@ bool Configuration::readFile() {
beacon.path = data["beacon"]["path"] | "WIDE1-1";
beacon.sendViaAPRSIS = data["beacon"]["sendViaAPRSIS"] | false;
beacon.sendViaRF = data["beacon"]["sendViaRF"] | false;
- beacon.beaconOnRxFreq = data["beacon"]["beaconOnRxFreq"] | false;
+ beacon.beaconFreq = data["beacon"]["beaconFreq"] | 1;
beacon.statusActive = data["beacon"]["statusActive"] | false;
beacon.statusPacket = data["beacon"]["statusPacket"] | "";
beacon.gpsActive = data["beacon"]["gpsActive"] | false;
@@ -440,7 +440,7 @@ void Configuration::setDefaultValues() {
beacon.sendViaAPRSIS = true;
beacon.sendViaRF = false;
- beacon.beaconOnRxFreq = false;
+ beacon.beaconFreq = 1;
beacon.statusActive = false;
beacon.statusPacket = "";
diff --git a/src/lora_utils.cpp b/src/lora_utils.cpp
index f67829c..63f5c79 100644
--- a/src/lora_utils.cpp
+++ b/src/lora_utils.cpp
@@ -129,7 +129,7 @@ namespace LoRa_Utils {
}
void changeFreqTx() {
- delay(500);
+ delay(300);
float freq = (float)Config.loramodule.txFreq / 1000000;
radio.setFrequency(freq);
radio.setSpreadingFactor(Config.loramodule.txSpreadingFactor);
@@ -138,7 +138,7 @@ namespace LoRa_Utils {
}
void changeFreqRx() {
- delay(500);
+ delay(300);
float freq = (float)Config.loramodule.rxFreq / 1000000;
radio.setFrequency(freq);
radio.setSpreadingFactor(Config.loramodule.rxSpreadingFactor);
@@ -150,7 +150,7 @@ namespace LoRa_Utils {
if (!Config.loramodule.txActive) return;
if (Config.loramodule.txFreq != Config.loramodule.rxFreq) {
- if (!packetIsBeacon || (packetIsBeacon && !Config.beacon.beaconOnRxFreq)) {
+ if (!packetIsBeacon || (packetIsBeacon && Config.beacon.beaconFreq == 1)) {
changeFreqTx();
}
}
@@ -174,7 +174,7 @@ namespace LoRa_Utils {
if (Config.digi.ecoMode != 1) digitalWrite(INTERNAL_LED_PIN, LOW); // disabled in Ultra Eco Mode
#endif
if (Config.loramodule.txFreq != Config.loramodule.rxFreq) {
- if (!packetIsBeacon || (packetIsBeacon && !Config.beacon.beaconOnRxFreq)) {
+ if (!packetIsBeacon || (packetIsBeacon && Config.beacon.beaconFreq == 1)) {
changeFreqRx();
}
}
diff --git a/src/utils.cpp b/src/utils.cpp
index 6d93bb5..830783f 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -284,7 +284,7 @@ namespace Utils {
Serial.println("Tx Freq less than 125kHz from Rx Freq ---> NOT VALID");
displayShow("Tx Freq is less than ", "125kHz from Rx Freq", "device will autofix", "and then reboot", 1000);
Config.loramodule.txFreq = Config.loramodule.rxFreq; // Inform about that but then change the TX QRG to RX QRG and reset the device
- Config.beacon.beaconOnRxFreq = false;
+ Config.beacon.beaconFreq = 1; // return to LoRa Tx Beacon Freq
Config.writeFile();
ESP.restart();
}
diff --git a/src/web_utils.cpp b/src/web_utils.cpp
index 9eb24e7..ae01373 100644
--- a/src/web_utils.cpp
+++ b/src/web_utils.cpp
@@ -177,7 +177,7 @@ namespace WEB_Utils {
Config.beacon.interval = getParamIntSafe("beacon.interval", Config.beacon.interval);
Config.beacon.sendViaAPRSIS = request->hasParam("beacon.sendViaAPRSIS", true);
Config.beacon.sendViaRF = request->hasParam("beacon.sendViaRF", true);
- Config.beacon.beaconOnRxFreq = request->hasParam("beacon.beaconOnRxFreq", true);
+ Config.beacon.beaconFreq = getParamIntSafe("beacon.beaconFreq", Config.beacon.beaconFreq);
Config.beacon.latitude = getParamDoubleSafe("beacon.latitude", Config.beacon.latitude);
Config.beacon.longitude = getParamDoubleSafe("beacon.longitude", Config.beacon.longitude);
Config.beacon.comment = getParamStringSafe("beacon.comment", Config.beacon.comment);