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
This commit is contained in:
parent
271cfd8a00
commit
ce82e3ba4a
1 changed files with 33 additions and 31 deletions
|
@ -73,8 +73,6 @@ typedef struct loc_sv_cache_info_s
|
||||||
float vdop;
|
float vdop;
|
||||||
} loc_sv_cache_info;
|
} loc_sv_cache_info;
|
||||||
|
|
||||||
static loc_sv_cache_info sv_cache_info;
|
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
FUNCTION loc_nmea_sv_meta_init
|
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,
|
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,
|
GnssSvType svType,
|
||||||
bool needCombine)
|
bool needCombine)
|
||||||
{
|
{
|
||||||
|
@ -498,7 +497,20 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
int utcMinutes = pTm->tm_min;
|
int utcMinutes = pTm->tm_min;
|
||||||
int utcSeconds = pTm->tm_sec;
|
int utcSeconds = pTm->tm_sec;
|
||||||
int utcMSeconds = (location.gpsLocation.timestamp)%1000;
|
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) {
|
if (generate_nmea) {
|
||||||
char talker[3] = {'G', 'P', '\0'};
|
char talker[3] = {'G', 'P', '\0'};
|
||||||
uint32_t svUsedCount = 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),
|
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)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
svUsedCount += count;
|
svUsedCount += count;
|
||||||
|
@ -522,7 +535,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
|
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)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
svUsedCount += count;
|
svUsedCount += count;
|
||||||
|
@ -535,7 +549,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
|
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)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
svUsedCount += count;
|
svUsedCount += count;
|
||||||
|
@ -548,7 +563,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
|
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)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
svUsedCount += count;
|
svUsedCount += count;
|
||||||
|
@ -559,7 +575,8 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
// ---$PQGSA/$GNGSA (BEIDOU)---
|
// ---$PQGSA/$GNGSA (BEIDOU)---
|
||||||
// ----------------------------
|
// ----------------------------
|
||||||
count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
|
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)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
svUsedCount += count;
|
svUsedCount += count;
|
||||||
|
@ -931,13 +948,6 @@ void loc_nmea_generate_pos(const UlpLocation &location,
|
||||||
|
|
||||||
length = loc_nmea_put_checksum(sentence, sizeof(sentence));
|
length = loc_nmea_put_checksum(sentence, sizeof(sentence));
|
||||||
nmeaArraystr.push_back(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
|
//Send blank NMEA reports for non-final fixes
|
||||||
else {
|
else {
|
||||||
|
@ -995,20 +1005,9 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
|
||||||
char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0};
|
char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0};
|
||||||
int svCount = svNotify.count;
|
int svCount = svNotify.count;
|
||||||
int svNumber = 1;
|
int svNumber = 1;
|
||||||
|
loc_sv_cache_info sv_cache_info = {};
|
||||||
|
|
||||||
//Count GPS SVs for saparating GPS from GLONASS and throw others
|
//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++) {
|
for(svNumber=1; svNumber <= svCount; svNumber++) {
|
||||||
if (GNSS_SV_TYPE_GPS == svNotify.gnssSvs[svNumber - 1].type)
|
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_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------
|
// ------$GLGSV------
|
||||||
// ------------------
|
// ------------------
|
||||||
|
|
||||||
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
|
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------
|
// ------$GAGSV------
|
||||||
// ------------------
|
// ------------------
|
||||||
|
|
||||||
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
|
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)------
|
// ------$PQGSV (QZSS)------
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
|
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)------
|
// ------$PQGSV (BEIDOU)------
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
|
|
||||||
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
|
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);
|
EXIT_LOG(%d, 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue