mirror of
https://github.com/richonguzman/LoRa_APRS_iGate.git
synced 2026-10-31 02:51:58 +01:00
is2 added for testing
This commit is contained in:
1 parent
1591d9f7fe
commit
ef7d38e940
7 files changed
+45
-2
No files matched your search
@@ -27,6 +27,7 @@
|
|||||||
"active": false,
|
"active": false,
|
||||||
"messagesToRF": false,
|
"messagesToRF": false,
|
||||||
"objectsToRF": false,
|
"objectsToRF": false,
|
||||||
|
"is2Metadata": false,
|
||||||
"server": "rotate.aprs2.net",
|
"server": "rotate.aprs2.net",
|
||||||
"passcode": "XYZVW",
|
"passcode": "XYZVW",
|
||||||
"port": 14580,
|
"port": 14580,
|
||||||
|
|||||||
@@ -937,6 +937,22 @@ body{background:var(--msh-bg);color:var(--msh-text);font-family:"Inter",system-u
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="aprs_is.is2Metadata"
|
||||||
|
id="aprs_is.is2Metadata"
|
||||||
|
class="form-check-input"
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
for="aprs_is.is2Metadata"
|
||||||
|
class="form-label"
|
||||||
|
>Send IS2 Metadata
|
||||||
|
(RSSI/SNR) to APRS-IS</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<label
|
<label
|
||||||
for="aprs_is.server"
|
for="aprs_is.server"
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ function loadSettings(settings) {
|
|||||||
document.getElementById("aprs_is.active").checked = settings.aprs_is.active;
|
document.getElementById("aprs_is.active").checked = settings.aprs_is.active;
|
||||||
document.getElementById("aprs_is.messagesToRF").checked = settings.aprs_is.messagesToRF;
|
document.getElementById("aprs_is.messagesToRF").checked = settings.aprs_is.messagesToRF;
|
||||||
document.getElementById("aprs_is.objectsToRF").checked = settings.aprs_is.objectsToRF;
|
document.getElementById("aprs_is.objectsToRF").checked = settings.aprs_is.objectsToRF;
|
||||||
|
document.getElementById("aprs_is.is2Metadata").checked = settings.aprs_is.is2Metadata;
|
||||||
document.getElementById("aprs_is.server").value = settings.aprs_is.server;
|
document.getElementById("aprs_is.server").value = settings.aprs_is.server;
|
||||||
document.getElementById("aprs_is.port").value = settings.aprs_is.port;
|
document.getElementById("aprs_is.port").value = settings.aprs_is.port;
|
||||||
document.getElementById("aprs_is.filter").value = settings.aprs_is.filter;
|
document.getElementById("aprs_is.filter").value = settings.aprs_is.filter;
|
||||||
@@ -110,6 +111,7 @@ function loadSettings(settings) {
|
|||||||
APRSISCheckbox.checked = settings.aprs_is.active;
|
APRSISCheckbox.checked = settings.aprs_is.active;
|
||||||
APRSISGateMessages.disabled = !APRSISCheckbox.checked;
|
APRSISGateMessages.disabled = !APRSISCheckbox.checked;
|
||||||
APRSISGateObjects.disabled = !APRSISCheckbox.checked;
|
APRSISGateObjects.disabled = !APRSISCheckbox.checked;
|
||||||
|
APRSISMetadata.disabled = !APRSISCheckbox.checked;
|
||||||
APRSISServer.disabled = !APRSISCheckbox.checked;
|
APRSISServer.disabled = !APRSISCheckbox.checked;
|
||||||
APRSISPort.disabled = !APRSISCheckbox.checked;
|
APRSISPort.disabled = !APRSISCheckbox.checked;
|
||||||
APRSISPasscode.disabled = !APRSISCheckbox.checked;
|
APRSISPasscode.disabled = !APRSISCheckbox.checked;
|
||||||
@@ -350,6 +352,7 @@ StatusCheckbox.addEventListener("change", function() {
|
|||||||
const APRSISCheckbox = document.querySelector('input[name="aprs_is.active"]');
|
const APRSISCheckbox = document.querySelector('input[name="aprs_is.active"]');
|
||||||
const APRSISGateMessages = document.querySelector('input[name="aprs_is.messagesToRF"]');
|
const APRSISGateMessages = document.querySelector('input[name="aprs_is.messagesToRF"]');
|
||||||
const APRSISGateObjects = document.querySelector('input[name="aprs_is.objectsToRF"]');
|
const APRSISGateObjects = document.querySelector('input[name="aprs_is.objectsToRF"]');
|
||||||
|
const APRSISMetadata = document.querySelector('input[name="aprs_is.is2Metadata"]');
|
||||||
const APRSISServer = document.querySelector('input[name="aprs_is.server"]');
|
const APRSISServer = document.querySelector('input[name="aprs_is.server"]');
|
||||||
const APRSISPort = document.querySelector('input[name="aprs_is.port"]');
|
const APRSISPort = document.querySelector('input[name="aprs_is.port"]');
|
||||||
const APRSISPasscode = document.querySelector('input[name="aprs_is.passcode"]');
|
const APRSISPasscode = document.querySelector('input[name="aprs_is.passcode"]');
|
||||||
@@ -357,6 +360,7 @@ const APRSISFilter = document.querySelector('input[name="aprs_is.fi
|
|||||||
APRSISCheckbox.addEventListener("change", function() {
|
APRSISCheckbox.addEventListener("change", function() {
|
||||||
APRSISGateMessages.disabled = !this.checked;
|
APRSISGateMessages.disabled = !this.checked;
|
||||||
APRSISGateObjects.disabled = !this.checked;
|
APRSISGateObjects.disabled = !this.checked;
|
||||||
|
APRSISMetadata.disabled = !this.checked;
|
||||||
APRSISServer.disabled = !this.checked;
|
APRSISServer.disabled = !this.checked;
|
||||||
APRSISPort.disabled = !this.checked;
|
APRSISPort.disabled = !this.checked;
|
||||||
APRSISPasscode.disabled = !this.checked;
|
APRSISPasscode.disabled = !this.checked;
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public:
|
|||||||
String filter;
|
String filter;
|
||||||
bool messagesToRF;
|
bool messagesToRF;
|
||||||
bool objectsToRF;
|
bool objectsToRF;
|
||||||
|
bool is2Metadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DIGI {
|
class DIGI {
|
||||||
|
|||||||
+17
-1
@@ -152,6 +152,18 @@ namespace APRS_IS_Utils {
|
|||||||
return packetToUpload;
|
return packetToUpload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String buildIS2Meta() {
|
||||||
|
static String fixedTail; // rx_modem + rx_bitrate + rx_frequency: RX config doesn't change at runtime
|
||||||
|
if (fixedTail == "") {
|
||||||
|
// LoRa bit rate = SF * (BW / 2^SF) * 4/CR (CR = denominator: 5..8)
|
||||||
|
uint32_t bitrate = (uint32_t)(Config.loramodule.rxSpreadingFactor
|
||||||
|
* ((float)Config.loramodule.rxSignalBandwidth / (1 << Config.loramodule.rxSpreadingFactor))
|
||||||
|
* (4.0 / Config.loramodule.rxCodingRate4));
|
||||||
|
fixedTail = " rx_modem=2 rx_bitrate=" + String(bitrate) + " rx_frequency=" + String(Config.loramodule.rxFreq);
|
||||||
|
}
|
||||||
|
return "#is2-meta rx_rssi_dbm=" + String(lastAprsPacket.rssi) + " rx_snr_db=" + String(lastAprsPacket.snr, 1) + fixedTail;
|
||||||
|
}
|
||||||
|
|
||||||
bool processReceivedLoRaMessage(const String& sender, const String& packet) {
|
bool processReceivedLoRaMessage(const String& sender, const String& packet) {
|
||||||
String receivedMessage;
|
String receivedMessage;
|
||||||
int leftCurlyBraceIndex = packet.indexOf("{");
|
int leftCurlyBraceIndex = packet.indexOf("{");
|
||||||
@@ -202,7 +214,11 @@ namespace APRS_IS_Utils {
|
|||||||
A7670_Utils::uploadToAPRSIS(aprsPacketToUpload);
|
A7670_Utils::uploadToAPRSIS(aprsPacketToUpload);
|
||||||
stationBeacon = false;
|
stationBeacon = false;
|
||||||
#else
|
#else
|
||||||
upload(aprsPacketToUpload);
|
if (Config.aprs_is.is2Metadata && aprsPacketToUpload != "") {
|
||||||
|
upload(buildIS2Meta() + "\r\n" + aprsPacketToUpload); // IS2PLAIN: meta line right before the packet, same write
|
||||||
|
} else {
|
||||||
|
upload(aprsPacketToUpload);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
Utils::println("(Uploaded to APRS-IS)");
|
Utils::println("(Uploaded to APRS-IS)");
|
||||||
displayShow(firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, seventhLine, 0);
|
displayShow(firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, seventhLine, 0);
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ bool Configuration::writeFile() {
|
|||||||
data["aprs_is"]["filter"] = aprs_is.filter;
|
data["aprs_is"]["filter"] = aprs_is.filter;
|
||||||
data["aprs_is"]["messagesToRF"] = aprs_is.messagesToRF;
|
data["aprs_is"]["messagesToRF"] = aprs_is.messagesToRF;
|
||||||
data["aprs_is"]["objectsToRF"] = aprs_is.objectsToRF;
|
data["aprs_is"]["objectsToRF"] = aprs_is.objectsToRF;
|
||||||
|
data["aprs_is"]["is2Metadata"] = aprs_is.is2Metadata;
|
||||||
|
|
||||||
data["beacon"]["comment"] = beacon.comment;
|
data["beacon"]["comment"] = beacon.comment;
|
||||||
data["beacon"]["rfCommentEveryXBeacons"] = beacon.rfCommentEveryXBeacons;
|
data["beacon"]["rfCommentEveryXBeacons"] = beacon.rfCommentEveryXBeacons;
|
||||||
@@ -238,7 +239,8 @@ bool Configuration::readFile() {
|
|||||||
data["aprs_is"]["port"].isNull() ||
|
data["aprs_is"]["port"].isNull() ||
|
||||||
data["aprs_is"]["filter"].isNull() ||
|
data["aprs_is"]["filter"].isNull() ||
|
||||||
data["aprs_is"]["messagesToRF"].isNull() ||
|
data["aprs_is"]["messagesToRF"].isNull() ||
|
||||||
data["aprs_is"]["objectsToRF"].isNull()) needsRewrite = true;
|
data["aprs_is"]["objectsToRF"].isNull() ||
|
||||||
|
data["aprs_is"]["is2Metadata"].isNull()) needsRewrite = true;
|
||||||
aprs_is.active = data["aprs_is"]["active"] | false;
|
aprs_is.active = data["aprs_is"]["active"] | false;
|
||||||
aprs_is.passcode = data["aprs_is"]["passcode"] | "XYZWV";
|
aprs_is.passcode = data["aprs_is"]["passcode"] | "XYZWV";
|
||||||
aprs_is.server = data["aprs_is"]["server"] | "rotate.aprs2.net";
|
aprs_is.server = data["aprs_is"]["server"] | "rotate.aprs2.net";
|
||||||
@@ -246,6 +248,7 @@ bool Configuration::readFile() {
|
|||||||
aprs_is.filter = data["aprs_is"]["filter"] | "m/10";
|
aprs_is.filter = data["aprs_is"]["filter"] | "m/10";
|
||||||
aprs_is.messagesToRF = data["aprs_is"]["messagesToRF"] | false;
|
aprs_is.messagesToRF = data["aprs_is"]["messagesToRF"] | false;
|
||||||
aprs_is.objectsToRF = data["aprs_is"]["objectsToRF"] | false;
|
aprs_is.objectsToRF = data["aprs_is"]["objectsToRF"] | false;
|
||||||
|
aprs_is.is2Metadata = data["aprs_is"]["is2Metadata"] | false;
|
||||||
|
|
||||||
if (data["beacon"]["latitude"].isNull() ||
|
if (data["beacon"]["latitude"].isNull() ||
|
||||||
data["beacon"]["longitude"].isNull() ||
|
data["beacon"]["longitude"].isNull() ||
|
||||||
@@ -473,6 +476,7 @@ void Configuration::setDefaultValues() {
|
|||||||
aprs_is.filter = "m/10";
|
aprs_is.filter = "m/10";
|
||||||
aprs_is.messagesToRF = false;
|
aprs_is.messagesToRF = false;
|
||||||
aprs_is.objectsToRF = false;
|
aprs_is.objectsToRF = false;
|
||||||
|
aprs_is.is2Metadata = false;
|
||||||
|
|
||||||
beacon.comment = "LoRa APRS";
|
beacon.comment = "LoRa APRS";
|
||||||
beacon.rfCommentEveryXBeacons = 1;
|
beacon.rfCommentEveryXBeacons = 1;
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ namespace WEB_Utils {
|
|||||||
if (Config.aprs_is.active) {
|
if (Config.aprs_is.active) {
|
||||||
Config.aprs_is.messagesToRF = request->hasParam("aprs_is.messagesToRF", true);
|
Config.aprs_is.messagesToRF = request->hasParam("aprs_is.messagesToRF", true);
|
||||||
Config.aprs_is.objectsToRF = request->hasParam("aprs_is.objectsToRF", true);
|
Config.aprs_is.objectsToRF = request->hasParam("aprs_is.objectsToRF", true);
|
||||||
|
Config.aprs_is.is2Metadata = request->hasParam("aprs_is.is2Metadata", true);
|
||||||
Config.aprs_is.server = getParamStringSafe("aprs_is.server", Config.aprs_is.server);
|
Config.aprs_is.server = getParamStringSafe("aprs_is.server", Config.aprs_is.server);
|
||||||
Config.aprs_is.passcode = getParamStringSafe("aprs_is.passcode", Config.aprs_is.passcode);
|
Config.aprs_is.passcode = getParamStringSafe("aprs_is.passcode", Config.aprs_is.passcode);
|
||||||
Config.aprs_is.port = getParamIntSafe("aprs_is.port", Config.aprs_is.port);
|
Config.aprs_is.port = getParamIntSafe("aprs_is.port", Config.aprs_is.port);
|
||||||
|
|||||||
Reference in new issue
Block a user