diff options
Diffstat (limited to 'gnss/GnssAdapter.cpp')
-rw-r--r-- | gnss/GnssAdapter.cpp | 78 |
1 files changed, 61 insertions, 17 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index f3ccd99..0235d2c 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -170,7 +170,6 @@ GnssAdapter::GnssAdapter() : readConfigCommand(); initDefaultAgpsCommand(); initEngHubProxyCommand(); - // at last step, let us inform adapater base that we are done // with initialization, e.g.: ready to process handleEngineUpEvent doneInit(); @@ -2565,15 +2564,51 @@ GnssAdapter::updateClientsEventMask() } void +GnssAdapter::handleEngineLockStatusEvent(EngineLockState engineLockState) { + + LOC_LOGD("%s]: Old Engine state %d, New Engine state : %d,", + __func__, mLocApi->getEngineLockState(), engineLockState); + + struct MsgEngineLockStateEvent : public LocMsg { + GnssAdapter& mAdapter; + EngineLockState mEngineLockState; + + inline MsgEngineLockStateEvent(GnssAdapter& adapter, EngineLockState engineLockState) : + LocMsg(), + mAdapter(adapter), + mEngineLockState(engineLockState) {} + + virtual void proc() const { + mAdapter.handleEngineLockStatus(mEngineLockState); + } + }; + + sendMsg(new MsgEngineLockStateEvent(*this, engineLockState)); +} + +void +GnssAdapter::handleEngineLockStatus(EngineLockState engineLockState) { + + if (ENGINE_LOCK_STATE_ENABLED == engineLockState) { + for (auto msg: mPendingGnssEnabledMsgs) { + sendMsg(msg); + } + mPendingGnssEnabledMsgs.clear(); + } +} + +void GnssAdapter::handleEngineUpEvent() { LOC_LOGD("%s]: ", __func__); struct MsgHandleEngineUpEvent : public LocMsg { GnssAdapter& mAdapter; - inline MsgHandleEngineUpEvent(GnssAdapter& adapter) : + LocApiBase& mApi; + inline MsgHandleEngineUpEvent(GnssAdapter& adapter, LocApiBase& api) : LocMsg(), - mAdapter(adapter) {} + mAdapter(adapter), + mApi(api) {} virtual void proc() const { mAdapter.setEngineCapabilitiesKnown(true); mAdapter.broadcastCapabilities(mAdapter.getCapabilities()); @@ -2585,17 +2620,19 @@ GnssAdapter::handleEngineUpEvent() mAdapter.gnssSecondaryBandConfigUpdate(); // start CDFW service mAdapter.initCDFWService(); - // restart sessions - mAdapter.restartSessions(true); - for (auto msg: mAdapter.mPendingMsgs) { - mAdapter.sendMsg(msg); + + if (ENGINE_LOCK_STATE_ENABLED == mApi.getEngineLockState()) { + // restart sessions + mAdapter.restartSessions(true); + for (auto msg: mAdapter.mPendingMsgs) { + mAdapter.sendMsg(msg); + } } - mAdapter.mPendingMsgs.clear(); } }; readConfigCommand(); - sendMsg(new MsgHandleEngineUpEvent(*this)); + sendMsg(new MsgHandleEngineUpEvent(*this, *mLocApi)); } void @@ -2972,9 +3009,11 @@ GnssAdapter::startTrackingCommand(LocationAPI* client, TrackingOptions& options) mAdapter.saveTrackingSession(mClient, mSessionId, mOptions); mApi.startDistanceBasedTracking(mSessionId, mOptions, new LocApiResponse(*mAdapter.getContext(), - [&mAdapter = mAdapter, mSessionId = mSessionId, mClient = mClient] + [&mAdapter = mAdapter, mSessionId = mSessionId, mClient = mClient, + &mApi = mApi] (LocationError err) { - if (LOCATION_ERROR_SUCCESS != err) { + if (ENGINE_LOCK_STATE_ENABLED == mApi.getEngineLockState() && + LOCATION_ERROR_SUCCESS != err) { mAdapter.eraseTrackingSession(mClient, mSessionId); } mAdapter.reportResponse(mClient, err, mSessionId); @@ -3081,7 +3120,8 @@ GnssAdapter::startTimeBasedTracking(LocationAPI* client, uint32_t sessionId, if (!checkAndSetSPEToRunforNHz(tempOptions)) { mLocApi->startTimeBasedTracking(tempOptions, new LocApiResponse(*getContext(), [this, client, sessionId] (LocationError err) { - if (LOCATION_ERROR_SUCCESS != err) { + if (ENGINE_LOCK_STATE_ENABLED == mLocApi->getEngineLockState() && + LOCATION_ERROR_SUCCESS != err) { eraseTrackingSession(client, sessionId); } else { checkUpdateDgnssNtrip(false); @@ -3116,7 +3156,8 @@ GnssAdapter::updateTracking(LocationAPI* client, uint32_t sessionId, if(!checkAndSetSPEToRunforNHz(tempOptions)) { mLocApi->startTimeBasedTracking(tempOptions, new LocApiResponse(*getContext(), [this, client, sessionId, oldOptions] (LocationError err) { - if (LOCATION_ERROR_SUCCESS != err) { + if (ENGINE_LOCK_STATE_ENABLED == mLocApi->getEngineLockState() && + LOCATION_ERROR_SUCCESS != err) { // restore the old LocationOptions saveTrackingSession(client, sessionId, oldOptions); } @@ -3231,9 +3272,10 @@ GnssAdapter::updateTrackingOptionsCommand(LocationAPI* client, uint32_t id, if (LOCATION_ERROR_SUCCESS == err) { mApi.startDistanceBasedTracking(mSessionId, mOptions, new LocApiResponse(*mAdapter.getContext(), - [&mAdapter, mClient, mSessionId, mOptions] + [&mAdapter, mClient, mSessionId, mOptions, &mApi = mApi] (LocationError err) { - if (LOCATION_ERROR_SUCCESS == err) { + if (ENGINE_LOCK_STATE_DISABLED == mApi.getEngineLockState() || + LOCATION_ERROR_SUCCESS == err) { mAdapter.saveTrackingSession(mClient, mSessionId, mOptions); } mAdapter.reportResponse(mClient, err, mSessionId); @@ -3347,9 +3389,11 @@ GnssAdapter::stopTrackingCommand(LocationAPI* client, uint32_t id) } else if (isDistanceBased) { mApi.stopDistanceBasedTracking(mSessionId, new LocApiResponse( *mAdapter.getContext(), - [&mAdapter = mAdapter, mSessionId = mSessionId, mClient = mClient] + [&mAdapter = mAdapter, mSessionId = mSessionId, mClient = mClient, + &mApi = mApi] (LocationError err) { - if (LOCATION_ERROR_SUCCESS == err) { + if (ENGINE_LOCK_STATE_DISABLED == mApi.getEngineLockState() || + LOCATION_ERROR_SUCCESS == err) { mAdapter.eraseTrackingSession(mClient, mSessionId); } mAdapter.reportResponse(mClient, err, mSessionId); |