diff --git a/lib/APRSPacketLib/APRSPacketLib.cpp b/lib/APRSPacketLib/APRSPacketLib.cpp index 03ae786..d2bc3eb 100644 --- a/lib/APRSPacketLib/APRSPacketLib.cpp +++ b/lib/APRSPacketLib/APRSPacketLib.cpp @@ -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 @@ -205,25 +213,27 @@ namespace APRSPacketLib { aprsPacket.longitude = decodeEncodedLongitude(receivedPacket.substring(receivedPacket.indexOf(gpsChar)+7, receivedPacket.indexOf(gpsChar)+11)); // 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; diff --git a/lib/APRSPacketLib/APRSPacketLib.h b/lib/APRSPacketLib/APRSPacketLib.h index 9c35650..a77da08 100644 --- a/lib/APRSPacketLib/APRSPacketLib.h +++ b/lib/APRSPacketLib/APRSPacketLib.h @@ -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); } diff --git a/src/LoRa_APRS_Tracker.cpp b/src/LoRa_APRS_Tracker.cpp index 55e855a..d23f52b 100644 --- a/src/LoRa_APRS_Tracker.cpp +++ b/src/LoRa_APRS_Tracker.cpp @@ -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();