Merge "support signal ID in NMEA"

This commit is contained in:
Linux Build Service Account 2018-09-18 14:50:35 -07:00 committed by Gerrit - the friendly Code Review server
commit e183c75151
3 changed files with 269 additions and 73 deletions

View file

@ -507,21 +507,25 @@ typedef enum {
/** GALILEO E5A RF Band */ /** GALILEO E5A RF Band */
GNSS_SIGNAL_GALILEO_E5A = (1<<7), GNSS_SIGNAL_GALILEO_E5A = (1<<7),
/** GALILEO E5B RF Band */ /** GALILEO E5B RF Band */
GNSS_SIGNAL_GALILIEO_E5B = (1<<8), GNSS_SIGNAL_GALILEO_E5B = (1<<8),
/** BEIDOU B1 RF Band */ /** BEIDOU B1_I RF Band */
GNSS_SIGNAL_BEIDOU_B1 = (1<<9), GNSS_SIGNAL_BEIDOU_B1I = (1<<9),
/** BEIDOU B2 RF Band */ /** BEIDOU B1C RF Band */
GNSS_SIGNAL_BEIDOU_B2 = (1<<10), GNSS_SIGNAL_BEIDOU_B1C = (1<<10),
/** BEIDOU B2_I RF Band */
GNSS_SIGNAL_BEIDOU_B2I = (1<<11),
/** BEIDOU B2A_I RF Band */
GNSS_SIGNAL_BEIDOU_B2AI = (1<<12),
/** QZSS L1CA RF Band */ /** QZSS L1CA RF Band */
GNSS_SIGNAL_QZSS_L1CA = (1<<11), GNSS_SIGNAL_QZSS_L1CA = (1<<13),
/** QZSS L1S RF Band */ /** QZSS L1S RF Band */
GNSS_SIGNAL_QZSS_L1S = (1<<12), GNSS_SIGNAL_QZSS_L1S = (1<<14),
/** QZSS L2 RF Band */ /** QZSS L2 RF Band */
GNSS_SIGNAL_QZSS_L2 = (1<<13), GNSS_SIGNAL_QZSS_L2 = (1<<15),
/** QZSS L5 RF Band */ /** QZSS L5 RF Band */
GNSS_SIGNAL_QZSS_L5 = (1<<14), GNSS_SIGNAL_QZSS_L5 = (1<<16),
/** SBAS L1 RF Band */ /** SBAS L1 RF Band */
GNSS_SIGNAL_SBAS_L1 = (1<<15) GNSS_SIGNAL_SBAS_L1 = (1<<17)
} GnssSignalTypeBits; } GnssSignalTypeBits;
typedef enum typedef enum

View file

