From fab550522a9dc03590e419a1b8795c2be1860a5c Mon Sep 17 00:00:00 2001 From: Jiafei Wen Date: Thu, 11 Sep 2014 17:06:23 -0700 Subject: [PATCH] Ignore the first time inject if it is form Afw. The first time injection is ignored from an adapter that doesn't support CPI Extended Capabilities to prevent time from being injected twice on startup. CRs-fixed: 720540 Change-Id: If786cf2c750906093f21272aae928e4d9fc4dea8 --- loc_api/libloc_api_50001/LocEngAdapter.cpp | 22 +++++++++++++++++++++- loc_api/libloc_api_50001/LocEngAdapter.h | 9 ++++----- loc_api/libloc_api_50001/loc.cpp | 1 + 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/loc_api/libloc_api_50001/LocEngAdapter.cpp b/loc_api/libloc_api_50001/LocEngAdapter.cpp index 1327a53a..1043fe82 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.cpp +++ b/loc_api/libloc_api_50001/LocEngAdapter.cpp @@ -70,7 +70,9 @@ LocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask, mOwner(owner), mInternalAdapter(new LocInternalAdapter(this)), mUlp(new UlpProxyBase()), mNavigating(false), mSupportsAgpsRequests(false), - mSupportsPositionInjection(false), mPowerVote(0) + mSupportsPositionInjection(false), + mSupportsTimeInjection(false), + mPowerVote(0) { memset(&mFixCriteria, 0, sizeof(mFixCriteria)); mFixCriteria.mode = LOC_POSITION_MODE_INVALID; @@ -341,6 +343,24 @@ void LocEngAdapter::handleEngineUpEvent() sendMsg(new LocEngUp(mOwner)); } +enum loc_api_adapter_err LocEngAdapter::setTime(GpsUtcTime time, + int64_t timeReference, + int uncertainty) +{ + loc_api_adapter_err result = LOC_API_ADAPTER_ERR_SUCCESS; + + LOC_LOGD("%s:%d]: mSupportsTimeInjection is %d", + __func__, __LINE__, mSupportsTimeInjection); + + if (mSupportsTimeInjection) { + LOC_LOGD("%s:%d]: Injecting time", __func__, __LINE__); + result = mLocApi->setTime(time, timeReference, uncertainty); + } else { + mSupportsTimeInjection = true; + } + return result; +} + enum loc_api_adapter_err LocEngAdapter::setXtraVersionCheck(int check) { enum loc_api_adapter_err ret; diff --git a/loc_api/libloc_api_50001/LocEngAdapter.h b/loc_api/libloc_api_50001/LocEngAdapter.h index a2170ad6..b9bbedd0 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.h +++ b/loc_api/libloc_api_50001/LocEngAdapter.h @@ -85,6 +85,7 @@ class LocEngAdapter : public LocAdapterBase { public: bool mSupportsAgpsRequests; bool mSupportsPositionInjection; + bool mSupportsTimeInjection; LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask, void* owner, ContextBase* context, @@ -136,11 +137,6 @@ public: { return mLocApi->injectPosition(latitude, longitude, accuracy); } - inline enum loc_api_adapter_err - setTime(GpsUtcTime time, int64_t timeReference, int uncertainty) - { - return mLocApi->setTime(time, timeReference, uncertainty); - } inline enum loc_api_adapter_err setXtraData(char* data, int length) { @@ -256,6 +252,9 @@ public: { return mLocApi->getBestAvailableZppFix(zppLoc, tech_mask); } + enum loc_api_adapter_err setTime(GpsUtcTime time, + int64_t timeReference, + int uncertainty); enum loc_api_adapter_err setXtraVersionCheck(int check); virtual void handleEngineDownEvent(); virtual void handleEngineUpEvent(); diff --git a/loc_api/libloc_api_50001/loc.cpp b/loc_api/libloc_api_50001/loc.cpp index f9a2133a..73663880 100644 --- a/loc_api/libloc_api_50001/loc.cpp +++ b/loc_api/libloc_api_50001/loc.cpp @@ -289,6 +289,7 @@ static int loc_init(GpsCallbacks* callbacks) loc_afw_data.adapter->requestUlp(gps_conf.CAPABILITIES); loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities(); loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); + loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); if(retVal) { LOC_LOGE("loc_eng_init() fail!");