Implement the getGnssCapabilities() method in LocationManagerService class to return the capabilities exposed through the GnssCapabilities class. This part 2 is a follow up to CL ag/6776830. Bug: 128913861 Test: Tested with cuttlefish and blueline device. Change-Id: I766e8dc841b5f329d1773e5b37076ed99c55ebf6
153 lines
5.4 KiB
Java
153 lines
5.4 KiB
Java
/*
|
|
* Copyright (C) 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.location;
|
|
|
|
import android.annotation.IntDef;
|
|
import android.annotation.SystemApi;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
|
|
/**
|
|
* A container of supported GNSS chipset capabilities.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
public final class GnssCapabilities {
|
|
/** The GNSS chipset supports low power mode. */
|
|
public static final int LOW_POWER_MODE = 0;
|
|
|
|
/** The GNSS chipset supports blacklisting satellites. */
|
|
public static final int SATELLITE_BLACKLIST = 1;
|
|
|
|
/** The GNSS chipset supports geofencing. */
|
|
public static final int GEOFENCING = 2;
|
|
|
|
/** The GNSS chipset supports measurements.*/
|
|
public static final int MEASUREMENTS = 3;
|
|
|
|
/** The GNSS chipset supports navigation messages. */
|
|
public static final int NAV_MESSAGES = 4;
|
|
|
|
/** The GNSS chipset supports measurement corrections. */
|
|
public static final int MEASUREMENT_CORRECTIONS = 5;
|
|
|
|
/** The GNSS chipset supports line-of-sight satellite identification measurement corrections. */
|
|
public static final int MEASUREMENT_CORRECTIONS_LOS_SATS = 6;
|
|
|
|
/** The GNSS chipset supports per satellite excess-path-length measurement corrections. */
|
|
public static final int MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH = 7;
|
|
|
|
/** The GNSS chipset supports reflecting planes measurement corrections. */
|
|
public static final int MEASUREMENT_CORRECTIONS_REFLECTING_PLANE = 8;
|
|
|
|
private static final int MIN_CAPABILITY = 0;
|
|
private static final int MAX_CAPABILITY = MEASUREMENT_CORRECTIONS_REFLECTING_PLANE;
|
|
|
|
/**
|
|
* GNSS capability.
|
|
* @hide
|
|
*/
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@IntDef({
|
|
LOW_POWER_MODE,
|
|
SATELLITE_BLACKLIST,
|
|
GEOFENCING,
|
|
MEASUREMENTS,
|
|
NAV_MESSAGES,
|
|
MEASUREMENT_CORRECTIONS,
|
|
MEASUREMENT_CORRECTIONS_LOS_SATS,
|
|
MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH,
|
|
MEASUREMENT_CORRECTIONS_REFLECTING_PLANE
|
|
})
|
|
public @interface Capability {}
|
|
|
|
/** @hide */
|
|
public static final long INVALID_CAPABILITIES = -1;
|
|
|
|
/** A bitmask of supported GNSS capabilities. */
|
|
private final long mGnssCapabilities;
|
|
|
|
/** @hide */
|
|
public static GnssCapabilities of(long gnssCapabilities) {
|
|
return new GnssCapabilities(gnssCapabilities);
|
|
}
|
|
|
|
private GnssCapabilities(long gnssCapabilities) {
|
|
mGnssCapabilities = gnssCapabilities;
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if the {@code capability} is supported by the GNSS implementation.
|
|
*/
|
|
public boolean hasCapability(@Capability int capability) {
|
|
return isValidCapability(capability) && (mGnssCapabilities & (1 << capability)) != 0;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
StringBuilder sb = new StringBuilder("GnssCapabilities: (");
|
|
int capability = 0;
|
|
boolean addSeparator = false;
|
|
long gnssCapabilities = mGnssCapabilities;
|
|
while (gnssCapabilities != 0) {
|
|
if ((gnssCapabilities & 1) != 0) {
|
|
if (addSeparator) {
|
|
sb.append(' ');
|
|
} else {
|
|
addSeparator = true;
|
|
}
|
|
sb.append(toStringCapability(capability));
|
|
}
|
|
gnssCapabilities >>= 1;
|
|
++capability;
|
|
}
|
|
sb.append(")");
|
|
return sb.toString();
|
|
}
|
|
|
|
private boolean isValidCapability(@Capability int capability) {
|
|
return capability >= MIN_CAPABILITY && capability <= MAX_CAPABILITY;
|
|
}
|
|
|
|
private static String toStringCapability(@Capability int capability) {
|
|
switch (capability) {
|
|
case LOW_POWER_MODE:
|
|
return "LOW_POWER_MODE";
|
|
case SATELLITE_BLACKLIST:
|
|
return "SATELLITE_BLACKLIST";
|
|
case GEOFENCING:
|
|
return "GEOFENCING";
|
|
case MEASUREMENTS:
|
|
return "MEASUREMENTS";
|
|
case NAV_MESSAGES:
|
|
return "NAV_MESSAGES";
|
|
case MEASUREMENT_CORRECTIONS:
|
|
return "MEASUREMENT_CORRECTIONS";
|
|
case MEASUREMENT_CORRECTIONS_LOS_SATS:
|
|
return "MEASUREMENT_CORRECTIONS_LOS_SATS";
|
|
case MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH:
|
|
return "MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH";
|
|
case MEASUREMENT_CORRECTIONS_REFLECTING_PLANE:
|
|
return "MEASUREMENT_CORRECTIONS_REFLECTING_PLANE";
|
|
default:
|
|
return "Unknown(" + capability + ")";
|
|
}
|
|
}
|
|
}
|