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

This commit is contained in:
Anil Admal
2019-04-05 06:15:35 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 66 deletions

View File

@@ -75,9 +75,7 @@ public class GnssCapabilitiesProvider {
/** /**
* Updates the general capabilities exposed through {@link android.location.GnssCapabilities}. * Updates the general capabilities exposed through {@link android.location.GnssCapabilities}.
*/ */
void setTopHalCapabilities(int topHalCapabilities, void setTopHalCapabilities(int topHalCapabilities) {
boolean hasGeofencingCapability, boolean hasMeasurementsCapability,
boolean hasNavMessagesCapability) {
long gnssCapabilities = 0; long gnssCapabilities = 0;
if (hasCapability(topHalCapabilities, if (hasCapability(topHalCapabilities,
GnssLocationProvider.GPS_CAPABILITY_LOW_POWER_MODE)) { GnssLocationProvider.GPS_CAPABILITY_LOW_POWER_MODE)) {
@@ -87,13 +85,13 @@ public class GnssCapabilitiesProvider {
GnssLocationProvider.GPS_CAPABILITY_SATELLITE_BLACKLIST)) { GnssLocationProvider.GPS_CAPABILITY_SATELLITE_BLACKLIST)) {
gnssCapabilities |= GNSS_CAPABILITY_SATELLITE_BLACKLIST; gnssCapabilities |= GNSS_CAPABILITY_SATELLITE_BLACKLIST;
} }
if (hasGeofencingCapability) { if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_GEOFENCING)) {
gnssCapabilities |= GNSS_CAPABILITY_GEOFENCING; gnssCapabilities |= GNSS_CAPABILITY_GEOFENCING;
} }
if (hasMeasurementsCapability) { if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_MEASUREMENTS)) {
gnssCapabilities |= GNSS_CAPABILITY_MEASUREMENTS; gnssCapabilities |= GNSS_CAPABILITY_MEASUREMENTS;
} }
if (hasNavMessagesCapability) { if (hasCapability(topHalCapabilities, GnssLocationProvider.GPS_CAPABILITY_NAV_MESSAGES)) {
gnssCapabilities |= GNSS_CAPABILITY_NAV_MESSAGES; gnssCapabilities |= GNSS_CAPABILITY_NAV_MESSAGES;
} }

View File

@@ -166,15 +166,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private static final int GPS_CAPABILITY_MSA = 0x0000004; private static final int GPS_CAPABILITY_MSA = 0x0000004;
private static final int GPS_CAPABILITY_SINGLE_SHOT = 0x0000008; private static final int GPS_CAPABILITY_SINGLE_SHOT = 0x0000008;
private static final int GPS_CAPABILITY_ON_DEMAND_TIME = 0x0000010; 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_GEOFENCING = 0x0000020;
public static final int GPS_CAPABILITY_MEASUREMENTS = 0x0000040; public static final int GPS_CAPABILITY_MEASUREMENTS = 0x0000040;
public static final int GPS_CAPABILITY_NAV_MESSAGES = 0x0000080; public static final int GPS_CAPABILITY_NAV_MESSAGES = 0x0000080;
public static final int GPS_CAPABILITY_LOW_POWER_MODE = 0x0000100;
static final int GPS_CAPABILITY_LOW_POWER_MODE = 0x0000100; public static final int GPS_CAPABILITY_SATELLITE_BLACKLIST = 0x0000200;
static final int GPS_CAPABILITY_SATELLITE_BLACKLIST = 0x0000200; public static final int GPS_CAPABILITY_MEASUREMENT_CORRECTIONS = 0x0000400;
// The AGPS SUPL mode // The AGPS SUPL mode
private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSA = 0x02;
@@ -1490,12 +1487,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
} }
@NativeEntryPoint @NativeEntryPoint
private void setTopHalCapabilities(int topHalCapabilities, boolean hasSubHalCapabilityFlags) { private void setTopHalCapabilities(int topHalCapabilities) {
// 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.
mHandler.post(() -> { mHandler.post(() -> {
mTopHalCapabilities = topHalCapabilities; mTopHalCapabilities = topHalCapabilities;
@@ -1504,25 +1496,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
requestUtcTime(); requestUtcTime();
} }
boolean hasGeofencingCapability; mGnssMeasurementsProvider.onCapabilitiesUpdated(
boolean hasMeasurementsCapability; hasCapability(GPS_CAPABILITY_MEASUREMENTS));
boolean hasNavMessagesCapability; mGnssNavigationMessageProvider.onCapabilitiesUpdated(
if (hasSubHalCapabilityFlags) { hasCapability(GPS_CAPABILITY_NAV_MESSAGES));
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);
restartRequests(); restartRequests();
mGnssCapabilitiesProvider.setTopHalCapabilities(topHalCapabilities, mGnssCapabilitiesProvider.setTopHalCapabilities(mTopHalCapabilities);
hasGeofencingCapability, hasMeasurementsCapability, hasNavMessagesCapability);
}); });
} }
@@ -2184,18 +2164,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
if (hasCapability(GPS_CAPABILITY_NAV_MESSAGES)) s.append("NAV_MESSAGES "); 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_LOW_POWER_MODE)) s.append("LOW_POWER_MODE ");
if (hasCapability(GPS_CAPABILITY_SATELLITE_BLACKLIST)) s.append("SATELLITE_BLACKLIST "); if (hasCapability(GPS_CAPABILITY_SATELLITE_BLACKLIST)) s.append("SATELLITE_BLACKLIST ");
if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
s.append("MEASUREMENT_CORRECTIONS ");
}
s.append(")\n"); 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 (mGnssMeasurementCorrectionsProvider.isAvailableInPlatform()) { if (mGnssMeasurementCorrectionsProvider.isAvailableInPlatform()) {
s.append(" hasSubHal=MEASUREMENT_CORRECTIONS ["); s.append(" SubHal=MEASUREMENT_CORRECTIONS[");
s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities()); s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities());
s.append("]\n"); s.append("]\n");
} }

View File

@@ -735,29 +735,16 @@ Return<void> GnssCallback::gnssNmeaCb(
} }
Return<void> GnssCallback::gnssSetCapabilitesCb(uint32_t capabilities) { Return<void> GnssCallback::gnssSetCapabilitesCb(uint32_t capabilities) {
return GnssCallback::gnssSetCapabilitesCbImpl(capabilities, ALOGD("%s: %du\n", __func__, capabilities);
/* hasSubHalCapabilityFlags = */ true);
JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
} }
Return<void> GnssCallback::gnssSetCapabilitiesCb_2_0(uint32_t capabilities) { Return<void> GnssCallback::gnssSetCapabilitiesCb_2_0(uint32_t capabilities) {
return GnssCallback::gnssSetCapabilitesCbImpl(capabilities, return GnssCallback::gnssSetCapabilitesCb(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));
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
} }
Return<void> GnssCallback::gnssAcquireWakelockCb() { Return<void> GnssCallback::gnssAcquireWakelockCb() {
@@ -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_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "(I[I[F[F[F[F)V");
method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II[B)V"); method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II[B)V");
method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)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_setGnssYearOfHardware = env->GetMethodID(clazz, "setGnssYearOfHardware", "(I)V");
method_setGnssHardwareModelName = env->GetMethodID(clazz, "setGnssHardwareModelName", method_setGnssHardwareModelName = env->GetMethodID(clazz, "setGnssHardwareModelName",
"(Ljava/lang/String;)V"); "(Ljava/lang/String;)V");