blob: 5734bf2e9af6e17d6919860d24b3cf536e547e3f [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.
*/
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;
/**
* Bit mask indicating GNSS chipset supports GNSS antenna info.
* @hide
*/
public static final long ANTENNA_INFO = 1L << 9;
/** @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.
*
* @hide
*/
@SystemApi
public boolean hasLowPowerMode() {
return hasCapability(LOW_POWER_MODE);
}
/**
* Returns {@code true} if GNSS chipset supports blacklisting satellites, {@code false}
* otherwise.
*
* @hide
*/
@SystemApi
public boolean hasSatelliteBlacklist() {
return hasCapability(SATELLITE_BLACKLIST);
}
/**
* Returns {@code true} if GNSS chipset supports geofencing, {@code false} otherwise.
*
* @hide
*/
@SystemApi
public boolean hasGeofencing() {
return hasCapability(GEOFENCING);
}
/**
* Returns {@code true} if GNSS chipset supports measurements, {@code false} otherwise.
*
* @hide
*/
@SystemApi
public boolean hasMeasurements() {
return hasCapability(MEASUREMENTS);
}
/**
* Returns {@code true} if GNSS chipset supports navigation messages, {@code false} otherwise.
*
* @hide
*/
@SystemApi
public boolean hasNavMessages() {
return hasCapability(NAV_MESSAGES);
}
/**
* Returns {@code true} if GNSS chipset supports measurement corrections, {@code false}
* otherwise.
*
* @hide
*/
@SystemApi
public boolean hasMeasurementCorrections() {
return hasCapability(MEASUREMENT_CORRECTIONS);
}
/**
* Returns {@code true} if GNSS chipset supports line-of-sight satellite identification
* measurement corrections, {@code false} otherwise.
*
* @hide
*/
@SystemApi
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.
*
* @hide
*/
@SystemApi
public boolean hasMeasurementCorrectionsExcessPathLength() {
return hasCapability(MEASUREMENT_CORRECTIONS_EXCESS_PATH_LENGTH);
}
/**
* Returns {@code true} if GNSS chipset supports reflecting planes measurement corrections,
* {@code false} otherwise.
*
* @hide
*/
@SystemApi
public boolean hasMeasurementCorrectionsReflectingPane() {
return hasCapability(MEASUREMENT_CORRECTIONS_REFLECTING_PLANE);
}
/**
* Returns {@code true} if GNSS chipset supports antenna info, {@code false} otherwise.
*/
public boolean hasGnssAntennaInfo() {
return hasCapability(ANTENNA_INFO);
}
private boolean hasCapability(long capability) {
return (mGnssCapabilities & capability) == capability;
}
}