Reject embedded GPS data when the positional uncertainy is too great.

This commit is contained in:
Jonathan Naylor
2017-11-28 13:45:22 +00:00
parent a40826dd44
commit 4064aeb6cf

View File

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