blob: 36fe8dab5deacb511b4ba822d722f043432fbc46 [file] [log] [blame]
/*
* 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;
}
}