diff --git a/common_settings.ini b/common_settings.ini index b17cecd..83724cf 100644 --- a/common_settings.ini +++ b/common_settings.ini @@ -37,7 +37,7 @@ lib_deps = ESP32Async/AsyncTCP @ 3.4.10 ESP32Async/ESPAsyncWebServer @ 3.11.1 mikalhart/TinyGPSPlus @ 1.0.3 - richonguzman/APRSPacketLib @ 1.0.7 + richonguzman/APRSPacketLib @ 1.0.8 display_libs = adafruit/Adafruit GFX Library @ 1.12.6 adafruit/Adafruit SSD1306 @ 2.5.17 diff --git a/include/gps_utils.h b/include/gps_utils.h index 25d7edf..a948896 100644 --- a/include/gps_utils.h +++ b/include/gps_utils.h @@ -24,7 +24,6 @@ namespace GPS_Utils { - String getiGateLoRaBeaconPacket(); void generateBeacons(); String buildDistanceAndComment(float latitude, float longitude, const String& comment); diff --git a/src/aprs_is_utils.cpp b/src/aprs_is_utils.cpp index 4db7cb3..463e21e 100644 --- a/src/aprs_is_utils.cpp +++ b/src/aprs_is_utils.cpp @@ -275,7 +275,7 @@ namespace APRS_IS_Utils { void processAckMessage(const String& sender, const String& message) { String ackPacket = Config.callsign; - ackPacket += ">APLRG1,TCPIP,qAC::"; + ackPacket += ">APLRG1,TCPIP*::"; String senderCallsign = sender; for (int i = sender.length(); i < 9; i++) { diff --git a/src/gps_utils.cpp b/src/gps_utils.cpp index 441ee79..8360f70 100644 --- a/src/gps_utils.cpp +++ b/src/gps_utils.cpp @@ -115,13 +115,8 @@ namespace GPS_Utils { } #endif - String getiGateLoRaBeaconPacket() { - return iGateLoRaBeaconPacket; - } - void generateBeacons() { - String beaconPacket = APRSPacketLib::generateBasePacket(Config.callsign, "APLRG1", Config.beacon.path); - String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(Config.beacon.latitude, Config.beacon.longitude, 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel); + String beaconCallsign = Config.callsign; if (Config.callsign.indexOf("NOCALL-10") != 0) { if (!stationCallsignIsValid) { @@ -133,7 +128,7 @@ namespace GPS_Utils { Config.digi.mode = 0; Config.digi.backupDigiMode = false; } else if (stationCallsignIsValid && Config.tacticalCallsign != "") { - beaconPacket = APRSPacketLib::generateBasePacket(Config.tacticalCallsign, "APLRG1", Config.beacon.path); + beaconCallsign = Config.tacticalCallsign; Config.aprs_is.active = false; Config.beacon.sendViaAPRSIS = false; Config.digi.backupDigiMode = false; @@ -143,15 +138,10 @@ namespace GPS_Utils { Config.beacon.sendViaRF = false; } - iGateAPRSISBeaconPacket = beaconPacket; - iGateAPRSISBeaconPacket += ",qAC:="; - iGateAPRSISBeaconPacket += Config.beacon.overlay; - iGateAPRSISBeaconPacket += encodedGPS; + String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(Config.beacon.latitude, Config.beacon.longitude, 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel); - iGateLoRaBeaconPacket = beaconPacket; - iGateLoRaBeaconPacket += ":="; - iGateLoRaBeaconPacket += Config.beacon.overlay; - iGateLoRaBeaconPacket += encodedGPS; + iGateLoRaBeaconPacket = APRSPacketLib::generateBase91GPSBeaconPacket(beaconCallsign, "APLRG1", Config.beacon.path, Config.beacon.overlay, encodedGPS); + iGateAPRSISBeaconPacket = APRSPacketLib::generateAPRSISPacket(iGateLoRaBeaconPacket); } double calculateDistanceTo(double latitude, double longitude) { diff --git a/src/query_utils.cpp b/src/query_utils.cpp index 75f0afc..1383677 100644 --- a/src/query_utils.cpp +++ b/src/query_utils.cpp @@ -142,7 +142,7 @@ namespace QUERY_Utils { String queryAnswer = (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign); queryAnswer += ">APLRG1"; if (queryFromAPRSIS) { - queryAnswer += ",TCPIP,qAC"; + queryAnswer += ",TCPIP*"; } else { if (!thirdParty) queryAnswer += ",RFONLY"; if (Config.beacon.path != "") { diff --git a/src/telemetry_utils.cpp b/src/telemetry_utils.cpp index 8335efc..6a65a85 100644 --- a/src/telemetry_utils.cpp +++ b/src/telemetry_utils.cpp @@ -71,8 +71,9 @@ namespace TELEMETRY_Utils { void sendBaseTelemetryPacket(const String& prefix, const std::vector& values) { String packet = prefix + joinWithCommas(values); String currentCallsign = (Config.tacticalCallsign != "") ? Config.tacticalCallsign : Config.callsign; + String baseRFTelemetryPacket = APRSPacketLib::generateMessagePacket(currentCallsign, "APLRG1", Config.beacon.path, currentCallsign, packet); if (Config.beacon.sendViaAPRSIS) { - String baseAPRSISTelemetryPacket = APRSPacketLib::generateMessagePacket(currentCallsign, "APLRG1", "TCPIP,qAC", currentCallsign, packet); + String baseAPRSISTelemetryPacket = APRSPacketLib::generateAPRSISPacket(baseRFTelemetryPacket); #ifdef HAS_A7670 A7670_Utils::uploadToAPRSIS(baseAPRSISTelemetryPacket); #else @@ -80,7 +81,6 @@ namespace TELEMETRY_Utils { #endif delay(300); } else if (Config.beacon.sendViaRF) { - String baseRFTelemetryPacket = APRSPacketLib::generateMessagePacket(currentCallsign, "APLRG1", Config.beacon.path, currentCallsign, packet); LoRa_Utils::sendNewPacket(baseRFTelemetryPacket); delay(3000); } diff --git a/src/utils.cpp b/src/utils.cpp index 89e01e3..4c74142 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -69,8 +69,6 @@ uint32_t lastBeaconTx = 0; uint32_t lastScreenOn = millis(); uint32_t lastStatusTx = 0; bool stationCallsignIsValid = false; -String beaconPacket; -String secondaryBeaconPacket; uint32_t rfBeaconCounter = 0; @@ -85,13 +83,12 @@ namespace Utils { return; } - String statusPacket = APRSPacketLib::generateBasePacket(Config.callsign, "APLRG1", Config.beacon.path); - statusPacket += sendOverAPRSIS ? ",qAC:>" : ":>"; - statusPacket += Config.beacon.statusPacket; + String statusPacket = APRSPacketLib::generateStatusPacket(Config.callsign, "APLRG1", Config.beacon.path, Config.beacon.statusPacket); if (sendOverAPRSIS) { - APRS_IS_Utils::upload(statusPacket); - SYSLOG_Utils::logAPRSISTx(statusPacket); + String aprsisStatusPacket = APRSPacketLib::generateAPRSISPacket(statusPacket); + APRS_IS_Utils::upload(aprsisStatusPacket); + SYSLOG_Utils::logAPRSISTx(aprsisStatusPacket); } else { STATION_Utils::addToOutputPacketBuffer(statusPacket, true); // treated also as beacon on Tx Freq } @@ -188,49 +185,42 @@ namespace Utils { showActiveStations(); - beaconPacket = iGateAPRSISBeaconPacket; - secondaryBeaconPacket = iGateLoRaBeaconPacket; + String aprsisBeaconPacket = iGateAPRSISBeaconPacket; + String loraBeaconPacket = iGateLoRaBeaconPacket; #ifdef HAS_GPS if (Config.beacon.gpsActive && Config.digi.ecoMode == 0) { GPS_Utils::getData(); if (gps.location.isUpdated() && gps.location.lat() != 0.0 && gps.location.lng() != 0.0) { - String basePacket = APRSPacketLib::generateBasePacket(Config.callsign, "APLRG1", Config.beacon.path); - String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(gps.location.lat(),gps.location.lng(), 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel); + String beaconCallsign = (stationCallsignIsValid && Config.tacticalCallsign != "") ? Config.tacticalCallsign : Config.callsign; + String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(gps.location.lat(),gps.location.lng(), 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel); - beaconPacket = basePacket; - beaconPacket += ",qAC:="; - beaconPacket += Config.beacon.overlay; - beaconPacket += encodedGPS; - - secondaryBeaconPacket = basePacket; - secondaryBeaconPacket += ":="; - secondaryBeaconPacket += Config.beacon.overlay; - secondaryBeaconPacket += encodedGPS; + loraBeaconPacket = APRSPacketLib::generateBase91GPSBeaconPacket(beaconCallsign, "APLRG1", Config.beacon.path, Config.beacon.overlay, encodedGPS); + aprsisBeaconPacket = APRSPacketLib::generateAPRSISPacket(loraBeaconPacket); } } #endif if (Config.wxsensor.active) { String sensorData = (wxModuleType == 0) ? ".../...g...t..." : WX_Utils::readDataSensor(); - beaconPacket += sensorData; - secondaryBeaconPacket += sensorData; + aprsisBeaconPacket += sensorData; + loraBeaconPacket += sensorData; } - beaconPacket += Config.beacon.comment; // APRS-IS beacon always carries the comment + aprsisBeaconPacket += Config.beacon.comment; // APRS-IS beacon always carries the comment int commentEveryX = max(1, Config.beacon.rfCommentEveryXBeacons); // safety: 0 or negative behaves as "every beacon" - if (rfBeaconCounter % commentEveryX == 0) secondaryBeaconPacket += Config.beacon.comment; + if (rfBeaconCounter % commentEveryX == 0) loraBeaconPacket += Config.beacon.comment; if (stationCallsignIsValid && Config.tacticalCallsign != "") { - beaconPacket += " de "; - beaconPacket += Config.callsign; - secondaryBeaconPacket += " de "; - secondaryBeaconPacket += Config.callsign; + aprsisBeaconPacket += " de "; + aprsisBeaconPacket += Config.callsign; + loraBeaconPacket += " de "; + loraBeaconPacket += Config.callsign; } #if defined(BATTERY_PIN) || defined(HAS_AXP192) || defined(HAS_AXP2101) if (Config.battery.sendInternalVoltage || Config.battery.monitorInternalVoltage) { float internalVoltage = BATTERY_Utils::checkInternalVoltage(); if (Config.battery.monitorInternalVoltage && internalVoltage < Config.battery.internalSleepVoltage) { - beaconPacket += " **IntBatWarning:SLEEP**"; - secondaryBeaconPacket += " **IntBatWarning:SLEEP**"; + aprsisBeaconPacket += " **IntBatWarning:SLEEP**"; + loraBeaconPacket += " **IntBatWarning:SLEEP**"; shouldSleepLowVoltage = true; } @@ -243,10 +233,10 @@ namespace Utils { sixthLine = sixthLineBuffer; if (!Config.battery.sendVoltageAsTelemetry) { - beaconPacket += " Batt="; - beaconPacket += internalVoltageInfo; - secondaryBeaconPacket += " Batt="; - secondaryBeaconPacket += internalVoltageInfo; + aprsisBeaconPacket += " Batt="; + aprsisBeaconPacket += internalVoltageInfo; + loraBeaconPacket += " Batt="; + loraBeaconPacket += internalVoltageInfo; } } } @@ -256,8 +246,8 @@ namespace Utils { if (Config.battery.sendExternalVoltage || Config.battery.monitorExternalVoltage) { float externalVoltage = BATTERY_Utils::checkExternalVoltage(); if (Config.battery.monitorExternalVoltage && externalVoltage < Config.battery.externalSleepVoltage) { - beaconPacket += " **ExtBatWarning:SLEEP**"; - secondaryBeaconPacket += " **ExtBatWarning:SLEEP**"; + aprsisBeaconPacket += " **ExtBatWarning:SLEEP**"; + loraBeaconPacket += " **ExtBatWarning:SLEEP**"; shouldSleepLowVoltage = true; } @@ -270,10 +260,10 @@ namespace Utils { sixthLine = sixthLineBuffer; if (!Config.battery.sendVoltageAsTelemetry) { - beaconPacket += " Ext="; - beaconPacket += externalVoltageInfo; - secondaryBeaconPacket += " Ext="; - secondaryBeaconPacket += externalVoltageInfo; + aprsisBeaconPacket += " Ext="; + aprsisBeaconPacket += externalVoltageInfo; + loraBeaconPacket += " Ext="; + loraBeaconPacket += externalVoltageInfo; } } } @@ -281,8 +271,8 @@ namespace Utils { if (Config.battery.sendVoltageAsTelemetry && !Config.wxsensor.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)){ String encodedTelemetry = TELEMETRY_Utils::generateEncodedTelemetry(); - beaconPacket += encodedTelemetry; - secondaryBeaconPacket += encodedTelemetry; + aprsisBeaconPacket += encodedTelemetry; + loraBeaconPacket += encodedTelemetry; } if (Config.beacon.sendViaAPRSIS && Config.aprs_is.active && passcodeValid && !backupDigiMode) { @@ -290,18 +280,18 @@ namespace Utils { displayShow(firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, "SENDING IGATE BEACON", 0); seventhLine = " listening..."; #ifdef HAS_A7670 - A7670_Utils::uploadToAPRSIS(beaconPacket); + A7670_Utils::uploadToAPRSIS(aprsisBeaconPacket); #else - APRS_IS_Utils::upload(beaconPacket); + APRS_IS_Utils::upload(aprsisBeaconPacket); #endif - if (Config.syslog.logBeaconOverTCPIP) SYSLOG_Utils::logAPRSISTx(beaconPacket); + if (Config.syslog.logBeaconOverTCPIP) SYSLOG_Utils::logAPRSISTx(aprsisBeaconPacket); } if (Config.beacon.sendViaRF || backupDigiMode) { Utils::println("-- Sending Beacon to RF --"); displayShow(firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, "SENDING DIGI BEACON", 0); seventhLine = " listening..."; - STATION_Utils::addToOutputPacketBuffer(secondaryBeaconPacket, true); + STATION_Utils::addToOutputPacketBuffer(loraBeaconPacket, true); rfBeaconCounter++; }