@ -536,20 +536,24 @@ typedef uint32_t GnssSignalTypeMask;
#define GNSS_SIGNAL_GALILEO_E5A ((GnssSignalTypeMask)0x00000080ul) #define GNSS_SIGNAL_GALILEO_E5A ((GnssSignalTypeMask)0x00000080ul)
/** GALILEO E5B RF Band */ /** GALILEO E5B RF Band */
#define GNSS_SIGNAL_GALILIEO_E5B ((GnssSignalTypeMask)0x00000100ul) #define GNSS_SIGNAL_GALILIEO_E5B ((GnssSignalTypeMask)0x00000100ul)
/** BEIDOU B1 RF Band */ /** BEIDOU B1_I RF Band */
#define GNSS_SIGNAL_BEIDOU_B1 ((GnssSignalTypeMask)0x00000200ul) #define GNSS_SIGNAL_BEIDOU_B1I ((GnssSignalTypeMask)0x00000200ul)
/** BEIDOU B2 RF Band */ /** BEIDOU B1C RF Band */
#define GNSS_SIGNAL_BEIDOU_B2 ((GnssSignalTypeMask)0x00000400ul) #define GNSS_SIGNAL_BEIDOU_B1C ((GnssSignalTypeMask)0x00000400ul)
/** BEIDOU B2_I RF Band */
#define GNSS_SIGNAL_BEIDOU_B2I ((GnssSignalTypeMask)0x00000800ul)
/** BEIDOU B2A_I RF Band */
#define GNSS_SIGNAL_BEIDOU_B2AI ((GnssSignalTypeMask)0x00001000ul)
/** QZSS L1CA RF Band */ /** QZSS L1CA RF Band */
#define GNSS_SIGNAL_QZSS_L1CA ((GnssSignalTypeMask)0x00000800ul) #define GNSS_SIGNAL_QZSS_L1CA ((GnssSignalTypeMask)0x00002000ul)
/** QZSS L1S RF Band */ /** QZSS L1S RF Band */
#define GNSS_SIGNAL_QZSS_L1S ((GnssSignalTypeMask)0x00001000ul) #define GNSS_SIGNAL_QZSS_L1S ((GnssSignalTypeMask)0x00004000ul)
/** QZSS L2 RF Band */ /** QZSS L2 RF Band */
#define GNSS_SIGNAL_QZSS_L2 ((GnssSignalTypeMask)0x00002000ul) #define GNSS_SIGNAL_QZSS_L2 ((GnssSignalTypeMask)0x00008000ul)
/** QZSS L5 RF Band */ /** QZSS L5 RF Band */
#define GNSS_SIGNAL_QZSS_L5 ((GnssSignalTypeMask)0x00004000ul) #define GNSS_SIGNAL_QZSS_L5 ((GnssSignalTypeMask)0x00010000ul)
/** SBAS L1 RF Band */ /** SBAS L1 RF Band */
#define GNSS_SIGNAL_SBAS_L1 ((GnssSignalTypeMask)0x00008000ul) #define GNSS_SIGNAL_SBAS_L1 ((GnssSignalTypeMask)0x00020000ul)
typedef uint16_t GnssMeasUsageStatusBitMask; typedef uint16_t GnssMeasUsageStatusBitMask;
/** Used in fix */ /** Used in fix */

View file

