summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2020-12-28 16:33:54 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2020-12-28 16:33:53 -0800
commit2a11c779e14422583a0a233062d9ba57a5d305bb (patch)
tree6fb0818cdb2e0965d467cd9d6f42b9493798a4a9
parentceab78668aaaf497622bd67f13e1ca16bcca1a53 (diff)
parent63623172918a576e1dcfad03a3f9e67764e66ea4 (diff)
Merge "support SBAS SVs report in HLOS Nmea"
-rw-r--r--utils/loc_nmea.cpp21
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++;
}