diff --git a/DMRGateway.cpp b/DMRGateway.cpp index d5c6c30..00d2917 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -1466,6 +1466,8 @@ void CDMRGateway::extractGPSData(const CDMRData& data) // ETSI TS 102 361-4 V1.7.1 P263 // Have we a GPS fix? Check bit 4 of first octet if ((payload[0U] & 0x10U) >> 4) { + LogDebug("Received GPS position from %s with Fix", src.c_str()); + if ((payload[0U] & 0x40U) >> 6) latSign = 1; else @@ -1476,19 +1478,23 @@ void CDMRGateway::extractGPSData(const CDMRData& data) else longSign = -1; + uint8_t speed = ((payload[0] & 0x0F) << 3) + ((payload[1U] & 0xD0) >>5); + LogDebug("Raw Speed is %d", speed); uint8_t latDeg = ((payload[1U] & 0x1F) << 2) + ((payload[2U] & 0xC0) >> 6); uint8_t latMin = payload[2U] & 0x3F; - float latSec = (payload[3U] << 6) + (payload[4U] & 0xFC); + uint16_t latSec = (payload[3U] << 6) + (payload[4U] & 0xFC); uint8_t lonDeg = ((payload[4U] & 0x03) << 6) + ((payload[5U] & 0xFC) >> 2); uint8_t lonMin = ((payload[5U] & 0x03) << 4) + ((payload[6U] & 0xF0) >> 4); - float lonSec = ((payload[6U] & 0x0F) << 10) + (payload[7U] << 2) + ((payload[8U] & 0xC0) >> 6); - int altitude = (((payload[8U] & 0x3F) << 8) + payload[9U]); + uint16_t lonSec = ((payload[6U] & 0x0F) << 10) + (payload[7U] << 2) + ((payload[8U] & 0xC0) >> 6); + uint16_t altitude = (((payload[8U] & 0x3F) << 8) + payload[9U]); - float latitude = latDeg + (latMin + latSec / 10000) / 60; - float longitude = lonDeg + (lonMin + lonSec / 10000) / 60; - LogDebug("Sending GPS position from %u", srcId); + float latitude = (float)latDeg + (float)(latMin + (float)latSec / 10000) / 60; + float longitude = (float)lonDeg + (float)(lonMin + (float)lonSec / 10000) / 60; m_aprsHelper->send(src.c_str(), latitude * latSign, longitude * longSign, altitude); } + else + LogDebug("Recieved GPS position from %s with NoFix", src.c_str()); + } }