summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Cailean <mcailean@codeaurora.org>2018-09-05 15:36:13 -0700
committerMike Cailean <mcailean@codeaurora.org>2018-09-06 16:09:05 -0700
commitc30e7c5e6304a15b6522f37f30bdb813c20833a6 (patch)
tree331e52ae3aa207bb8b6a2e27541170247927d803
parent033a0fa1c6cabd0841bbbd0c762f4b4dd4a5753f (diff)
downloadgps-c30e7c5e6304a15b6522f37f30bdb813c20833a6.tar.gz
Set SV in use mask based on final fixes
Do not set SV in use mask based on intermediate position update from modem since it might contain stale information Change-Id: I4300854ead3f85758bfb37d4c47ace10f63541a0 CRs-fixed: 2307493
-rw-r--r--core/LocApiBase.cpp29
-rw-r--r--core/LocApiBase.h4
-rw-r--r--gnss/GnssAdapter.cpp20
3 files changed, 35 insertions, 18 deletions
diff --git a/core/LocApiBase.cpp b/core/LocApiBase.cpp
index f44ab45..7b52c82 100644
--- a/core/LocApiBase.cpp
+++ b/core/LocApiBase.cpp
@@ -188,6 +188,35 @@ bool LocApiBase::isInSession()
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/core/LocApiBase.h b/core/LocApiBase.h
index ea5e071..e80e273 100644
--- a/core/LocApiBase.h
+++ b/core/LocApiBase.h
@@ -145,6 +145,10 @@ public:
sendMsg(new LocKillMsg(this));
}
+ static bool needReport(const UlpLocation& ulpLocation,
+ enum loc_sess_status status,
+ LocPosTechMask techMask);
+
void addAdapter(LocAdapterBase* adapter);
void removeAdapter(LocAdapterBase* adapter);
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index 8feedda..b43ec2a 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -2904,25 +2904,9 @@ GnssAdapter::needReport(const UlpLocation& ulpLocation,
// then always output position reported by engine hub to requesting client
if (true == initEngHubProxy()) {
reported = true;
- } else 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));
+ } else {
+ reported = LocApiBase::needReport(ulpLocation, status, techMask);
}
-
return reported;
}