mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 23:45:49 +08:00
Reject embedded GPS data when the positional uncertainy is too great.
This commit is contained in:
25
DMRSlot.cpp
25
DMRSlot.cpp
@@ -1640,33 +1640,32 @@ void CDMRSlot::logGPSPosition(const unsigned char* data)
|
|||||||
{
|
{
|
||||||
unsigned int errorI = (data[2U] & 0x0E) >> 1U;
|
unsigned int errorI = (data[2U] & 0x0E) >> 1U;
|
||||||
|
|
||||||
char errorS[30];
|
char* error;
|
||||||
switch (errorI) {
|
switch (errorI) {
|
||||||
case 0U:
|
case 0U:
|
||||||
::strcpy(errorS, "< 2m");
|
error = "< 2m";
|
||||||
break;
|
break;
|
||||||
case 1U:
|
case 1U:
|
||||||
::strcpy(errorS, "< 20m");
|
error = "< 20m";
|
||||||
break;
|
break;
|
||||||
case 2U:
|
case 2U:
|
||||||
::strcpy(errorS, "< 200m");
|
error = "< 200m";
|
||||||
break;
|
break;
|
||||||
case 3U:
|
case 3U:
|
||||||
::strcpy(errorS, "< 2km");
|
error = "< 2km";
|
||||||
break;
|
break;
|
||||||
case 4U:
|
case 4U:
|
||||||
::strcpy(errorS, "< 20km");
|
error = "< 20km";
|
||||||
break;
|
break;
|
||||||
case 5U:
|
case 5U:
|
||||||
::strcpy(errorS, "< 200km");
|
error = "< 200km";
|
||||||
break;
|
break;
|
||||||
case 6U:
|
case 6U:
|
||||||
::strcpy(errorS, "> 200km");
|
error = "> 200km";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
::strcpy(errorS, "not known");
|
return;
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int32_t longitudeI = ((data[2U] & 0x01U) << 31) | (data[3U] << 23) | (data[4U] << 15) | (data[5U] << 7);
|
int32_t longitudeI = ((data[2U] & 0x01U) << 31) | (data[3U] << 23) | (data[4U] << 15) | (data[5U] << 7);
|
||||||
longitudeI >>= 7;
|
longitudeI >>= 7;
|
||||||
@@ -1680,7 +1679,7 @@ void CDMRSlot::logGPSPosition(const unsigned char* data)
|
|||||||
longitude *= float(longitudeI);
|
longitude *= float(longitudeI);
|
||||||
latitude *= float(latitudeI);
|
latitude *= float(latitudeI);
|
||||||
|
|
||||||
LogMessage("GPS position [%f,%f] (Position error %s)", latitude, longitude, errorS);
|
LogMessage("GPS position [%f,%f] (Position error %s)", latitude, longitude, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMRSlot::clock()
|
void CDMRSlot::clock()
|
||||||
|
|||||||
Reference in New Issue
Block a user