diff options
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"); |