summaryrefslogtreecommitdiff
path: root/utils/loc_nmea.cpp
diff options
context:
space:
mode:
authorYingjie Wang <yingjiewang@codeaurora.org>2018-06-21 15:16:33 +0800
committerYingjie Wang <yingjiewang@codeaurora.org>2018-06-22 07:08:12 +0800
commitce82e3ba4acf5310e3f60b04f3858ca114123355 (patch)
tree849135b283b9346ea3ae7602298312d718041064 /utils/loc_nmea.cpp
parent271cfd8a00f97f13a937877cc8ef66ef0392a087 (diff)
downloadgps-ce82e3ba4acf5310e3f60b04f3858ca114123355.tar.gz
Correct the nmea sv info in the first fix
Use the sv used info from postion report to correct nmea GPGSA in the first fix and decouple from the sv report. Change-Id: Ibc94f5b51f4112951a2bb13d83b757fa4088eb5c CRs-fixed: 2261346
Diffstat (limited to 'utils/loc_nmea.cpp')
-rw-r--r--utils/loc_nmea.cpp66
1 files changed, 34 insertions, 32 deletions
diff --git a/utils/loc_nmea.cpp b/utils/loc_nmea.cpp
index dd6b128..558dc65 100644
--- a/utils/loc_nmea.cpp
+++ b/utils/loc_nmea.cpp
@@ -73,8 +73,6 @@ typedef struct loc_sv_cache_info_s
float vdop;
} loc_sv_cache_info;
-static loc_sv_cache_info sv_cache_info;
-
/*===========================================================================
FUNCTION loc_nmea_sv_meta_init
@@ -92,6 +90,7 @@ SIDE EFFECTS
===========================================================================*/
static loc_nmea_sv_meta* loc_nmea_sv_meta_init(loc_nmea_sv_meta& sv_meta,
+ loc_sv_cache_info& sv_cache_info,
GnssSvType svType,
bool needCombine)
{
@@ -498,7 +497,20 @@ void loc_nmea_generate_pos(const UlpLocation &location,
int utcMinutes = pTm->tm_min;
int utcSeconds = pTm->tm_sec;
int utcMSeconds = (location.gpsLocation.timestamp)%1000;
-
+ loc_sv_cache_info sv_cache_info = {};
+
+ if (GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA & locationExtended.flags) {
+ sv_cache_info.gps_used_mask =
+ (uint32_t)locationExtended.gnss_sv_used_ids.gps_sv_used_ids_mask;
+ sv_cache_info.glo_used_mask =
+ (uint32_t)locationExtended.gnss_sv_used_ids.glo_sv_used_ids_mask;
+ sv_cache_info.gal_used_mask =
+ (uint32_t)locationExtended.gnss_sv_used_ids.gal_sv_used_ids_mask;
+ sv_cache_info.qzss_used_mask =
+ (uint32_t)locationExtended.gnss_sv_used_ids.bds_sv_used_ids_mask;
+ sv_cache_info.bds_used_mask =
+ (uint32_t)locationExtended.gnss_sv_used_ids.qzss_sv_used_ids_mask;
+ }
if (generate_nmea) {
char talker[3] = {'G', 'P', '\0'};
uint32_t svUsedCount = 0;
@@ -509,7 +521,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
// -------------------
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GPS, true), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS, true),
+ nmeaArraystr);
if (count > 0)
{
svUsedCount += count;
@@ -522,7 +535,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
// -------------------
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GLONASS, true), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS, true),
+ nmeaArraystr);
if (count > 0)
{
svUsedCount += count;
@@ -535,7 +549,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
// -------------------
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GALILEO, true), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO, true),
+ nmeaArraystr);
if (count > 0)
{
svUsedCount += count;
@@ -548,7 +563,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
// --------------------------
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_QZSS, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS, false),
+ nmeaArraystr);
if (count > 0)
{
svUsedCount += count;
@@ -559,7 +575,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
// ---$PQGSA/$GNGSA (BEIDOU)---
// ----------------------------
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_BEIDOU, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false),
+ nmeaArraystr);
if (count > 0)
{
svUsedCount += count;
@@ -931,13 +948,6 @@ void loc_nmea_generate_pos(const UlpLocation &location,
length = loc_nmea_put_checksum(sentence, sizeof(sentence));
nmeaArraystr.push_back(sentence);
-
- // clear the cache so they can't be used again
- sv_cache_info.gps_used_mask = 0;
- sv_cache_info.glo_used_mask = 0;
- sv_cache_info.gal_used_mask = 0;
- sv_cache_info.qzss_used_mask = 0;
- sv_cache_info.bds_used_mask = 0;
}
//Send blank NMEA reports for non-final fixes
else {
@@ -995,20 +1005,9 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0};
int svCount = svNotify.count;
int svNumber = 1;
+ loc_sv_cache_info sv_cache_info = {};
//Count GPS SVs for saparating GPS from GLONASS and throw others
-
- sv_cache_info.gps_used_mask = 0;
- sv_cache_info.glo_used_mask = 0;
- sv_cache_info.gal_used_mask = 0;
- sv_cache_info.qzss_used_mask = 0;
- sv_cache_info.bds_used_mask = 0;
-
- sv_cache_info.gps_count = 0;
- sv_cache_info.glo_count = 0;
- sv_cache_info.gal_count = 0;
- sv_cache_info.qzss_count = 0;
- sv_cache_info.bds_count = 0;
for(svNumber=1; svNumber <= svCount; svNumber++) {
if (GNSS_SV_TYPE_GPS == svNotify.gnssSvs[svNumber - 1].type)
{
@@ -1078,35 +1077,38 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
// ------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GPS, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS, false), nmeaArraystr);
// ------------------
// ------$GLGSV------
// ------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GLONASS, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS, false),
+ nmeaArraystr);
// ------------------
// ------$GAGSV------
// ------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_GALILEO, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO, false),
+ nmeaArraystr);
// -------------------------
// ------$PQGSV (QZSS)------
// -------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_QZSS, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS, false), nmeaArraystr);
// ---------------------------
// ------$PQGSV (BEIDOU)------
// ---------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, GNSS_SV_TYPE_BEIDOU, false), nmeaArraystr);
+ loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false),
+ nmeaArraystr);
EXIT_LOG(%d, 0);
}