Merge "Restore gnss@1.1 HAL capability bits removed in gnss@2.0 (framework)" into qt-dev
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user