added PacketDecoder in Stations Menu

This commit is contained in:
richonguzman 2023-12-27 02:37:35 -03:00
parent d6e7c1621b
commit 1f676edf89
4 changed files with 98 additions and 32 deletions

View File

@ -33,7 +33,7 @@ BluetoothSerial SerialBT;
OneButton userButton = OneButton(BUTTON_PIN, true, true);
#endif
String versionDate = "2023.12.26";
String versionDate = "2023.12.27";
int myBeaconsIndex = 0;
int myBeaconsSize = Config.beacons.size();
@ -91,6 +91,8 @@ bool disableGPS;
bool miceActive = false;
APRSPacket lastReceivedPacket;
logging::Logger logger;
void setup() {

View File

@ -67,7 +67,12 @@ namespace KEYBOARD_Utils {
if (menuDisplay < 220) {
menuDisplay = 221;
}
} else if (menuDisplay >= 60 && menuDisplay <= 61) {
} else if (menuDisplay >= 30 && menuDisplay <= 31) {
menuDisplay--;
if (menuDisplay < 30) {
menuDisplay = 31;
}
}else if (menuDisplay >= 60 && menuDisplay <= 61) {
menuDisplay--;
if (menuDisplay < 60) {
menuDisplay = 61;
@ -133,9 +138,12 @@ namespace KEYBOARD_Utils {
menuDisplay = 220;
}
}
else if (menuDisplay == 30) {
menuDisplay = 3;
else if (menuDisplay >= 30 && menuDisplay <= 31) {
menuDisplay++;
if (menuDisplay > 31) {
menuDisplay = 30;
}
}
else if (menuDisplay == 40) {
@ -162,7 +170,7 @@ namespace KEYBOARD_Utils {
} else if (menuDisplay==1300) {
messageText = "";
menuDisplay = 130;
} else if ((menuDisplay>=10 && menuDisplay<=13) || (menuDisplay>=20 && menuDisplay<=29) || (menuDisplay==120) || (menuDisplay>=130 && menuDisplay<=132) || (menuDisplay>=200 && menuDisplay<=290) || (menuDisplay>=60 && menuDisplay<=61) || (menuDisplay==30) || (menuDisplay==40)) {
} else if ((menuDisplay>=10 && menuDisplay<=13) || (menuDisplay>=20 && menuDisplay<=29) || (menuDisplay==120) || (menuDisplay>=130 && menuDisplay<=132) || (menuDisplay>=200 && menuDisplay<=290) || (menuDisplay>=60 && menuDisplay<=61) || (menuDisplay>=30 && menuDisplay<=31) || (menuDisplay>=300 && menuDisplay<=310) || (menuDisplay==40)) {
menuDisplay = int(menuDisplay/10);
}
/* winlinkMailNumber = "";*/
@ -181,7 +189,7 @@ namespace KEYBOARD_Utils {
statusTime = millis();
show_display("__ INFO __", "", " CHANGING CALLSIGN!", 1000);
STATION_Utils::saveCallsingIndex(myBeaconsIndex);
} else if ((menuDisplay>=1 && menuDisplay<=3) || (menuDisplay>=11 &&menuDisplay<=13) || (menuDisplay>=20 && menuDisplay<=29)) {
} else if ((menuDisplay>=1 && menuDisplay<=3) || (menuDisplay>=11 &&menuDisplay<=13) || (menuDisplay>=20 && menuDisplay<=29) || (menuDisplay>=30 && menuDisplay<=31)) {
menuDisplay = menuDisplay*10;
} else if (menuDisplay == 10) {
MSG_Utils::loadMessagesFromMemory();

View File

@ -4,6 +4,7 @@
#include "custom_characters.h"
#include "station_utils.h"
#include "configuration.h"
#include "APRSPacketLib.h"
#include "power_utils.h"
#include "menu_utils.h"
#include "msg_utils.h"
@ -30,6 +31,7 @@ extern bool bluetoothActive;
extern bool displayEcoMode;
extern bool screenBrightness;
extern bool disableGPS;
extern APRSPacket lastReceivedPacket;
namespace MENU_Utils {
@ -58,9 +60,9 @@ namespace MENU_Utils {
}
void showOnScreen() {
String lastLine;
String lastLine, firstLineDecoder, courseSpeedAltitude, speedPacketDec, coursePacketDec, pathDec;
uint32_t lastMenuTime = millis() - menuTime;
if (!(menuDisplay==0) && !(menuDisplay==30) && !(menuDisplay==40) && lastMenuTime > 30*1000) {
if (!(menuDisplay==0) && !(menuDisplay==300) && !(menuDisplay==310) && !(menuDisplay==40) && lastMenuTime > 30*1000) {
menuDisplay = 0;
messageCallsign = "";
messageText = "";
@ -232,10 +234,63 @@ namespace MENU_Utils {
break;
case 30: //3.Stations ---> Display Heared Tracker/Stations
show_display("LISTENING>", STATION_Utils::getFirstNearTracker(), STATION_Utils::getSecondNearTracker(), STATION_Utils::getThirdNearTracker(), STATION_Utils::getFourthNearTracker(), "<Back");
case 30: //3.Stations ---> Packet Decoder
show_display("STATIONS>", "", "> Packet Decoder", " Near By Stations", "", "<Back");
break;
case 31: //3.Stations ---> Near By Stations
show_display("STATIONS>", "", " Packet Decoder", "> Near By Stations", "", "<Back");
break;
case 300: //3.Stations ---> Packet Decoder
firstLineDecoder = lastReceivedPacket.sender;
for(int i=firstLineDecoder.length();i<9;i++) {
firstLineDecoder += ' ';
}
firstLineDecoder += lastReceivedPacket.symbol;
if (lastReceivedPacket.type==0 || lastReceivedPacket.type==4) { // gps and Mic-E gps
courseSpeedAltitude = String(lastReceivedPacket.altitude);
for(int j=courseSpeedAltitude.length();j<4;j++) {
courseSpeedAltitude = '0' + courseSpeedAltitude;
}
courseSpeedAltitude = "A=" + courseSpeedAltitude + "m ";
speedPacketDec = String(lastReceivedPacket.speed);
for (int k=speedPacketDec.length();k<3;k++) {
speedPacketDec = ' ' + speedPacketDec;
}
courseSpeedAltitude += speedPacketDec + "km/h ";
for(int l=courseSpeedAltitude.length();l<17;l++) {
courseSpeedAltitude += ' ';
}
coursePacketDec = String(lastReceivedPacket.course);
for(int m=coursePacketDec.length();m<3;m++) {
coursePacketDec = ' ' + coursePacketDec;
}
courseSpeedAltitude += coursePacketDec;
double distanceKm = TinyGPSPlus::distanceBetween(gps.location.lat(), gps.location.lng(), lastReceivedPacket.latitude, lastReceivedPacket.longitude) / 1000.0;
double courseTo = TinyGPSPlus::courseTo(gps.location.lat(), gps.location.lng(), lastReceivedPacket.latitude, lastReceivedPacket.longitude);
if (lastReceivedPacket.path.length()>14) {
pathDec = "P:" + lastReceivedPacket.path;
} else {
pathDec = "PATH: " +lastReceivedPacket.path;
}
show_display(firstLineDecoder, "GPS " + String(lastReceivedPacket.latitude,2) + " " + String(lastReceivedPacket.longitude,2), courseSpeedAltitude, String(distanceKm) + "km " + String(courseTo,0), pathDec, "< RSSI:" + String(lastReceivedPacket.rssi) + " SNR:" + String(lastReceivedPacket.snr));
} else if (lastReceivedPacket.type==1) { // message
show_display(firstLineDecoder, "ADDRESSEE: " + lastReceivedPacket.addressee, "MSG: " + lastReceivedPacket.message, "", "", "< RSSI:" + String(lastReceivedPacket.rssi) + " SNR:" + String(lastReceivedPacket.snr));
} else if (lastReceivedPacket.type==2) { // status
show_display(firstLineDecoder, "-------STATUS-------", lastReceivedPacket.message, "", "", "< RSSI:" + String(lastReceivedPacket.rssi) + " SNR:" + String(lastReceivedPacket.snr));
} else if (lastReceivedPacket.type==3) { // telemetry
show_display(firstLineDecoder, "------TELEMETRY------", "", "", "", "< RSSI:" + String(lastReceivedPacket.rssi) + " SNR:" + String(lastReceivedPacket.snr));
} else if (lastReceivedPacket.type==5) { // object
show_display(firstLineDecoder, "-------OBJECT-------", "", "", "", "< RSSI:" + String(lastReceivedPacket.rssi) + " SNR:" + String(lastReceivedPacket.snr));
}
break;
case 310: //3.Stations ---> Near By Stations
show_display("NEAR BY >", STATION_Utils::getFirstNearTracker(), STATION_Utils::getSecondNearTracker(), STATION_Utils::getThirdNearTracker(), STATION_Utils::getFourthNearTracker(), "<Back");
break;
case 40:
// waiting for Weather Report

View File

@ -24,6 +24,8 @@ extern uint32_t messageLedTime;
extern bool digirepeaterActive;
extern APRSPacket lastReceivedPacket;
String firstNearTracker = "";
String secondNearTracker = "";
String thirdNearTracker = "";
@ -35,7 +37,6 @@ bool noMessageWarning = false;
String lastHeardTracker = "NONE";
uint32_t lastDeleteListenedTracker = millis();
APRSPacket aprsPacket;
namespace MSG_Utils {
@ -163,16 +164,16 @@ namespace MSG_Utils {
}
if (packet.text.substring(0,3) == "\x3c\xff\x01") { // its an APRS packet
//Serial.println(packet.text); // only for debug
aprsPacket = APRSPacketLib::processReceivedPacket(packet.text.substring(3),packet.rssi, packet.snr, packet.freqError);
if (aprsPacket.sender!=currentBeacon->callsign) {
lastReceivedPacket = APRSPacketLib::processReceivedPacket(packet.text.substring(3),packet.rssi, packet.snr, packet.freqError);
if (lastReceivedPacket.sender!=currentBeacon->callsign) {
if (Config.bluetoothType==0) {
BLE_Utils::sendToPhone(packet.text.substring(3));
} else {
BLUETOOTH_Utils::sendPacket(packet.text.substring(3));
}
if (digirepeaterActive && aprsPacket.addressee!=currentBeacon->callsign) {
String digiRepeatedPacket = APRSPacketLib::generateDigiRepeatedPacket(aprsPacket, currentBeacon->callsign);
if (digirepeaterActive && lastReceivedPacket.addressee!=currentBeacon->callsign) {
String digiRepeatedPacket = APRSPacketLib::generateDigiRepeatedPacket(lastReceivedPacket, currentBeacon->callsign);
if (digiRepeatedPacket == "X") {
logger.log(logging::LoggerLevel::LOGGER_LEVEL_WARN, "Main", "%s", "Packet won't be Repeated (Missing WIDE1-X)");
} else {
@ -180,27 +181,27 @@ namespace MSG_Utils {
LoRa_Utils::sendNewPacket(digiRepeatedPacket);
}
}
lastHeardTracker = aprsPacket.sender;
if (aprsPacket.type==1 && aprsPacket.addressee==currentBeacon->callsign) {
if (aprsPacket.message.indexOf("{")>=0) {
String ackMessage = "ack" + aprsPacket.message.substring(aprsPacket.message.indexOf("{")+1);
lastHeardTracker = lastReceivedPacket.sender;
if (lastReceivedPacket.type==1 && lastReceivedPacket.addressee==currentBeacon->callsign) {
if (lastReceivedPacket.message.indexOf("{")>=0) {
String ackMessage = "ack" + lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf("{")+1);
ackMessage.trim();
delay(4000);
sendMessage(aprsPacket.sender, ackMessage);
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1, aprsPacket.message.indexOf("{"));
sendMessage(lastReceivedPacket.sender, ackMessage);
lastReceivedPacket.message = lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf(":")+1, lastReceivedPacket.message.indexOf("{"));
} else {
aprsPacket.message = aprsPacket.message.substring(aprsPacket.message.indexOf(":")+1);
lastReceivedPacket.message = lastReceivedPacket.message.substring(lastReceivedPacket.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) {
if (lastReceivedPacket.message.indexOf("ping")==0 || lastReceivedPacket.message.indexOf("Ping")==0 || lastReceivedPacket.message.indexOf("PING")==0) {
delay(4000);
sendMessage(aprsPacket.sender, "pong, 73!");
sendMessage(lastReceivedPacket.sender, "pong, 73!");
}
if (aprsPacket.sender == "CD2RXU-15" && aprsPacket.message.indexOf("WX")==0) { // WX = WeatherReport
if (lastReceivedPacket.sender == "CD2RXU-15" && lastReceivedPacket.message.indexOf("WX")==0) { // WX = WeatherReport
Serial.println("Weather Report Received");
String wxCleaning = aprsPacket.message.substring(aprsPacket.message.indexOf("WX ")+3);
String wxCleaning = lastReceivedPacket.message.substring(lastReceivedPacket.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(","));
@ -217,18 +218,18 @@ namespace MSG_Utils {
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);
show_display("<WEATHER>", "From --> " + lastReceivedPacket.sender, place, summary, fifthLineWR, sixthLineWR);
menuDisplay = 40;
menuTime = millis();
} else {
show_display("< MSG Rx >", "From --> " + aprsPacket.sender, "", aprsPacket.message , 3000);
show_display("< MSG Rx >", "From --> " + lastReceivedPacket.sender, "", lastReceivedPacket.message , 3000);
if (!Config.simplifiedTrackerMode) {
saveNewMessage("APRS", aprsPacket.sender, aprsPacket.message);
saveNewMessage("APRS", lastReceivedPacket.sender, lastReceivedPacket.message);
}
}
} else {
if (aprsPacket.type==0 && !Config.simplifiedTrackerMode) {
GPS_Utils::calculateDistanceCourse(aprsPacket.sender, aprsPacket.latitude, aprsPacket.longitude);
if ((lastReceivedPacket.type==0 || lastReceivedPacket.type==4) && !Config.simplifiedTrackerMode) {
GPS_Utils::calculateDistanceCourse(lastReceivedPacket.sender, lastReceivedPacket.latitude, lastReceivedPacket.longitude);
}
if (Config.notification.buzzerActive && Config.notification.stationBeep && !digirepeaterActive) {
NOTIFICATION_Utils::stationHeardBeep();