Correct NMEA DTM implementation
1. reference datum is always W84
2. local datum can be configured by DATUM_TYPE in gps.conf
Bug: 191696434
Test: Check NMEA sentence
CRs-Fixed: 2939812
Change-Id: Ic44c508336385fae00704b5d77db5452d7d9ca88
diff --git a/utils/loc_nmea.cpp b/utils/loc_nmea.cpp
index 6b5e60e..3cd31cd 100644
--- a/utils/loc_nmea.cpp
+++ b/utils/loc_nmea.cpp
@@ -940,7 +940,7 @@
int lengthRemaining = bufSize;
int length = 0;
int datum_type;
- char ref_datum[4] = {0};
+ char ref_datum[4] = {'W', '8', '4', '\0'};
char local_datum[4] = {0};
double lla_offset[3] = {0};
char latHem, longHem;
@@ -951,21 +951,15 @@
datum_type = loc_get_datum_type();
switch (datum_type) {
case LOC_GNSS_DATUM_WGS84:
- ref_datum[0] = 'W';
- ref_datum[1] = '8';
- ref_datum[2] = '4';
- local_datum[0] = 'P';
- local_datum[1] = '9';
- local_datum[2] = '0';
- break;
- case LOC_GNSS_DATUM_PZ90:
- ref_datum[0] = 'P';
- ref_datum[1] = '9';
- ref_datum[2] = '0';
local_datum[0] = 'W';
local_datum[1] = '8';
local_datum[2] = '4';
break;
+ case LOC_GNSS_DATUM_PZ90:
+ local_datum[0] = 'P';
+ local_datum[1] = '9';
+ local_datum[2] = '0';
+ break;
default:
break;
}
@@ -985,7 +979,7 @@
lla_offset[1] -= 360.0;
}
lla_offset[2] = local_lla.alt - ref_lla.alt;
- if (lla_offset[0] > 0.0) {
+ if (lla_offset[0] >= 0.0) {
latHem = 'N';
} else {
latHem = 'S';
@@ -1565,23 +1559,21 @@
convert_WGS84_to_PZ90(ecef_w84, ecef_p90);
convert_Ecef_to_Lla(ecef_p90, lla_p90);
+ ref_lla.lat = location.gpsLocation.latitude;
+ ref_lla.lon = location.gpsLocation.longitude;
+ ref_lla.alt = location.gpsLocation.altitude;
+
switch (datum_type) {
case LOC_GNSS_DATUM_WGS84:
- ref_lla.lat = location.gpsLocation.latitude;
- ref_lla.lon = location.gpsLocation.longitude;
- ref_lla.alt = location.gpsLocation.altitude;
- local_lla.lat = lla_p90.lat / M_PI * 180.0;
- local_lla.lon = lla_p90.lon / M_PI * 180.0;
- local_lla.alt = lla_p90.alt;
- break;
- case LOC_GNSS_DATUM_PZ90:
- ref_lla.lat = lla_p90.lat / M_PI * 180.0;
- ref_lla.lon = lla_p90.lon / M_PI * 180.0;
- ref_lla.alt = lla_p90.alt;
local_lla.lat = location.gpsLocation.latitude;
local_lla.lon = location.gpsLocation.longitude;
local_lla.alt = location.gpsLocation.altitude;
break;
+ case LOC_GNSS_DATUM_PZ90:
+ local_lla.lat = lla_p90.lat / M_PI * 180.0;
+ local_lla.lon = lla_p90.lon / M_PI * 180.0;
+ local_lla.alt = lla_p90.alt;
+ break;
default:
break;
}