private void clearSatellites() { int satellitesCount = mSatellites.size(); for (int i = 0; i < satellitesCount; i++) { GpsSatellite satellite = mSatellites.valueAt(i); satellite.mValid = false; } }
/** * Used internally within {@link LocationManager} to copy GPS status data from the Location * Manager Service to its cached GpsStatus instance. Is synchronized to ensure that GPS status * updates are atomic. */ synchronized void setStatus( int svCount, int[] prns, float[] snrs, float[] elevations, float[] azimuths, int ephemerisMask, int almanacMask, int usedInFixMask) { int i; for (i = 0; i < mSatellites.length; i++) { mSatellites[i].mValid = false; } for (i = 0; i < svCount; i++) { int prn = prns[i] - 1; int prnShift = (1 << prn); GpsSatellite satellite = mSatellites[prn]; satellite.mValid = true; satellite.mSnr = snrs[i]; satellite.mElevation = elevations[i]; satellite.mAzimuth = azimuths[i]; satellite.mHasEphemeris = ((ephemerisMask & prnShift) != 0); satellite.mHasAlmanac = ((almanacMask & prnShift) != 0); satellite.mUsedInFix = ((usedInFixMask & prnShift) != 0); } }
/** * Used by {@link LocationManager#getGpsStatus} to copy LocationManager's cached GpsStatus * instance to the client's copy. Since this method is only used within {@link * LocationManager#getGpsStatus}, it does not need to be synchronized. */ void setStatus(GpsStatus status) { mTimeToFirstFix = status.getTimeToFirstFix(); clearSatellites(); SparseArray<GpsSatellite> otherSatellites = status.mSatellites; int otherSatellitesCount = otherSatellites.size(); int satelliteIndex = 0; // merge both sparse arrays, note that we have already invalidated the elements in the // receiver array for (int i = 0; i < otherSatellitesCount; ++i) { GpsSatellite otherSatellite = otherSatellites.valueAt(i); int otherSatellitePrn = otherSatellite.getPrn(); int satellitesCount = mSatellites.size(); while (satelliteIndex < satellitesCount && mSatellites.valueAt(satelliteIndex).getPrn() < otherSatellitePrn) { ++satelliteIndex; } if (satelliteIndex < mSatellites.size()) { GpsSatellite satellite = mSatellites.valueAt(satelliteIndex); if (satellite.getPrn() == otherSatellitePrn) { satellite.setStatus(otherSatellite); } else { satellite = new GpsSatellite(otherSatellitePrn); satellite.setStatus(otherSatellite); mSatellites.put(otherSatellitePrn, satellite); } } else { GpsSatellite satellite = new GpsSatellite(otherSatellitePrn); satellite.setStatus(otherSatellite); mSatellites.append(otherSatellitePrn, satellite); } } }
/** * Used internally within {@link LocationManager} to copy GPS status data from the Location * Manager Service to its cached GpsStatus instance. Is synchronized to ensure that GPS status * updates are atomic. */ synchronized void setStatus( int svCount, int[] prns, float[] snrs, float[] elevations, float[] azimuths, int ephemerisMask, int almanacMask, int usedInFixMask) { clearSatellites(); for (int i = 0; i < svCount; i++) { int prn = prns[i]; int prnShift = (1 << (prn - 1)); if (prn > 0 && prn <= NUM_SATELLITES) { GpsSatellite satellite = mSatellites.get(prn); if (satellite == null) { satellite = new GpsSatellite(prn); mSatellites.put(prn, satellite); } satellite.mValid = true; satellite.mSnr = snrs[i]; satellite.mElevation = elevations[i]; satellite.mAzimuth = azimuths[i]; satellite.mHasEphemeris = ((ephemerisMask & prnShift) != 0); satellite.mHasAlmanac = ((almanacMask & prnShift) != 0); satellite.mUsedInFix = ((usedInFixMask & prnShift) != 0); } } }