Merge "SV "in-use" flags are not being set correctly for multiband enabled devices"
This commit is contained in:
commit
82c8af81ee
3 changed files with 121 additions and 6 deletions
|
@ -95,7 +95,10 @@ GnssAdapter::GnssAdapter() :
|
|||
mAllowFlpNetworkFixes(0),
|
||||
mGnssEnergyConsumedCb(nullptr),
|
||||
mPowerStateCb(nullptr),
|
||||
mIsE911Session(NULL)
|
||||
mIsE911Session(NULL),
|
||||
mGnssMbSvIdUsedInPosition{},
|
||||
mGnssMbSvIdUsedInPosAvail(false),
|
||||
mGnssSignalType()
|
||||
{
|
||||
LOC_LOGD("%s]: Constructor %p", __func__, this);
|
||||
mLocPositionMode.mode = LOC_POSITION_MODE_INVALID;
|
||||
|
@ -3137,10 +3140,18 @@ GnssAdapter::reportPosition(const UlpLocation& ulpLocation,
|
|||
}
|
||||
|
||||
mGnssSvIdUsedInPosAvail = false;
|
||||
mGnssMbSvIdUsedInPosAvail = false;
|
||||
if (reportToGnssClient) {
|
||||
if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA) {
|
||||
mGnssSvIdUsedInPosAvail = true;
|
||||
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,
|
||||
|
@ -3211,27 +3222,103 @@ GnssAdapter::reportSv(GnssSvNotification& svNotify)
|
|||
switch (svNotify.gnssSvs[i].type) {
|
||||
case GNSS_SV_TYPE_GPS:
|
||||
if (mGnssSvIdUsedInPosAvail) {
|
||||
svUsedIdMask = mGnssSvIdUsedInPosition.gps_sv_used_ids_mask;
|
||||
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;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GNSS_SV_TYPE_GLONASS:
|
||||
if (mGnssSvIdUsedInPosAvail) {
|
||||
svUsedIdMask = mGnssSvIdUsedInPosition.glo_sv_used_ids_mask;
|
||||
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;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GNSS_SV_TYPE_BEIDOU:
|
||||
if (mGnssSvIdUsedInPosAvail) {
|
||||
svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask;
|
||||
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;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GNSS_SV_TYPE_GALILEO:
|
||||
if (mGnssSvIdUsedInPosAvail) {
|
||||
svUsedIdMask = mGnssSvIdUsedInPosition.gal_sv_used_ids_mask;
|
||||
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;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GNSS_SV_TYPE_QZSS:
|
||||
if (mGnssSvIdUsedInPosAvail) {
|
||||
svUsedIdMask = mGnssSvIdUsedInPosition.qzss_sv_used_ids_mask;
|
||||
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;
|
||||
}
|
||||
}
|
||||
// QZSS SV id's need to reported as it is to framework, since
|
||||
// framework expects it as it is. See GnssStatus.java.
|
||||
|
|
|
@ -145,6 +145,9 @@ class GnssAdapter : public LocAdapterBase {
|
|||
LocPosMode mLocPositionMode;
|
||||
GnssSvUsedInPosition mGnssSvIdUsedInPosition;
|
||||
bool mGnssSvIdUsedInPosAvail;
|
||||
GnssSvMbUsedInPosition mGnssMbSvIdUsedInPosition;
|
||||
bool mGnssMbSvIdUsedInPosAvail;
|
||||
GnssSignalTypeMask mGnssSignalType[GNSS_SV_MAX];
|
||||
|
||||
/* ==== CONTROL ======================================================================== */
|
||||
LocationControlCallbacks mControlCallbacks;
|
||||
|
|
|
@ -373,6 +373,8 @@ typedef uint64_t GpsLocationExtendedFlags;
|
|||
#define GPS_LOCATION_EXTENDED_HAS_TIME_UNC 0x100000000
|
||||
/** GpsLocationExtended has heading rate **/
|
||||
#define GPS_LOCATION_EXTENDED_HAS_HEADING_RATE 0x200000000
|
||||
/** GpsLocationExtended has multiband signals **/
|
||||
#define GPS_LOCATION_EXTENDED_HAS_MULTIBAND 0x400000000
|
||||
|
||||
typedef uint32_t LocNavSolutionMask;
|
||||
/* Bitmask to specify whether SBAS ionospheric correction is used */
|
||||
|
@ -467,6 +469,27 @@ typedef struct {
|
|||
uint64_t qzss_sv_used_ids_mask;
|
||||
} 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 */
|
||||
typedef struct {
|
||||
/** Contains Body frame LocPosDataMask bits. */
|
||||
|
@ -689,6 +712,8 @@ typedef struct {
|
|||
Gnss_ApTimeStampStructType timeStamp;
|
||||
/** Gnss sv used in position data */
|
||||
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 */
|
||||
LocNavSolutionMask navSolutionMask;
|
||||
/** Position technology used in computing this fix */
|
||||
|
|
Loading…
Reference in a new issue