From 61b7ed6bf0718c2b4a93350f130e8b13f980c823 Mon Sep 17 00:00:00 2001 From: Dante Russo Date: Wed, 15 May 2019 15:08:30 -0700 Subject: [PATCH 1/4] Fix few ASAN issues reported - Fix a Use After Free issue in Gnss Update Config If Engine Capabilities are not known yet at the time of the MsgGnssUpdateConfig, the ids arrray will be freed but the ids pointer will be copied into a new MsgGnssUpdateConfig that will access the ids array again - Issue in NetworkInfoDataItemBase which will result in array out of bound access which might result in heap buffer overflow. Change-Id: Ib5a6dc29fef9eb6676d4605f92d60f26a47d1d90 CRs-fixed: 2449980 --- core/data-items/DataItemConcreteTypesBase.h | 2 +- gnss/GnssAdapter.cpp | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/data-items/DataItemConcreteTypesBase.h b/core/data-items/DataItemConcreteTypesBase.h index 552d46a1..a6e68f1f 100644 --- a/core/data-items/DataItemConcreteTypesBase.h +++ b/core/data-items/DataItemConcreteTypesBase.h @@ -249,7 +249,7 @@ public: mId(NETWORKINFO_DATA_ITEM_ID) { memset (&mAllNetworkHandles, NETWORK_HANDLE_UNKNOWN, sizeof (mAllNetworkHandles)); - mAllNetworkHandles[type] = networkHandle; + mAllNetworkHandles[initialType] = networkHandle; } virtual ~NetworkInfoDataItemBase() {} inline virtual DataItemId getId() { return mId; } diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index e1143fd2..6558714e 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -997,9 +997,18 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config) mConfig(config), mCount(count), mIds(ids) {} + inline MsgGnssUpdateConfig(const MsgGnssUpdateConfig& obj) : + MsgGnssUpdateConfig(obj.mAdapter, obj.mApi, obj.mConfig, + new uint32_t[obj.mCount], obj.mCount) { + if (mIds != nullptr) { + for (int i = 0; i < mCount; ++i) { + mIds[i] = obj.mIds[i]; + } + } + } inline virtual ~MsgGnssUpdateConfig() { - delete [] mIds; + delete[] mIds; } inline virtual void proc() const { @@ -1257,6 +1266,16 @@ GnssAdapter::gnssGetConfigCommand(GnssConfigFlagsMask configMask) { mConfigMask(configMask), mIds(ids), mCount(count) {} + + inline MsgGnssGetConfig(const MsgGnssGetConfig& obj) : + MsgGnssGetConfig(obj.mAdapter, obj.mApi, obj.mConfigMask, + new uint32_t[obj.mCount], obj.mCount) { + if (mIds != nullptr) { + for (int i = 0; i < mCount; ++i) { + mIds[i] = obj.mIds[i]; + } + } + } inline virtual ~MsgGnssGetConfig() { delete[] mIds; From 02e5413b20c3dc0e3cbef6b77e400add6b451d12 Mon Sep 17 00:00:00 2001 From: Mike Cailean Date: Thu, 16 May 2019 15:35:00 -0700 Subject: [PATCH 2/4] Send updated GPS lock value to xtra-daemon Send updated (masked) GPS lock value to xtra-daemon CRs-Fixed: 2454370 Change-Id: I17439a2aa10d776cff882a4fb09224489b86c796 --- gnss/XtraSystemStatusObserver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnss/XtraSystemStatusObserver.cpp b/gnss/XtraSystemStatusObserver.cpp index 4cb6f5f8..af593fb8 100644 --- a/gnss/XtraSystemStatusObserver.cpp +++ b/gnss/XtraSystemStatusObserver.cpp @@ -123,7 +123,7 @@ bool XtraSystemStatusObserver::updateLockStatus(GnssConfigGpsLock lock) { stringstream ss; ss << "gpslock"; - ss << " " << lock; + ss << " " << mGpsLock; string s = ss.str(); return ( LocIpc::send(*mSender, (const uint8_t*)s.data(), s.size()) ); } From 210d3ca227393a46829988577aea95ec2e800c41 Mon Sep 17 00:00:00 2001 From: Nilesh Gharde Date: Thu, 16 May 2019 23:57:46 +0530 Subject: [PATCH 3/4] Addressing format related to formating Added formating related issue as genuine errors fixes Change-Id: Ie01e9ce3bf838a37871a4779ae1403b4dca3d87c CRs-Fixed: 2447200 --- android/2.0/GnssConfiguration.cpp | 2 +- android/2.0/location_api/GeofenceAPIClient.cpp | 2 +- android/2.0/location_api/GnssAPIClient.cpp | 6 +++--- android/2.0/location_api/MeasurementAPIClient.cpp | 2 +- build/target_specific_features.mk | 1 - core/LocApiBase.cpp | 2 +- pla/Android.mk | 1 - utils/LocIpc.cpp | 4 ++-- utils/LocIpc.h | 2 +- 9 files changed, 10 insertions(+), 12 deletions(-) diff --git a/android/2.0/GnssConfiguration.cpp b/android/2.0/GnssConfiguration.cpp index 671b6e7b..d2a87637 100644 --- a/android/2.0/GnssConfiguration.cpp +++ b/android/2.0/GnssConfiguration.cpp @@ -255,7 +255,7 @@ bool GnssConfiguration::setBlacklistedSource( break; default: copyToSource.constellation = GNSS_SV_TYPE_UNKNOWN; - LOC_LOGe("Invalid constellation %u", copyFromSource.constellation); + LOC_LOGe("Invalid constellation %hhu", copyFromSource.constellation); retVal = false; break; } diff --git a/android/2.0/location_api/GeofenceAPIClient.cpp b/android/2.0/location_api/GeofenceAPIClient.cpp index fabf8bb1..a93c9886 100644 --- a/android/2.0/location_api/GeofenceAPIClient.cpp +++ b/android/2.0/location_api/GeofenceAPIClient.cpp @@ -141,7 +141,7 @@ void GeofenceAPIClient::geofenceRemoveAll() // callbacks void GeofenceAPIClient::onGeofenceBreachCb(GeofenceBreachNotification geofenceBreachNotification) { - LOC_LOGD("%s]: (%zu)", __FUNCTION__, geofenceBreachNotification.count); + LOC_LOGD("%s]: (%d)", __FUNCTION__, geofenceBreachNotification.count); if (mGnssGeofencingCbIface != nullptr) { for (size_t i = 0; i < geofenceBreachNotification.count; i++) { GnssLocation gnssLocation; diff --git a/android/2.0/location_api/GnssAPIClient.cpp b/android/2.0/location_api/GnssAPIClient.cpp index 68cf395d..15245e3a 100644 --- a/android/2.0/location_api/GnssAPIClient.cpp +++ b/android/2.0/location_api/GnssAPIClient.cpp @@ -517,7 +517,7 @@ void GnssAPIClient::onGnssNiCb(uint32_t id, GnssNiNotification gnssNiNotificatio void GnssAPIClient::onGnssSvCb(GnssSvNotification gnssSvNotification) { - LOC_LOGD("%s]: (count: %zu)", __FUNCTION__, gnssSvNotification.count); + LOC_LOGD("%s]: (count: %u)", __FUNCTION__, gnssSvNotification.count); mMutex.lock(); auto gnssCbIface(mGnssCbIface); auto gnssCbIface_2_0(mGnssCbIface_2_0); @@ -561,7 +561,7 @@ void GnssAPIClient::onGnssNmeaCb(GnssNmeaNotification gnssNmeaNotification) auto r = gnssCbIface_2_0->gnssNmeaCb( static_cast(gnssNmeaNotification.timestamp), nmeaString); if (!r.isOk()) { - LOC_LOGE("%s] Error from gnssCbIface_2_0 nmea=%s length=%zu description=%s", + LOC_LOGE("%s] Error from gnssCbIface_2_0 nmea=%s length=%u description=%s", __func__, gnssNmeaNotification.nmea, gnssNmeaNotification.length, r.description().c_str()); } @@ -569,7 +569,7 @@ void GnssAPIClient::onGnssNmeaCb(GnssNmeaNotification gnssNmeaNotification) auto r = gnssCbIface->gnssNmeaCb( static_cast(gnssNmeaNotification.timestamp), nmeaString); if (!r.isOk()) { - LOC_LOGE("%s] Error from gnssNmeaCb nmea=%s length=%zu description=%s", + LOC_LOGE("%s] Error from gnssNmeaCb nmea=%s length=%u description=%s", __func__, gnssNmeaNotification.nmea, gnssNmeaNotification.length, r.description().c_str()); } diff --git a/android/2.0/location_api/MeasurementAPIClient.cpp b/android/2.0/location_api/MeasurementAPIClient.cpp index 23c3b168..eb0c7d1d 100644 --- a/android/2.0/location_api/MeasurementAPIClient.cpp +++ b/android/2.0/location_api/MeasurementAPIClient.cpp @@ -170,7 +170,7 @@ void MeasurementAPIClient::measurementClose() { void MeasurementAPIClient::onGnssMeasurementsCb( GnssMeasurementsNotification gnssMeasurementsNotification) { - LOC_LOGD("%s]: (count: %zu active: %d)", + LOC_LOGD("%s]: (count: %u active: %d)", __FUNCTION__, gnssMeasurementsNotification.count, mTracking); if (mTracking) { mMutex.lock(); diff --git a/build/target_specific_features.mk b/build/target_specific_features.mk index ad7f7e1d..ca6eb795 100644 --- a/build/target_specific_features.mk +++ b/build/target_specific_features.mk @@ -1,7 +1,6 @@ GNSS_CFLAGS := \ -Werror \ -Wno-error=unused-parameter \ - -Wno-error=format \ -Wno-error=macro-redefined \ -Wno-error=reorder \ -Wno-error=missing-braces \ diff --git a/core/LocApiBase.cpp b/core/LocApiBase.cpp index c1723766..a521ceb6 100644 --- a/core/LocApiBase.cpp +++ b/core/LocApiBase.cpp @@ -404,7 +404,7 @@ void LocApiBase::reportSv(GnssSvNotification& svNotify) "QZSS", "BEIDOU", "GALILEO" }; // print the SV info before delivering - LOC_LOGV("num sv: %zu\n" + LOC_LOGV("num sv: %u\n" " sv: constellation svid cN0" " elevation azimuth flags", svNotify.count); diff --git a/pla/Android.mk b/pla/Android.mk index ce062bb5..a57861d9 100644 --- a/pla/Android.mk +++ b/pla/Android.mk @@ -1,7 +1,6 @@ GNSS_CFLAGS := \ -Werror \ -Wno-error=unused-parameter \ - -Wno-error=format \ -Wno-error=macro-redefined \ -Wno-error=reorder \ -Wno-error=missing-braces \ diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp index ecaff01c..94968956 100644 --- a/utils/LocIpc.cpp +++ b/utils/LocIpc.cpp @@ -48,7 +48,7 @@ namespace loc_util { #define SOCK_OP_AND_LOG(buf, length, opable, rtv, exe) \ if (nullptr == (buf) || 0 == (length)) { \ - LOC_LOGe("Invalid inputs: buf - %p, length - %d", (buf), (length)); \ + LOC_LOGe("Invalid inputs: buf - %p, length - %u", (buf), (length)); \ } else if (!(opable)) { \ LOC_LOGe("Invalid object: operable - %d", (opable)); \ } else { \ @@ -60,7 +60,7 @@ namespace loc_util { const char Sock::MSG_ABORT[] = "LocIpc::Sock::ABORT"; const char Sock::LOC_IPC_HEAD[] = "$MSGLEN$"; -ssize_t Sock::send(const void *buf, size_t len, int flags, const struct sockaddr *destAddr, +ssize_t Sock::send(const void *buf, uint32_t len, int flags, const struct sockaddr *destAddr, socklen_t addrlen) const { ssize_t rtv = -1; SOCK_OP_AND_LOG(buf, len, isValid(), rtv, sendto(buf, len, flags, destAddr, addrlen)); diff --git a/utils/LocIpc.h b/utils/LocIpc.h index 20a1c8f4..c71c4e01 100644 --- a/utils/LocIpc.h +++ b/utils/LocIpc.h @@ -164,7 +164,7 @@ public: inline Sock(int sid, const uint32_t maxTxSize = 8192) : mMaxTxSize(maxTxSize), mSid(sid) {} inline ~Sock() { close(); } inline bool isValid() const { return -1 != mSid; } - ssize_t send(const void *buf, size_t len, int flags, const struct sockaddr *destAddr, + ssize_t send(const void *buf, uint32_t len, int flags, const struct sockaddr *destAddr, socklen_t addrlen) const; ssize_t recv(const shared_ptr& dataCb, int flags, struct sockaddr *srcAddr, socklen_t *addrlen, int sid = -1) const; From 7490804ed9bcf7a2b9c371988466d22b1f659382 Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Fri, 17 May 2019 18:04:32 -0700 Subject: [PATCH 4/4] fixed a potential race condition in managing gps lock gnssConfigRequested in setConfigCommand handling currently gets data into gnssConfigRequested in LocApi thread. This introduces race condition that adapter.getAfwControlId() could be called from a different thread than where adapter.setAfwControlId() is called. CRs-fixed: 2453439 Change-Id: I75ce482a4a87436dff04972ffd82b48db3af62c1 --- gnss/GnssAdapter.cpp | 159 ++++++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 79 deletions(-) diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index 7253efe7..535f6de6 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -714,90 +714,91 @@ GnssAdapter::setConfigCommand() loc_gps_cfg_s gpsConf = ContextBase::mGps_conf; loc_sap_cfg_s_type sapConf = ContextBase::mSap_conf; - mApi.sendMsg(new LocApiMsg( - [&adapter, gpsConf, sapConf, oldServerUrl, oldMoServerUrl] () { - //cache the injected configuration with GnssConfigRequested struct - GnssConfig gnssConfigRequested = {}; - gnssConfigRequested.flags |= GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT | - GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT | - GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT | - GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT; - gnssConfigRequested.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE; - if (0 == adapter.getAfwControlId() || NULL != adapter.mNfwCb) { - gnssConfigRequested.gpsLock = gpsConf.GPS_LOCK; - } + //cache the injected configuration with GnssConfigRequested struct + GnssConfig gnssConfigRequested = {}; + gnssConfigRequested.flags |= GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT | + GNSS_CONFIG_FLAGS_LPPE_CONTROL_PLANE_VALID_BIT | + GNSS_CONFIG_FLAGS_LPPE_USER_PLANE_VALID_BIT | + GNSS_CONFIG_FLAGS_BLACKLISTED_SV_IDS_BIT; + gnssConfigRequested.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE; + if (0 == adapter.getAfwControlId() || NULL != adapter.mNfwCb) { + gnssConfigRequested.gpsLock = gpsConf.GPS_LOCK; + } - if (gpsConf.AGPS_CONFIG_INJECT) { - gnssConfigRequested.flags |= GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT | - GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT | - GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT | - GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT; - gnssConfigRequested.suplVersion = - adapter.mLocApi->convertSuplVersion(gpsConf.SUPL_VER); - gnssConfigRequested.lppProfile = - adapter.mLocApi->convertLppProfile(gpsConf.LPP_PROFILE); - gnssConfigRequested.aGlonassPositionProtocolMask = - gpsConf.A_GLONASS_POS_PROTOCOL_SELECT; - } - gnssConfigRequested.lppeControlPlaneMask = - adapter.mLocApi->convertLppeCp(gpsConf.LPPE_CP_TECHNOLOGY); - gnssConfigRequested.lppeUserPlaneMask = - adapter.mLocApi->convertLppeUp(gpsConf.LPPE_UP_TECHNOLOGY); - gnssConfigRequested.blacklistedSvIds.assign(adapter.mBlacklistedSvIds.begin(), - adapter.mBlacklistedSvIds.end()); - adapter.gnssUpdateConfig(oldServerUrl, oldMoServerUrl, gnssConfigRequested, - gnssConfigRequested); + if (gpsConf.AGPS_CONFIG_INJECT) { + gnssConfigRequested.flags |= GNSS_CONFIG_FLAGS_SET_ASSISTANCE_DATA_VALID_BIT | + GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT | + GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT | + GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT; + gnssConfigRequested.suplVersion = + adapter.mLocApi->convertSuplVersion(gpsConf.SUPL_VER); + gnssConfigRequested.lppProfile = + adapter.mLocApi->convertLppProfile(gpsConf.LPP_PROFILE); + gnssConfigRequested.aGlonassPositionProtocolMask = + gpsConf.A_GLONASS_POS_PROTOCOL_SELECT; + } + gnssConfigRequested.lppeControlPlaneMask = + adapter.mLocApi->convertLppeCp(gpsConf.LPPE_CP_TECHNOLOGY); + gnssConfigRequested.lppeUserPlaneMask = + adapter.mLocApi->convertLppeUp(gpsConf.LPPE_UP_TECHNOLOGY); + gnssConfigRequested.blacklistedSvIds.assign(adapter.mBlacklistedSvIds.begin(), + adapter.mBlacklistedSvIds.end()); + mApi.sendMsg(new LocApiMsg( + [&adapter, gpsConf, sapConf, oldServerUrl, + oldMoServerUrl, gnssConfigRequested] () { + adapter.gnssUpdateConfig(oldServerUrl, oldMoServerUrl, gnssConfigRequested, + gnssConfigRequested); - // set nmea mask type - uint32_t mask = 0; - if (NMEA_PROVIDER_MP == gpsConf.NMEA_PROVIDER) { - mask |= LOC_NMEA_ALL_GENERAL_SUPPORTED_MASK; - } - if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) { - mask |= LOC_NMEA_MASK_DEBUG_V02; - } + // set nmea mask type + uint32_t mask = 0; + if (NMEA_PROVIDER_MP == gpsConf.NMEA_PROVIDER) { + mask |= LOC_NMEA_ALL_GENERAL_SUPPORTED_MASK; + } + if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) { + mask |= LOC_NMEA_MASK_DEBUG_V02; + } - if (mask != 0) { - adapter.mLocApi->setNMEATypesSync(mask); - } + if (mask != 0) { + adapter.mLocApi->setNMEATypesSync(mask); + } - adapter.mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK); + adapter.mLocApi->setXtraVersionCheckSync(gpsConf.XTRA_VERSION_CHECK); - adapter.mLocApi->setConstrainedTuncMode( - gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED == 1, - (float)gpsConf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD, - gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET); - adapter.mLocApi->setPositionAssistedClockEstimatorMode( - gpsConf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED == 1); + adapter.mLocApi->setConstrainedTuncMode( + gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENABLED == 1, + (float)gpsConf.CONSTRAINED_TIME_UNCERTAINTY_THRESHOLD, + gpsConf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET); + adapter.mLocApi->setPositionAssistedClockEstimatorMode( + gpsConf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED == 1); - if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID || - sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID || - sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || - sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || - sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { - adapter.mLocApi->setSensorPropertiesSync( - sapConf.GYRO_BIAS_RANDOM_WALK_VALID, - sapConf.GYRO_BIAS_RANDOM_WALK, - sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, - sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, - sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, - sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, - sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, - sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, - sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, - sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY); - } - adapter.mLocApi->setSensorPerfControlConfigSync( - sapConf.SENSOR_CONTROL_MODE, - sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH, - sapConf.SENSOR_ACCEL_BATCHES_PER_SEC, - sapConf.SENSOR_GYRO_SAMPLES_PER_BATCH, - sapConf.SENSOR_GYRO_BATCHES_PER_SEC, - sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, - sapConf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, - sapConf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, - sapConf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, - sapConf.SENSOR_ALGORITHM_CONFIG_MASK); + if (sapConf.GYRO_BIAS_RANDOM_WALK_VALID || + sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || + sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { + adapter.mLocApi->setSensorPropertiesSync( + sapConf.GYRO_BIAS_RANDOM_WALK_VALID, + sapConf.GYRO_BIAS_RANDOM_WALK, + sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sapConf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, + sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sapConf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, + sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sapConf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, + sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, + sapConf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY); + } + adapter.mLocApi->setSensorPerfControlConfigSync( + sapConf.SENSOR_CONTROL_MODE, + sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH, + sapConf.SENSOR_ACCEL_BATCHES_PER_SEC, + sapConf.SENSOR_GYRO_SAMPLES_PER_BATCH, + sapConf.SENSOR_GYRO_BATCHES_PER_SEC, + sapConf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, + sapConf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, + sapConf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, + sapConf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, + sapConf.SENSOR_ALGORITHM_CONFIG_MASK); } )); } }; @@ -1075,7 +1076,7 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config) newGpsLock = GNSS_CONFIG_GPS_LOCK_MO; } if (newGpsLock == ContextBase::mGps_conf.GPS_LOCK || - 0 != mAdapter.getAfwControlId()) { + 0 != mAdapter.getAfwControlId() || NULL != adapter.mNfwCb) { gnssConfigNeedEngineUpdate.flags &= ~(GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT); } ContextBase::mGps_conf.GPS_LOCK = newGpsLock;