Merge "Return existing interfaces for repeated getExtension calls"
diff --git a/gnss/1.0/default/AGnss.cpp b/gnss/1.0/default/AGnss.cpp
index 52fdc26..29c6ddd 100644
--- a/gnss/1.0/default/AGnss.cpp
+++ b/gnss/1.0/default/AGnss.cpp
@@ -41,6 +41,7 @@
AGnss::~AGnss() {
sThreadFuncArgsList.clear();
+ sInterfaceExists = false;
}
void AGnss::statusCb(AGpsStatus* status) {
@@ -78,7 +79,10 @@
/*
* Callback to client with agnssStatusIpV4Cb.
*/
- sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+ auto ret = sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
break;
}
case AF_INET6:
@@ -96,7 +100,10 @@
&(status->addr));
memcpy(&(aGnssStatusIpV6.ipV6Addr[0]), in6->sin6_addr.s6_addr,
aGnssStatusIpV6.ipV6Addr.size());
- sAGnssCbIface->agnssStatusIpV6Cb(aGnssStatusIpV6);
+ auto ret = sAGnssCbIface->agnssStatusIpV6Cb(aGnssStatusIpV6);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
break;
}
default:
@@ -117,7 +124,10 @@
/*
* Callback to client with agnssStatusIpV4Cb.
*/
- sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+ auto ret = sAGnssCbIface->agnssStatusIpV4Cb(aGnssStatusIpV4);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
} else {
ALOGE("%s: Invalid size for AGPS Status", __func__);
}
diff --git a/gnss/1.0/default/AGnssRil.cpp b/gnss/1.0/default/AGnssRil.cpp
index 480571d..1458327 100644
--- a/gnss/1.0/default/AGnssRil.cpp
+++ b/gnss/1.0/default/AGnssRil.cpp
@@ -42,6 +42,7 @@
AGnssRil::~AGnssRil() {
sThreadFuncArgsList.clear();
+ sInterfaceExists = false;
}
void AGnssRil::requestSetId(uint32_t flags) {
@@ -50,7 +51,10 @@
return;
}
- sAGnssRilCbIface->requestSetIdCb(flags);
+ auto ret = sAGnssRilCbIface->requestSetIdCb(flags);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void AGnssRil::requestRefLoc(uint32_t /*flags*/) {
@@ -59,7 +63,10 @@
return;
}
- sAGnssRilCbIface->requestRefLocCb();
+ auto ret = sAGnssRilCbIface->requestRefLocCb();
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
pthread_t AGnssRil::createThreadCb(const char* name, void (*start)(void*), void* arg) {
diff --git a/gnss/1.0/default/Gnss.cpp b/gnss/1.0/default/Gnss.cpp
index a2a99a0..10024fb 100644
--- a/gnss/1.0/default/Gnss.cpp
+++ b/gnss/1.0/default/Gnss.cpp
@@ -60,6 +60,7 @@
}
Gnss::~Gnss() {
+ sInterfaceExists = false;
sThreadFuncArgsList.clear();
}
@@ -75,7 +76,10 @@
}
android::hardware::gnss::V1_0::GnssLocation gnssLocation = convertToGnssLocation(location);
- sGnssCbIface->gnssLocationCb(gnssLocation);
+ auto ret = sGnssCbIface->gnssLocationCb(gnssLocation);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void Gnss::statusCb(GpsStatus* gnssStatus) {
@@ -92,7 +96,10 @@
IGnssCallback::GnssStatusValue status =
static_cast<IGnssCallback::GnssStatusValue>(gnssStatus->status);
- sGnssCbIface->gnssStatusCb(status);
+ auto ret = sGnssCbIface->gnssStatusCb(status);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void Gnss::gnssSvStatusCb(GnssSvStatus* status) {
@@ -131,7 +138,10 @@
svStatus.gnssSvList[i] = gnssSvInfo;
}
- sGnssCbIface->gnssSvStatusCb(svStatus);
+ auto ret = sGnssCbIface->gnssSvStatusCb(svStatus);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
/*
@@ -231,7 +241,10 @@
}
}
- sGnssCbIface->gnssSvStatusCb(svStatus);
+ auto ret = sGnssCbIface->gnssSvStatusCb(svStatus);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void Gnss::nmeaCb(GpsUtcTime timestamp, const char* nmea, int length) {
@@ -242,7 +255,10 @@
android::hardware::hidl_string nmeaString;
nmeaString.setToExternal(nmea, length);
- sGnssCbIface->gnssNmeaCb(timestamp, nmeaString);
+ auto ret = sGnssCbIface->gnssNmeaCb(timestamp, nmeaString);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void Gnss::setCapabilitiesCb(uint32_t capabilities) {
@@ -251,7 +267,10 @@
return;
}
- sGnssCbIface->gnssSetCapabilitesCb(capabilities);
+ auto ret = sGnssCbIface->gnssSetCapabilitesCb(capabilities);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void Gnss::acquireWakelockCb() {
@@ -298,7 +317,10 @@
ALOGI("%s: GNSS HAL Wakelock acquired due to gps: %d, fused: %d", __func__,
sWakelockHeldGnss, sWakelockHeldFused);
sWakelockHeld = true;
- sGnssCbIface->gnssAcquireWakelockCb();
+ auto ret = sGnssCbIface->gnssAcquireWakelockCb();
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
} else {
if (sWakelockHeld) {
@@ -309,7 +331,10 @@
ALOGW("%s: GNSS HAL Wakelock released, duplicate request", __func__);
}
sWakelockHeld = false;
- sGnssCbIface->gnssReleaseWakelockCb();
+ auto ret = sGnssCbIface->gnssReleaseWakelockCb();
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
}
@@ -319,7 +344,10 @@
return;
}
- sGnssCbIface->gnssRequestTimeCb();
+ auto ret = sGnssCbIface->gnssRequestTimeCb();
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
pthread_t Gnss::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -341,7 +369,10 @@
.yearOfHw = info->year_of_hw
};
- sGnssCbIface->gnssSetSystemInfoCb(gnssInfo);
+ auto ret = sGnssCbIface->gnssSetSystemInfoCb(gnssInfo);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
@@ -434,7 +465,10 @@
Return<sp<IAGnssRil>> Gnss::getExtensionAGnssRil() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssRil == nullptr) {
const AGpsRilInterface* agpsRilIface = static_cast<const AGpsRilInterface*>(
mGnssIface->get_extension(AGPS_RIL_INTERFACE));
if (agpsRilIface == nullptr) {
@@ -449,7 +483,10 @@
Return<sp<IGnssConfiguration>> Gnss::getExtensionGnssConfiguration() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssConfig == nullptr) {
const GnssConfigurationInterface* gnssConfigIface =
static_cast<const GnssConfigurationInterface*>(
mGnssIface->get_extension(GNSS_CONFIGURATION_INTERFACE));
@@ -462,10 +499,14 @@
}
return mGnssConfig;
}
+
Return<sp<IGnssGeofencing>> Gnss::getExtensionGnssGeofencing() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssGeofencingIface == nullptr) {
const GpsGeofencingInterface* gpsGeofencingIface =
static_cast<const GpsGeofencingInterface*>(
mGnssIface->get_extension(GPS_GEOFENCING_INTERFACE));
@@ -483,7 +524,10 @@
Return<sp<IAGnss>> Gnss::getExtensionAGnss() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mAGnssIface == nullptr) {
const AGpsInterface* agpsIface = static_cast<const AGpsInterface*>(
mGnssIface->get_extension(AGPS_INTERFACE));
if (agpsIface == nullptr) {
@@ -498,7 +542,10 @@
Return<sp<IGnssNi>> Gnss::getExtensionGnssNi() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssNi == nullptr) {
const GpsNiInterface* gpsNiIface = static_cast<const GpsNiInterface*>(
mGnssIface->get_extension(GPS_NI_INTERFACE));
if (gpsNiIface == nullptr) {
@@ -513,7 +560,10 @@
Return<sp<IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssMeasurement == nullptr) {
const GpsMeasurementInterface* gpsMeasurementIface =
static_cast<const GpsMeasurementInterface*>(
mGnssIface->get_extension(GPS_MEASUREMENT_INTERFACE));
@@ -530,7 +580,10 @@
Return<sp<IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssNavigationMessage == nullptr) {
const GpsNavigationMessageInterface* gpsNavigationMessageIface =
static_cast<const GpsNavigationMessageInterface*>(
mGnssIface->get_extension(GPS_NAVIGATION_MESSAGE_INTERFACE));
@@ -549,7 +602,10 @@
Return<sp<IGnssXtra>> Gnss::getExtensionXtra() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssXtraIface == nullptr) {
const GpsXtraInterface* gpsXtraIface = static_cast<const GpsXtraInterface*>(
mGnssIface->get_extension(GPS_XTRA_INTERFACE));
@@ -566,7 +622,10 @@
Return<sp<IGnssDebug>> Gnss::getExtensionGnssDebug() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssDebug == nullptr) {
const GpsDebugInterface* gpsDebugIface = static_cast<const GpsDebugInterface*>(
mGnssIface->get_extension(GPS_DEBUG_INTERFACE));
@@ -583,7 +642,10 @@
Return<sp<IGnssBatching>> Gnss::getExtensionGnssBatching() {
if (mGnssIface == nullptr) {
ALOGE("%s: Gnss interface is unavailable", __func__);
- } else {
+ return nullptr;
+ }
+
+ if (mGnssBatching == nullptr) {
hw_module_t* module;
const FlpLocationInterface* flpLocationIface = nullptr;
int err = hw_get_module(FUSED_LOCATION_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
diff --git a/gnss/1.0/default/GnssBatching.cpp b/gnss/1.0/default/GnssBatching.cpp
index 5e383e7..02b38cb 100644
--- a/gnss/1.0/default/GnssBatching.cpp
+++ b/gnss/1.0/default/GnssBatching.cpp
@@ -103,7 +103,10 @@
gnssLocations.push_back(convertToGnssLocation(locations[iLocation]));
}
- sGnssBatchingCbIface->gnssLocationBatchCb(gnssLocations);
+ auto ret = sGnssBatchingCbIface->gnssLocationBatchCb(gnssLocations);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssBatching::acquireWakelockCb() {
diff --git a/gnss/1.0/default/GnssGeofencing.cpp b/gnss/1.0/default/GnssGeofencing.cpp
index f42de42..54c4aaa 100644
--- a/gnss/1.0/default/GnssGeofencing.cpp
+++ b/gnss/1.0/default/GnssGeofencing.cpp
@@ -48,6 +48,7 @@
GnssGeofencing::~GnssGeofencing() {
sThreadFuncArgsList.clear();
+ sInterfaceExists = false;
}
void GnssGeofencing::gnssGfTransitionCb(int32_t geofenceId,
GpsLocation* location,
@@ -64,11 +65,14 @@
}
GnssLocation gnssLocation = convertToGnssLocation(location);
- mGnssGeofencingCbIface->gnssGeofenceTransitionCb(
+ auto ret = mGnssGeofencingCbIface->gnssGeofenceTransitionCb(
geofenceId,
gnssLocation,
static_cast<IGnssGeofenceCallback::GeofenceTransition>(transition),
timestamp);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssGeofencing::gnssGfStatusCb(int32_t status, GpsLocation* location) {
@@ -85,8 +89,11 @@
gnssLocation = {};
}
- mGnssGeofencingCbIface->gnssGeofenceStatusCb(
+ auto ret = mGnssGeofencingCbIface->gnssGeofenceStatusCb(
static_cast<IGnssGeofenceCallback::GeofenceAvailability>(status), gnssLocation);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssGeofencing::gnssGfAddCb(int32_t geofenceId, int32_t status) {
@@ -95,8 +102,11 @@
return;
}
- mGnssGeofencingCbIface->gnssGeofenceAddCb(
+ auto ret = mGnssGeofencingCbIface->gnssGeofenceAddCb(
geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssGeofencing::gnssGfRemoveCb(int32_t geofenceId, int32_t status) {
@@ -105,8 +115,11 @@
return;
}
- mGnssGeofencingCbIface->gnssGeofenceRemoveCb(
- geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+ auto ret = mGnssGeofencingCbIface->gnssGeofenceRemoveCb(
+ geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssGeofencing::gnssGfPauseCb(int32_t geofenceId, int32_t status) {
@@ -115,8 +128,11 @@
return;
}
- mGnssGeofencingCbIface->gnssGeofencePauseCb(
+ auto ret = mGnssGeofencingCbIface->gnssGeofencePauseCb(
geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
void GnssGeofencing::gnssGfResumeCb(int32_t geofenceId, int32_t status) {
@@ -125,8 +141,11 @@
return;
}
- mGnssGeofencingCbIface->gnssGeofenceResumeCb(
+ auto ret = mGnssGeofencingCbIface->gnssGeofenceResumeCb(
geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status));
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
pthread_t GnssGeofencing::createThreadCb(const char* name, void (*start)(void*), void* arg) {
diff --git a/gnss/1.0/default/GnssMeasurement.cpp b/gnss/1.0/default/GnssMeasurement.cpp
index 67f6d8d..6c9b838 100644
--- a/gnss/1.0/default/GnssMeasurement.cpp
+++ b/gnss/1.0/default/GnssMeasurement.cpp
@@ -96,7 +96,10 @@
.hwClockDiscontinuityCount = clockVal.hw_clock_discontinuity_count
};
- sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+ auto ret = sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
/*
@@ -223,7 +226,10 @@
gnssData.clock.driftUncertaintyNsps = clockVal.drift_uncertainty_nsps;
gnssData.clock.gnssClockFlags = clockVal.flags;
- sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+ auto ret = sGnssMeasureCbIface->GnssMeasurementCb(gnssData);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
// Methods from ::android::hardware::gnss::V1_0::IGnssMeasurement follow.
diff --git a/gnss/1.0/default/GnssNavigationMessage.cpp b/gnss/1.0/default/GnssNavigationMessage.cpp
index c98abf6..6f509d0 100644
--- a/gnss/1.0/default/GnssNavigationMessage.cpp
+++ b/gnss/1.0/default/GnssNavigationMessage.cpp
@@ -59,7 +59,10 @@
navigationMsg.submessageId = message->submessage_id;
navigationMsg.data.setToExternal(message->data, message->data_length);
- sGnssNavigationMsgCbIface->gnssNavigationMessageCb(navigationMsg);
+ auto ret = sGnssNavigationMsgCbIface->gnssNavigationMessageCb(navigationMsg);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
// Methods from ::android::hardware::gnss::V1_0::IGnssNavigationMessage follow.
diff --git a/gnss/1.0/default/GnssNi.cpp b/gnss/1.0/default/GnssNi.cpp
index ec57e8c..d17891d 100644
--- a/gnss/1.0/default/GnssNi.cpp
+++ b/gnss/1.0/default/GnssNi.cpp
@@ -41,6 +41,7 @@
GnssNi::~GnssNi() {
sThreadFuncArgsList.clear();
+ sInterfaceExists = false;
}
pthread_t GnssNi::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -73,7 +74,10 @@
static_cast<IGnssNiCallback::GnssNiEncodingType>(notification->text_encoding)
};
- sGnssNiCbIface->niNotifyCb(notificationGnss);
+ auto ret = sGnssNiCbIface->niNotifyCb(notificationGnss);
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
// Methods from ::android::hardware::gnss::V1_0::IGnssNi follow.
diff --git a/gnss/1.0/default/GnssXtra.cpp b/gnss/1.0/default/GnssXtra.cpp
index 065bb33..d124ce1 100644
--- a/gnss/1.0/default/GnssXtra.cpp
+++ b/gnss/1.0/default/GnssXtra.cpp
@@ -35,6 +35,7 @@
GnssXtra::~GnssXtra() {
sThreadFuncArgsList.clear();
+ sInterfaceExists = false;
}
pthread_t GnssXtra::createThreadCb(const char* name, void (*start)(void*), void* arg) {
@@ -53,7 +54,10 @@
return;
}
- sGnssXtraCbIface->downloadRequestCb();
+ auto ret = sGnssXtraCbIface->downloadRequestCb();
+ if (!ret.isOk()) {
+ ALOGE("%s: Unable to invoke callback", __func__);
+ }
}
// Methods from ::android::hardware::gnss::V1_0::IGnssXtra follow.