@ -45,6 +45,39 @@
#define SYSTEM_ID_BEIDOU 4 #define SYSTEM_ID_BEIDOU 4
#define SYSTEM_ID_QZSS 5 #define SYSTEM_ID_QZSS 5
//GNSS signal id according to NMEA spec
#define SIGNAL_ID_ALL_SIGNALS 0
#define SIGNAL_ID_GPS_L1CA 1
#define SIGNAL_ID_GPS_L1P 2
#define SIGNAL_ID_GPS_L1M 3
#define SIGNAL_ID_GPS_L2P 4
#define SIGNAL_ID_GPS_L2CM 5
#define SIGNAL_ID_GPS_L2CL 6
#define SIGNAL_ID_GPS_L5I 7
#define SIGNAL_ID_GPS_L5Q 8
#define SIGNAL_ID_GLO_G1CA 1
#define SIGNAL_ID_GLO_G1P 2
#define SIGNAL_ID_GLO_G2CA 3
#define SIGNAL_ID_GLO_G2P 4
#define SIGNAL_ID_GAL_E5A 1
#define SIGNAL_ID_GAL_E5B 2
#define SIGNAL_ID_GAL_E5AB 3
#define SIGNAL_ID_GAL_E6A 4
#define SIGNAL_ID_GAL_E6BC 5
#define SIGNAL_ID_GAL_L1A 6
#define SIGNAL_ID_GAL_L1BC 7
//Extended signal id
#define SIGNAL_ID_BDS_B1I 1
#define SIGNAL_ID_BDS_B1C 2
#define SIGNAL_ID_BDS_B2I 3
#define SIGNAL_ID_BDS_B2AI 4
typedef struct loc_nmea_sv_meta_s typedef struct loc_nmea_sv_meta_s
{ {
char talker[3]; char talker[3];
@ -63,16 +96,95 @@ typedef struct loc_sv_cache_info_s
uint32_t gal_used_mask; uint32_t gal_used_mask;
uint32_t qzss_used_mask; uint32_t qzss_used_mask;
uint32_t bds_used_mask; uint32_t bds_used_mask;
uint32_t gps_count; uint32_t gps_l1_count;
uint32_t glo_count; uint32_t gps_l5_count;
uint32_t gal_count; uint32_t glo_g1_count;
uint32_t qzss_count; uint32_t glo_g2_count;
uint32_t bds_count; uint32_t gal_e1_count;
uint32_t gal_e5_count;
uint32_t qzss_l1_count;
uint32_t qzss_l5_count;
uint32_t bds_b1_count;
uint32_t bds_b2_count;
float hdop; float hdop;
float pdop; float pdop;
float vdop; float vdop;
} loc_sv_cache_info; } loc_sv_cache_info;
/*===========================================================================
FUNCTION convert_signalType_to_signalId
DESCRIPTION
convert signalType to signal ID
DEPENDENCIES
NONE
RETURN VALUE
value of signal ID
SIDE EFFECTS
N/A
===========================================================================*/
static uint32_t convert_signalType_to_signalId(GnssSignalTypeMask signalType)
{
uint32_t signalId = SIGNAL_ID_ALL_SIGNALS;
switch (signalType) {
case GNSS_SIGNAL_GPS_L1CA:
signalId = SIGNAL_ID_GPS_L1CA;
break;
case GNSS_SIGNAL_GPS_L2:
signalId = SIGNAL_ID_GPS_L2CL;
break;
case GNSS_SIGNAL_GPS_L5:
signalId = SIGNAL_ID_GPS_L5Q;
break;
case GNSS_SIGNAL_GLONASS_G1:
signalId = SIGNAL_ID_GLO_G1CA;
break;
case GNSS_SIGNAL_GLONASS_G2:
signalId = SIGNAL_ID_GLO_G2CA;
break;
case GNSS_SIGNAL_GALILEO_E1:
signalId = SIGNAL_ID_GAL_L1BC;
break;
case GNSS_SIGNAL_GALILEO_E5A:
signalId = SIGNAL_ID_GAL_E5A;
break;
case GNSS_SIGNAL_GALILEO_E5B:
signalId = SIGNAL_ID_GAL_E5B;
break;
case GNSS_SIGNAL_QZSS_L1CA:
signalId = SIGNAL_ID_GPS_L1CA;
break;
case GNSS_SIGNAL_QZSS_L2:
signalId = SIGNAL_ID_GPS_L2CL;
break;
case GNSS_SIGNAL_QZSS_L5:
signalId = SIGNAL_ID_GPS_L5Q;
break;
case GNSS_SIGNAL_BEIDOU_B1I:
signalId = SIGNAL_ID_BDS_B1I;
break;
case GNSS_SIGNAL_BEIDOU_B1C:
signalId = SIGNAL_ID_BDS_B1C;
break;
case GNSS_SIGNAL_BEIDOU_B2I:
signalId = SIGNAL_ID_BDS_B2I;
break;
case GNSS_SIGNAL_BEIDOU_B2AI:
signalId = SIGNAL_ID_BDS_B2AI;
break;
default:
signalId = SIGNAL_ID_ALL_SIGNALS;
}
return signalId;
}
/*=========================================================================== /*===========================================================================
FUNCTION loc_nmea_sv_meta_init FUNCTION loc_nmea_sv_meta_init
@ -92,6 +204,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, loc_sv_cache_info& sv_cache_info,
GnssSvType svType, GnssSvType svType,
GnssSignalTypeMask signalType,
bool needCombine) bool needCombine)
{ {
memset(&sv_meta, 0, sizeof(sv_meta)); memset(&sv_meta, 0, sizeof(sv_meta));
@ -103,50 +216,66 @@ static loc_nmea_sv_meta* loc_nmea_sv_meta_init(loc_nmea_sv_meta& sv_meta,
sv_meta.talker[0] = 'G'; sv_meta.talker[0] = 'G';
sv_meta.talker[1] = 'P'; sv_meta.talker[1] = 'P';
sv_meta.mask = sv_cache_info.gps_used_mask; sv_meta.mask = sv_cache_info.gps_used_mask;
sv_meta.svCount = sv_cache_info.gps_count;
sv_meta.signalId = 1;
sv_meta.systemId = SYSTEM_ID_GPS; sv_meta.systemId = SYSTEM_ID_GPS;
if (GNSS_SIGNAL_GPS_L1CA == signalType) {
sv_meta.svCount = sv_cache_info.gps_l1_count;
} else if (GNSS_SIGNAL_GPS_L5 == signalType) {
sv_meta.svCount = sv_cache_info.gps_l5_count;
}
break; break;
case GNSS_SV_TYPE_GLONASS: case GNSS_SV_TYPE_GLONASS:
sv_meta.talker[0] = 'G'; sv_meta.talker[0] = 'G';
sv_meta.talker[1] = 'L'; sv_meta.talker[1] = 'L';
sv_meta.mask = sv_cache_info.glo_used_mask; sv_meta.mask = sv_cache_info.glo_used_mask;
sv_meta.svCount = sv_cache_info.glo_count;
// GLONASS SV ids are from 65-96 // GLONASS SV ids are from 65-96
sv_meta.svIdOffset = GLONASS_SV_ID_OFFSET; sv_meta.svIdOffset = GLONASS_SV_ID_OFFSET;
sv_meta.signalId = 1;
sv_meta.systemId = SYSTEM_ID_GLONASS; sv_meta.systemId = SYSTEM_ID_GLONASS;
if (GNSS_SIGNAL_GLONASS_G1 == signalType) {
sv_meta.svCount = sv_cache_info.glo_g1_count;
} else if (GNSS_SIGNAL_GLONASS_G2 == signalType) {
sv_meta.svCount = sv_cache_info.glo_g2_count;
}
break; break;
case GNSS_SV_TYPE_GALILEO: case GNSS_SV_TYPE_GALILEO:
sv_meta.talker[0] = 'G'; sv_meta.talker[0] = 'G';
sv_meta.talker[1] = 'A'; sv_meta.talker[1] = 'A';
sv_meta.mask = sv_cache_info.gal_used_mask; sv_meta.mask = sv_cache_info.gal_used_mask;
sv_meta.svCount = sv_cache_info.gal_count;
sv_meta.signalId = 7;
sv_meta.systemId = SYSTEM_ID_GALILEO; sv_meta.systemId = SYSTEM_ID_GALILEO;
if (GNSS_SIGNAL_GALILEO_E1 == signalType) {
sv_meta.svCount = sv_cache_info.gal_e1_count;
} else if (GNSS_SIGNAL_GALILEO_E5A == signalType) {
sv_meta.svCount = sv_cache_info.gal_e5_count;
}
break; break;
case GNSS_SV_TYPE_QZSS: case GNSS_SV_TYPE_QZSS:
sv_meta.talker[0] = 'P'; sv_meta.talker[0] = 'P';
sv_meta.talker[1] = 'Q'; sv_meta.talker[1] = 'Q';
sv_meta.mask = sv_cache_info.qzss_used_mask; sv_meta.mask = sv_cache_info.qzss_used_mask;
sv_meta.svCount = sv_cache_info.qzss_count;
// QZSS SV ids are from 193-197. So keep svIdOffset 0 // QZSS SV ids are from 193-197. So keep svIdOffset 0
sv_meta.signalId = 0;
sv_meta.systemId = SYSTEM_ID_QZSS; sv_meta.systemId = SYSTEM_ID_QZSS;
if (GNSS_SIGNAL_QZSS_L1CA == signalType) {
sv_meta.svCount = sv_cache_info.qzss_l1_count;
} else if (GNSS_SIGNAL_QZSS_L5 == signalType) {
sv_meta.svCount = sv_cache_info.qzss_l5_count;
}
break; break;
case GNSS_SV_TYPE_BEIDOU: case GNSS_SV_TYPE_BEIDOU:
sv_meta.talker[0] = 'P'; sv_meta.talker[0] = 'P';
sv_meta.talker[1] = 'Q'; sv_meta.talker[1] = 'Q';
sv_meta.mask = sv_cache_info.bds_used_mask; sv_meta.mask = sv_cache_info.bds_used_mask;
sv_meta.svCount = sv_cache_info.bds_count;
// BDS SV ids are from 201-235. So keep svIdOffset 0 // BDS SV ids are from 201-235. So keep svIdOffset 0
sv_meta.signalId = 0;
sv_meta.systemId = SYSTEM_ID_BEIDOU; sv_meta.systemId = SYSTEM_ID_BEIDOU;
if (GNSS_SIGNAL_BEIDOU_B1I == signalType) {
sv_meta.svCount = sv_cache_info.bds_b1_count;
} else if (GNSS_SIGNAL_BEIDOU_B2AI == signalType) {
sv_meta.svCount = sv_cache_info.bds_b2_count;
}
break; break;
default: default:
LOC_LOGE("NMEA Error unknow constellation type: %d", svType); LOC_LOGE("NMEA Error unknow constellation type: %d", svType);
return NULL; return NULL;
} }
sv_meta.signalId = convert_signalType_to_signalId(signalType);
if (needCombine && if (needCombine &&
(sv_cache_info.gps_used_mask ? 1 : 0) + (sv_cache_info.gps_used_mask ? 1 : 0) +
(sv_cache_info.glo_used_mask ? 1 : 0) + (sv_cache_info.glo_used_mask ? 1 : 0) +
@ -371,7 +500,6 @@ static void loc_nmea_generate_GSV(const GnssSvNotification &svNotify,
const char* talker = sv_meta_p->talker; const char* talker = sv_meta_p->talker;
uint32_t svIdOffset = sv_meta_p->svIdOffset; uint32_t svIdOffset = sv_meta_p->svIdOffset;
int svCount = sv_meta_p->svCount; int svCount = sv_meta_p->svCount;
if (svCount <= 0) if (svCount <= 0)
{ {
// no svs in view, so just send a blank $--GSV sentence // no svs in view, so just send a blank $--GSV sentence
@ -403,7 +531,8 @@ static void loc_nmea_generate_GSV(const GnssSvNotification &svNotify,
for (int i=0; (svNumber <= svNotify.count) && (i < 4); svNumber++) for (int i=0; (svNumber <= svNotify.count) && (i < 4); svNumber++)
{ {
if (sv_meta_p->svType == svNotify.gnssSvs[svNumber - 1].type) if (sv_meta_p->svType == svNotify.gnssSvs[svNumber - 1].type && sv_meta_p->signalId ==
convert_signalType_to_signalId(svNotify.gnssSvs[svNumber-1].gnssSignalTypeMask))
{ {
length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,", length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
svNotify.gnssSvs[svNumber - 1].svId + svIdOffset, svNotify.gnssSvs[svNumber - 1].svId + svIdOffset,
@ -521,8 +650,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, sv_cache_info, GNSS_SV_TYPE_GPS, true), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS,
nmeaArraystr); GNSS_SIGNAL_GPS_L1CA, true), nmeaArraystr);
if (count > 0) if (count > 0)
{ {
svUsedCount += count; svUsedCount += count;
@ -535,8 +664,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, sv_cache_info, GNSS_SV_TYPE_GLONASS, true), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS,
nmeaArraystr); GNSS_SIGNAL_GLONASS_G1, true), nmeaArraystr);
if (count > 0) if (count > 0)
{ {
svUsedCount += count; svUsedCount += count;
@ -549,8 +678,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, sv_cache_info, GNSS_SV_TYPE_GALILEO, true), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO,
nmeaArraystr); GNSS_SIGNAL_GALILEO_E1, true), nmeaArraystr);
if (count > 0) if (count > 0)
{ {
svUsedCount += count; svUsedCount += count;
@ -563,8 +692,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, sv_cache_info, GNSS_SV_TYPE_QZSS, false), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS,
nmeaArraystr); GNSS_SIGNAL_QZSS_L1CA, false), nmeaArraystr);
if (count > 0) if (count > 0)
{ {
svUsedCount += count; svUsedCount += count;
@ -575,8 +704,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, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU,
nmeaArraystr); GNSS_SIGNAL_BEIDOU_B1I, false), nmeaArraystr);
if (count > 0) if (count > 0)
{ {
svUsedCount += count; svUsedCount += count;
@ -1019,7 +1148,11 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
{ {
sv_cache_info.gps_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1)); sv_cache_info.gps_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
} }
sv_cache_info.gps_count++; if (GNSS_SIGNAL_GPS_L1CA == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.gps_l1_count++;
} else if (GNSS_SIGNAL_GPS_L5 == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.gps_l5_count++;
}
} }
else if (GNSS_SV_TYPE_GLONASS == svNotify.gnssSvs[svNumber - 1].type) else if (GNSS_SV_TYPE_GLONASS == svNotify.gnssSvs[svNumber - 1].type)
{ {
@ -1031,7 +1164,11 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
{ {
sv_cache_info.glo_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1)); sv_cache_info.glo_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
} }
sv_cache_info.glo_count++; if (GNSS_SIGNAL_GLONASS_G1 == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.glo_g1_count++;
} else if (GNSS_SIGNAL_GLONASS_G2 == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask){
sv_cache_info.glo_g2_count++;
}
} }
else if (GNSS_SV_TYPE_GALILEO == svNotify.gnssSvs[svNumber - 1].type) else if (GNSS_SV_TYPE_GALILEO == svNotify.gnssSvs[svNumber - 1].type)
{ {
@ -1043,7 +1180,11 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
{ {
sv_cache_info.gal_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1)); sv_cache_info.gal_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
} }
sv_cache_info.gal_count++; if (GNSS_SIGNAL_GALILEO_E1 == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.gal_e1_count++;
} else if(GNSS_SIGNAL_GALILEO_E5A == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask){
sv_cache_info.gal_e5_count++;
}
} }
else if (GNSS_SV_TYPE_QZSS == svNotify.gnssSvs[svNumber - 1].type) else if (GNSS_SV_TYPE_QZSS == svNotify.gnssSvs[svNumber - 1].type)
{ {
@ -1055,7 +1196,11 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
{ {
sv_cache_info.qzss_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1)); sv_cache_info.qzss_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
} }
sv_cache_info.qzss_count++; if (GNSS_SIGNAL_QZSS_L1CA == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.qzss_l1_count++;
} else if (GNSS_SIGNAL_QZSS_L5 == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.qzss_l5_count++;
}
} }
else if (GNSS_SV_TYPE_BEIDOU == svNotify.gnssSvs[svNumber - 1].type) else if (GNSS_SV_TYPE_BEIDOU == svNotify.gnssSvs[svNumber - 1].type)
{ {
@ -1067,48 +1212,91 @@ void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
{ {
sv_cache_info.bds_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1)); sv_cache_info.bds_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
} }
sv_cache_info.bds_count++; if (GNSS_SIGNAL_BEIDOU_B1I == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask) {
sv_cache_info.bds_b1_count++;
} else if(GNSS_SIGNAL_BEIDOU_B2AI == svNotify.gnssSvs[svNumber - 1].gnssSignalTypeMask){
sv_cache_info.bds_b2_count++;
}
} }
} }
loc_nmea_sv_meta sv_meta; loc_nmea_sv_meta sv_meta;
// ------------------ // ---------------------
// ------$GPGSV------ // ------$GPGSV:L1CA----
// ------------------ // ---------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence), loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS, false), nmeaArraystr); loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS,
GNSS_SIGNAL_GPS_L1CA, false), nmeaArraystr);
// ------------------ // ---------------------
// ------$GLGSV------ // ------$GPGSV:L5------
// ------------------ // ---------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence), loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS, false), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS,
nmeaArraystr); GNSS_SIGNAL_GPS_L5, false), nmeaArraystr);
// ---------------------
// ------------------ // ------$GLGSV:G1------
// ------$GAGSV------ // ---------------------
// ------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence), loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO, false), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS,
nmeaArraystr); GNSS_SIGNAL_GLONASS_G1, false), nmeaArraystr);
// ---------------------
// ------$GLGSV:G2------
// ---------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS,
GNSS_SIGNAL_GLONASS_G2, false), nmeaArraystr);
// ---------------------
// ------$GAGSV:E1------
// ---------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO,
GNSS_SIGNAL_GALILEO_E1, false), nmeaArraystr);
// ------------------------- // -------------------------
// ------$PQGSV (QZSS)------ // ------$GAGSV:E5A---------
// ------------------------- // -------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO,
GNSS_SIGNAL_GALILEO_E5A, false), nmeaArraystr);
// -----------------------------
// ------$PQGSV (QZSS):L1CA-----
// -----------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence), loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS, false), nmeaArraystr); loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS,
GNSS_SIGNAL_QZSS_L1CA, false), nmeaArraystr);
// --------------------------- // -----------------------------
// ------$PQGSV (BEIDOU)------ // ------$PQGSV (QZSS):L5-------
// --------------------------- // -----------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence), loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false), loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS,
nmeaArraystr); GNSS_SIGNAL_QZSS_L5, false), nmeaArraystr);
// -----------------------------
// ------$PQGSV (BEIDOU:B1I)----
// -----------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU,
GNSS_SIGNAL_BEIDOU_B1I,false), nmeaArraystr);
// -----------------------------
// ------$PQGSV (BEIDOU:B2AI)---
// -----------------------------
loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU,
GNSS_SIGNAL_BEIDOU_B2AI,false), nmeaArraystr);
EXIT_LOG(%d, 0); EXIT_LOG(%d, 0);
} }