summaryrefslogtreecommitdiff
path: root/gnss/GnssAdapter.cpp
diff options
context:
space:
mode:
authorNilesh Gharde <quic_ngharde@quicinc.com>2022-03-11 03:46:00 +0530
committerSaurabh Srivastava <quic_ssrivast@quicinc.com>2022-07-20 12:05:57 +0530
commitcf4eac65570a43c797a00abb68779f4757426499 (patch)
tree786eb8a9cba7c325c44a52706dbe0919282b85d4 /gnss/GnssAdapter.cpp
parentb721d6e6b88937ab6cdd8486de677a6c91cf4888 (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.cpp78
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);