Merge tag 'LA.UM.10.6.2.r1-02500-89xx.0' into int/13/fp3
"LA.UM.10.6.2.r1-02500-89xx.0"
* tag 'LA.UM.10.6.2.r1-02500-89xx.0':
Enable protected dynamic interface control
Change-Id: I145a595f36ee08e1a80fb406cc4c2ef28cc3d4a9
diff --git a/batching/BatchingAdapter.cpp b/batching/BatchingAdapter.cpp
index 4f1a43c..4fdacda 100644
--- a/batching/BatchingAdapter.cpp
+++ b/batching/BatchingAdapter.cpp
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+/*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_BatchingAdapter"
@@ -163,6 +200,41 @@
}
void
+BatchingAdapter::handleEngineLockStatusEvent(EngineLockState engineLockState) {
+
+ LOC_LOGD("%s]: Old Engine state %d, New Engine state : %d,", __func__,
+ mLocApi->getEngineLockState(), engineLockState);
+
+ struct MsgEngineLockStateEvent : public LocMsg {
+ BatchingAdapter& mAdapter;
+ EngineLockState mEngineLockState;
+
+ inline MsgEngineLockStateEvent(BatchingAdapter& adapter, EngineLockState engineLockState) :
+ LocMsg(),
+ mAdapter(adapter),
+ mEngineLockState(engineLockState){}
+
+ virtual void proc() const {
+ mAdapter.handleEngineLockStatus(mEngineLockState);
+ }
+ };
+
+ sendMsg(new MsgEngineLockStateEvent(*this, engineLockState));
+}
+
+void
+BatchingAdapter::handleEngineLockStatus(EngineLockState engineLockState) {
+
+ LOC_LOGd("lock state %d, pending msgs %zu", engineLockState, mPendingGnssEnabledMsgs.size());
+ if (ENGINE_LOCK_STATE_ENABLED == engineLockState) {
+ for (auto msg: mPendingGnssEnabledMsgs) {
+ sendMsg(msg);
+ }
+ mPendingGnssEnabledMsgs.clear();
+ }
+}
+
+void
BatchingAdapter::handleEngineUpEvent()
{
struct MsgSSREvent : public LocMsg {
@@ -178,11 +250,13 @@
mAdapter.broadcastCapabilities(mAdapter.getCapabilities());
mApi.setBatchSize(mAdapter.getBatchSize());
mApi.setTripBatchSize(mAdapter.getTripBatchSize());
- mAdapter.restartSessions();
- for (auto msg: mAdapter.mPendingMsgs) {
- mAdapter.sendMsg(msg);
+ if (ENGINE_LOCK_STATE_ENABLED == mApi.getEngineLockState()) {
+ mAdapter.restartSessions();
+ for (auto msg: mAdapter.mPendingMsgs) {
+ mAdapter.sendMsg(msg);
+ }
+ mAdapter.mPendingMsgs.clear();
}
- mAdapter.mPendingMsgs.clear();
}
};
@@ -354,7 +428,8 @@
if (LOCATION_ERROR_SUCCESS == err) {
if (mBatchingOptions.batchingMode == BATCHING_MODE_ROUTINE ||
mBatchingOptions.batchingMode == BATCHING_MODE_NO_AUTO_REPORT) {
- mAdapter.startBatching(mClient, mSessionId, mBatchingOptions);
+ mAdapter.startBatching(
+ mClient, mSessionId, mBatchingOptions, new MsgStartBatching(*this));
} else if (mBatchingOptions.batchingMode == BATCHING_MODE_TRIP) {
mAdapter.startTripBatchingMultiplex(mClient, mSessionId, mBatchingOptions);
} else {
@@ -371,7 +446,7 @@
void
BatchingAdapter::startBatching(LocationAPI* client, uint32_t sessionId,
- const BatchingOptions& batchingOptions)
+ const BatchingOptions& batchingOptions, LocMsg* pendingMsg)
{
if (batchingOptions.batchingMode != BATCHING_MODE_NO_AUTO_REPORT &&
0 == autoReportBatchingSessionsCount()) {
@@ -385,8 +460,9 @@
saveBatchingSession(client, sessionId, batchingOptions);
mLocApi->startBatching(sessionId, batchingOptions, getBatchingAccuracy(), getBatchingTimeout(),
new LocApiResponse(*getContext(),
- [this, client, sessionId, batchingOptions] (LocationError err) {
- if (LOCATION_ERROR_SUCCESS != err) {
+ [this, client, sessionId, batchingOptions, pendingMsg] (LocationError err) {
+ if (ENGINE_LOCK_STATE_ENABLED == mLocApi->getEngineLockState() &&
+ LOCATION_ERROR_SUCCESS != err) {
eraseBatchingSession(client, sessionId);
}
@@ -399,6 +475,13 @@
LOC_REGISTRATION_MASK_DISABLED);
}
+ if (LOCATION_ERROR_GNSS_DISABLED == err && pendingMsg != nullptr) {
+ LOC_LOGd("GNSS_DISABLED, add request to pending queue");
+ mPendingGnssEnabledMsgs.push_back(pendingMsg);
+ } else if (pendingMsg != nullptr) {
+ delete pendingMsg;
+ }
+
reportResponse(client, err, sessionId);
}));
}
@@ -509,7 +592,8 @@
new LocApiResponse(*getContext(),
[this, client, sessionId, flpOptions, restartNeeded, batchOptions]
(LocationError err) {
- if (LOCATION_ERROR_SUCCESS != err) {
+ if (ENGINE_LOCK_STATE_ENABLED == mLocApi->getEngineLockState() &&
+ LOCATION_ERROR_SUCCESS != err) {
saveBatchingSession(client, sessionId, batchOptions);
} else {
// if stopBatching is success, unregister for batch full event if this was the last
@@ -766,7 +850,8 @@
mLocApi->startOutdoorTripBatching(batchingOptions.minDistance,
batchingOptions.minInterval, getBatchingTimeout(), new LocApiResponse(*getContext(),
[this, client, sessionId, batchingOptions] (LocationError err) {
- if (err == LOCATION_ERROR_SUCCESS) {
+ if (ENGINE_LOCK_STATE_DISABLED == mLocApi->getEngineLockState() ||
+ err == LOCATION_ERROR_SUCCESS) {
mOngoingTripDistance = batchingOptions.minDistance;
mOngoingTripTBFInterval = batchingOptions.minInterval;
LOC_LOGD("%s] New Trip started ...", __func__);
diff --git a/batching/BatchingAdapter.h b/batching/BatchingAdapter.h
index 66f7c5f..4580976 100644
--- a/batching/BatchingAdapter.h
+++ b/batching/BatchingAdapter.h
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+/*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#ifndef BATCHING_ADAPTER_H
#define BATCHING_ADAPTER_H
@@ -114,7 +151,7 @@
void eraseBatchingSession(LocationAPI* client, uint32_t sessionId);
uint32_t autoReportBatchingSessionsCount();
void startBatching(LocationAPI* client, uint32_t sessionId,
- const BatchingOptions& batchingOptions);
+ const BatchingOptions& batchingOptions, LocMsg* pendingMsg = nullptr);
void stopBatching(LocationAPI* client, uint32_t sessionId, bool restartNeeded,
const BatchingOptions& batchOptions);
void stopBatching(LocationAPI* client, uint32_t sessionId) {
@@ -123,6 +160,8 @@
};
/* ==== REPORTS ======================================================================== */
+ virtual void handleEngineLockStatusEvent(EngineLockState engineLockState);
+ void handleEngineLockStatus(EngineLockState engineLockState);
/* ======== EVENTS ====(Called from QMI Thread)========================================= */
void reportLocationsEvent(const Location* locations, size_t count,
BatchingMode batchingMode);
@@ -146,7 +185,6 @@
uint32_t getBatchingTimeout() { return mBatchingTimeout; }
void setBatchingAccuracy(uint32_t accuracy) { mBatchingAccuracy = accuracy; }
uint32_t getBatchingAccuracy() { return mBatchingAccuracy; }
-
};
#endif /* BATCHING_ADAPTER_H */
diff --git a/core/LocAdapterBase.cpp b/core/LocAdapterBase.cpp
index 95f2728..21975ed 100644
--- a/core/LocAdapterBase.cpp
+++ b/core/LocAdapterBase.cpp
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+ /*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_LocAdapterBase"
@@ -432,6 +469,10 @@
LocAdapterBase::reportLatencyInfoEvent(const GnssLatencyInfo& /*gnssLatencyInfo*/)
DEFAULT_IMPL()
+void
+LocAdapterBase::handleEngineLockStatusEvent(const EngineLockState engineLockState)
+DEFAULT_IMPL()
+
bool LocAdapterBase::
reportQwesCapabilities(const std::unordered_map<LocationQwesFeatureType, bool> &featureMap)
DEFAULT_IMPL(false)
diff --git a/core/LocAdapterBase.h b/core/LocAdapterBase.h
index 51b2306..f2ae52e 100644
--- a/core/LocAdapterBase.h
+++ b/core/LocAdapterBase.h
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+ /*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#ifndef LOC_API_ADAPTER_BASE_H
#define LOC_API_ADAPTER_BASE_H
@@ -80,6 +117,8 @@
typedef std::map<LocationAPI*, LocationCallbacks> ClientDataMap;
ClientDataMap mClientData;
std::vector<LocMsg*> mPendingMsgs; // For temporal storage of msgs before Open is completed
+ std::vector<LocMsg*> mPendingGnssEnabledMsgs; // For temporal storage of msgs failed with
+ // GNSS disabled error
/* ======== UTILITIES ================================================================== */
void saveClient(LocationAPI* client, const LocationCallbacks& callbacks);
void eraseClient(LocationAPI* client);
@@ -237,6 +276,7 @@
void requestCapabilitiesCommand(LocationAPI* client);
virtual void reportLatencyInfoEvent(const GnssLatencyInfo& gnssLatencyInfo);
+ virtual void handleEngineLockStatusEvent(EngineLockState engineLockState);
virtual bool reportQwesCapabilities(
const std::unordered_map<LocationQwesFeatureType, bool> &featureMap);
};
diff --git a/core/LocApiBase.cpp b/core/LocApiBase.cpp
index 860da2e..b571e36 100644
--- a/core/LocApiBase.cpp
+++ b/core/LocApiBase.cpp
@@ -155,7 +155,7 @@
LocApiBase::LocApiBase(LOC_API_ADAPTER_EVENT_MASK_T excludedMask,
ContextBase* context) :
mContext(context),
- mMask(0), mExcludedMask(excludedMask)
+ mMask(0), mExcludedMask(excludedMask), mEngineLockState(ENGINE_LOCK_STATE_ENABLED)
{
memset(mLocAdapters, 0, sizeof(mLocAdapters));
@@ -615,6 +615,12 @@
TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportLatencyInfoEvent(gnssLatencyInfo));
}
+void LocApiBase::reportEngineLockStatus(EngineLockState engineLockState)
+{
+ // loop through adapters, and deliver to the All handling adapter.
+ TO_ALL_LOCADAPTERS(mLocAdapters[i]->handleEngineLockStatusEvent(engineLockState));
+}
+
enum loc_api_adapter_err LocApiBase::
open(LOC_API_ADAPTER_EVENT_MASK_T /*mask*/)
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
diff --git a/core/LocApiBase.h b/core/LocApiBase.h
index cbe5f9f..6f1b04f 100644
--- a/core/LocApiBase.h
+++ b/core/LocApiBase.h
@@ -137,6 +137,7 @@
bool isInSession();
const LOC_API_ADAPTER_EVENT_MASK_T mExcludedMask;
bool isMaster();
+ EngineLockState mEngineLockState;
public:
inline void sendMsg(const LocMsg* msg) const {
@@ -203,6 +204,7 @@
void sendNfwNotification(GnssNfwNotification& notification);
void reportGnssConfig(uint32_t sessionId, const GnssConfig& gnssConfig);
void reportLatencyInfo(GnssLatencyInfo& gnssLatencyInfo);
+ void reportEngineLockStatus(EngineLockState engineLockState);
void reportQwesCapabilities
(
const std::unordered_map<LocationQwesFeatureType, bool> &featureMap
@@ -345,6 +347,14 @@
LocApiResponse* adapterResponse=nullptr);
virtual void getConstellationMultiBandConfig(uint32_t sessionId,
LocApiResponse* adapterResponse=nullptr);
+
+ inline EngineLockState getEngineLockState() {
+ return mEngineLockState;
+ }
+
+ inline void setEngineLockState(EngineLockState engineLockState) {
+ mEngineLockState = engineLockState;
+ }
};
class ElapsedRealtimeEstimator {
diff --git a/geofence/GeofenceAdapter.cpp b/geofence/GeofenceAdapter.cpp
index 1aeea0a..3fbe0a9 100644
--- a/geofence/GeofenceAdapter.cpp
+++ b/geofence/GeofenceAdapter.cpp
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+/*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#define LOG_TAG "LocSvc_GeofenceAdapter"
#include <GeofenceAdapter.h>
@@ -117,25 +154,62 @@
}
void
+GeofenceAdapter::handleEngineLockStatusEvent(EngineLockState engineLockState) {
+
+ LOC_LOGD("%s]: Old Engine state %d, New Engine state : %d,", __func__,
+ mLocApi->getEngineLockState(), engineLockState);
+
+ struct MsgEngineLockStateEvent : public LocMsg {
+ GeofenceAdapter& mAdapter;
+ EngineLockState mEngineLockState;
+
+ inline MsgEngineLockStateEvent(GeofenceAdapter& adapter, EngineLockState engineLockState) :
+ LocMsg(),
+ mAdapter(adapter),
+ mEngineLockState(engineLockState){}
+
+ virtual void proc() const {
+ mAdapter.handleEngineLockStatus(mEngineLockState);
+ }
+ };
+
+ sendMsg(new MsgEngineLockStateEvent(*this, engineLockState));
+}
+
+void
+GeofenceAdapter::handleEngineLockStatus(EngineLockState engineLockState) {
+
+ if (ENGINE_LOCK_STATE_ENABLED == engineLockState) {
+ for (auto msg: mPendingGnssEnabledMsgs) {
+ sendMsg(msg);
+ }
+ mPendingGnssEnabledMsgs.clear();
+ }
+}
+
+void
GeofenceAdapter::handleEngineUpEvent()
{
struct MsgSSREvent : public LocMsg {
GeofenceAdapter& mAdapter;
- inline MsgSSREvent(GeofenceAdapter& adapter) :
+ LocApiBase& mApi;
+ inline MsgSSREvent(GeofenceAdapter& adapter, LocApiBase& api) :
LocMsg(),
- mAdapter(adapter) {}
+ mAdapter(adapter),
+ mApi(api) {}
virtual void proc() const {
mAdapter.setEngineCapabilitiesKnown(true);
mAdapter.broadcastCapabilities(mAdapter.getCapabilities());
- mAdapter.restartGeofences();
- for (auto msg: mAdapter.mPendingMsgs) {
- mAdapter.sendMsg(msg);
+ if (ENGINE_LOCK_STATE_ENABLED == mApi.getEngineLockState()) {
+ mAdapter.restartGeofences();
+ for (auto msg: mAdapter.mPendingMsgs) {
+ mAdapter.sendMsg(msg);
+ }
}
- mAdapter.mPendingMsgs.clear();
}
};
- sendMsg(new MsgSSREvent(*this));
+ sendMsg(new MsgSSREvent(*this, *mLocApi));
}
void
@@ -231,7 +305,7 @@
mCount(count),
mIds(ids),
mOptions(options),
- mInfos(infos) {}
+ mInfos(infos){}
inline virtual void proc() const {
LocationError* errs = new LocationError[mCount];
if (nullptr == errs) {
@@ -249,9 +323,10 @@
mApi.addGeofence(mIds[i], mOptions[i], mInfos[i],
new LocApiResponseData<LocApiGeofenceData>(*mAdapter.getContext(),
[&mAdapter = mAdapter, mOptions = mOptions, mClient = mClient,
- mCount = mCount, mIds = mIds, mInfos = mInfos, errs, i]
+ mCount = mCount, mIds = mIds, mInfos = mInfos, errs, i, &mApi = mApi]
(LocationError err, LocApiGeofenceData data) {
- if (LOCATION_ERROR_SUCCESS == err) {
+ if (ENGINE_LOCK_STATE_DISABLED == mApi.getEngineLockState() ||
+ LOCATION_ERROR_SUCCESS == err) {
mAdapter.saveGeofenceItem(mClient,
mIds[i],
data.hwId,
@@ -353,8 +428,9 @@
mApi.removeGeofence(hwId, mIds[i],
new LocApiResponse(*mAdapter.getContext(),
[&mAdapter = mAdapter, mCount = mCount, mClient = mClient, mIds = mIds,
- hwId, errs, i] (LocationError err ) {
- if (LOCATION_ERROR_SUCCESS == err) {
+ hwId, errs, i, &mApi = mApi] (LocationError err ) {
+ if (ENGINE_LOCK_STATE_DISABLED == mApi.getEngineLockState() ||
+ LOCATION_ERROR_SUCCESS == err) {
mAdapter.removeGeofenceItem(hwId);
}
errs[i] = err;
@@ -587,9 +663,10 @@
mApi.modifyGeofence(hwId, mIds[i], mOptions[i],
new LocApiResponse(*mAdapter.getContext(),
[&mAdapter = mAdapter, mCount = mCount, mClient = mClient,
- mIds = mIds, mOptions = mOptions, hwId, errs, i]
+ mIds = mIds, mOptions = mOptions, hwId, errs, i, &mApi = mApi]
(LocationError err ) {
- if (LOCATION_ERROR_SUCCESS == err) {
+ if (ENGINE_LOCK_STATE_DISABLED == mApi.getEngineLockState() ||
+ LOCATION_ERROR_SUCCESS == err) {
errs[i] = err;
mAdapter.modifyGeofenceItem(hwId, mOptions[i]);
diff --git a/geofence/GeofenceAdapter.h b/geofence/GeofenceAdapter.h
index 38f4823..83911a9 100644
--- a/geofence/GeofenceAdapter.h
+++ b/geofence/GeofenceAdapter.h
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+/*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#ifndef GEOFENCE_ADAPTER_H
#define GEOFENCE_ADAPTER_H
@@ -121,8 +158,9 @@
LocationError getHwIdFromClient(LocationAPI* client, uint32_t clientId, uint32_t& hwId);
LocationError getGeofenceKeyFromHwId(uint32_t hwId, GeofenceKey& key);
void dump();
-
/* ==== REPORTS ======================================================================== */
+ virtual void handleEngineLockStatusEvent(EngineLockState engineLockState);
+ void handleEngineLockStatus(EngineLockState engineLockState);
/* ======== EVENTS ====(Called from QMI Thread)========================================= */
void geofenceBreachEvent(size_t count, uint32_t* hwIds, Location& location,
GeofenceBreachType breachType, uint64_t timestamp);
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 @@
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 @@
}
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
} 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);
diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h
index d7b4275..a9d0456 100644
--- a/gnss/GnssAdapter.h
+++ b/gnss/GnssAdapter.h
@@ -26,6 +26,43 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+/*
+Changes from Qualcomm Innovation Center are provided under the following license:
+
+Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted (subject to the limitations in the
+disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#ifndef GNSS_ADAPTER_H
#define GNSS_ADAPTER_H
@@ -487,6 +524,8 @@
void odcpiTimerExpireEvent();
/* ==== REPORTS ======================================================================== */
+ virtual void handleEngineLockStatusEvent(EngineLockState engineLockState);
+ void handleEngineLockStatus(EngineLockState engineLockState);
/* ======== EVENTS ====(Called from QMI/EngineHub Thread)===================================== */
virtual void reportPositionEvent(const UlpLocation& ulpLocation,
const GpsLocationExtended& locationExtended,
diff --git a/location/LocationDataTypes.h b/location/LocationDataTypes.h
index b85464a..ca8281a 100644
--- a/location/LocationDataTypes.h
+++ b/location/LocationDataTypes.h
@@ -63,6 +63,7 @@
LOCATION_ERROR_GEOFENCES_AT_MAX,
LOCATION_ERROR_NOT_SUPPORTED,
LOCATION_ERROR_TIMEOUT,
+ LOCATION_ERROR_GNSS_DISABLED,
} LocationError;
// Flags to indicate which values are valid in a Location
diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h
index f368975..fc10841 100644
--- a/utils/gps_extended_c.h
+++ b/utils/gps_extended_c.h
@@ -2422,6 +2422,13 @@
#define NETWORK_HANDLE_UNKNOWN ~0
#define MAX_NETWORK_HANDLES 10
+typedef enum {
+ ENGINE_LOCK_STATE_INVALID = 0,
+ ENGINE_LOCK_STATE_ENABLED = 1, /**< Location engine is enabled. */
+ ENGINE_LOCK_STATE_DISABLED = 2, /**< location engine is disabled. */
+ ENGINE_LOCK_STATE_MAX,
+}EngineLockState;
+
#ifdef __cplusplus
}
#endif /* __cplusplus */