Merge pull request #33 from jpronans/GPS

Gps
This commit is contained in:
Jonathan Naylor
2017-08-06 20:49:10 +01:00
committed by GitHub
2 changed files with 2821 additions and 142 deletions

View File

@@ -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());
}
}

2945
DMRIds.dat

File diff suppressed because it is too large Load Diff