summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoss Zhou <zhouh@codeaurora.org>2020-12-21 21:07:24 +0800
committerHoss Zhou <zhouh@codeaurora.org>2020-12-28 13:14:53 +0800
commit63623172918a576e1dcfad03a3f9e67764e66ea4 (patch)
tree1987d669deac8e634d9cda8c6cc91e1d51dd4d33
parent5c4f7f8c19024886049d63fad25b8ee40bca926d (diff)
support SBAS SVs report in HLOS Nmea
Change-Id: I2419b6c9d3f074a7d521d9fd8ad3de5698976b31 CRs-Fixed: 2837227
-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++;
}