147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. 2e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * 3e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * Redistribution and use in source and binary forms, with or without 4e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * modification, are permitted provided that the following conditions are 5e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * met: 6e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * * Redistributions of source code must retain the above copyright 7e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * notice, this list of conditions and the following disclaimer. 8e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * * Redistributions in binary form must reproduce the above 9e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * copyright notice, this list of conditions and the following 10e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * disclaimer in the documentation and/or other materials provided 11e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * with the distribution. 12e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * * Neither the name of The Linux Foundation, nor the names of its 13e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * contributors may be used to endorse or promote products derived 14e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * from this software without specific prior written permission. 15e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * 16e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * 28e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo */ 29e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#define LOG_NDDEBUG 0 30e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#define LOG_TAG "LocSvc_EngAdapter" 31e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 32e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <LocEngAdapter.h> 33e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include "loc_eng_msg.h" 34e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include "loc_log.h" 35e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 36e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russousing namespace loc_core; 37e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 38e14a6c846df2ce4bb1847e4250991f7c52fd793dDante RussoLocInternalAdapter::LocInternalAdapter(LocEngAdapter* adapter) : 39e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocAdapterBase(adapter->getMsgTask()), 40e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mLocEngAdapter(adapter) 41e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 42e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 43e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocInternalAdapter::setPositionModeInt(LocPosMode& posMode) { 44e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngPositionMode(mLocEngAdapter, posMode)); 45e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 46e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocInternalAdapter::startFixInt() { 47e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngStartFix(mLocEngAdapter)); 48e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 49e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocInternalAdapter::stopFixInt() { 50e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngStopFix(mLocEngAdapter)); 51e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 5247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russovoid LocInternalAdapter::getZppInt() { 5347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngGetZpp(mLocEngAdapter)); 5447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo} 55e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 5647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russovoid LocInternalAdapter::shutdown() { 5747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngShutdown(mLocEngAdapter)); 58e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 59e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 60e14a6c846df2ce4bb1847e4250991f7c52fd793dDante RussoLocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask, 6147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo void* owner, ContextBase* context, 62e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo MsgTask::tCreate tCreator) : 63e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocAdapterBase(mask, 6447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //Get the AFW context if VzW context has not already been intialized in 6547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //loc_ext 6647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo context == NULL? 6747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LocDualContext::getLocFgContext(tCreator, 6847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LocDualContext::mLocationHalName) 6947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo :context), 70e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mOwner(owner), mInternalAdapter(new LocInternalAdapter(this)), 71e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mUlp(new UlpProxyBase()), mNavigating(false), 7247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mSupportsAgpsRequests(false), 7347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mSupportsPositionInjection(false), mPowerVote(0) 74e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 75e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo memset(&mFixCriteria, 0, sizeof(mFixCriteria)); 7647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mFixCriteria.mode = LOC_POSITION_MODE_INVALID; 77e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("LocEngAdapter created"); 78e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 79e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 80e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 81e14a6c846df2ce4bb1847e4250991f7c52fd793dDante RussoLocEngAdapter::~LocEngAdapter() 82e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 83e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo delete mInternalAdapter; 84e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGV("LocEngAdapter deleted"); 85e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 86e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 8747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russovoid LocInternalAdapter::setUlpProxy(UlpProxyBase* ulp) { 8847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo struct LocSetUlpProxy : public LocMsg { 8947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LocAdapterBase* mAdapter; 9047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo UlpProxyBase* mUlp; 9147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo inline LocSetUlpProxy(LocAdapterBase* adapter, UlpProxyBase* ulp) : 9247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LocMsg(), mAdapter(adapter), mUlp(ulp) { 9347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 9447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo virtual void proc() const { 9547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGV("%s] ulp %p adapter %p", __func__, 9647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mUlp, mAdapter); 9747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mAdapter->setUlpProxy(mUlp); 9847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 9947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo }; 10047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 10147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocSetUlpProxy(mLocEngAdapter, ulp)); 10247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo} 10347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 104e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::setUlpProxy(UlpProxyBase* ulp) 105e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 10647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (ulp == mUlp) { 10747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //This takes care of the case when double initalization happens 10847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //and we get the same object back for UlpProxyBase . Do nothing 10947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return; 11047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 11147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 112e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGV("%s] %p", __func__, ulp); 113e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL == ulp) { 11447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGE("%s:%d]: ulp pointer is NULL", __func__, __LINE__); 115e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ulp = new UlpProxyBase(); 116e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 11747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 11847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (LOC_POSITION_MODE_INVALID != mUlp->mPosMode.mode) { 11947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo // need to send this mode and start msg to ULP 12047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ulp->sendFixMode(mUlp->mPosMode); 12147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 12247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 12347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if(mUlp->mFixSet) { 12447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ulp->sendStartFix(); 12547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 12647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 12747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo delete mUlp; 128e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mUlp = ulp; 129e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 130e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 1318aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tangint LocEngAdapter::setGpsLockMsg(LOC_GPS_LOCK_MASK lockMask) 13247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo{ 1338aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang struct LocEngAdapterGpsLock : public LocMsg { 13447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LocEngAdapter* mAdapter; 1358aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang LOC_GPS_LOCK_MASK mLockMask; 1368aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang inline LocEngAdapterGpsLock(LocEngAdapter* adapter, LOC_GPS_LOCK_MASK lockMask) : 1378aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang LocMsg(), mAdapter(adapter), mLockMask(lockMask) 13847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo { 13947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo locallog(); 14047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 14147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo inline virtual void proc() const { 1428aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang mAdapter->setGpsLock(mLockMask); 14347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 14447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo inline void locallog() const { 1458aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang LOC_LOGV("LocEngAdapterGpsLock - mLockMask: %x", mLockMask); 14647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 14747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo inline virtual void log() const { 14847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo locallog(); 14947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 15047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo }; 1518aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang sendMsg(new LocEngAdapterGpsLock(this, lockMask)); 1528aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang return 0; 1538aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang} 15447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 1558aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tangvoid LocEngAdapter::requestPowerVote() 1568aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang{ 15747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (getPowerVoteRight()) { 1588aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang /* Power voting without engine lock: 1598aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang * 101: vote down, 102-104 - vote up 1608aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang * These codes are used not to confuse with actual engine lock 1618aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang * functionality, that can't be used in SSR scenario, as it 1628aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang * conflicts with initialization sequence. 1638aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang */ 1648aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang bool powerUp = getPowerVote(); 1658aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang LOC_LOGV("LocEngAdapterVotePower - Vote Power: %d", (int)powerUp); 1668aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang setGpsLock(powerUp ? 103 : 101); 16747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 16847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo} 16947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 170e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocInternalAdapter::reportPosition(UlpLocation &location, 171e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo GpsLocationExtended &locationExtended, 172e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo void* locationExt, 173e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo enum loc_sess_status status, 174e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocPosTechMask loc_technology_mask) 175e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 176e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngReportPosition(mLocEngAdapter, 177e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo location, 178e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExtended, 179e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExt, 180e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo status, 181e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_technology_mask)); 182e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 183e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 184e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 185e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::reportPosition(UlpLocation &location, 186e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo GpsLocationExtended &locationExtended, 187e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo void* locationExt, 188e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo enum loc_sess_status status, 189e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocPosTechMask loc_technology_mask) 190e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 191e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (! mUlp->reportPosition(location, 192e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExtended, 193e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExt, 194e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo status, 195e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_technology_mask )) { 196e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mInternalAdapter->reportPosition(location, 197e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExtended, 198e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExt, 199e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo status, 200e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_technology_mask); 201e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 202e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 203e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 204e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocInternalAdapter::reportSv(GpsSvStatus &svStatus, 205e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo GpsLocationExtended &locationExtended, 206e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo void* svExt){ 207e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngReportSv(mLocEngAdapter, svStatus, 208e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo locationExtended, svExt)); 209e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 210e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 211e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::reportSv(GpsSvStatus &svStatus, 212e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo GpsLocationExtended &locationExtended, 213e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo void* svExt) 214e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 215e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 216e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo // We want to send SV info to ULP to help it in determining GNSS 217e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo // signal strength ULP will forward the SV reports to HAL without 218e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo // any modifications 219e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (! mUlp->reportSv(svStatus, locationExtended, svExt)) { 220e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo mInternalAdapter->reportSv(svStatus, locationExtended, svExt); 221e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 222e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 223e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 22447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russovoid LocEngAdapter::setInSession(bool inSession) 22547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo{ 22647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mNavigating = inSession; 22747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mLocApi->setInSession(inSession); 22847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (!mNavigating) { 22947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mFixCriteria.mode = LOC_POSITION_MODE_INVALID; 23047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 23147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo} 23247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 23347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russovoid LocInternalAdapter::reportStatus(GpsStatusValue status) 23447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo{ 23547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngReportStatus(mLocEngAdapter, status)); 23647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo} 23747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 238e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::reportStatus(GpsStatusValue status) 239e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 24047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (!mUlp->reportStatus(status)) { 24147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo mInternalAdapter->reportStatus(status); 24247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 243e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 244e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 245e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 246e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::reportNmea(const char* nmea, int length) 247e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 248e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngReportNmea(mOwner, nmea, length)); 249e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 250e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 251e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 252e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::reportXtraServer(const char* url1, 253e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo const char* url2, 254e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo const char* url3, 255e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo const int maxlength) 256e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 25747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 258e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngReportXtraServer(mOwner, url1, 259e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo url2, url3, maxlength)); 260e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 26147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 262e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 263e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 264e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 265e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::requestATL(int connHandle, AGpsType agps_type) 266e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 26747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 268e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngRequestATL(mOwner, 269e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo connHandle, agps_type)); 270e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 27147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 272e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 273e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 274e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 275e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::releaseATL(int connHandle) 276e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 27747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 278e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngReleaseATL(mOwner, connHandle)); 279e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 28047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 281e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 282e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 283e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 284e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::requestXtraData() 285e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 28647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 287e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngRequestXtra(mOwner)); 288e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 28947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 290e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 291e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 292e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 293e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::requestTime() 294e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 29547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 2961fdba83aa599f3905ba7632c7008299a8d2747b5Kevin Tang sendMsg(new LocEngRequestTime(mOwner)); 297e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 29847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 299e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 300e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 301e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 302e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::requestNiNotify(GpsNiNotification ¬if, const void* data) 303e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 30447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) { 305e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo notif.size = sizeof(notif); 306e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo notif.timeout = LOC_NI_NO_RESPONSE_TIME; 307e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 308e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngRequestNi(mOwner, notif, data)); 309e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 31047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 311e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 312e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 313e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 314e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::requestSuplES(int connHandle) 315e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 31647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if (mSupportsAgpsRequests) 31747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngRequestSuplEs(mOwner, connHandle)); 31847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 319e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 320e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 321e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 322e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::reportDataCallOpened() 323e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 32447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if(mSupportsAgpsRequests) 32547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngSuplEsOpened(mOwner)); 32647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 327e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 328e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 329e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 330e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russobool LocEngAdapter::reportDataCallClosed() 331e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 33247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if(mSupportsAgpsRequests) 33347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo sendMsg(new LocEngSuplEsClosed(mOwner)); 33447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo return mSupportsAgpsRequests; 335e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 336e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 337e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 338e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::handleEngineDownEvent() 339e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 340e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngDown(mOwner)); 341e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 342e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 343e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoinline 344e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russovoid LocEngAdapter::handleEngineUpEvent() 345e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{ 346e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo sendMsg(new LocEngUp(mOwner)); 347e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} 3488aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 3498aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavavoid LocEngAdapter::reportGpsMeasurementData(GpsData &gpsMeasurementData) 3508aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 3518aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava sendMsg(new LocEngReportGpsMeasurement(mOwner, 3528aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava gpsMeasurementData)); 3538aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 3548aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 3558aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/* 3568aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava Update Registration Mask 3578aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava */ 3588aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavavoid LocEngAdapter::updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event, 3598aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_registration_mask_status isEnabled) 3608aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 3618aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava LOC_LOGD("entering %s", __func__); 3628aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava int result = LOC_API_ADAPTER_ERR_FAILURE; 3638aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava result = mLocApi->updateRegistrationMask(event, isEnabled); 3648aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava if (result == LOC_API_ADAPTER_ERR_SUCCESS) { 3658aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava LOC_LOGD("%s] update registration mask succeed.", __func__); 3668aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava } else { 3678aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava LOC_LOGE("%s] update registration mask failed.", __func__); 3688aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava } 3698aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 3708aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 3718aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/* 3728aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava Set Gnss Constellation Config 3738aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava */ 3748aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavabool LocEngAdapter::gnssConstellationConfig() 3758aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 3768aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava LOC_LOGD("entering %s", __func__); 3778aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava bool result = false; 3788aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava result = mLocApi->gnssConstellationConfig(); 3798aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava return result; 3808aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 381