Merge "Adding priority flag for NI and AGPS callbacks"

This commit is contained in:
Linux Build Service Account 2017-06-24 16:43:22 -07:00 committed by Gerrit - the friendly Code Review server
commit a3db3b5919
10 changed files with 48 additions and 10 deletions

View file

@ -51,7 +51,11 @@ Return<void> AGnss::setCallback(const sp<IAGnssCallback>& callback) {
// Save the interface
sAGnssCbIface = callback;
mGnss->getGnssInterface()->agpsInit((void*)agnssStatusIpV4Cb);
AgpsCbInfo cbInfo = {};
cbInfo.statusV4Cb = (void*)agnssStatusIpV4Cb;
cbInfo.cbPriority = AGPS_CB_PRIORITY_LOW;
mGnss->getGnssInterface()->agpsInit(cbInfo);
return Void();
}

View file

@ -54,6 +54,7 @@ BatchingAPIClient::BatchingAPIClient(const sp<IGnssBatchingCallback>& callback)
LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback);
LocationCallbacks locationCallbacks;
memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
locationCallbacks.size = sizeof(LocationCallbacks);
locationCallbacks.trackingCb = nullptr;

View file

@ -50,6 +50,7 @@ GeofenceAPIClient::GeofenceAPIClient(const sp<IGnssGeofenceCallback>& callback)
LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback);
LocationCallbacks locationCallbacks;
memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
locationCallbacks.size = sizeof(LocationCallbacks);
locationCallbacks.trackingCb = nullptr;

View file

