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}.
*/
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;
}

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_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 ");
if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
s.append("MEASUREMENT_CORRECTIONS ");
}
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()) {
s.append(" hasSubHal=MEASUREMENT_CORRECTIONS [");
s.append(" SubHal=MEASUREMENT_CORRECTIONS[");
s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities());
s.append("]\n");
}

View File

@@ -735,29 +735,16 @@ Return<void> GnssCallback::gnssNmeaCb(
}
Return<void> GnssCallback::gnssSetCapabilitesCb(uint32_t capabilities) {
return GnssCallback::gnssSetCapabilitesCbImpl(capabilities,
/* hasSubHalCapabilityFlags = */ true);
ALOGD("%s: %du\n", __func__, capabilities);
JNIEnv* env = getJniEnv();
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
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));
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
return GnssCallback::gnssSetCapabilitesCb(capabilities);
}
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_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");