summaryrefslogtreecommitdiff
path: root/gnss/GnssAdapter.cpp
diff options
context:
space:
mode:
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);