Merge "Correct the nmea sv info in the first fix"
This commit is contained in:
commit
309ff25859
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