19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.location; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 196bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaaimport android.util.SparseArray; 206bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Iterator; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.NoSuchElementException; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class represents the current state of the GPS engine. 27e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 28e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This class is used in conjunction with the {@link Listener} interface. 29e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 30e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * @deprecated use {@link GnssStatus} and {@link GnssStatus.Callback}. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang@Deprecated 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class GpsStatus { 34b7c4ae91d95cfdb9a87eca1f543ddb2fa38a7c45Mike Lockwood private static final int NUM_SATELLITES = 255; 3549d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley private static final int GLONASS_SVID_OFFSET = 64; 3649d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley private static final int BEIDOU_SVID_OFFSET = 200; 37f6527aebbce5e2b6b771fa42ae499c2e7584bd26Wyatt Riley private static final int SBAS_SVID_OFFSET = -87; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* These package private values are modified by the LocationManager class */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mTimeToFirstFix; 416bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa private final SparseArray<GpsSatellite> mSatellites = new SparseArray<>(); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final class SatelliteIterator implements Iterator<GpsSatellite> { 446bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa private final int mSatellitesCount; 456bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa 466bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa private int mIndex = 0; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang SatelliteIterator() { 4930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang mSatellitesCount = mSatellites.size(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang @Override 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasNext() { 546bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa for (; mIndex < mSatellitesCount; ++mIndex) { 556bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa GpsSatellite satellite = mSatellites.valueAt(mIndex); 566bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa if (satellite.mValid) { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang @Override 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GpsSatellite next() { 656bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa while (mIndex < mSatellitesCount) { 666bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa GpsSatellite satellite = mSatellites.valueAt(mIndex); 676bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa ++mIndex; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (satellite.mValid) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return satellite; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NoSuchElementException(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang @Override 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void remove() { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException(); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Iterable<GpsSatellite> mSatelliteList = new Iterable<GpsSatellite>() { 8230f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang @Override 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Iterator<GpsSatellite> iterator() { 8430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang return new SatelliteIterator(); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has started. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_STARTED = 1; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has stopped. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_STOPPED = 2; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has received its first fix since starting. 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call {@link #getTimeToFirstFix()} to find the time from start to first fix. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_FIRST_FIX = 3; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent periodically to report GPS satellite status. 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call {@link #getSatellites()} to retrieve the status for each satellite. 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_SATELLITE_STATUS = 4; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used for receiving notifications when GPS status has changed. 112e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * @deprecated use {@link GnssStatus.Callback} instead. 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 114e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang @Deprecated 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface Listener { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to report changes in the GPS status. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The event number is one of: 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_STARTED} 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_STOPPED} 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_FIRST_FIX} 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_SATELLITE_STATUS} 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1266bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa * When this method is called, the client should call 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link LocationManager#getGpsStatus} to get additional 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * status information. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event event number for this notification 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onGpsStatusChanged(int event); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 135b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood /** 136640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * Used for receiving NMEA sentences from the GPS. 137640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * NMEA 0183 is a standard for communicating with marine electronic devices 138640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * and is a common method for receiving data from a GPS, typically over a serial port. 139640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * See <a href="http://en.wikipedia.org/wiki/NMEA_0183">NMEA 0183</a> for more details. 140640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * You can implement this interface and call {@link LocationManager#addNmeaListener} 141640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * to receive NMEA data from the GPS engine. 142e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * @deprecated use {@link OnNmeaMessageListener} instead. 143b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood */ 144e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang @Deprecated 145b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood public interface NmeaListener { 146b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood void onNmeaReceived(long timestamp, String nmea); 147b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood } 148b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood 1496bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa // For API-compat a public ctor() is not available 1506bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa GpsStatus() {} 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private void setStatus(int svCount, int[] svidWithFlags, float[] cn0s, float[] elevations, 153120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang float[] azimuths) { 1546bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa clearSatellites(); 1556bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa for (int i = 0; i < svCount; i++) { 156120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang final int constellationType = 157120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang (svidWithFlags[i] >> GnssStatus.CONSTELLATION_TYPE_SHIFT_WIDTH) 158120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang & GnssStatus.CONSTELLATION_TYPE_MASK; 15949d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley int prn = svidWithFlags[i] >> GnssStatus.SVID_SHIFT_WIDTH; 16049d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // Other satellites passed through these APIs before GnssSvStatus was availble. 16149d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // GPS, SBAS & QZSS can pass through at their nominally 16249d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // assigned prn number (as long as it fits in the valid 0-255 range below.) 16349d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // Glonass, and Beidou are passed through with the defacto standard offsets 16449d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // Other future constellation reporting (e.g. Galileo) needs to use 16549d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley // GnssSvStatus on (N level) HAL & Java layers. 16649d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley if (constellationType == GnssStatus.CONSTELLATION_GLONASS) { 16749d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley prn += GLONASS_SVID_OFFSET; 16849d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley } else if (constellationType == GnssStatus.CONSTELLATION_BEIDOU) { 16949d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley prn += BEIDOU_SVID_OFFSET; 170f6527aebbce5e2b6b771fa42ae499c2e7584bd26Wyatt Riley } else if (constellationType == GnssStatus.CONSTELLATION_SBAS) { 171f6527aebbce5e2b6b771fa42ae499c2e7584bd26Wyatt Riley prn += SBAS_SVID_OFFSET; 17249d9891c573f8c4994841b24f8d90690c342e8aeWyatt Riley } else if ((constellationType != GnssStatus.CONSTELLATION_GPS) && 173f6527aebbce5e2b6b771fa42ae499c2e7584bd26Wyatt Riley (constellationType != GnssStatus.CONSTELLATION_QZSS)) { 17430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang continue; 17530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang } 1766bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa if (prn > 0 && prn <= NUM_SATELLITES) { 1776bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa GpsSatellite satellite = mSatellites.get(prn); 1786bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa if (satellite == null) { 1796bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa satellite = new GpsSatellite(prn); 1806bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa mSatellites.put(prn, satellite); 1816bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 183a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mValid = true; 18476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang satellite.mSnr = cn0s[i]; 185a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mElevation = elevations[i]; 186a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mAzimuth = azimuths[i]; 18730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang satellite.mHasEphemeris = 188120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang (svidWithFlags[i] & GnssStatus.GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA) != 0; 18930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang satellite.mHasAlmanac = 190120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang (svidWithFlags[i] & GnssStatus.GNSS_SV_FLAGS_HAS_ALMANAC_DATA) != 0; 19130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang satellite.mUsedInFix = 192120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang (svidWithFlags[i] & GnssStatus.GNSS_SV_FLAGS_USED_IN_FIX) != 0; 193a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * Copies GPS satellites information from GnssStatus object. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Since this method is only used within {@link LocationManager#getGpsStatus}, 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it does not need to be synchronized. 20130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * @hide 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang void setStatus(GnssStatus status, int timeToFirstFix) { 20430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang mTimeToFirstFix = timeToFirstFix; 20576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setStatus(status.mSvCount, status.mSvidWithFlags, status.mCn0DbHz, status.mElevations, 206120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang status.mAzimuths); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setTimeToFirstFix(int ttff) { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimeToFirstFix = ttff; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2146bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa * Returns the time required to receive the first fix since the most recent 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * restart of the GPS engine. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return time to first fix in milliseconds 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTimeToFirstFix() { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTimeToFirstFix; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns an array of {@link GpsSatellite} objects, which represent the 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current state of the GPS engine. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the list of satellites 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Iterable<GpsSatellite> getSatellites() { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSatelliteList; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the maximum number of satellites that can be in the satellite 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list that can be returned by {@link #getSatellites()}. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the maximum number of satellites 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMaxSatellites() { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NUM_SATELLITES; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2426bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa 2436bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa private void clearSatellites() { 2446bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa int satellitesCount = mSatellites.size(); 2456bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa for (int i = 0; i < satellitesCount; i++) { 2466bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa GpsSatellite satellite = mSatellites.valueAt(i); 2476bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa satellite.mValid = false; 2486bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa } 2496bde4683ae1f70f7b5e53f853b6a7479bcebd5d5destradaa } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 251