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

View File

@ -20,18 +20,20 @@ struct APRSPacket {
namespace APRSPacketLib {
String generateBasePacket(String callsign, String tocall, String path);
String generateStatusPacket(String callsign, String tocall, String path, String status);
String generateMessagePacket(String callsign, String tocall, String path, String addressee, String message);
String generateDigiRepeatedPacket(APRSPacket packet, String callsign);
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 generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gpsData);
float decodeEncodedLatitude(String receivedPacket);
float decodeEncodedLongitude(String receivedPacket);
float decodeLatitude(String receivedPacket);
float decodeLongitude(String receivedPacket);
APRSPacket processReceivedPacket(String receivedPacket);
String generateBasePacket(String callsign, String tocall, String path);
String generateStatusPacket(String callsign, String tocall, String path, String status);
String generateMessagePacket(String callsign, String tocall, String path, String addressee, String message);
String generateDigiRepeatedPacket(APRSPacket packet, String callsign);
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 generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gpsData);
float decodeEncodedLatitude(String receivedPacket);
float decodeEncodedLongitude(String receivedPacket);
float decodeLatitude(String receivedPacket);
float decodeLongitude(String receivedPacket);
int decodeSpeed(String speed);
int decodeAltitude(String altitude);
APRSPacket processReceivedPacket(String receivedPacket);
}

View File

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