Merge "Make updateConfig functional before gnss is enabled"
This commit is contained in:
commit
899b1de6a0
2 changed files with 46 additions and 44 deletions
|
@ -42,7 +42,8 @@ LocationAPIClientBase::LocationAPIClientBase() :
|
|||
mGeofenceBreachCallback(nullptr),
|
||||
mLocationAPI(nullptr),
|
||||
mLocationControlAPI(nullptr),
|
||||
mBatchSize(-1)
|
||||
mBatchSize(-1),
|
||||
mEnabled(false)
|
||||
{
|
||||
|
||||
// use recursive mutex, in case callback come from the same thread
|
||||
|
@ -139,7 +140,7 @@ uint32_t LocationAPIClientBase::locAPIStartTracking(LocationOptions& options)
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_TRACKING];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_TRACKING] = nullptr;
|
||||
}
|
||||
uint32_t session = mLocationAPI->startTracking(options);
|
||||
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, session);
|
||||
|
@ -226,7 +227,7 @@ uint32_t LocationAPIClientBase::locAPIStartSession(uint32_t id, uint32_t session
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_TRACKING];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_TRACKING] = nullptr;
|
||||
}
|
||||
trackingSession = mLocationAPI->startTracking(options);
|
||||
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, trackingSession);
|
||||
|
@ -237,7 +238,7 @@ uint32_t LocationAPIClientBase::locAPIStartSession(uint32_t id, uint32_t session
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_BATCHING];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_BATCHING] = nullptr;
|
||||
}
|
||||
batchingSession = mLocationAPI->startBatching(options);
|
||||
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, batchingSession);
|
||||
|
@ -338,7 +339,7 @@ uint32_t LocationAPIClientBase::locAPIUpdateSessionOptions(uint32_t id, uint32_t
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_TRACKING];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_TRACKING] = nullptr;
|
||||
}
|
||||
trackingSession = mLocationAPI->startTracking(options);
|
||||
LOC_LOGI("%s:%d] start new session: %d",
|
||||
|
@ -364,7 +365,7 @@ uint32_t LocationAPIClientBase::locAPIUpdateSessionOptions(uint32_t id, uint32_t
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_BATCHING];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_BATCHING] = nullptr;
|
||||
}
|
||||
batchingSession = mLocationAPI->startBatching(options);
|
||||
LOC_LOGI("%s:%d] start new session: %d",
|
||||
|
@ -589,7 +590,7 @@ void LocationAPIClientBase::locAPIGnssNiResponse(uint32_t id, GnssNiResponse res
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_NIRESPONSE];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_NIRESPONSE] = nullptr;
|
||||
}
|
||||
uint32_t session = id;
|
||||
mLocationAPI->gnssNiResponse(id, response);
|
||||
|
@ -609,7 +610,7 @@ uint32_t LocationAPIClientBase::locAPIGnssDeleteAidingData(GnssAidingData& data)
|
|||
RequestQueue* requests = mRequestQueues[REQUEST_DELETEAIDINGDATA];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_DELETEAIDINGDATA] = nullptr;
|
||||
}
|
||||
uint32_t session = mLocationControlAPI->gnssDeleteAidingData(data);
|
||||
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, session);
|
||||
|
@ -628,19 +629,24 @@ uint32_t LocationAPIClientBase::locAPIEnable(LocationTechnologyType techType)
|
|||
{
|
||||
uint32_t retVal = LOCATION_ERROR_GENERAL_FAILURE;
|
||||
pthread_mutex_lock(&mMutex);
|
||||
if (mLocationControlAPI) {
|
||||
if (mEnabled) {
|
||||
// just return success if already enabled
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
} else if (mLocationControlAPI) {
|
||||
RequestQueue* requests = mRequestQueues[REQUEST_CONTROL];
|
||||
if (requests) {
|
||||
delete requests;
|
||||
requests = nullptr;
|
||||
mRequestQueues[REQUEST_CONTROL] = nullptr;
|
||||
}
|
||||
uint32_t session = mLocationControlAPI->enable(techType);
|
||||
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, session);
|
||||
requests = new RequestQueue(session);
|
||||
requests->push(new EnableRequest(*this));
|
||||
mRequestQueues[REQUEST_CONTROL] = requests;
|
||||
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
if (requests) {
|
||||
requests->push(new EnableRequest(*this));
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
mEnabled = true;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&mMutex);
|
||||
|
||||
|
@ -650,7 +656,7 @@ uint32_t LocationAPIClientBase::locAPIEnable(LocationTechnologyType techType)
|
|||
void LocationAPIClientBase::locAPIDisable()
|
||||
{
|
||||
pthread_mutex_lock(&mMutex);
|
||||
if (mLocationControlAPI) {
|
||||
if (mEnabled && mLocationControlAPI) {
|
||||
uint32_t session = 0;
|
||||
RequestQueue* requests = mRequestQueues[REQUEST_CONTROL];
|
||||
if (requests) {
|
||||
|
@ -658,6 +664,7 @@ void LocationAPIClientBase::locAPIDisable()
|
|||
if (session > 0) {
|
||||
requests->push(new DisableRequest(*this));
|
||||
mLocationControlAPI->disable(session);
|
||||
mEnabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -668,7 +675,8 @@ uint32_t LocationAPIClientBase::locAPIGnssUpdateConfig(GnssConfig config)
|
|||
{
|
||||
uint32_t retVal = LOCATION_ERROR_GENERAL_FAILURE;
|
||||
if (memcmp(&mConfig, &config, sizeof(GnssConfig)) == 0) {
|
||||
LOC_LOGE("%s:%d] GnssConfig is identical to previous call", __FUNCTION__, __LINE__);
|
||||
LOC_LOGV("%s:%d] GnssConfig is identical to previous call", __FUNCTION__, __LINE__);
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
@ -678,17 +686,17 @@ uint32_t LocationAPIClientBase::locAPIGnssUpdateConfig(GnssConfig config)
|
|||
memcpy(&mConfig, &config, sizeof(GnssConfig));
|
||||
|
||||
uint32_t session = 0;
|
||||
RequestQueue* requests = mRequestQueues[REQUEST_CONTROL];
|
||||
if (requests) {
|
||||
session = requests->getSession();
|
||||
if (session > 0) {
|
||||
requests->push(new GnssUpdateConfigRequest(*this));
|
||||
uint32_t* idArray = mLocationControlAPI->gnssUpdateConfig(config);
|
||||
LOC_LOGV("%s:%d] gnssUpdateConfig return array: %p", __FUNCTION__, __LINE__, idArray);
|
||||
}
|
||||
RequestQueue* requests = mRequestQueues[REQUEST_CONFIG];
|
||||
uint32_t* idArray = mLocationControlAPI->gnssUpdateConfig(config);
|
||||
LOC_LOGV("%s:%d] gnssUpdateConfig return array: %p", __FUNCTION__, __LINE__, idArray);
|
||||
if (!requests && idArray != nullptr) {
|
||||
requests = new RequestQueue(idArray[0]);
|
||||
mRequestQueues[REQUEST_CONFIG] = requests;
|
||||
}
|
||||
if (requests) {
|
||||
requests->push(new GnssUpdateConfigRequest(*this));
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
retVal = LOCATION_ERROR_SUCCESS;
|
||||
}
|
||||
pthread_mutex_unlock(&mMutex);
|
||||
return retVal;
|
||||
|
@ -753,10 +761,11 @@ void LocationAPIClientBase::onCollectiveResponseCb(
|
|||
}
|
||||
}
|
||||
LocationAPIRequest* request = nullptr;
|
||||
if (count > 0 && ids)
|
||||
request = getRequestBySession(ids[0]);
|
||||
if (!request)
|
||||
request = getGeofencesRequest();
|
||||
pthread_mutex_lock(&mMutex);
|
||||
if (mRequestQueues[REQUEST_GEOFENCE] != nullptr) {
|
||||
request = mRequestQueues[REQUEST_GEOFENCE]->pop();
|
||||
}
|
||||
pthread_mutex_unlock(&mMutex);
|
||||
if (request) {
|
||||
request->onCollectiveResponse(count, errors, ids);
|
||||
delete request;
|
||||
|
@ -788,8 +797,11 @@ void LocationAPIClientBase::onCtrlCollectiveResponseCb(
|
|||
}
|
||||
}
|
||||
LocationAPIRequest* request = nullptr;
|
||||
if (count > 0 && ids)
|
||||
request = getRequestBySession(ids[0]);
|
||||
pthread_mutex_lock(&mMutex);
|
||||
if (mRequestQueues[REQUEST_CONFIG] != nullptr) {
|
||||
request = mRequestQueues[REQUEST_CONFIG]->pop();
|
||||
}
|
||||
pthread_mutex_unlock(&mMutex);
|
||||
if (request) {
|
||||
request->onCollectiveResponse(count, errors, ids);
|
||||
delete request;
|
||||
|
@ -803,6 +815,7 @@ LocationAPIClientBase::getRequestBySession(uint32_t session)
|
|||
LocationAPIRequest* request = nullptr;
|
||||
for (int i = 0; i < REQUEST_MAX; i++) {
|
||||
if (i != REQUEST_GEOFENCE &&
|
||||
i != REQUEST_CONFIG &&
|
||||
mRequestQueues[i] &&
|
||||
mRequestQueues[i]->getSession() == session) {
|
||||
request = mRequestQueues[i]->pop();
|
||||
|
@ -812,15 +825,3 @@ LocationAPIClientBase::getRequestBySession(uint32_t session)
|
|||
pthread_mutex_unlock(&mMutex);
|
||||
return request;
|
||||
}
|
||||
|
||||
LocationAPIClientBase::LocationAPIRequest*
|
||||
LocationAPIClientBase::getGeofencesRequest()
|
||||
{
|
||||
pthread_mutex_lock(&mMutex);
|
||||
LocationAPIRequest* request = nullptr;
|
||||
if (mRequestQueues[REQUEST_GEOFENCE]) {
|
||||
request = mRequestQueues[REQUEST_GEOFENCE]->pop();
|
||||
}
|
||||
pthread_mutex_unlock(&mMutex);
|
||||
return request;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ enum REQUEST_TYPE {
|
|||
REQUEST_NIRESPONSE,
|
||||
REQUEST_DELETEAIDINGDATA,
|
||||
REQUEST_CONTROL,
|
||||
REQUEST_CONFIG,
|
||||
REQUEST_MAX,
|
||||
};
|
||||
|
||||
|
@ -446,7 +447,6 @@ private:
|
|||
};
|
||||
|
||||
LocationAPIRequest* getRequestBySession(uint32_t session);
|
||||
LocationAPIRequest* getGeofencesRequest();
|
||||
|
||||
private:
|
||||
pthread_mutex_t mMutex;
|
||||
|
@ -462,6 +462,7 @@ private:
|
|||
RequestQueue* mRequestQueues[REQUEST_MAX];
|
||||
std::map<uint32_t, SessionEntity> mSessionMap;
|
||||
int32_t mBatchSize;
|
||||
bool mEnabled;
|
||||
|
||||
GnssConfig mConfig;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue