Digirepeater Mode Added
This commit is contained in:
parent
0c4d748737
commit
82862b184b
|
|
@ -51,6 +51,7 @@ ____________________________________________________
|
|||
____________________________________________________
|
||||
## Timeline (Versions):
|
||||
|
||||
- 2023.11.07 DigiRepeater Mode added in Emergency Menu.
|
||||
- 2023.10.23 COMPLETE New Menu for Keyboard add-on.
|
||||
- 2023.10.22 Added Keyboard Support over I2C (CARDKB from https://m5stack.com)
|
||||
- 2023.10.07 Screen Brightness control added.
|
||||
|
|
|
|||
|
|
@ -21,18 +21,23 @@ namespace APRSPacketLib {
|
|||
packet.path.replace("WIDE1-" + hop , callsign + "*,WIDE1-" + String(hop.toInt()-1));
|
||||
}
|
||||
String repeatedPacket = packet.sender + ">" + packet.tocall + "," + packet.path;
|
||||
if (packet.type == "gps") {
|
||||
repeatedPacket += ":!";
|
||||
} else if (packet.type == "status") {
|
||||
repeatedPacket += ":>";
|
||||
} else if (packet.type == "telemetry") {
|
||||
repeatedPacket += ":T#";
|
||||
} else if (packet.type == "message") {
|
||||
for(int i = packet.addressee.length(); i < 9; i++) {
|
||||
packet.addressee += ' ';
|
||||
}
|
||||
repeatedPacket += "::" + packet.addressee + ":";
|
||||
}
|
||||
switch (packet.type) {
|
||||
case 0: // gps
|
||||
repeatedPacket += ":!";
|
||||
break;
|
||||
case 1: // message
|
||||
for(int i = packet.addressee.length(); i < 9; i++) {
|
||||
packet.addressee += ' ';
|
||||
}
|
||||
repeatedPacket += "::" + packet.addressee + ":";
|
||||
break;
|
||||
case 2: // status
|
||||
repeatedPacket += ":>";
|
||||
break;
|
||||
case 3: // telemetry
|
||||
repeatedPacket += ":T#";
|
||||
break;
|
||||
}
|
||||
return repeatedPacket + packet.message;
|
||||
} else {
|
||||
return "X";
|
||||
|
|
@ -121,9 +126,7 @@ namespace APRSPacketLib {
|
|||
return packet;
|
||||
}
|
||||
|
||||
float decodeEncodedLatitude(String receivedPacket) {
|
||||
String packet = receivedPacket.substring(receivedPacket.indexOf(":!")+3);
|
||||
String encodedLatitude = packet.substring(0,4);
|
||||
float decodeEncodedLatitude(String encodedLatitude) {
|
||||
int Y1 = int(encodedLatitude[0]);
|
||||
int Y2 = int(encodedLatitude[1]);
|
||||
int Y3 = int(encodedLatitude[2]);
|
||||
|
|
@ -131,24 +134,15 @@ namespace APRSPacketLib {
|
|||
return (90.0 - ((((Y1-33) * pow(91,3)) + ((Y2-33) * pow(91,2)) + ((Y3-33) * 91) + Y4-33) / 380926.0));
|
||||
}
|
||||
|
||||
float decodeEncodedLongitude(String receivedPacket) {
|
||||
String packet = receivedPacket.substring(receivedPacket.indexOf(":!")+3);
|
||||
String encodedLongtitude = packet.substring(4,8);
|
||||
int X1 = int(encodedLongtitude[0]);
|
||||
int X2 = int(encodedLongtitude[1]);
|
||||
int X3 = int(encodedLongtitude[2]);
|
||||
int X4 = int(encodedLongtitude[3]);
|
||||
float decodeEncodedLongitude(String encodedLongitude) {
|
||||
int X1 = int(encodedLongitude[0]);
|
||||
int X2 = int(encodedLongitude[1]);
|
||||
int X3 = int(encodedLongitude[2]);
|
||||
int X4 = int(encodedLongitude[3]);
|
||||
return (-180.0 + ((((X1-33) * pow(91,3)) + ((X2-33) * pow(91,2)) + ((X3-33) * 91) + X4-33) / 190463.0));
|
||||
}
|
||||
|
||||
float decodeLatitude(String receivedPacket) {
|
||||
String gpsData;
|
||||
if (receivedPacket.indexOf(":!") > 10) {
|
||||
gpsData = receivedPacket.substring(receivedPacket.indexOf(":!")+2);
|
||||
} else if (receivedPacket.indexOf(":=") > 10) {
|
||||
gpsData = receivedPacket.substring(receivedPacket.indexOf(":=")+2);
|
||||
}
|
||||
String Latitude = gpsData.substring(0,8);
|
||||
float decodeLatitude(String Latitude) {
|
||||
String firstLatPart = Latitude.substring(0,2);
|
||||
String secondLatPart = Latitude.substring(2,4);
|
||||
String thirdLatPart = Latitude.substring(Latitude.indexOf(".")+1,Latitude.indexOf(".")+3);
|
||||
|
|
@ -161,14 +155,7 @@ namespace APRSPacketLib {
|
|||
}
|
||||
}
|
||||
|
||||
float decodeLongitude(String receivedPacket) {
|
||||
String gpsData;
|
||||
if (receivedPacket.indexOf(":!") > 10) {
|
||||
gpsData = receivedPacket.substring(receivedPacket.indexOf(":!")+2);
|
||||
} else if (receivedPacket.indexOf(":=") > 10) {
|
||||
gpsData = receivedPacket.substring(receivedPacket.indexOf(":=")+2);
|
||||
}
|
||||
String Longitude = gpsData.substring(9,18);
|
||||
float decodeLongitude(String Longitude) {
|
||||
String firstLngPart = Longitude.substring(0,3);
|
||||
String secondLngPart = Longitude.substring(3,5);
|
||||
String thirdLngPart = Longitude.substring(Longitude.indexOf(".")+1,Longitude.indexOf(".")+3);
|
||||
|
|
@ -182,6 +169,11 @@ namespace APRSPacketLib {
|
|||
}
|
||||
|
||||
APRSPacket processReceivedPacket(String receivedPacket) {
|
||||
/* Packet type:
|
||||
gps = 0
|
||||
message = 1
|
||||
status = 2
|
||||
telemetry = 3 */
|
||||
APRSPacket aprsPacket;
|
||||
aprsPacket.sender = receivedPacket.substring(0,receivedPacket.indexOf(">"));
|
||||
String temp00 = receivedPacket.substring(receivedPacket.indexOf(">")+1,receivedPacket.indexOf(":"));
|
||||
|
|
@ -192,8 +184,26 @@ namespace APRSPacketLib {
|
|||
aprsPacket.tocall = temp00;
|
||||
aprsPacket.path = "";
|
||||
}
|
||||
if (receivedPacket.indexOf("::") > 10) {
|
||||
aprsPacket.type = "message";
|
||||
if (receivedPacket.indexOf(":!") > 10 || receivedPacket.indexOf(":=") > 10 ) {
|
||||
aprsPacket.type = 0;
|
||||
aprsPacket.addressee = "";
|
||||
String gpsChar = "";
|
||||
if (receivedPacket.indexOf(":!") > 10) {
|
||||
gpsChar = ":!";
|
||||
} else {
|
||||
gpsChar = ":=";
|
||||
}
|
||||
int encodedBytePosition = receivedPacket.indexOf(gpsChar) + 14;
|
||||
aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(gpsChar)+2);
|
||||
if (String(receivedPacket[encodedBytePosition]) == "G" || String(receivedPacket[encodedBytePosition]) == "Q" || String(receivedPacket[encodedBytePosition]) == "[" || String(receivedPacket[encodedBytePosition]) == "H") {
|
||||
aprsPacket.latitude = decodeEncodedLatitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+3, receivedPacket.indexOf(gpsChar)+7));
|
||||
aprsPacket.longitude = decodeEncodedLongitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+7, receivedPacket.indexOf(gpsChar)+11));
|
||||
} else {
|
||||
aprsPacket.latitude = decodeLatitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+2,receivedPacket.indexOf(gpsChar)+10));
|
||||
aprsPacket.longitude = decodeLongitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+11,receivedPacket.indexOf(gpsChar)+20));
|
||||
}
|
||||
} else if (receivedPacket.indexOf("::") > 10) {
|
||||
aprsPacket.type = 1;
|
||||
String temp1 = receivedPacket.substring(receivedPacket.indexOf("::")+2);
|
||||
String temp2 = temp1.substring(0,temp1.indexOf(":"));
|
||||
temp2.trim();
|
||||
|
|
@ -201,41 +211,14 @@ namespace APRSPacketLib {
|
|||
aprsPacket.message = temp1.substring(temp1.indexOf(":")+1);
|
||||
aprsPacket.latitude = 0;
|
||||
aprsPacket.longitude = 0;
|
||||
} else if (receivedPacket.indexOf(":!") > 10 || receivedPacket.indexOf(":=") > 10 ) {
|
||||
aprsPacket.type = "gps";
|
||||
aprsPacket.addressee = "";
|
||||
int encodedBytePosition = 0;
|
||||
if (receivedPacket.indexOf(":!") > 10) {
|
||||
encodedBytePosition = receivedPacket.indexOf(":!") + 14;
|
||||
aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":!")+2);
|
||||
}
|
||||
if (receivedPacket.indexOf(":=") > 10) {
|
||||
encodedBytePosition = receivedPacket.indexOf(":=") + 14;
|
||||
aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":=")+2);
|
||||
}
|
||||
if (encodedBytePosition != 0) {
|
||||
if (String(receivedPacket[encodedBytePosition]) == "G" || String(receivedPacket[encodedBytePosition]) == "Q" || String(receivedPacket[encodedBytePosition]) == "[" || String(receivedPacket[encodedBytePosition]) == "H") {
|
||||
aprsPacket.latitude = decodeEncodedLatitude(receivedPacket);
|
||||
aprsPacket.longitude = decodeEncodedLongitude(receivedPacket);
|
||||
} else {
|
||||
aprsPacket.latitude = decodeLatitude(receivedPacket);
|
||||
aprsPacket.longitude = decodeLongitude(receivedPacket);
|
||||
}
|
||||
//
|
||||
Serial.print(aprsPacket.sender);
|
||||
Serial.print(" GPS : ");
|
||||
Serial.print(aprsPacket.latitude); Serial.print(" N ");
|
||||
Serial.print(aprsPacket.longitude);Serial.println(" E");
|
||||
//
|
||||
}
|
||||
} else if (receivedPacket.indexOf(":>") > 10) {
|
||||
aprsPacket.type = "status";
|
||||
aprsPacket.type = 2;
|
||||
aprsPacket.addressee = "";
|
||||
aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":>")+2);
|
||||
aprsPacket.latitude = 0;
|
||||
aprsPacket.longitude = 0;
|
||||
} else if (receivedPacket.indexOf(":T#") >= 10 && receivedPacket.indexOf(":=/") == -1) {
|
||||
aprsPacket.type = "telemetry";
|
||||
aprsPacket.type = 3;
|
||||
aprsPacket.addressee = "";
|
||||
aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":T#")+3);
|
||||
aprsPacket.latitude = 0;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ struct APRSPacket {
|
|||
String path;
|
||||
String addressee;
|
||||
String message;
|
||||
String type;
|
||||
int type;
|
||||
float latitude;
|
||||
float longitude;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -82,7 +82,8 @@ uint32_t keyboardTime = millis();
|
|||
String messageCallsign = "";
|
||||
String messageText = "";
|
||||
|
||||
bool digirepeaterActive = false; // defaul = false (needs to be activated in the EMERGENCY of the Tracker MENU)
|
||||
bool digirepeaterActive = false;
|
||||
bool sosActive = false;
|
||||
|
||||
logging::Logger logger;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ extern int messagesIterator;
|
|||
extern bool messageLed;
|
||||
extern String messageCallsign;
|
||||
extern String messageText;
|
||||
extern bool digirepeaterActive;
|
||||
extern bool sosActive;
|
||||
|
||||
namespace KEYBOARD_Utils {
|
||||
|
||||
|
|
@ -218,12 +220,26 @@ namespace KEYBOARD_Utils {
|
|||
else if (menuDisplay == 6) {
|
||||
menuDisplay = 60;
|
||||
} else if (menuDisplay == 60) {
|
||||
show_display("EMERGENCY_", "Digirepeater still", "on development..", 2000); /////////////////////////
|
||||
if (digirepeaterActive) {
|
||||
show_display("EMERGENCY_", ""," DigiRepeater"," Status --> OFF","", 2000); /////////////////////////
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "%s", "DigiRepeater OFF");
|
||||
digirepeaterActive = false;
|
||||
} else {
|
||||
show_display("EMERGENCY_", ""," DigiRepeater"," Status --> ON","", 2000); /////////////////////////
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "%s", "DigiRepeater ON");
|
||||
digirepeaterActive = true;
|
||||
}
|
||||
} else if (menuDisplay == 61) {
|
||||
show_display("EMERGENCY_", "S.O.S. still", "on development..", 2000); /////////////////////////
|
||||
}
|
||||
|
||||
|
||||
if (sosActive) {
|
||||
show_display("EMERGENCY_", ""," S.O.S."," Status --> OFF","", 2000);
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "%s", "S.O.S Mode OFF");
|
||||
sosActive = false;
|
||||
} else {
|
||||
show_display("EMERGENCY_", ""," S.O.S."," Status --> ON","", 2000);
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "%s", "S.O.S Mode ON");
|
||||
sosActive = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void processPressedKey(char key) {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,10 @@ extern int lowBatteryPercent;
|
|||
extern bool keyDetected;
|
||||
extern String messageCallsign;
|
||||
extern String messageText;
|
||||
extern bool digirepeaterActive;
|
||||
extern bool sosActive;
|
||||
|
||||
String digi, sos;
|
||||
|
||||
namespace MENU_Utils {
|
||||
|
||||
|
|
@ -171,12 +175,32 @@ namespace MENU_Utils {
|
|||
break;
|
||||
|
||||
case 60: // 6. Emergency ---> Digirepeater
|
||||
show_display("EMERGENCY_", "", "> Digirepeater", " S.O.S.","",lastLine);
|
||||
if (digirepeaterActive) {
|
||||
digi = "ON";
|
||||
} else {
|
||||
digi = "OFF";
|
||||
}
|
||||
if (sosActive) {
|
||||
sos = "ON";
|
||||
} else {
|
||||
sos = "OFF";
|
||||
}
|
||||
show_display("EMERGENCY_", "", "> Digirepeater (" + digi + ")", " S.O.S. (" + sos + ")","",lastLine);
|
||||
break;
|
||||
case 61: // 6. Emergency ---> S.O.S.
|
||||
show_display("EMERGENCY_", "", " Digirepeater", "> S.O.S.","",lastLine);
|
||||
if (digirepeaterActive) {
|
||||
digi = "ON";
|
||||
} else {
|
||||
digi = "OFF";
|
||||
}
|
||||
if (sosActive) {
|
||||
sos = "ON";
|
||||
} else {
|
||||
sos = "OFF";
|
||||
}
|
||||
show_display("EMERGENCY_", "", " Digirepeater (" + digi + ")", "> S.O.S. (" + sos + ")","",lastLine);
|
||||
break;
|
||||
|
||||
|
||||
case 0: ///////////// MAIN MENU //////////////
|
||||
String hdopState, firstRowMainMenu, secondRowMainMenu, thirdRowMainMenu, fourthRowMainMenu, fifthRowMainMenu, sixthRowMainMenu;
|
||||
|
||||
|
|
|
|||
|
|
@ -170,74 +170,74 @@ namespace MSG_Utils {
|
|||
return;
|
||||
}
|
||||
if (packetReceived.substring(0,3) == "\x3c\xff\x01") { // its an APRS packet
|
||||
BLUETOOTH_Utils::sendPacket(packetReceived.substring(3));
|
||||
//Serial.println(packetReceived); // only for debug
|
||||
aprsPacket = APRSPacketLib::processReceivedPacket(packetReceived.substring(3));
|
||||
|
||||
if (digirepeaterActive) {
|
||||
Serial.print("Checking Packet before repeating ---> ");
|
||||
String digiRepeatedPacket = APRSPacketLib::generateDigiRepeatedPacket(aprsPacket, currentBeacon->callsign);
|
||||
if (digiRepeatedPacket == "X") {
|
||||
Serial.println("Packet from " + aprsPacket.sender + " won't be repeated (missing WIDE1-X)");
|
||||
} else {
|
||||
Serial.println(digiRepeatedPacket);
|
||||
}
|
||||
/// this is the place where the validated and reformated packet will be Tx through LoRa
|
||||
if (aprsPacket.sender!=currentBeacon->callsign) {
|
||||
BLUETOOTH_Utils::sendPacket(packetReceived.substring(3));
|
||||
|
||||
}
|
||||
if (digirepeaterActive) {
|
||||
String digiRepeatedPacket = APRSPacketLib::generateDigiRepeatedPacket(aprsPacket, currentBeacon->callsign);
|
||||
if (digiRepeatedPacket == "X") {
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_WARN, "Main", "%s", "Packet won't be Repeated (Missing WIDE1-X)");
|
||||
} else {
|
||||
delay(500);
|
||||
LoRa_Utils::sendNewPacket(digiRepeatedPacket);
|
||||
}
|
||||
}
|
||||
|
||||
if (aprsPacket.type=="message" && aprsPacket.sender!=currentBeacon->callsign && aprsPacket.addressee==currentBeacon->callsign) {
|
||||
if (aprsPacket.message.indexOf("{")>0) {
|
||||
String ackMessage = "ack" + aprsPacket.message.substring(aprsPacket.message.indexOf("{")+1);
|
||||
ackMessage.trim();
|
||||
delay(4000);
|
||||
sendMessage(aprsPacket.sender, ackMessage);
|
||||
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1, aprsPacket.message.indexOf("{"));
|
||||
} else {
|
||||
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1);
|
||||
}
|
||||
if (Config.notification.buzzerActive && Config.notification.messageRxBeep) {
|
||||
NOTIFICATION_Utils::messageBeep();
|
||||
}
|
||||
if (aprsPacket.message.indexOf("ping")==0 || aprsPacket.message.indexOf("Ping")==0 || aprsPacket.message.indexOf("PING")==0) {
|
||||
delay(4000);
|
||||
sendMessage(aprsPacket.sender, "pong, 73!");
|
||||
}
|
||||
if (aprsPacket.sender == "CD2RXU-15" && aprsPacket.message.indexOf("WX")==0) { // WX = WeatherReport
|
||||
Serial.println("Weather Report Received");
|
||||
String wxCleaning = aprsPacket.message.substring(aprsPacket.message.indexOf("WX ")+3);
|
||||
String place = wxCleaning.substring(0,wxCleaning.indexOf(","));
|
||||
String placeCleaning = wxCleaning.substring(wxCleaning.indexOf(",")+1);
|
||||
String summary = placeCleaning.substring(0,placeCleaning.indexOf(","));
|
||||
String sumCleaning = placeCleaning.substring(placeCleaning.indexOf(",")+2);
|
||||
String temperature = sumCleaning.substring(0,sumCleaning.indexOf("P"));
|
||||
String tempCleaning = sumCleaning.substring(sumCleaning.indexOf("P")+1);
|
||||
String pressure = tempCleaning.substring(0,tempCleaning.indexOf("H"));
|
||||
String presCleaning = tempCleaning.substring(tempCleaning.indexOf("H")+1);
|
||||
String humidity = presCleaning.substring(0,presCleaning.indexOf("W"));
|
||||
String humCleaning = presCleaning.substring(presCleaning.indexOf("W")+1);
|
||||
String windSpeed = humCleaning.substring(0,humCleaning.indexOf(","));
|
||||
String windCleaning = humCleaning.substring(humCleaning.indexOf(",")+1);
|
||||
String windDegrees = windCleaning.substring(windCleaning.indexOf(",")+1,windCleaning.indexOf("\n"));
|
||||
|
||||
String fifthLineWR = temperature + "C " + pressure + "hPa " + humidity +"%";
|
||||
String sixthLineWR = "(wind " + windSpeed + "m/s " + windDegrees + "deg)";
|
||||
show_display("<WEATHER>", "From --> " + aprsPacket.sender, place, summary, fifthLineWR, sixthLineWR);
|
||||
menuDisplay = 40;
|
||||
menuTime = millis();
|
||||
} else {
|
||||
show_display("< MSG Rx >", "From --> " + aprsPacket.sender, "", aprsPacket.message , 3000);
|
||||
if (aprsPacket.type==0) {
|
||||
lastHeardTracker = aprsPacket.sender;
|
||||
if (!Config.simplifiedTrackerMode) {
|
||||
saveNewMessage("APRS", aprsPacket.sender, aprsPacket.message);
|
||||
GPS_Utils::calculateDistanceCourse(aprsPacket.sender, aprsPacket.latitude, aprsPacket.longitude);
|
||||
if (Config.notification.buzzerActive && Config.notification.stationBeep && !digirepeaterActive) {
|
||||
NOTIFICATION_Utils::stationHeardBeep();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (aprsPacket.type == "gps") {
|
||||
lastHeardTracker = aprsPacket.sender;
|
||||
if (!Config.simplifiedTrackerMode) {
|
||||
GPS_Utils::calculateDistanceCourse(aprsPacket.sender, aprsPacket.latitude, aprsPacket.longitude);
|
||||
if (Config.notification.buzzerActive && Config.notification.stationBeep) {
|
||||
NOTIFICATION_Utils::stationHeardBeep();
|
||||
} else if (aprsPacket.type==1 && aprsPacket.addressee==currentBeacon->callsign) {
|
||||
if (aprsPacket.message.indexOf("{")>0) {
|
||||
String ackMessage = "ack" + aprsPacket.message.substring(aprsPacket.message.indexOf("{")+1);
|
||||
ackMessage.trim();
|
||||
delay(4000);
|
||||
sendMessage(aprsPacket.sender, ackMessage);
|
||||
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1, aprsPacket.message.indexOf("{"));
|
||||
} else {
|
||||
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1);
|
||||
}
|
||||
if (Config.notification.buzzerActive && Config.notification.messageRxBeep) {
|
||||
NOTIFICATION_Utils::messageBeep();
|
||||
}
|
||||
if (aprsPacket.message.indexOf("ping")==0 || aprsPacket.message.indexOf("Ping")==0 || aprsPacket.message.indexOf("PING")==0) {
|
||||
delay(4000);
|
||||
sendMessage(aprsPacket.sender, "pong, 73!");
|
||||
}
|
||||
if (aprsPacket.sender == "CD2RXU-15" && aprsPacket.message.indexOf("WX")==0) { // WX = WeatherReport
|
||||
Serial.println("Weather Report Received");
|
||||
String wxCleaning = aprsPacket.message.substring(aprsPacket.message.indexOf("WX ")+3);
|
||||
String place = wxCleaning.substring(0,wxCleaning.indexOf(","));
|
||||
String placeCleaning = wxCleaning.substring(wxCleaning.indexOf(",")+1);
|
||||
String summary = placeCleaning.substring(0,placeCleaning.indexOf(","));
|
||||
String sumCleaning = placeCleaning.substring(placeCleaning.indexOf(",")+2);
|
||||
String temperature = sumCleaning.substring(0,sumCleaning.indexOf("P"));
|
||||
String tempCleaning = sumCleaning.substring(sumCleaning.indexOf("P")+1);
|
||||
String pressure = tempCleaning.substring(0,tempCleaning.indexOf("H"));
|
||||
String presCleaning = tempCleaning.substring(tempCleaning.indexOf("H")+1);
|
||||
String humidity = presCleaning.substring(0,presCleaning.indexOf("W"));
|
||||
String humCleaning = presCleaning.substring(presCleaning.indexOf("W")+1);
|
||||
String windSpeed = humCleaning.substring(0,humCleaning.indexOf(","));
|
||||
String windCleaning = humCleaning.substring(humCleaning.indexOf(",")+1);
|
||||
String windDegrees = windCleaning.substring(windCleaning.indexOf(",")+1,windCleaning.indexOf("\n"));
|
||||
|
||||
String fifthLineWR = temperature + "C " + pressure + "hPa " + humidity +"%";
|
||||
String sixthLineWR = "(wind " + windSpeed + "m/s " + windDegrees + "deg)";
|
||||
show_display("<WEATHER>", "From --> " + aprsPacket.sender, place, summary, fifthLineWR, sixthLineWR);
|
||||
menuDisplay = 40;
|
||||
menuTime = millis();
|
||||
} else {
|
||||
show_display("< MSG Rx >", "From --> " + aprsPacket.sender, "", aprsPacket.message , 3000);
|
||||
if (!Config.simplifiedTrackerMode) {
|
||||
saveNewMessage("APRS", aprsPacket.sender, aprsPacket.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ int startUpSoundDuration[] = {100, 100, 100, 200};
|
|||
//int shutDownSoundDuration[] = {60, 60, 200};
|
||||
|
||||
extern Configuration Config;
|
||||
extern bool digirepeaterActive;
|
||||
|
||||
namespace NOTIFICATION_Utils {
|
||||
|
||||
|
|
@ -27,6 +28,9 @@ namespace NOTIFICATION_Utils {
|
|||
void beaconTxBeep() {
|
||||
digitalWrite(Config.notification.buzzerPinVcc, HIGH);
|
||||
playTone(1320,100);
|
||||
if (digirepeaterActive) {
|
||||
playTone(1560,100);
|
||||
}
|
||||
digitalWrite(Config.notification.buzzerPinVcc, LOW);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ namespace STATION_Utils {
|
|||
} else {
|
||||
if (callsign == firstNearTrackerCallsign) {
|
||||
if (distance != firstDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > secondDistance) {
|
||||
firstNearTracker = secondNearTracker;
|
||||
secondNearTracker = newTrackerInfo;
|
||||
|
|
@ -193,7 +193,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == secondNearTrackerCallsign) {
|
||||
if (distance != secondDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance < firstDistance) {
|
||||
secondNearTracker = firstNearTracker;
|
||||
firstNearTracker = newTrackerInfo;
|
||||
|
|
@ -223,7 +223,7 @@ namespace STATION_Utils {
|
|||
} else {
|
||||
if (callsign == firstNearTrackerCallsign) {
|
||||
if (distance != firstDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > thirdDistance) {
|
||||
firstNearTracker = secondNearTracker;
|
||||
secondNearTracker = thirdNearTracker;
|
||||
|
|
@ -237,7 +237,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == secondNearTrackerCallsign) {
|
||||
if (distance != secondDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > thirdDistance) {
|
||||
secondNearTracker = thirdNearTracker;
|
||||
thirdNearTracker = newTrackerInfo;
|
||||
|
|
@ -250,7 +250,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == thirdNearTrackerCallsign) {
|
||||
if (distance != thirdDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance <= firstDistance) {
|
||||
thirdNearTracker = secondNearTracker;
|
||||
secondNearTracker = firstNearTracker;
|
||||
|
|
@ -285,7 +285,7 @@ namespace STATION_Utils {
|
|||
} else {
|
||||
if (callsign == firstNearTrackerCallsign) {
|
||||
if (distance != firstDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > fourthDistance) {
|
||||
firstNearTracker = secondNearTracker;
|
||||
secondNearTracker = thirdNearTracker;
|
||||
|
|
@ -304,7 +304,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == secondNearTrackerCallsign) {
|
||||
if (distance != secondDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > fourthDistance) {
|
||||
secondNearTracker = thirdNearTracker;
|
||||
thirdNearTracker = fourthNearTracker;
|
||||
|
|
@ -321,7 +321,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == thirdNearTrackerCallsign) {
|
||||
if (distance != thirdDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > fourthDistance) {
|
||||
thirdNearTracker = fourthNearTracker;
|
||||
fourthNearTracker = newTrackerInfo;
|
||||
|
|
@ -338,7 +338,7 @@ namespace STATION_Utils {
|
|||
}
|
||||
} else if (callsign == fourthNearTrackerCallsign) {
|
||||
if (distance != fourthDistance) {
|
||||
Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
//Serial.print("Distance Updated for : "); Serial.println(callsign);
|
||||
if (distance > thirdDistance) {
|
||||
fourthNearTracker = newTrackerInfo;
|
||||
} else if (distance > secondDistance && distance <= thirdDistance) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue