Fixes: 130802613 Test: Verified on a Pixel device. Change-Id: I00418f12004b28de666ec2a73203611f73af3e18
191 lines
6.1 KiB
Java
191 lines
6.1 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.SystemApi;
|
|
|
|
/**
|
|
* A container of supported GNSS chipset capabilities.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
public final class GnssCapabilities {
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports low power mode.
|
|
* @hide
|
|
*/
|
|
public static final long LOW_POWER_MODE = 1L << 0;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports blacklisting satellites.
|
|
* @hide
|
|
*/
|
|
public static final long SATELLITE_BLACKLIST = 1L << 1;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports geofencing.
|
|
* @hide
|
|
*/
|
|
public static final long GEOFENCING = 1L << 2;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports measurements.
|
|
* @hide
|
|
*/
|
|
public static final long MEASUREMENTS = 1L << 3;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports navigation messages.
|
|
* @hide
|
|
*/
|
|
public static final long NAV_MESSAGES = 1L << 4;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports measurement corrections.
|
|
* @hide
|
|
*/
|
|
public static final long MEASUREMENT_CORRECTIONS = 1L << 5;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports line-of-sight satellite identification
|
|
* measurement corrections.
|
|
* @hide
|
|
*/
|
|
public static final long MEASUREMENT_CORRECTIONS_LOS_SATS = 1L << 6;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports per satellite excess-path-length
|
|
* measurement corrections.
|
|
* @hide
|
|
*/
|
|
public static final long MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH = 1L << 7;
|
|
|
|
/**
|
|
* Bit mask indicating GNSS chipset supports reflecting planes measurement corrections.
|
|
* @hide
|
|
*/
|
|
public static final long MEASUREMENT_CORRECTIONS_REFLECTING_PLANE = 1L << 8;
|
|
|
|
/** @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 GNSS chipset supports low power mode, {@code false} otherwise.
|
|
*/
|
|
public boolean hasLowPowerMode() {
|
|
return hasCapability(LOW_POWER_MODE);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports blacklisting satellites, {@code false}
|
|
* otherwise.
|
|
*/
|
|
public boolean hasSatelliteBlacklist() {
|
|
return hasCapability(SATELLITE_BLACKLIST);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports geofencing, {@code false} otherwise.
|
|
*/
|
|
public boolean hasGeofencing() {
|
|
return hasCapability(GEOFENCING);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports measurements, {@code false} otherwise.
|
|
*/
|
|
public boolean hasMeasurements() {
|
|
return hasCapability(MEASUREMENTS);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports navigation messages, {@code false} otherwise.
|
|
*/
|
|
public boolean hasNavMessages() {
|
|
return hasCapability(NAV_MESSAGES);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports measurement corrections, {@code false}
|
|
* otherwise.
|
|
*/
|
|
public boolean hasMeasurementCorrections() {
|
|
return hasCapability(MEASUREMENT_CORRECTIONS);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports line-of-sight satellite identification
|
|
* measurement corrections, {@code false} otherwise.
|
|
*/
|
|
public boolean hasMeasurementCorrectionsLosSats() {
|
|
return hasCapability(MEASUREMENT_CORRECTIONS_LOS_SATS);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports per satellite excess-path-length measurement
|
|
* corrections, {@code false} otherwise.
|
|
*/
|
|
public boolean hasMeasurementCorrectionsExcessPathLength() {
|
|
return hasCapability(MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH);
|
|
}
|
|
|
|
/**
|
|
* Returns {@code true} if GNSS chipset supports reflecting planes measurement corrections,
|
|
* {@code false} otherwise.
|
|
*/
|
|
public boolean hasMeasurementCorrectionsReflectingPane() {
|
|
return hasCapability(MEASUREMENT_CORRECTIONS_REFLECTING_PLANE);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
StringBuilder sb = new StringBuilder("GnssCapabilities: ( ");
|
|
if (hasLowPowerMode()) sb.append("LOW_POWER_MODE ");
|
|
if (hasSatelliteBlacklist()) sb.append("SATELLITE_BLACKLIST ");
|
|
if (hasGeofencing()) sb.append("GEOFENCING ");
|
|
if (hasMeasurements()) sb.append("MEASUREMENTS ");
|
|
if (hasNavMessages()) sb.append("NAV_MESSAGES ");
|
|
if (hasMeasurementCorrections()) sb.append("MEASUREMENT_CORRECTIONS ");
|
|
if (hasMeasurementCorrectionsLosSats()) sb.append("MEASUREMENT_CORRECTIONS_LOS_SATS ");
|
|
if (hasMeasurementCorrectionsExcessPathLength()) {
|
|
sb.append("MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH ");
|
|
}
|
|
if (hasMeasurementCorrectionsReflectingPane()) {
|
|
sb.append("MEASUREMENT_CORRECTIONS_REFLECTING_PLANE ");
|
|
}
|
|
sb.append(")");
|
|
return sb.toString();
|
|
}
|
|
|
|
private boolean hasCapability(long capability) {
|
|
return (mGnssCapabilities & capability) == capability;
|
|
}
|
|
}
|