Loading api/current.txt +3 −1 Original line number Diff line number Diff line Loading @@ -23063,6 +23063,7 @@ package android.location { public final class GnssStatus { method @FloatRange(from=0, to=360) public float getAzimuthDegrees(@IntRange(from=0) int); method @FloatRange(from=0, to=63) public float getBasebandCn0DbHz(@IntRange(from=0) int); method @FloatRange(from=0) public float getCarrierFrequencyHz(@IntRange(from=0) int); method @FloatRange(from=0, to=63) public float getCn0DbHz(@IntRange(from=0) int); method public int getConstellationType(@IntRange(from=0) int); Loading @@ -23070,6 +23071,7 @@ package android.location { method @IntRange(from=0) public int getSatelliteCount(); method @IntRange(from=1, to=200) public int getSvid(@IntRange(from=0) int); method public boolean hasAlmanacData(@IntRange(from=0) int); method public boolean hasBasebandCn0DbHz(@IntRange(from=0) int); method public boolean hasCarrierFrequencyHz(@IntRange(from=0) int); method public boolean hasEphemerisData(@IntRange(from=0) int); method public boolean usedInFix(@IntRange(from=0) int); Loading @@ -23085,7 +23087,7 @@ package android.location { public static final class GnssStatus.Builder { ctor public GnssStatus.Builder(); method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float); method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float, boolean, @FloatRange(from=0, to=63) float); method @NonNull public android.location.GnssStatus build(); method @NonNull public android.location.GnssStatus.Builder clearSatellites(); } location/java/android/location/GnssStatus.java +48 −11 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import java.util.ArrayList; */ public final class GnssStatus { // these must match the definitions in gps.h // These must match the definitions in GNSS HAL. // // Note: these constants are also duplicated in GnssStatusCompat.java in the androidx support // library. if adding a constellation, please update that file as well. Loading Loading @@ -63,9 +63,10 @@ public final class GnssStatus { private static final int SVID_FLAGS_HAS_ALMANAC_DATA = (1 << 1); private static final int SVID_FLAGS_USED_IN_FIX = (1 << 2); private static final int SVID_FLAGS_HAS_CARRIER_FREQUENCY = (1 << 3); private static final int SVID_FLAGS_HAS_BASEBAND_CN0 = (1 << 4); private static final int SVID_SHIFT_WIDTH = 8; private static final int CONSTELLATION_TYPE_SHIFT_WIDTH = 4; private static final int SVID_SHIFT_WIDTH = 12; private static final int CONSTELLATION_TYPE_SHIFT_WIDTH = 8; private static final int CONSTELLATION_TYPE_MASK = 0xf; /** Loading Loading @@ -123,9 +124,10 @@ public final class GnssStatus { */ @NonNull public static GnssStatus wrap(int svCount, int[] svidWithFlags, float[] cn0DbHzs, float[] elevations, float[] azimuths, float[] carrierFrequencies) { float[] elevations, float[] azimuths, float[] carrierFrequencies, float[] basebandCn0DbHzs) { return new GnssStatus(svCount, svidWithFlags, cn0DbHzs, elevations, azimuths, carrierFrequencies); carrierFrequencies, basebandCn0DbHzs); } private final int mSvCount; Loading @@ -134,15 +136,17 @@ public final class GnssStatus { private final float[] mElevations; private final float[] mAzimuths; private final float[] mCarrierFrequencies; private final float[] mBasebandCn0DbHzs; private GnssStatus(int svCount, int[] svidWithFlags, float[] cn0DbHzs, float[] elevations, float[] azimuths, float[] carrierFrequencies) { float[] azimuths, float[] carrierFrequencies, float[] basebandCn0DbHzs) { mSvCount = svCount; mSvidWithFlags = svidWithFlags; mCn0DbHzs = cn0DbHzs; mElevations = elevations; mAzimuths = azimuths; mCarrierFrequencies = carrierFrequencies; mBasebandCn0DbHzs = basebandCn0DbHzs; } /** Loading Loading @@ -283,6 +287,26 @@ public final class GnssStatus { return mCarrierFrequencies[satelliteIndex]; } /** * Reports whether a valid {@link #getBasebandCn0DbHz(int satelliteIndex)} is available. * * @param satelliteIndex An index from zero to {@link #getSatelliteCount()} - 1 */ public boolean hasBasebandCn0DbHz(@IntRange(from = 0) int satelliteIndex) { return (mSvidWithFlags[satelliteIndex] & SVID_FLAGS_HAS_BASEBAND_CN0) != 0; } /** * Retrieves the baseband carrier-to-noise density of the satellite at the specified index in * dB-Hz. * * @param satelliteIndex An index from zero to {@link #getSatelliteCount()} - 1 */ @FloatRange(from = 0, to = 63) public float getBasebandCn0DbHz(@IntRange(from = 0) int satelliteIndex) { return mBasebandCn0DbHzs[satelliteIndex]; } /** * Returns the string representation of a constellation type. * Loading Loading @@ -334,6 +358,8 @@ public final class GnssStatus { * @param usedInFix whether the satellite was used in the most recent location fix * @param hasCarrierFrequency whether carrier frequency data is available * @param carrierFrequency satellite carrier frequency in Hz * @param hasBasebandCn0DbHz whether baseband carrier-to-noise density is available * @param basebandCn0DbHz baseband carrier-to-noise density in dB-Hz */ @NonNull public Builder addSatellite(@ConstellationType int constellationType, Loading @@ -345,9 +371,12 @@ public final class GnssStatus { boolean hasAlmanac, boolean usedInFix, boolean hasCarrierFrequency, @FloatRange(from = 0) float carrierFrequency) { @FloatRange(from = 0) float carrierFrequency, boolean hasBasebandCn0DbHz, @FloatRange(from = 0, to = 63) float basebandCn0DbHz) { mSatellites.add(new GnssSvInfo(constellationType, svid, cn0DbHz, elevation, azimuth, hasEphemeris, hasAlmanac, usedInFix, hasCarrierFrequency, carrierFrequency)); hasEphemeris, hasAlmanac, usedInFix, hasCarrierFrequency, carrierFrequency, hasBasebandCn0DbHz, basebandCn0DbHz)); return this; } Loading @@ -371,6 +400,7 @@ public final class GnssStatus { float[] elevations = new float[svCount]; float[] azimuths = new float[svCount]; float[] carrierFrequencies = new float[svCount]; float[] basebandCn0DbHzs = new float[svCount]; for (int i = 0; i < svidWithFlags.length; i++) { svidWithFlags[i] = mSatellites.get(i).mSvidWithFlags; Loading @@ -387,9 +417,12 @@ public final class GnssStatus { for (int i = 0; i < carrierFrequencies.length; i++) { carrierFrequencies[i] = mSatellites.get(i).mCarrierFrequency; } for (int i = 0; i < basebandCn0DbHzs.length; i++) { basebandCn0DbHzs[i] = mSatellites.get(i).mBasebandCn0DbHz; } return wrap(svCount, svidWithFlags, cn0DbHzs, elevations, azimuths, carrierFrequencies); carrierFrequencies, basebandCn0DbHzs); } } Loading @@ -400,21 +433,25 @@ public final class GnssStatus { private final float mElevation; private final float mAzimuth; private final float mCarrierFrequency; private final float mBasebandCn0DbHz; private GnssSvInfo(int constellationType, int svid, float cn0DbHz, float elevation, float azimuth, boolean hasEphemeris, boolean hasAlmanac, boolean usedInFix, boolean hasCarrierFrequency, float carrierFrequency) { boolean usedInFix, boolean hasCarrierFrequency, float carrierFrequency, boolean hasBasebandCn0DbHz, float basebandCn0DbHz) { mSvidWithFlags = (svid << SVID_SHIFT_WIDTH) | ((constellationType & CONSTELLATION_TYPE_MASK) << CONSTELLATION_TYPE_SHIFT_WIDTH) | (hasEphemeris ? SVID_FLAGS_HAS_EPHEMERIS_DATA : SVID_FLAGS_NONE) | (hasAlmanac ? SVID_FLAGS_HAS_ALMANAC_DATA : SVID_FLAGS_NONE) | (usedInFix ? SVID_FLAGS_USED_IN_FIX : SVID_FLAGS_NONE) | (hasCarrierFrequency ? SVID_FLAGS_HAS_CARRIER_FREQUENCY : SVID_FLAGS_NONE); | (hasCarrierFrequency ? SVID_FLAGS_HAS_CARRIER_FREQUENCY : SVID_FLAGS_NONE) | (hasBasebandCn0DbHz ? SVID_FLAGS_HAS_BASEBAND_CN0 : SVID_FLAGS_NONE); mCn0DbHz = cn0DbHz; mElevation = elevation; mAzimuth = azimuth; mCarrierFrequency = carrierFrequency; mBasebandCn0DbHz = basebandCn0DbHz; } } } location/java/android/location/IGnssStatusListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,6 @@ oneway interface IGnssStatusListener void onFirstFix(int ttff); void onSvStatusChanged(int svCount, in int[] svidWithFlags, in float[] cn0s, in float[] elevations, in float[] azimuths, in float[] carrierFreqs); in float[] carrierFreqs, in float[] basebandCn0s); void onNmeaReceived(long timestamp, String nmea); } location/java/android/location/LocationManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -2818,9 +2818,10 @@ public class LocationManager { @Override public void onSvStatusChanged(int svCount, int[] svidWithFlags, float[] cn0s, float[] elevations, float[] azimuths, float[] carrierFreqs) { float[] elevations, float[] azimuths, float[] carrierFreqs, float[] basebandCn0s) { GnssStatus localStatus = GnssStatus.wrap(svCount, svidWithFlags, cn0s, elevations, azimuths, carrierFreqs); elevations, azimuths, carrierFreqs, basebandCn0s); mGnssStatus = localStatus; execute((callback) -> callback.onSatelliteStatusChanged(localStatus)); } Loading location/tests/locationtests/src/android/location/GnssStatusTest.javadeleted 100644 → 0 +0 −130 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.suitebuilder.annotation.SmallTest; import android.util.Log; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; /** * Unit tests for {@link GnssStatus}. */ @SmallTest public class GnssStatusTest extends TestCase { private static final String TAG = GnssStatusTest.class.getSimpleName(); public void setUp() throws Exception { super.setUp(); } /* * Create {@link GnssStatus} with default value, verify whether its fields are set correctly. * */ public void testEmptyGnssStatus() throws Exception { Log.i(TAG, "testEmptyGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } /* * Create {@link GnssStatus} with only one satellite info, verify whether its fields are set * correctly. */ public void testOneSatelliteGnssStatus() throws Exception { Log.i(TAG, "testOneSatelliteGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); SatelliteInfo svInfo = new SatelliteInfo(100,1, true, true, true, true, 100f, 20.3f, 45.5f, 100.23f); svInfos.add(svInfo); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } /* * Create {@link GnssStatus} with multiple satellite info, verify whether its fields are set * correctly. */ public void testMultipleSatellitesGnssStatus() throws Exception { Log.i(TAG, "testMultipleSatellitesGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); SatelliteInfo svInfo1 = new SatelliteInfo(20, 1,true, true, true, true, 10.1f, 20.3f, 45.5f, 111.23f); SatelliteInfo svInfo2 = new SatelliteInfo(50, 2, true, false, true, false, 20.2f, 21.3f, 46.5f, 222.23f); SatelliteInfo svInfo3 = new SatelliteInfo(192, 3, false, true, false, true, 30.3f, 22.3f, 47.5f, 333.23f); SatelliteInfo svInfo4 = new SatelliteInfo(250, 4, false, false, false, false, 40.4f, 23.3f, 48.5f, 444.23f); svInfos.add(svInfo1); svInfos.add(svInfo2); svInfos.add(svInfo3); svInfos.add(svInfo4); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } private void verifyGnssStatus(List<SatelliteInfo> svInfos, GnssStatus gnssStatus) { Log.i(TAG, String.format("Verifing {0} satellites info.",svInfos.size())); assertEquals(TAG + "::SatelliteCount", svInfos.size(), gnssStatus.getSatelliteCount()); for (int i = 0; i< svInfos.size(); i++) { SatelliteInfo svInfo = svInfos.get(i); assertEquals(TAG + "::Svid", svInfo.mSvid, gnssStatus.getSvid(i)); assertEquals(TAG + "::ConstellationType", svInfo.mConstellationType, gnssStatus.getConstellationType(i)); assertEquals(TAG + "::Cn0DbHz", svInfo.mCn0DbHz, gnssStatus.getCn0DbHz(i)); assertEquals(TAG + "::Elevation", svInfo.mElevation, gnssStatus.getElevationDegrees(i)); assertEquals(TAG + "::Azimuth", svInfo.mAzimuth, gnssStatus.getAzimuthDegrees(i)); assertEquals(TAG + "::CarrierFrequencyHz", svInfo.mCarrierFrequency, gnssStatus.getCarrierFrequencyHz(i)); assertEquals(TAG + "::hasEphemerisData", svInfo.mHasEphemris, gnssStatus.hasEphemerisData(i)); assertEquals(TAG + "::HasAlmanacData", svInfo.mHasAlmanac, gnssStatus.hasAlmanacData(i)); assertEquals(TAG + "::UsedInFix", svInfo.mUsedInFix, gnssStatus.usedInFix(i)); assertEquals(TAG + "::HasCarrierFrequencyHz", svInfo.mHasCarriesFrequency, gnssStatus.hasCarrierFrequencyHz(i)); } } private static GnssStatus createGnssStatus(List<SatelliteInfo> svInfos) throws Exception { Class<?> intClass = Integer.TYPE; Class<?> floatArrayClass = Class.forName("[F"); Class<?> intArrayClass = Class.forName("[I"); Class[] cArg = new Class[6]; cArg[0] = intClass; cArg[1] = intArrayClass; cArg[2] = floatArrayClass; cArg[3] = floatArrayClass; cArg[4] = floatArrayClass; cArg[5] = floatArrayClass; Constructor<GnssStatus> ctor = GnssStatus.class.getDeclaredConstructor(cArg); ctor.setAccessible(true); return ctor.newInstance(svInfos.size(), SatelliteInfo.getSvidWithFlagsArray(svInfos), SatelliteInfo.getCn0sArray(svInfos), SatelliteInfo.getElevationsArray(svInfos), SatelliteInfo.getAzimuthsArray(svInfos), SatelliteInfo.getCarrierFrequencyArray(svInfos)); } } Loading
api/current.txt +3 −1 Original line number Diff line number Diff line Loading @@ -23063,6 +23063,7 @@ package android.location { public final class GnssStatus { method @FloatRange(from=0, to=360) public float getAzimuthDegrees(@IntRange(from=0) int); method @FloatRange(from=0, to=63) public float getBasebandCn0DbHz(@IntRange(from=0) int); method @FloatRange(from=0) public float getCarrierFrequencyHz(@IntRange(from=0) int); method @FloatRange(from=0, to=63) public float getCn0DbHz(@IntRange(from=0) int); method public int getConstellationType(@IntRange(from=0) int); Loading @@ -23070,6 +23071,7 @@ package android.location { method @IntRange(from=0) public int getSatelliteCount(); method @IntRange(from=1, to=200) public int getSvid(@IntRange(from=0) int); method public boolean hasAlmanacData(@IntRange(from=0) int); method public boolean hasBasebandCn0DbHz(@IntRange(from=0) int); method public boolean hasCarrierFrequencyHz(@IntRange(from=0) int); method public boolean hasEphemerisData(@IntRange(from=0) int); method public boolean usedInFix(@IntRange(from=0) int); Loading @@ -23085,7 +23087,7 @@ package android.location { public static final class GnssStatus.Builder { ctor public GnssStatus.Builder(); method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float); method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float, boolean, @FloatRange(from=0, to=63) float); method @NonNull public android.location.GnssStatus build(); method @NonNull public android.location.GnssStatus.Builder clearSatellites(); }
location/java/android/location/GnssStatus.java +48 −11 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import java.util.ArrayList; */ public final class GnssStatus { // these must match the definitions in gps.h // These must match the definitions in GNSS HAL. // // Note: these constants are also duplicated in GnssStatusCompat.java in the androidx support // library. if adding a constellation, please update that file as well. Loading Loading @@ -63,9 +63,10 @@ public final class GnssStatus { private static final int SVID_FLAGS_HAS_ALMANAC_DATA = (1 << 1); private static final int SVID_FLAGS_USED_IN_FIX = (1 << 2); private static final int SVID_FLAGS_HAS_CARRIER_FREQUENCY = (1 << 3); private static final int SVID_FLAGS_HAS_BASEBAND_CN0 = (1 << 4); private static final int SVID_SHIFT_WIDTH = 8; private static final int CONSTELLATION_TYPE_SHIFT_WIDTH = 4; private static final int SVID_SHIFT_WIDTH = 12; private static final int CONSTELLATION_TYPE_SHIFT_WIDTH = 8; private static final int CONSTELLATION_TYPE_MASK = 0xf; /** Loading Loading @@ -123,9 +124,10 @@ public final class GnssStatus { */ @NonNull public static GnssStatus wrap(int svCount, int[] svidWithFlags, float[] cn0DbHzs, float[] elevations, float[] azimuths, float[] carrierFrequencies) { float[] elevations, float[] azimuths, float[] carrierFrequencies, float[] basebandCn0DbHzs) { return new GnssStatus(svCount, svidWithFlags, cn0DbHzs, elevations, azimuths, carrierFrequencies); carrierFrequencies, basebandCn0DbHzs); } private final int mSvCount; Loading @@ -134,15 +136,17 @@ public final class GnssStatus { private final float[] mElevations; private final float[] mAzimuths; private final float[] mCarrierFrequencies; private final float[] mBasebandCn0DbHzs; private GnssStatus(int svCount, int[] svidWithFlags, float[] cn0DbHzs, float[] elevations, float[] azimuths, float[] carrierFrequencies) { float[] azimuths, float[] carrierFrequencies, float[] basebandCn0DbHzs) { mSvCount = svCount; mSvidWithFlags = svidWithFlags; mCn0DbHzs = cn0DbHzs; mElevations = elevations; mAzimuths = azimuths; mCarrierFrequencies = carrierFrequencies; mBasebandCn0DbHzs = basebandCn0DbHzs; } /** Loading Loading @@ -283,6 +287,26 @@ public final class GnssStatus { return mCarrierFrequencies[satelliteIndex]; } /** * Reports whether a valid {@link #getBasebandCn0DbHz(int satelliteIndex)} is available. * * @param satelliteIndex An index from zero to {@link #getSatelliteCount()} - 1 */ public boolean hasBasebandCn0DbHz(@IntRange(from = 0) int satelliteIndex) { return (mSvidWithFlags[satelliteIndex] & SVID_FLAGS_HAS_BASEBAND_CN0) != 0; } /** * Retrieves the baseband carrier-to-noise density of the satellite at the specified index in * dB-Hz. * * @param satelliteIndex An index from zero to {@link #getSatelliteCount()} - 1 */ @FloatRange(from = 0, to = 63) public float getBasebandCn0DbHz(@IntRange(from = 0) int satelliteIndex) { return mBasebandCn0DbHzs[satelliteIndex]; } /** * Returns the string representation of a constellation type. * Loading Loading @@ -334,6 +358,8 @@ public final class GnssStatus { * @param usedInFix whether the satellite was used in the most recent location fix * @param hasCarrierFrequency whether carrier frequency data is available * @param carrierFrequency satellite carrier frequency in Hz * @param hasBasebandCn0DbHz whether baseband carrier-to-noise density is available * @param basebandCn0DbHz baseband carrier-to-noise density in dB-Hz */ @NonNull public Builder addSatellite(@ConstellationType int constellationType, Loading @@ -345,9 +371,12 @@ public final class GnssStatus { boolean hasAlmanac, boolean usedInFix, boolean hasCarrierFrequency, @FloatRange(from = 0) float carrierFrequency) { @FloatRange(from = 0) float carrierFrequency, boolean hasBasebandCn0DbHz, @FloatRange(from = 0, to = 63) float basebandCn0DbHz) { mSatellites.add(new GnssSvInfo(constellationType, svid, cn0DbHz, elevation, azimuth, hasEphemeris, hasAlmanac, usedInFix, hasCarrierFrequency, carrierFrequency)); hasEphemeris, hasAlmanac, usedInFix, hasCarrierFrequency, carrierFrequency, hasBasebandCn0DbHz, basebandCn0DbHz)); return this; } Loading @@ -371,6 +400,7 @@ public final class GnssStatus { float[] elevations = new float[svCount]; float[] azimuths = new float[svCount]; float[] carrierFrequencies = new float[svCount]; float[] basebandCn0DbHzs = new float[svCount]; for (int i = 0; i < svidWithFlags.length; i++) { svidWithFlags[i] = mSatellites.get(i).mSvidWithFlags; Loading @@ -387,9 +417,12 @@ public final class GnssStatus { for (int i = 0; i < carrierFrequencies.length; i++) { carrierFrequencies[i] = mSatellites.get(i).mCarrierFrequency; } for (int i = 0; i < basebandCn0DbHzs.length; i++) { basebandCn0DbHzs[i] = mSatellites.get(i).mBasebandCn0DbHz; } return wrap(svCount, svidWithFlags, cn0DbHzs, elevations, azimuths, carrierFrequencies); carrierFrequencies, basebandCn0DbHzs); } } Loading @@ -400,21 +433,25 @@ public final class GnssStatus { private final float mElevation; private final float mAzimuth; private final float mCarrierFrequency; private final float mBasebandCn0DbHz; private GnssSvInfo(int constellationType, int svid, float cn0DbHz, float elevation, float azimuth, boolean hasEphemeris, boolean hasAlmanac, boolean usedInFix, boolean hasCarrierFrequency, float carrierFrequency) { boolean usedInFix, boolean hasCarrierFrequency, float carrierFrequency, boolean hasBasebandCn0DbHz, float basebandCn0DbHz) { mSvidWithFlags = (svid << SVID_SHIFT_WIDTH) | ((constellationType & CONSTELLATION_TYPE_MASK) << CONSTELLATION_TYPE_SHIFT_WIDTH) | (hasEphemeris ? SVID_FLAGS_HAS_EPHEMERIS_DATA : SVID_FLAGS_NONE) | (hasAlmanac ? SVID_FLAGS_HAS_ALMANAC_DATA : SVID_FLAGS_NONE) | (usedInFix ? SVID_FLAGS_USED_IN_FIX : SVID_FLAGS_NONE) | (hasCarrierFrequency ? SVID_FLAGS_HAS_CARRIER_FREQUENCY : SVID_FLAGS_NONE); | (hasCarrierFrequency ? SVID_FLAGS_HAS_CARRIER_FREQUENCY : SVID_FLAGS_NONE) | (hasBasebandCn0DbHz ? SVID_FLAGS_HAS_BASEBAND_CN0 : SVID_FLAGS_NONE); mCn0DbHz = cn0DbHz; mElevation = elevation; mAzimuth = azimuth; mCarrierFrequency = carrierFrequency; mBasebandCn0DbHz = basebandCn0DbHz; } } }
location/java/android/location/IGnssStatusListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,6 @@ oneway interface IGnssStatusListener void onFirstFix(int ttff); void onSvStatusChanged(int svCount, in int[] svidWithFlags, in float[] cn0s, in float[] elevations, in float[] azimuths, in float[] carrierFreqs); in float[] carrierFreqs, in float[] basebandCn0s); void onNmeaReceived(long timestamp, String nmea); }
location/java/android/location/LocationManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -2818,9 +2818,10 @@ public class LocationManager { @Override public void onSvStatusChanged(int svCount, int[] svidWithFlags, float[] cn0s, float[] elevations, float[] azimuths, float[] carrierFreqs) { float[] elevations, float[] azimuths, float[] carrierFreqs, float[] basebandCn0s) { GnssStatus localStatus = GnssStatus.wrap(svCount, svidWithFlags, cn0s, elevations, azimuths, carrierFreqs); elevations, azimuths, carrierFreqs, basebandCn0s); mGnssStatus = localStatus; execute((callback) -> callback.onSatelliteStatusChanged(localStatus)); } Loading
location/tests/locationtests/src/android/location/GnssStatusTest.javadeleted 100644 → 0 +0 −130 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.suitebuilder.annotation.SmallTest; import android.util.Log; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; /** * Unit tests for {@link GnssStatus}. */ @SmallTest public class GnssStatusTest extends TestCase { private static final String TAG = GnssStatusTest.class.getSimpleName(); public void setUp() throws Exception { super.setUp(); } /* * Create {@link GnssStatus} with default value, verify whether its fields are set correctly. * */ public void testEmptyGnssStatus() throws Exception { Log.i(TAG, "testEmptyGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } /* * Create {@link GnssStatus} with only one satellite info, verify whether its fields are set * correctly. */ public void testOneSatelliteGnssStatus() throws Exception { Log.i(TAG, "testOneSatelliteGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); SatelliteInfo svInfo = new SatelliteInfo(100,1, true, true, true, true, 100f, 20.3f, 45.5f, 100.23f); svInfos.add(svInfo); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } /* * Create {@link GnssStatus} with multiple satellite info, verify whether its fields are set * correctly. */ public void testMultipleSatellitesGnssStatus() throws Exception { Log.i(TAG, "testMultipleSatellitesGnssStatus"); List<SatelliteInfo> svInfos = new ArrayList<>(); SatelliteInfo svInfo1 = new SatelliteInfo(20, 1,true, true, true, true, 10.1f, 20.3f, 45.5f, 111.23f); SatelliteInfo svInfo2 = new SatelliteInfo(50, 2, true, false, true, false, 20.2f, 21.3f, 46.5f, 222.23f); SatelliteInfo svInfo3 = new SatelliteInfo(192, 3, false, true, false, true, 30.3f, 22.3f, 47.5f, 333.23f); SatelliteInfo svInfo4 = new SatelliteInfo(250, 4, false, false, false, false, 40.4f, 23.3f, 48.5f, 444.23f); svInfos.add(svInfo1); svInfos.add(svInfo2); svInfos.add(svInfo3); svInfos.add(svInfo4); GnssStatus gnssStatus = createGnssStatus(svInfos); verifyGnssStatus(svInfos, gnssStatus); } private void verifyGnssStatus(List<SatelliteInfo> svInfos, GnssStatus gnssStatus) { Log.i(TAG, String.format("Verifing {0} satellites info.",svInfos.size())); assertEquals(TAG + "::SatelliteCount", svInfos.size(), gnssStatus.getSatelliteCount()); for (int i = 0; i< svInfos.size(); i++) { SatelliteInfo svInfo = svInfos.get(i); assertEquals(TAG + "::Svid", svInfo.mSvid, gnssStatus.getSvid(i)); assertEquals(TAG + "::ConstellationType", svInfo.mConstellationType, gnssStatus.getConstellationType(i)); assertEquals(TAG + "::Cn0DbHz", svInfo.mCn0DbHz, gnssStatus.getCn0DbHz(i)); assertEquals(TAG + "::Elevation", svInfo.mElevation, gnssStatus.getElevationDegrees(i)); assertEquals(TAG + "::Azimuth", svInfo.mAzimuth, gnssStatus.getAzimuthDegrees(i)); assertEquals(TAG + "::CarrierFrequencyHz", svInfo.mCarrierFrequency, gnssStatus.getCarrierFrequencyHz(i)); assertEquals(TAG + "::hasEphemerisData", svInfo.mHasEphemris, gnssStatus.hasEphemerisData(i)); assertEquals(TAG + "::HasAlmanacData", svInfo.mHasAlmanac, gnssStatus.hasAlmanacData(i)); assertEquals(TAG + "::UsedInFix", svInfo.mUsedInFix, gnssStatus.usedInFix(i)); assertEquals(TAG + "::HasCarrierFrequencyHz", svInfo.mHasCarriesFrequency, gnssStatus.hasCarrierFrequencyHz(i)); } } private static GnssStatus createGnssStatus(List<SatelliteInfo> svInfos) throws Exception { Class<?> intClass = Integer.TYPE; Class<?> floatArrayClass = Class.forName("[F"); Class<?> intArrayClass = Class.forName("[I"); Class[] cArg = new Class[6]; cArg[0] = intClass; cArg[1] = intArrayClass; cArg[2] = floatArrayClass; cArg[3] = floatArrayClass; cArg[4] = floatArrayClass; cArg[5] = floatArrayClass; Constructor<GnssStatus> ctor = GnssStatus.class.getDeclaredConstructor(cArg); ctor.setAccessible(true); return ctor.newInstance(svInfos.size(), SatelliteInfo.getSvidWithFlagsArray(svInfos), SatelliteInfo.getCn0sArray(svInfos), SatelliteInfo.getElevationsArray(svInfos), SatelliteInfo.getAzimuthsArray(svInfos), SatelliteInfo.getCarrierFrequencyArray(svInfos)); } }