summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/location/GnssCapabilitiesProvider.java10
-rw-r--r--services/core/java/com/android/server/location/GnssLocationProvider.java52
-rw-r--r--services/core/jni/com_android_server_location_GnssLocationProvider.cpp27
3 files changed, 24 insertions, 65 deletions
diff --git a/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java b/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
index 98085b8e219b..b4b6160fadbe 100644
--- a/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
+++ b/services/core/java/com/android/server/location/GnssCapabilitiesProvider.java
@@ -75,9 +75,7 @@ public class GnssCapabilitiesProvider {
/**
* Updates the general capabilities exposed through {@link android.location.GnssCapabilities}.
*/
- void setTopHalCapabilities(int topHalCapabilities,
- boolean hasGeofencingCapability, boolean hasMeasurementsCapability,
- boolean hasNavMessagesCapability) {
+ void setTopHalCapabilities(int topHalCapabilities) {
long gnssCapabilities = 0;
if (hasCapability(topHalCapabilities,
GnssLocationProvider.GPS_CAPABILITY_LOW_POWER_MODE)) {
@@ -87,13 +85,13 @@ public class GnssCapabilitiesProvider {
GnssLocationProvider.GPS_CAPABILITY_SATELLITE_BLACKLIST)) {
gnssCapabilities |= GNSS_CAPABILITY_SATELLITE_BLACKLIST;
}
- if (hasGeofencingCapability) {
+ if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_GEOFENCING)) {
gnssCapabilities |= GNSS_CAPABILITY_GEOFENCING;
}
- if (hasMeasurementsCapability) {
+ if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_MEASUREMENTS)) {
gnssCapabilities |= GNSS_CAPABILITY_MEASUREMENTS;
}
- if (hasNavMessagesCapability) {
+ if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_NAV_MESSAGES)) {
gnssCapabilities |= GNSS_CAPABILITY_NAV_MESSAGES;
}
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index be34adb1fca4..4504b2e38e2b 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -166,15 +166,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private static final int GPS_CAPABILITY_MSA = 0x0000004;
private static final int GPS_CAPABILITY_SINGLE_SHOT = 0x0000008;
private static final int GPS_CAPABILITY_ON_DEMAND_TIME = 0x0000010;
-
- // The following three capability flags are removed in IGnssCallback.hal@2.0 and their values
- // are marked reserved and not reused in 2.0 to avoid confusion with prior versions.
public static final int GPS_CAPABILITY_GEOFENCING = 0x0000020;
public static final int GPS_CAPABILITY_MEASUREMENTS = 0x0000040;
public static final int GPS_CAPABILITY_NAV_MESSAGES = 0x0000080;
-
- static final int GPS_CAPABILITY_LOW_POWER_MODE = 0x0000100;
- static final int GPS_CAPABILITY_SATELLITE_BLACKLIST = 0x0000200;
+ public static final int GPS_CAPABILITY_LOW_POWER_MODE = 0x0000100;
+ public static final int GPS_CAPABILITY_SATELLITE_BLACKLIST = 0x0000200;
+ public static final int GPS_CAPABILITY_MEASUREMENT_CORRECTIONS = 0x0000400;
// The AGPS SUPL mode
private static final int AGPS_SUPL_MODE_MSA = 0x02;
@@ -1490,12 +1487,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
}
@NativeEntryPoint
- private void setTopHalCapabilities(int topHalCapabilities, boolean hasSubHalCapabilityFlags) {
- // The IGnssCallback.hal@2.0 removed sub-HAL capability flags from the Capabilities enum
- // and instead uses the sub-HAL non-null handle returned from IGnss.hal@2.0 to indicate
- // support. Therefore, the 'hasSubHalCapabilityFlags' parameter is needed to tell if the
- // 'capabilities' parameter includes the sub-HAL capability flags or not. Old HALs
- // which explicitly set the sub-HAL capability bits must continue to work.
+ private void setTopHalCapabilities(int topHalCapabilities) {
mHandler.post(() -> {
mTopHalCapabilities = topHalCapabilities;
@@ -1504,25 +1496,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
requestUtcTime();
}
- boolean hasGeofencingCapability;
- boolean hasMeasurementsCapability;
- boolean hasNavMessagesCapability;
- if (hasSubHalCapabilityFlags) {
- hasGeofencingCapability = hasCapability(GPS_CAPABILITY_GEOFENCING);
- hasMeasurementsCapability = hasCapability(GPS_CAPABILITY_MEASUREMENTS);
- hasNavMessagesCapability = hasCapability(GPS_CAPABILITY_NAV_MESSAGES);
- } else {
- hasGeofencingCapability = mGnssGeofenceProvider.isHardwareGeofenceSupported();
- hasMeasurementsCapability = mGnssMeasurementsProvider.isAvailableInPlatform();
- hasNavMessagesCapability = mGnssNavigationMessageProvider.isAvailableInPlatform();
- }
-
- mGnssMeasurementsProvider.onCapabilitiesUpdated(hasMeasurementsCapability);
- mGnssNavigationMessageProvider.onCapabilitiesUpdated(hasNavMessagesCapability);
+ mGnssMeasurementsProvider.onCapabilitiesUpdated(
+ hasCapability(GPS_CAPABILITY_MEASUREMENTS));
+ mGnssNavigationMessageProvider.onCapabilitiesUpdated(
+ hasCapability(GPS_CAPABILITY_NAV_MESSAGES));
restartRequests();
- mGnssCapabilitiesProvider.setTopHalCapabilities(topHalCapabilities,
- hasGeofencingCapability, hasMeasurementsCapability, hasNavMessagesCapability);
+ mGnssCapabilitiesProvider.setTopHalCapabilities(mTopHalCapabilities);
});
}
@@ -2184,18 +2164,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
if (hasCapability(GPS_CAPABILITY_NAV_MESSAGES)) s.append("NAV_MESSAGES ");
if (hasCapability(GPS_CAPABILITY_LOW_POWER_MODE)) s.append("LOW_POWER_MODE ");
if (hasCapability(GPS_CAPABILITY_SATELLITE_BLACKLIST)) s.append("SATELLITE_BLACKLIST ");
- s.append(")\n");
- if (mGnssGeofenceProvider.isHardwareGeofenceSupported()) {
- s.append(" hasSubHal=GEOFENCING\n");
- }
- if (mGnssMeasurementsProvider.isAvailableInPlatform()) {
- s.append(" hasSubHal=MEASUREMENTS\n");
- }
- if (mGnssNavigationMessageProvider.isAvailableInPlatform()) {
- s.append(" hasSubHal=NAV_MESSAGES\n");
+ if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
+ s.append("MEASUREMENT_CORRECTIONS ");
}
+ s.append(")\n");
if (mGnssMeasurementCorrectionsProvider.isAvailableInPlatform()) {
- s.append(" hasSubHal=MEASUREMENT_CORRECTIONS [");
+ s.append(" SubHal=MEASUREMENT_CORRECTIONS[");
s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities());
s.append("]\n");
}
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index f447f475684d..019cb315bc61 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -735,31 +735,18 @@ Return<void> GnssCallback::gnssNmeaCb(
}
Return<void> GnssCallback::gnssSetCapabilitesCb(uint32_t capabilities) {
- return GnssCallback::gnssSetCapabilitesCbImpl(capabilities,
- /* hasSubHalCapabilityFlags = */ true);
-}
+ ALOGD("%s: %du\n", __func__, capabilities);
-Return<void> GnssCallback::gnssSetCapabilitiesCb_2_0(uint32_t capabilities) {
- return GnssCallback::gnssSetCapabilitesCbImpl(capabilities,
- /* hasSubHalCapabilityFlags = */ false);
-}
-
-Return <void> GnssCallback::gnssSetCapabilitesCbImpl(uint32_t capabilities,
- bool hasSubHalCapabilityFlags) {
- // The IGnssCallback.hal@2.0 removed sub-HAL capability flags from the Capabilities enum
- // and instead uses the sub-HAL non-null handle returned from IGnss.hal@2.0 to indicate
- // support. Therefore, the 'hasSubHalCapabilityFlags' parameter is needed to tell if the
- // 'capabilities' parameter includes the sub-HAL capability flags or not. Old HALs
- // which explicitly set the sub-HAL capability bits must continue to work.
- ALOGD("%s: capabilities=%du, hasSubHalCapabilityFlags=%d\n", __func__, capabilities,
- hasSubHalCapabilityFlags);
JNIEnv* env = getJniEnv();
- env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities,
- boolToJbool(hasSubHalCapabilityFlags));
+ env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
+Return<void> GnssCallback::gnssSetCapabilitiesCb_2_0(uint32_t capabilities) {
+ return GnssCallback::gnssSetCapabilitesCb(capabilities);
+}
+
Return<void> GnssCallback::gnssAcquireWakelockCb() {
acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME);
return Void();
@@ -1542,7 +1529,7 @@ static void android_location_GnssLocationProvider_init_once(JNIEnv* env, jclass
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "(I[I[F[F[F[F)V");
method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II[B)V");
method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
- method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(IZ)V");
+ method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(I)V");
method_setGnssYearOfHardware = env->GetMethodID(clazz, "setGnssYearOfHardware", "(I)V");
method_setGnssHardwareModelName = env->GetMethodID(clazz, "setGnssHardwareModelName",
"(Ljava/lang/String;)V");