Snap for 5053079 from 822c008d7b99ad68aec50af30b03280479745586 to pi-qpr2-release Change-Id: I34ea39dddd6cefa19dda71fa6520584fe9cc04ba
diff --git a/sdm845/core/LocApiBase.cpp b/sdm845/core/LocApiBase.cpp index 5227d06..c317d59 100644 --- a/sdm845/core/LocApiBase.cpp +++ b/sdm845/core/LocApiBase.cpp
@@ -167,6 +167,35 @@ return inSession; } +bool LocApiBase::needReport(const UlpLocation& ulpLocation, + enum loc_sess_status status, + LocPosTechMask techMask) +{ + bool reported = false; + + if (LOC_SESS_SUCCESS == status) { + // this is a final fix + LocPosTechMask mask = + LOC_POS_TECH_MASK_SATELLITE | LOC_POS_TECH_MASK_SENSORS | LOC_POS_TECH_MASK_HYBRID; + // it is a Satellite fix or a sensor fix + reported = (mask & techMask); + } + else if (LOC_SESS_INTERMEDIATE == status && + LOC_SESS_INTERMEDIATE == ContextBase::mGps_conf.INTERMEDIATE_POS) { + // this is a intermediate fix and we accept intermediate + + // it is NOT the case that + // there is inaccuracy; and + // we care about inaccuracy; and + // the inaccuracy exceeds our tolerance + reported = !((ulpLocation.gpsLocation.flags & LOC_GPS_LOCATION_HAS_ACCURACY) && + (ContextBase::mGps_conf.ACCURACY_THRES != 0) && + (ulpLocation.gpsLocation.accuracy > ContextBase::mGps_conf.ACCURACY_THRES)); + } + + return reported; +} + void LocApiBase::addAdapter(LocAdapterBase* adapter) { for (int i = 0; i < MAX_ADAPTERS && mLocAdapters[i] != adapter; i++) {
diff --git a/sdm845/core/LocApiBase.h b/sdm845/core/LocApiBase.h index d230ef2..aec1846 100644 --- a/sdm845/core/LocApiBase.h +++ b/sdm845/core/LocApiBase.h
@@ -104,6 +104,9 @@ inline void sendMsg(const LocMsg* msg) const { mMsgTask->sendMsg(msg); } + static bool needReport(const UlpLocation& ulpLocation, + enum loc_sess_status status, + LocPosTechMask techMask); void addAdapter(LocAdapterBase* adapter); void removeAdapter(LocAdapterBase* adapter);
diff --git a/sdm845/core/SystemStatusOsObserver.cpp b/sdm845/core/SystemStatusOsObserver.cpp index 0f6d228..8127e86 100644 --- a/sdm845/core/SystemStatusOsObserver.cpp +++ b/sdm845/core/SystemStatusOsObserver.cpp
@@ -328,9 +328,12 @@ for (auto client : clientSet) { unordered_set<DataItemId> dataItemIdsForThisClient( mParent->mClientToDataItems.getValSet(client)); - for (auto id : dataItemIdsForThisClient) { - if (dataItemIdsToBeSent.find(id) == dataItemIdsToBeSent.end()) { - dataItemIdsForThisClient.erase(id); + for (auto itr = dataItemIdsForThisClient.begin(); + itr != dataItemIdsForThisClient.end(); ) { + if (dataItemIdsToBeSent.find(*itr) == dataItemIdsToBeSent.end()) { + itr = dataItemIdsForThisClient.erase(itr); + } else { + itr++; } }
diff --git a/sdm845/gnss/GnssAdapter.cpp b/sdm845/gnss/GnssAdapter.cpp index cf133d6..c6c3351 100644 --- a/sdm845/gnss/GnssAdapter.cpp +++ b/sdm845/gnss/GnssAdapter.cpp
@@ -2720,25 +2720,8 @@ enum loc_sess_status status, LocPosTechMask techMask) { bool reported = false; - if (LOC_SESS_SUCCESS == status) { - // this is a final fix - LocPosTechMask mask = - LOC_POS_TECH_MASK_SATELLITE | LOC_POS_TECH_MASK_SENSORS | LOC_POS_TECH_MASK_HYBRID; - // it is a Satellite fix or a sensor fix - reported = (mask & techMask); - } else if (LOC_SESS_INTERMEDIATE == status && - LOC_SESS_INTERMEDIATE == ContextBase::mGps_conf.INTERMEDIATE_POS) { - // this is a intermediate fix and we accepte intermediate - // it is NOT the case that - // there is inaccuracy; and - // we care about inaccuracy; and - // the inaccuracy exceeds our tolerance - reported = !((ulpLocation.gpsLocation.flags & LOC_GPS_LOCATION_HAS_ACCURACY) && - (ContextBase::mGps_conf.ACCURACY_THRES != 0) && - (ulpLocation.gpsLocation.accuracy > ContextBase::mGps_conf.ACCURACY_THRES)); - } - + reported = LocApiBase::needReport(ulpLocation, status, techMask); return reported; }