mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-21 21:45:39 +08:00
@@ -1466,6 +1466,8 @@ void CDMRGateway::extractGPSData(const CDMRData& data)
|
|||||||
// ETSI TS 102 361-4 V1.7.1 P263
|
// ETSI TS 102 361-4 V1.7.1 P263
|
||||||
// Have we a GPS fix? Check bit 4 of first octet
|
// Have we a GPS fix? Check bit 4 of first octet
|
||||||
if ((payload[0U] & 0x10U) >> 4) {
|
if ((payload[0U] & 0x10U) >> 4) {
|
||||||
|
LogDebug("Received GPS position from %s with Fix", src.c_str());
|
||||||
|
|
||||||
if ((payload[0U] & 0x40U) >> 6)
|
if ((payload[0U] & 0x40U) >> 6)
|
||||||
latSign = 1;
|
latSign = 1;
|
||||||
else
|
else
|
||||||
@@ -1476,19 +1478,23 @@ void CDMRGateway::extractGPSData(const CDMRData& data)
|
|||||||
else
|
else
|
||||||
longSign = -1;
|
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 latDeg = ((payload[1U] & 0x1F) << 2) + ((payload[2U] & 0xC0) >> 6);
|
||||||
uint8_t latMin = payload[2U] & 0x3F;
|
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 lonDeg = ((payload[4U] & 0x03) << 6) + ((payload[5U] & 0xFC) >> 2);
|
||||||
uint8_t lonMin = ((payload[5U] & 0x03) << 4) + ((payload[6U] & 0xF0) >> 4);
|
uint8_t lonMin = ((payload[5U] & 0x03) << 4) + ((payload[6U] & 0xF0) >> 4);
|
||||||
float lonSec = ((payload[6U] & 0x0F) << 10) + (payload[7U] << 2) + ((payload[8U] & 0xC0) >> 6);
|
uint16_t lonSec = ((payload[6U] & 0x0F) << 10) + (payload[7U] << 2) + ((payload[8U] & 0xC0) >> 6);
|
||||||
int altitude = (((payload[8U] & 0x3F) << 8) + payload[9U]);
|
uint16_t altitude = (((payload[8U] & 0x3F) << 8) + payload[9U]);
|
||||||
|
|
||||||
float latitude = latDeg + (latMin + latSec / 10000) / 60;
|
float latitude = (float)latDeg + (float)(latMin + (float)latSec / 10000) / 60;
|
||||||
float longitude = lonDeg + (lonMin + lonSec / 10000) / 60;
|
float longitude = (float)lonDeg + (float)(lonMin + (float)lonSec / 10000) / 60;
|
||||||
LogDebug("Sending GPS position from %u", srcId);
|
|
||||||
|
|
||||||
m_aprsHelper->send(src.c_str(), latitude * latSign, longitude * longSign, altitude);
|
m_aprsHelper->send(src.c_str(), latitude * latSign, longitude * longSign, altitude);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
LogDebug("Recieved GPS position from %s with NoFix", src.c_str());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2945
DMRIds.dat
2945
DMRIds.dat
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user