Send capabilities callback for each init

Added sending the capabilities to hal clients
on every init, instead of only on the first init.
This is needed for the cases when the hal client
crashes and is trying to reinit.

Bug: 36182606
Change-Id: I9055d2319f1dc407b6de9627b4e66eb89f8ce9d1
CRs-fixed: 2019987
This commit is contained in:
Dante Russo 2017-03-15 11:10:24 -07:00 committed by Gerrit - the friendly Code Review server
parent 3fb8076a5e
commit b6928aae36
3 changed files with 14 additions and 1 deletions

View file

@ -121,6 +121,7 @@ Return<bool> Gnss::setCallback(const sp<IGnssCallback>& callback) {
if (api != nullptr) { if (api != nullptr) {
api->gnssUpdateCallbacks(mGnssCbIface, mGnssNiCbIface); api->gnssUpdateCallbacks(mGnssCbIface, mGnssNiCbIface);
api->locAPIEnable(LOCATION_TECHNOLOGY_TYPE_GNSS); api->locAPIEnable(LOCATION_TECHNOLOGY_TYPE_GNSS);
api->requestCapabilities();
} }
return true; return true;
} }

View file

@ -49,7 +49,8 @@ GnssAPIClient::GnssAPIClient(const sp<IGnssCallback>& gpsCb,
LocationAPIClientBase(), LocationAPIClientBase(),
mGnssCbIface(nullptr), mGnssCbIface(nullptr),
mGnssNiCbIface(nullptr), mGnssNiCbIface(nullptr),
mLocationCapabilitiesMask(0) mLocationCapabilitiesMask(0),
mLocationCapabilitiesCached(false)
{ {
LOC_LOGD("%s]: (%p %p)", __FUNCTION__, &gpsCb, &niCb); LOC_LOGD("%s]: (%p %p)", __FUNCTION__, &gpsCb, &niCb);
@ -218,11 +219,20 @@ void GnssAPIClient::gnssConfigurationUpdate(const GnssConfig& gnssConfig)
locAPIGnssUpdateConfig(gnssConfig); locAPIGnssUpdateConfig(gnssConfig);
} }
void GnssAPIClient::requestCapabilities() {
// only send capablities if it's already cached, otherwise the first time LocationAPI
// is initialized, capabilities will be sent by LocationAPI
if (mLocationCapabilitiesCached) {
onCapabilitiesCb(mLocationCapabilitiesMask);
}
}
// callbacks // callbacks
void GnssAPIClient::onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) void GnssAPIClient::onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask)
{ {
LOC_LOGD("%s]: (%02x)", __FUNCTION__, capabilitiesMask); LOC_LOGD("%s]: (%02x)", __FUNCTION__, capabilitiesMask);
mLocationCapabilitiesMask = capabilitiesMask; mLocationCapabilitiesMask = capabilitiesMask;
mLocationCapabilitiesCached = true;
if (mGnssCbIface != nullptr) { if (mGnssCbIface != nullptr) {
uint32_t data = 0; uint32_t data = 0;
if ((capabilitiesMask & LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT) || if ((capabilitiesMask & LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT) ||

View file

@ -74,6 +74,7 @@ public:
inline LocationCapabilitiesMask gnssGetCapabilities() const { inline LocationCapabilitiesMask gnssGetCapabilities() const {
return mLocationCapabilitiesMask; return mLocationCapabilitiesMask;
} }
void requestCapabilities();
// callbacks we are interested in // callbacks we are interested in
void onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) final; void onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) final;
@ -90,6 +91,7 @@ private:
sp<IGnssNiCallback> mGnssNiCbIface; sp<IGnssNiCallback> mGnssNiCbIface;
LocationCapabilitiesMask mLocationCapabilitiesMask; LocationCapabilitiesMask mLocationCapabilitiesMask;
bool mLocationCapabilitiesCached;
LocationOptions mLocationOptions; LocationOptions mLocationOptions;
}; };