diff options
author | qctecmdr <qctecmdr@localhost> | 2020-12-28 16:33:54 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-12-28 16:33:53 -0800 |
commit | 2a11c779e14422583a0a233062d9ba57a5d305bb (patch) | |
tree | 6fb0818cdb2e0965d467cd9d6f42b9493798a4a9 | |
parent | ceab78668aaaf497622bd67f13e1ca16bcca1a53 (diff) | |
parent | 63623172918a576e1dcfad03a3f9e67764e66ea4 (diff) |
Merge "support SBAS SVs report in HLOS Nmea"
-rw-r--r-- | utils/loc_nmea.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/utils/loc_nmea.cpp b/utils/loc_nmea.cpp index 3d0c898..aa456cd 100644 --- a/utils/loc_nmea.cpp +++ b/utils/loc_nmea.cpp @@ -36,6 +36,7 @@ #include <loc_cfg.h> #define GLONASS_SV_ID_OFFSET 64 +#define SBAS_SV_ID_OFFSET (87) #define QZSS_SV_ID_OFFSET (192) #define BDS_SV_ID_OFFSET (200) #define GALILEO_SV_ID_OFFSET (300) @@ -113,7 +114,7 @@ typedef struct loc_nmea_sv_meta_s { char talker[3]; - LocGnssConstellationType svType; + uint32_t svTypeMask; uint64_t mask; uint32_t svCount; uint32_t totalSvUsedCount; @@ -292,6 +293,7 @@ static uint32_t convert_signalType_to_signalId(GnssSignalTypeMask signalType) switch (signalType) { case GNSS_SIGNAL_GPS_L1CA: + case GNSS_SIGNAL_SBAS_L1: signalId = SIGNAL_ID_GPS_L1CA; break; case GNSS_SIGNAL_GPS_L2: @@ -404,7 +406,7 @@ static loc_nmea_sv_meta* loc_nmea_sv_meta_init(loc_nmea_sv_meta& sv_meta, bool needCombine) { memset(&sv_meta, 0, sizeof(sv_meta)); - sv_meta.svType = svType; + sv_meta.svTypeMask = (1 << svType); switch (svType) { @@ -413,6 +415,7 @@ static loc_nmea_sv_meta* loc_nmea_sv_meta_init(loc_nmea_sv_meta& sv_meta, sv_meta.talker[1] = 'P'; sv_meta.mask = sv_cache_info.gps_used_mask; sv_meta.systemId = SYSTEM_ID_GPS; + sv_meta.svTypeMask |= (1 << GNSS_SV_TYPE_SBAS); switch (signalType) { case GNSS_SIGNAL_GPS_L1CA: sv_meta.svCount = sv_cache_info.gps_l1_count; @@ -629,7 +632,7 @@ static uint32_t loc_nmea_generate_GSA(const GpsLocationExtended &locationExtende uint32_t svIdOffset = sv_meta_p->svIdOffset; uint64_t mask = sv_meta_p->mask; - if(sv_meta_p->svType != GNSS_SV_TYPE_GLONASS) { + if (!(sv_meta_p->svTypeMask & (1 << GNSS_SV_TYPE_GLONASS))) { svIdOffset = 0; } @@ -762,7 +765,7 @@ static void loc_nmea_generate_GSV(const GnssSvNotification &svNotify, return; } - if(GNSS_SV_TYPE_GLONASS == sv_meta_p->svType) { + if ((1 << GNSS_SV_TYPE_GLONASS) & sv_meta_p->svTypeMask) { svIdOffset = 0; } svNumber = 1; @@ -820,9 +823,12 @@ static void loc_nmea_generate_GSV(const GnssSvNotification &svNotify, } } - if (sv_meta_p->svType == svNotify.gnssSvs[svNumber - 1].type && + if ((sv_meta_p->svTypeMask & (1 << svNotify.gnssSvs[svNumber - 1].type)) && sv_meta_p->signalId == convert_signalType_to_signalId(signalType)) { + if (GNSS_SV_TYPE_SBAS == svNotify.gnssSvs[svNumber - 1].type) { + svIdOffset = SBAS_SV_ID_OFFSET; + } length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,", svNotify.gnssSvs[svNumber - 1].svId - svIdOffset, (int)(0.5 + svNotify.gnssSvs[svNumber - 1].elevation), //float to int @@ -2096,7 +2102,8 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify, //Count GPS SVs for saparating GPS from GLONASS and throw others for (uint32_t svOffset = 0; svOffset < svNotify.count; svOffset++) { - if (GNSS_SV_TYPE_GPS == svNotify.gnssSvs[svOffset].type) + if ((GNSS_SV_TYPE_GPS == svNotify.gnssSvs[svOffset].type) || + (GNSS_SV_TYPE_SBAS == svNotify.gnssSvs[svOffset].type)) { // cache the used in fix mask, as it will be needed to send $GPGSA // during the position report @@ -2111,7 +2118,7 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify, } else if (GNSS_SIGNAL_GPS_L2 == svNotify.gnssSvs[svOffset].gnssSignalTypeMask) { sv_cache_info.gps_l2_count++; } else { - // GNSS_SIGNAL_GPS_L1CA or default + // GNSS_SIGNAL_GPS_L1CA, GNSS_SIGNAL_SBAS_L1 or default // If no signal type in report, it means default L1 sv_cache_info.gps_l1_count++; } |