@ -35,6 +35,7 @@
#include "LocationUtil.h"
#include "GnssAPIClient.h"
#include <LocDualContext.h>
namespace android {
namespace hardware {
@ -79,6 +80,7 @@ void GnssAPIClient::gnssUpdateCallbacks(const sp<IGnssCallback>& gpsCb,
mGnssNiCbIface = niCb;
LocationCallbacks locationCallbacks;
memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
locationCallbacks.size = sizeof(LocationCallbacks);
locationCallbacks.trackingCb = nullptr;
@ -94,7 +96,12 @@ void GnssAPIClient::gnssUpdateCallbacks(const sp<IGnssCallback>& gpsCb,
locationCallbacks.gnssLocationInfoCb = nullptr;
locationCallbacks.gnssNiCb = nullptr;
if (mGnssNiCbIface != nullptr) {
loc_core::ContextBase* context =
loc_core::LocDualContext::getLocFgContext(
NULL, NULL,
loc_core::LocDualContext::mLocationHalName, false);
if (mGnssNiCbIface != nullptr && !context->hasAgpsExtendedCapabilities()) {
LOC_LOGD("Registering NI CB");
locationCallbacks.gnssNiCb = [this](uint32_t id, GnssNiNotification gnssNiNotification) {
onGnssNiCb(id, gnssNiNotification);
};

View file

@ -80,6 +80,7 @@ MeasurementAPIClient::measurementSetCallback(const sp<IGnssMeasurementCallback>&
mGnssMeasurementCbIface = callback;
LocationCallbacks locationCallbacks;
memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
locationCallbacks.size = sizeof(LocationCallbacks);
locationCallbacks.trackingCb = nullptr;

View file

@ -62,7 +62,8 @@ GnssAdapter::GnssAdapter() :
mControlCallbacks(),
mPowerVoteId(0),
mNiData(),
mAgpsManager()
mAgpsManager(),
mAgpsCbInfo()
{
LOC_LOGD("%s]: Constructor %p", __func__, this);
mUlpPositionMode.mode = LOC_POSITION_MODE_INVALID;
@ -2301,7 +2302,7 @@ GnssAdapter::reportSvPolynomialEvent(GnssSvPolynomial &svPolynomial)
}
/* INIT LOC AGPS MANAGER */
void GnssAdapter::initAgpsCommand(void* statusV4Cb){
void GnssAdapter::initAgpsCommand(const AgpsCbInfo& cbInfo){
LOC_LOGI("GnssAdapter::initAgpsCommand");
@ -2416,10 +2417,20 @@ void GnssAdapter::initAgpsCommand(void* statusV4Cb){
}
};
if (mAgpsCbInfo.cbPriority > cbInfo.cbPriority) {
LOC_LOGI("Higher priority AGPS CB already registered (%d > %d) !",
mAgpsCbInfo.cbPriority, cbInfo.cbPriority);
return;
} else {
mAgpsCbInfo = cbInfo;
LOC_LOGI("Registering AGPS CB 0x%x with priority %d",
mAgpsCbInfo.statusV4Cb, mAgpsCbInfo.cbPriority);
}
/* Send message to initialize AGPS Manager */
sendMsg(new AgpsMsgInit(
&mAgpsManager,
(AgpsFrameworkInterface::AgnssStatusIpV4Cb)statusV4Cb,
(AgpsFrameworkInterface::AgnssStatusIpV4Cb)cbInfo.statusV4Cb,
atlOpenStatusCb, atlCloseStatusCb,
dsClientInitFn, dsClientOpenAndStartDataCallFn,
dsClientStopDataCallFn, dsClientCloseDataCallFn,

View file

@ -99,6 +99,7 @@ class GnssAdapter : public LocAdapterBase {
/* ==== AGPS ========================================================*/
// This must be initialized via initAgps()
AgpsManager mAgpsManager;
AgpsCbInfo mAgpsCbInfo;
/*==== CONVERSION ===================================================================*/
static void convertOptions(LocPosMode& out, const LocationOptions& options);
@ -185,7 +186,7 @@ public:
uint32_t* gnssUpdateConfigCommand(GnssConfig config);
uint32_t gnssDeleteAidingDataCommand(GnssAidingData& data);
void initAgpsCommand(void* statusV4Cb);
void initAgpsCommand(const AgpsCbInfo& cbInfo);
void dataConnOpenCommand(
AGpsExtType agpsType,
const char* apnName, int apnLen, LocApnIpType ipType);

View file

@ -54,7 +54,7 @@ static uint32_t* gnssUpdateConfig(GnssConfig config);
static void injectLocation(double latitude, double longitude, float accuracy);
static void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty);
static void agpsInit(void* statusV4Cb);
static void agpsInit(const AgpsCbInfo& cbInfo);
static void agpsDataConnOpen(AGpsExtType agpsType, const char* apnName, int apnLen, int ipType);
static void agpsDataConnClosed(AGpsExtType agpsType);
static void agpsDataConnFailed(AGpsExtType agpsType);
@ -215,10 +215,10 @@ static void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty)
}
}
static void agpsInit(void* statusV4Cb) {
static void agpsInit(const AgpsCbInfo& cbInfo) {
if (NULL != gGnssAdapter) {
gGnssAdapter->initAgpsCommand(statusV4Cb);
gGnssAdapter->initAgpsCommand(cbInfo);
}
}
static void agpsDataConnOpen(

View file

@ -30,6 +30,7 @@
#define LOCATION_INTERFACE_H
#include <LocationAPI.h>
#include <gps_extended_c.h>
struct GnssInterface {
size_t size;
@ -49,7 +50,7 @@ struct GnssInterface {
uint32_t (*gnssDeleteAidingData)(GnssAidingData& data);
void (*injectLocation)(double latitude, double longitude, float accuracy);
void (*injectTime)(int64_t time, int64_t timeReference, int32_t uncertainty);
void (*agpsInit)(void* statusV4Cb);
void (*agpsInit)(const AgpsCbInfo& cbInfo);
void (*agpsDataConnOpen)(short agpsType, const char* apnName, int apnLen, int ipType);
void (*agpsDataConnClosed)(short agpsType);
void (*agpsDataConnFailed)(short agpsType);

View file

@ -160,6 +160,17 @@ typedef int16_t AGpsBearerType;
#define AGPS_APN_BEARER_IPV6 1
#define AGPS_APN_BEARER_IPV4V6 2
typedef enum {
AGPS_CB_PRIORITY_LOW = 1,
AGPS_CB_PRIORITY_MED = 2,
AGPS_CB_PRIORITY_HIGH = 3
} AgpsCbPriority;
typedef struct {
void* statusV4Cb;
AgpsCbPriority cbPriority;
} AgpsCbInfo;
/** GPS extended callback structure. */
typedef struct {
/** set to sizeof(LocGpsCallbacks) */