diff options
author | Nilesh Gharde <quic_ngharde@quicinc.com> | 2022-03-11 03:46:00 +0530 |
---|---|---|
committer | Saurabh Srivastava <quic_ssrivast@quicinc.com> | 2022-07-20 12:05:57 +0530 |
commit | cf4eac65570a43c797a00abb68779f4757426499 (patch) | |
tree | 786eb8a9cba7c325c44a52706dbe0919282b85d4 /gnss/GnssAdapter.cpp | |
parent | b721d6e6b88937ab6cdd8486de677a6c91cf4888 (diff) |
Enable protected dynamic interface control
Changes to Enable protected dynamic interface control.
Added support to
1. Get the engine lock state.
2. Handle engine lock state event.
3. Store all the sessions when the engine is locked.
4. Restore all the sessions when the engine unlock event is received.
Change-Id: I70e591a6dca2231fb762ef199d0d34f852198116
CRs-fixed: 3130222
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); |