Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 508e9aee authored by Anil Admal's avatar Anil Admal Committed by android-build-merger
Browse files

Merge "Restore gnss@1.1 HAL capability bits removed in gnss@2.0 (framework)" into qt-dev

am: e79cbfd0

Change-Id: Ie8e2075675d92cadc17452ebf350cfa22928c53f
parents 07f3fa1e e79cbfd0
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -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;
        }

+13 −39
Original line number Diff line number Diff line
@@ -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");
        }
+7 −20
Original line number Diff line number Diff line
@@ -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");