From c30e7c5e6304a15b6522f37f30bdb813c20833a6 Mon Sep 17 00:00:00 2001 From: Mike Cailean Date: Wed, 5 Sep 2018 15:36:13 -0700 Subject: 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 --- core/LocApiBase.cpp | 29 +++++++++++++++++++++++++++++ core/LocApiBase.h | 4 ++++ 2 files changed, 33 insertions(+) (limited to 'core') 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); -- cgit v1.2.3