Loading services/core/java/com/android/server/location/GnssCapabilitiesProvider.java +4 −6 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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; } Loading services/core/java/com/android/server/location/GnssLocationProvider.java +13 −39 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); }); } Loading Loading @@ -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"); } Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +7 −20 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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"); Loading Loading
services/core/java/com/android/server/location/GnssCapabilitiesProvider.java +4 −6 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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; } Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +13 −39 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); }); } Loading Loading @@ -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"); } Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +7 −20 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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"); Loading