diff --git a/include/configuration.h b/include/configuration.h index b59a713..f4a6dac 100644 --- a/include/configuration.h +++ b/include/configuration.h @@ -170,6 +170,7 @@ public: class Configuration { public: String callsign; + String tacticalCallsign; int rememberStationTime; bool backupDigiMode; bool rebootMode; diff --git a/src/configuration.cpp b/src/configuration.cpp index 4d2e0c2..6523dca 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -51,8 +51,9 @@ bool Configuration::writeFile() { data["wifi"]["autoAP"]["timeout"] = wifiAutoAP.timeout; callsign.trim(); - callsign.toUpperCase(); data["callsign"] = callsign; + tacticalCallsign.trim(); + data["tacticalCallsign"] = tacticalCallsign; data["aprs_is"]["active"] = aprs_is.active; data["aprs_is"]["passcode"] = aprs_is.passcode; @@ -220,6 +221,8 @@ bool Configuration::readFile() { if (!data.containsKey("callsign")) needsRewrite = true; callsign = data["callsign"] | "NOCALL-10"; + if (!data.containsKey("tacticalCallsign")) needsRewrite = true; + tacticalCallsign = data["tacticalCallsign"] | ""; if (!data["aprs_is"].containsKey("active") || !data["aprs_is"].containsKey("passcode") || @@ -447,6 +450,7 @@ void Configuration::setDefaultValues() { wifiAutoAP.timeout = 10; callsign = "N0CALL-10"; + tacticalCallsign = ""; aprs_is.active = false; aprs_is.passcode = "XYZVW"; diff --git a/src/gps_utils.cpp b/src/gps_utils.cpp index 819cbfa..c0f04e1 100644 --- a/src/gps_utils.cpp +++ b/src/gps_utils.cpp @@ -44,18 +44,30 @@ namespace GPS_Utils { } void generateBeacons() { - if (Config.callsign.indexOf("NOCALL-10") != 0 && !Utils::checkValidCallsign(Config.callsign)) { - displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000); - Config.loramodule.txActive = false; - Config.aprs_is.messagesToRF = false; - Config.aprs_is.objectsToRF = false; + 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); + + if (Config.callsign.indexOf("NOCALL-10") != 0) { + if (!Utils::checkValidCallsign(Config.callsign)) { + displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000); + Config.loramodule.txActive = false; + Config.aprs_is.messagesToRF = false; + Config.aprs_is.objectsToRF = false; + Config.beacon.sendViaRF = false; + Config.digi.mode = 0; + Config.backupDigiMode = false; + } else if (Utils::checkValidCallsign(Config.callsign) && Config.tacticalCallsign != "") { + beaconPacket = APRSPacketLib::generateBasePacket(Config.tacticalCallsign, "APLRG1", Config.beacon.path); + Config.beacon.comment = Config.callsign + " " + Config.beacon.comment; + Config.aprs_is.active = false; + Config.beacon.sendViaAPRSIS = false; + Config.backupDigiMode = false; + } + } else { + Config.beacon.sendViaAPRSIS = false; Config.beacon.sendViaRF = false; - Config.digi.mode = 0; - Config.backupDigiMode = false; } - 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); - + iGateBeaconPacket = beaconPacket; iGateBeaconPacket += ",qAC:="; iGateBeaconPacket += Config.beacon.overlay;