/* * 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; } }