decode CSA on not encoded gps packet

This commit is contained in:
richonguzman 2023-11-18 22:53:48 -03:00
parent 72d70de92c
commit 620dd01aaf
3 changed files with 35 additions and 23 deletions

View File

@ -173,6 +173,14 @@ namespace APRSPacketLib {
} }
} }
int decodeSpeed(String speed) {
return speed.toInt() * 1.852;
}
int decodeAltitude(String altitude) {
return altitude.toInt() * 0.3048;
}
APRSPacket processReceivedPacket(String receivedPacket) { APRSPacket processReceivedPacket(String receivedPacket) {
/* Packet type: /* Packet type:
gps = 0 gps = 0
@ -206,24 +214,26 @@ namespace APRSPacketLib {
// revisar si es codificado con Speed+Course o Altitude+Course+Speed // revisar si es codificado con Speed+Course o Altitude+Course+Speed
// tambien conseguir Symbol // tambien conseguir Symbol
/*aprsPacket.symbol
aprsPacket.course
aprsPacket.speed
aprsPacket.altitude*/
Serial.println(aprsPacket.latitude);
Serial.println(aprsPacket.longitude);
} else { } else {
// revisar si tiene Course, Speed, Altitude
aprsPacket.latitude = decodeLatitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+2,receivedPacket.indexOf(gpsChar)+10)); 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)); aprsPacket.longitude = decodeLongitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+11,receivedPacket.indexOf(gpsChar)+20));
if (receivedPacket.substring(25,26) == "/" && receivedPacket.substring(30,33) == "/A=") { aprsPacket.symbol = receivedPacket.substring(receivedPacket.indexOf(gpsChar)+20,receivedPacket.indexOf(gpsChar)+21);
Serial.println("es GPS no codificado y tiene CSA"); if (receivedPacket.substring(receivedPacket.indexOf(gpsChar)+24,receivedPacket.indexOf(gpsChar)+25) == "/" && receivedPacket.substring(receivedPacket.indexOf(gpsChar)+28,receivedPacket.indexOf(gpsChar)+31) == "/A=") {
// 20 a 21 es symbol aprsPacket.course = receivedPacket.substring(receivedPacket.indexOf(gpsChar)+21,receivedPacket.indexOf(gpsChar)+24).toInt();
// 21 a 24 es Course aprsPacket.speed = decodeSpeed(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+25,receivedPacket.indexOf(gpsChar)+28));
aprsPacket.altitude = decodeAltitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+31,receivedPacket.indexOf(gpsChar)+39));
} else { } else {
aprsPacket.course = 0; aprsPacket.course = 0;
aprsPacket.speed = 0; aprsPacket.speed = 0;
aprsPacket.altitude = 0; aprsPacket.altitude = 0;
} }
// como conseguir Symbol
// sino es estacion fija (digi?/igate?)
} }
} else if (receivedPacket.indexOf("::") > 10) { } else if (receivedPacket.indexOf("::") > 10) {
aprsPacket.type = 1; aprsPacket.type = 1;

View File

@ -20,18 +20,20 @@ struct APRSPacket {
namespace APRSPacketLib { namespace APRSPacketLib {
String generateBasePacket(String callsign, String tocall, String path); String generateBasePacket(String callsign, String tocall, String path);
String generateStatusPacket(String callsign, String tocall, String path, String status); String generateStatusPacket(String callsign, String tocall, String path, String status);
String generateMessagePacket(String callsign, String tocall, String path, String addressee, String message); String generateMessagePacket(String callsign, String tocall, String path, String addressee, String message);
String generateDigiRepeatedPacket(APRSPacket packet, String callsign); String generateDigiRepeatedPacket(APRSPacket packet, String callsign);
char *ax25_base91enc(char *s, uint8_t n, uint32_t v); char *ax25_base91enc(char *s, uint8_t n, uint32_t v);
String encondeGPS(float latitude, float longitude, float course, float speed, String symbol, bool sendAltitude, int altitude, bool sendStandingUpdate, String packetType); String encondeGPS(float latitude, float longitude, float course, float speed, String symbol, bool sendAltitude, int altitude, bool sendStandingUpdate, String packetType);
String generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gpsData); String generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gpsData);
float decodeEncodedLatitude(String receivedPacket); float decodeEncodedLatitude(String receivedPacket);
float decodeEncodedLongitude(String receivedPacket); float decodeEncodedLongitude(String receivedPacket);
float decodeLatitude(String receivedPacket); float decodeLatitude(String receivedPacket);
float decodeLongitude(String receivedPacket); float decodeLongitude(String receivedPacket);
APRSPacket processReceivedPacket(String receivedPacket); int decodeSpeed(String speed);
int decodeAltitude(String altitude);
APRSPacket processReceivedPacket(String receivedPacket);
} }

View File

@ -34,7 +34,7 @@ TinyGPSPlus gps;
BluetoothSerial SerialBT; BluetoothSerial SerialBT;
OneButton userButton = OneButton(BUTTON_PIN, true, true); OneButton userButton = OneButton(BUTTON_PIN, true, true);
String versionDate = "2023.11.16"; String versionDate = "2023.11.18";
int myBeaconsIndex = 0; int myBeaconsIndex = 0;
int myBeaconsSize = Config.beacons.size(); int myBeaconsSize = Config.beacons.size();