SV "in-use" flags are not being set correctly for
multiband enabled devices Change-Id: I875b535063c6aa6ecb713c7b6abff123d8402d62 CRs-fixed: 2443087
This commit is contained in:
parent
4d6bb2da93
commit
76e761da5a
3 changed files with 121 additions and 6 deletions
|
@ -95,7 +95,10 @@ GnssAdapter::GnssAdapter() :
|
||||||
mAllowFlpNetworkFixes(0),
|
mAllowFlpNetworkFixes(0),
|
||||||
mGnssEnergyConsumedCb(nullptr),
|
mGnssEnergyConsumedCb(nullptr),
|
||||||
mPowerStateCb(nullptr),
|
mPowerStateCb(nullptr),
|
||||||
mIsE911Session(NULL)
|
mIsE911Session(NULL),
|
||||||
|
mGnssMbSvIdUsedInPosition{},
|
||||||
|
mGnssMbSvIdUsedInPosAvail(false),
|
||||||
|
mGnssSignalType()
|
||||||
{
|
{
|
||||||
LOC_LOGD("%s]: Constructor %p", __func__, this);
|
LOC_LOGD("%s]: Constructor %p", __func__, this);
|
||||||
mLocPositionMode.mode = LOC_POSITION_MODE_INVALID;
|
mLocPositionMode.mode = LOC_POSITION_MODE_INVALID;
|
||||||
|
@ -3136,10 +3139,18 @@ GnssAdapter::reportPosition(const UlpLocation& ulpLocation,
|
||||||
}
|
}
|
||||||
|
|
||||||
mGnssSvIdUsedInPosAvail = false;
|
mGnssSvIdUsedInPosAvail = false;
|
||||||
|
mGnssMbSvIdUsedInPosAvail = false;
|
||||||
if (reportToGnssClient) {
|
if (reportToGnssClient) {
|
||||||
if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA) {
|
if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA) {
|
||||||
mGnssSvIdUsedInPosAvail = true;
|
mGnssSvIdUsedInPosAvail = true;
|
||||||
mGnssSvIdUsedInPosition = locationExtended.gnss_sv_used_ids;
|
mGnssSvIdUsedInPosition = locationExtended.gnss_sv_used_ids;
|
||||||
|
if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_MULTIBAND) {
|
||||||
|
mGnssMbSvIdUsedInPosAvail = true;
|
||||||
|
mGnssMbSvIdUsedInPosition = locationExtended.gnss_mb_sv_used_ids;
|
||||||
|
for (int i = 0; i < GNSS_SV_MAX; i++) {
|
||||||
|
mGnssSignalType[i] = locationExtended.measUsageInfo[i].gnssSignalType;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if engine hub is running and the fix is from sensor, e.g.: DRE,
|
// if engine hub is running and the fix is from sensor, e.g.: DRE,
|
||||||
|
@ -3210,28 +3221,104 @@ GnssAdapter::reportSv(GnssSvNotification& svNotify)
|
||||||
switch (svNotify.gnssSvs[i].type) {
|
switch (svNotify.gnssSvs[i].type) {
|
||||||
case GNSS_SV_TYPE_GPS:
|
case GNSS_SV_TYPE_GPS:
|
||||||
if (mGnssSvIdUsedInPosAvail) {
|
if (mGnssSvIdUsedInPosAvail) {
|
||||||
|
if (mGnssMbSvIdUsedInPosAvail) {
|
||||||
|
switch (mGnssSignalType[i]) {
|
||||||
|
case GNSS_SIGNAL_GPS_L1CA:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gps_l1ca_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GPS_L1C:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gps_l1c_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GPS_L2:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gps_l2_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GPS_L5:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gps_l5_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
svUsedIdMask = mGnssSvIdUsedInPosition.gps_sv_used_ids_mask;
|
svUsedIdMask = mGnssSvIdUsedInPosition.gps_sv_used_ids_mask;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GNSS_SV_TYPE_GLONASS:
|
case GNSS_SV_TYPE_GLONASS:
|
||||||
if (mGnssSvIdUsedInPosAvail) {
|
if (mGnssSvIdUsedInPosAvail) {
|
||||||
|
if (mGnssMbSvIdUsedInPosAvail) {
|
||||||
|
switch (mGnssSignalType[i]) {
|
||||||
|
case GNSS_SIGNAL_GLONASS_G1:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.glo_g1_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GLONASS_G2:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.glo_g2_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
svUsedIdMask = mGnssSvIdUsedInPosition.glo_sv_used_ids_mask;
|
svUsedIdMask = mGnssSvIdUsedInPosition.glo_sv_used_ids_mask;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GNSS_SV_TYPE_BEIDOU:
|
case GNSS_SV_TYPE_BEIDOU:
|
||||||
if (mGnssSvIdUsedInPosAvail) {
|
if (mGnssSvIdUsedInPosAvail) {
|
||||||
|
if (mGnssMbSvIdUsedInPosAvail) {
|
||||||
|
switch (mGnssSignalType[i]) {
|
||||||
|
case GNSS_SIGNAL_BEIDOU_B1I:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b1i_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_BEIDOU_B1C:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b1c_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_BEIDOU_B2I:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b2i_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_BEIDOU_B2AI:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b2ai_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask;
|
svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GNSS_SV_TYPE_GALILEO:
|
case GNSS_SV_TYPE_GALILEO:
|
||||||
if (mGnssSvIdUsedInPosAvail) {
|
if (mGnssSvIdUsedInPosAvail) {
|
||||||
|
if (mGnssMbSvIdUsedInPosAvail) {
|
||||||
|
switch (mGnssSignalType[i]) {
|
||||||
|
case GNSS_SIGNAL_GALILEO_E1:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gal_e1_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GALILEO_E5A:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gal_e5a_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_GALILEO_E5B:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.gal_e5b_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
svUsedIdMask = mGnssSvIdUsedInPosition.gal_sv_used_ids_mask;
|
svUsedIdMask = mGnssSvIdUsedInPosition.gal_sv_used_ids_mask;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GNSS_SV_TYPE_QZSS:
|
case GNSS_SV_TYPE_QZSS:
|
||||||
if (mGnssSvIdUsedInPosAvail) {
|
if (mGnssSvIdUsedInPosAvail) {
|
||||||
|
if (mGnssMbSvIdUsedInPosAvail) {
|
||||||
|
switch (mGnssSignalType[i]) {
|
||||||
|
case GNSS_SIGNAL_QZSS_L1CA:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.qzss_l1ca_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_QZSS_L1S:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.qzss_l1s_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_QZSS_L2:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.qzss_l2_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
case GNSS_SIGNAL_QZSS_L5:
|
||||||
|
svUsedIdMask = mGnssMbSvIdUsedInPosition.qzss_l5_sv_used_ids_mask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
svUsedIdMask = mGnssSvIdUsedInPosition.qzss_sv_used_ids_mask;
|
svUsedIdMask = mGnssSvIdUsedInPosition.qzss_sv_used_ids_mask;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// QZSS SV id's need to reported as it is to framework, since
|
// QZSS SV id's need to reported as it is to framework, since
|
||||||
// framework expects it as it is. See GnssStatus.java.
|
// framework expects it as it is. See GnssStatus.java.
|
||||||
// SV id passed to here by LocApi is 1-based.
|
// SV id passed to here by LocApi is 1-based.
|
||||||
|
|
|
@ -145,6 +145,9 @@ class GnssAdapter : public LocAdapterBase {
|
||||||
LocPosMode mLocPositionMode;
|
LocPosMode mLocPositionMode;
|
||||||
GnssSvUsedInPosition mGnssSvIdUsedInPosition;
|
GnssSvUsedInPosition mGnssSvIdUsedInPosition;
|
||||||
bool mGnssSvIdUsedInPosAvail;
|
bool mGnssSvIdUsedInPosAvail;
|
||||||
|
GnssSvMbUsedInPosition mGnssMbSvIdUsedInPosition;
|
||||||
|
bool mGnssMbSvIdUsedInPosAvail;
|
||||||
|
GnssSignalTypeMask mGnssSignalType[GNSS_SV_MAX];
|
||||||
|
|
||||||
/* ==== CONTROL ======================================================================== */
|
/* ==== CONTROL ======================================================================== */
|
||||||
LocationControlCallbacks mControlCallbacks;
|
LocationControlCallbacks mControlCallbacks;
|
||||||
|
|
|
@ -373,6 +373,8 @@ typedef uint64_t GpsLocationExtendedFlags;
|
||||||
#define GPS_LOCATION_EXTENDED_HAS_TIME_UNC 0x100000000
|
#define GPS_LOCATION_EXTENDED_HAS_TIME_UNC 0x100000000
|
||||||
/** GpsLocationExtended has heading rate **/
|
/** GpsLocationExtended has heading rate **/
|
||||||
#define GPS_LOCATION_EXTENDED_HAS_HEADING_RATE 0x200000000
|
#define GPS_LOCATION_EXTENDED_HAS_HEADING_RATE 0x200000000
|
||||||
|
/** GpsLocationExtended has multiband signals **/
|
||||||
|
#define GPS_LOCATION_EXTENDED_HAS_MULTIBAND 0x400000000
|
||||||
|
|
||||||
typedef uint32_t LocNavSolutionMask;
|
typedef uint32_t LocNavSolutionMask;
|
||||||
/* Bitmask to specify whether SBAS ionospheric correction is used */
|
/* Bitmask to specify whether SBAS ionospheric correction is used */
|
||||||
|
@ -467,6 +469,27 @@ typedef struct {
|
||||||
uint64_t qzss_sv_used_ids_mask;
|
uint64_t qzss_sv_used_ids_mask;
|
||||||
} GnssSvUsedInPosition;
|
} GnssSvUsedInPosition;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint64_t gps_l1ca_sv_used_ids_mask; // GPS L1CA
|
||||||
|
uint64_t gps_l1c_sv_used_ids_mask; // GPS L1C
|
||||||
|
uint64_t gps_l2_sv_used_ids_mask; // GPS L2
|
||||||
|
uint64_t gps_l5_sv_used_ids_mask; // GPS L5
|
||||||
|
uint64_t glo_g1_sv_used_ids_mask; // GLO G1
|
||||||
|
uint64_t glo_g2_sv_used_ids_mask; // GLO G2
|
||||||
|
uint64_t gal_e1_sv_used_ids_mask; // GAL E1
|
||||||
|
uint64_t gal_e5a_sv_used_ids_mask; // GAL E5A
|
||||||
|
uint64_t gal_e5b_sv_used_ids_mask; // GAL E5B
|
||||||
|
uint64_t bds_b1i_sv_used_ids_mask; // BDS B1I
|
||||||
|
uint64_t bds_b1c_sv_used_ids_mask; // BDS B1C
|
||||||
|
uint64_t bds_b2i_sv_used_ids_mask; // BDS B2I
|
||||||
|
uint64_t bds_b2ai_sv_used_ids_mask; // BDS B2AI
|
||||||
|
uint64_t qzss_l1ca_sv_used_ids_mask; // QZSS L1CA
|
||||||
|
uint64_t qzss_l1s_sv_used_ids_mask; // QZSS L1S
|
||||||
|
uint64_t qzss_l2_sv_used_ids_mask; // QZSS L2
|
||||||
|
uint64_t qzss_l5_sv_used_ids_mask; // QZSS L5
|
||||||
|
uint64_t sbas_l1_sv_used_ids_mask; // SBAS L1
|
||||||
|
} GnssSvMbUsedInPosition;
|
||||||
|
|
||||||
/* Body Frame parameters */
|
/* Body Frame parameters */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** Contains Body frame LocPosDataMask bits. */
|
/** Contains Body frame LocPosDataMask bits. */
|
||||||
|
@ -689,6 +712,8 @@ typedef struct {
|
||||||
Gnss_ApTimeStampStructType timeStamp;
|
Gnss_ApTimeStampStructType timeStamp;
|
||||||
/** Gnss sv used in position data */
|
/** Gnss sv used in position data */
|
||||||
GnssSvUsedInPosition gnss_sv_used_ids;
|
GnssSvUsedInPosition gnss_sv_used_ids;
|
||||||
|
/** Gnss sv used in position data for multiband */
|
||||||
|
GnssSvMbUsedInPosition gnss_mb_sv_used_ids;
|
||||||
/** Nav solution mask to indicate sbas corrections */
|
/** Nav solution mask to indicate sbas corrections */
|
||||||
LocNavSolutionMask navSolutionMask;
|
LocNavSolutionMask navSolutionMask;
|
||||||
/** Position technology used in computing this fix */
|
/** Position technology used in computing this fix */
|
||||||
|
|
Loading…
Reference in a new issue