130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang/*
230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * Copyright (C) 2016 The Android Open Source Project
330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang *
430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * Licensed under the Apache License, Version 2.0 (the "License");
530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * you may not use this file except in compliance with the License.
630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * You may obtain a copy of the License at
730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang *
830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang *      http://www.apache.org/licenses/LICENSE-2.0
930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang *
1030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * Unless required by applicable law or agreed to in writing, software
1130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * distributed under the License is distributed on an "AS IS" BASIS,
1230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * See the License for the specific language governing permissions and
1430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * limitations under the License.
1530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang */
1630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
1730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tangpackage android.location;
1830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
199363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tangimport android.annotation.IntDef;
209363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang
219363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tangimport java.lang.annotation.Retention;
229363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tangimport java.lang.annotation.RetentionPolicy;
239363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang
2430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang/**
2530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * This class represents the current state of the GNSS engine.
26e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * This class is used in conjunction with the {@link GnssStatus.Callback}.
2730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang */
2830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tangpublic final class GnssStatus {
29e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    // these must match the definitions in gps.h
30e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
3130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Unknown constellation type. */
3276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_UNKNOWN = 0;
3330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for GPS. */
3476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_GPS = 1;
3530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for SBAS. */
3676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_SBAS = 2;
3730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for Glonass. */
3876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_GLONASS = 3;
3930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for QZSS. */
4076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_QZSS = 4;
4130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for Beidou. */
4276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_BEIDOU = 5;
4330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** Constellation type constant for Galileo. */
4476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public static final int CONSTELLATION_GALILEO = 6;
459363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang
4630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** @hide */
4730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    public static final int GNSS_SV_FLAGS_NONE = 0;
4830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** @hide */
4930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    public static final int GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA = (1 << 0);
5030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** @hide */
5130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    public static final int GNSS_SV_FLAGS_HAS_ALMANAC_DATA = (1 << 1);
5230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** @hide */
5330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    public static final int GNSS_SV_FLAGS_USED_IN_FIX = (1 << 2);
5430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
5530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /** @hide */
56120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    public static final int SVID_SHIFT_WIDTH = 7;
57120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    /** @hide */
58120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    public static final int CONSTELLATION_TYPE_SHIFT_WIDTH = 3;
59120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    /** @hide */
60120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    public static final int CONSTELLATION_TYPE_MASK = 0xf;
6130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
62e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    /**
63e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Used for receiving notifications when GNSS events happen.
64e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     */
65e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public static abstract class Callback {
66e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        /**
67e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * Called when GNSS system has started.
68e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         */
69e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        public void onStarted() {}
70e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
71e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        /**
72e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * Called when GNSS system has stopped.
73e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         */
74e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        public void onStopped() {}
75e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
76e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        /**
77e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * Called when the GNSS system has received its first fix since starting.
78e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * @param ttffMillis the time from start to first fix in milliseconds.
79e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         */
80e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        public void onFirstFix(int ttffMillis) {}
81e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
82e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        /**
83e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * Called periodically to report GNSS satellite status.
84e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         * @param status the current status of all satellites.
85e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang         */
86e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        public void onSatelliteStatusChanged(GnssStatus status) {}
87e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    }
88e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
89e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    /**
90e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Constellation type.
91e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * @hide
92e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     */
93e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    @Retention(RetentionPolicy.SOURCE)
94e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    @IntDef({CONSTELLATION_UNKNOWN, CONSTELLATION_GPS, CONSTELLATION_SBAS, CONSTELLATION_GLONASS,
95e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang            CONSTELLATION_QZSS, CONSTELLATION_BEIDOU, CONSTELLATION_GALILEO})
96e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public @interface ConstellationType {}
97e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
9830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /* These package private values are modified by the LocationManager class */
99120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    /* package */ int[] mSvidWithFlags;
10076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    /* package */ float[] mCn0DbHz;
10130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /* package */ float[] mElevations;
10230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /* package */ float[] mAzimuths;
10330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /* package */ int mSvCount;
10430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
10576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    GnssStatus(int svCount, int[] svidWithFlags, float[] cn0s, float[] elevations,
106120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang            float[] azimuths) {
10730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        mSvCount = svCount;
108120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang        mSvidWithFlags = svidWithFlags;
10976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang        mCn0DbHz = cn0s;
11030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        mElevations = elevations;
11130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        mAzimuths = azimuths;
11230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
11330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
114e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    /** @removed */
115e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public int getNumSatellites() {
116e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        return getSatelliteCount();
117e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    }
118e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
11930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
12030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * Gets the total number of satellites in satellite list.
12130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
122e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public int getSatelliteCount() {
12330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        return mSvCount;
12430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
12530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
12630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
127e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Retrieves the constellation type of the satellite at the specified index.
128e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
12930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
13030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
1319363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang    @ConstellationType
13276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public int getConstellationType(int satIndex) {
13376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang        return ((mSvidWithFlags[satIndex] >> CONSTELLATION_TYPE_SHIFT_WIDTH)
1349363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang                & CONSTELLATION_TYPE_MASK);
13530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
13630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
13730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
138e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Gets the identification number for the satellite at the specific index.
139e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
140e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <p>This svid is pseudo-random number for most constellations. It is FCN &amp; OSN number for
141e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Glonass.
142e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
143e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <p>The distinction is made by looking at constellation field
144e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * {@link #getConstellationType(int)} Expected values are in the range of:
145e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
146e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <ul>
147e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <li>GPS: 1-32</li>
148e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <li>SBAS: 120-151, 183-192</li>
14949d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley     * <li>GLONASS: One of: OSN, or FCN+100
150e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <ul>
15149d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley     *   <li>1-24 as the orbital slot number (OSN) (preferred, if known)</li>
15249d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley     *   <li>93-106 as the frequency channel number (FCN) (-7 to +6) plus 100.
15349d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley     *   i.e. encode FCN of -7 as 93, 0 as 100, and +6 as 106</li>
154e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * </ul></li>
155e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <li>QZSS: 193-200</li>
156e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <li>Galileo: 1-36</li>
157e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * <li>Beidou: 1-37</li>
158e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * </ul>
159e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
16030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
16130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
162120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang    public int getSvid(int satIndex) {
163120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang        return mSvidWithFlags[satIndex] >> SVID_SHIFT_WIDTH;
16430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
16530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
16630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
167e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Retrieves the carrier-to-noise density at the antenna of the satellite at the specified index
168e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * in dB-Hz.
169e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
17030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
17130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
17276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public float getCn0DbHz(int satIndex) {
17376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang        return mCn0DbHz[satIndex];
17430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
17530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
17630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
177e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Retrieves the elevation of the satellite at the specified index.
178e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
17930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
18030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
18176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public float getElevationDegrees(int satIndex) {
1824fb5dc1e4aad0d7df0f6af03560a340e81bf1f7cLifu Tang        return mElevations[satIndex];
18330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
18430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
18530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
186e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Retrieves the azimuth the satellite at the specified index.
187e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
18830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
18930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
19076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang    public float getAzimuthDegrees(int satIndex) {
19130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        return mAzimuths[satIndex];
19230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
19330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
194e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    /** @removed */
195e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public boolean hasEphemeris(int satIndex) {
196e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        return hasEphemerisData(satIndex);
197e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    }
198e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
19930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
200e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Reports whether the satellite at the specified index has ephemeris data.
201e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
20230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
20330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
204e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public boolean hasEphemerisData(int satIndex) {
205120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang        return (mSvidWithFlags[satIndex] & GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA) != 0;
20630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
20730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
208e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    /** @removed */
209e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public boolean hasAlmanac(int satIndex) {
210e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang        return hasAlmanacData(satIndex);
211e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    }
212e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang
21330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
214e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Reports whether the satellite at the specified index has almanac data.
215e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
21630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
21730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
218e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang    public boolean hasAlmanacData(int satIndex) {
219120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang        return (mSvidWithFlags[satIndex] & GNSS_SV_FLAGS_HAS_ALMANAC_DATA) != 0;
22030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
22130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang
22230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    /**
223e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * Reports whether the satellite at the specified index was used in the calculation of the most
224e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     * recent position fix.
225e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang     *
22630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     * @param satIndex the index of the satellite in the list.
22730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang     */
22830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    public boolean usedInFix(int satIndex) {
229120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang        return (mSvidWithFlags[satIndex] & GNSS_SV_FLAGS_USED_IN_FIX) != 0;
23030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    }
23130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang}
232