From 4a8cf1ea3a6a6867f3e16903e1f8bd2f65945979 Mon Sep 17 00:00:00 2001 From: richonguzman Date: Mon, 18 Dec 2023 01:16:26 -0300 Subject: [PATCH] latitud Mic-E Decoding --- lib/APRSPacketLib/APRSPacketLib.cpp | 78 ++++++++++++++++++++++++++--- lib/APRSPacketLib/APRSPacketLib.h | 4 ++ 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/lib/APRSPacketLib/APRSPacketLib.cpp b/lib/APRSPacketLib/APRSPacketLib.cpp index 63d4a4a..c34ce5c 100644 --- a/lib/APRSPacketLib/APRSPacketLib.cpp +++ b/lib/APRSPacketLib/APRSPacketLib.cpp @@ -432,6 +432,55 @@ namespace APRSPacketLib { return altitude.toInt() * 0.3048; } + String decodeMiceMsgType(String tocall) { + String miceType; + for (int i=0; i<3; i++) { + if (int(tocall[i]) > 57) { + miceType += "1"; + } else { + miceType += "0"; + } + } + return miceType; + } + + + float gpsDegreesToDecimalLatitude(String latitude) { + int degrees = latitude.substring(0,2).toInt(); + int minute = latitude.substring(2,4).toInt(); + int minuteHundredths = latitude.substring(5,7).toInt(); + String northSouth = latitude.substring(7); + float decimalLat = degrees + (minute/60.0) + (minuteHundredths/10000.0); + if (northSouth=="N") { + return decimalLat; + } else { + return -decimalLat; + } + } + + float decodeMiceLatitude(String tocall) { + String gpsLat; + String northSouth; + for (int i=0; i<=5; i++) { + if (int(tocall[i]) > 57) { + gpsLat += char(int(tocall[i]) - 32); + } else { + gpsLat += char(int(tocall[i])); + } + if (i==3) { + gpsLat += "."; + if (int(tocall[i]) > 57) { + northSouth = "N"; + } else { + northSouth = "S"; + } + } + } + gpsLat += northSouth; + //float decimalLatitude = gpsDegreesToDecimalLatitude(gpsLat); + return gpsDegreesToDecimalLatitude(gpsLat); + } + APRSPacket processReceivedPacket(String receivedPacket) { /* Packet type: gps = 0 @@ -442,12 +491,12 @@ namespace APRSPacketLib { object = 5 */ APRSPacket aprsPacket; aprsPacket.sender = receivedPacket.substring(0,receivedPacket.indexOf(">")); - String temp00 = receivedPacket.substring(receivedPacket.indexOf(">")+1,receivedPacket.indexOf(":")); - if (temp00.indexOf(",") > 2) { - aprsPacket.tocall = temp00.substring(0,temp00.indexOf(",")); - aprsPacket.path = temp00.substring(temp00.indexOf(",")+1,temp00.indexOf(":")); + String temp0 = receivedPacket.substring(receivedPacket.indexOf(">")+1,receivedPacket.indexOf(":")); + if (temp0.indexOf(",") > 2) { + aprsPacket.tocall = temp0.substring(0,temp0.indexOf(",")); + aprsPacket.path = temp0.substring(temp0.indexOf(",")+1,temp0.indexOf(":")); } else { - aprsPacket.tocall = temp00; + aprsPacket.tocall = temp0; aprsPacket.path = ""; } if (receivedPacket.indexOf(":!") > 10 || receivedPacket.indexOf(":=") > 10 ) { @@ -517,8 +566,25 @@ namespace APRSPacketLib { aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":'")+2); } // DECODING Mic-E received packet + aprsPacket.miceType = decodeMiceMsgType(aprsPacket.tocall); + Serial.println(aprsPacket.miceType); + + aprsPacket.latitude = decodeMiceLatitude(aprsPacket.tocall); + Serial.println(aprsPacket.latitude); + + + + /* + decodeMiceLongitud(aprsPacket.tocall, aprsPacket.message); + decodeMiceCourseSpeed(aprsPacket.tocall, aprsPacket.message); + decodeMiceAltitude(aprsPacket.tocall, aprsPacket.message); + + tocall entrega LAT, North, longitude offset , West (y miceType) + + message es longitud, curso, velocidad y altura + + */ aprsPacket.miceType = "110"; - // aprsPacket.miceType = "111"; //or any other decoded } else if (receivedPacket.indexOf(":;") > 10) { aprsPacket.type = 5; aprsPacket.message = receivedPacket.substring(receivedPacket.indexOf(":;")+2); diff --git a/lib/APRSPacketLib/APRSPacketLib.h b/lib/APRSPacketLib/APRSPacketLib.h index 583f062..e33c2eb 100644 --- a/lib/APRSPacketLib/APRSPacketLib.h +++ b/lib/APRSPacketLib/APRSPacketLib.h @@ -62,6 +62,10 @@ namespace APRSPacketLib { float decodeLongitude(String receivedPacket); int decodeSpeed(String speed); int decodeAltitude(String altitude); + String decodeMiceMsgType(String tocall); + float gpsDegreesToDecimalLatitude(String latitude); + float decodeMiceLatitude(String tocall); + APRSPacket processReceivedPacket(String receivedPacket); }