1ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/* 2ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Copyright (C) 2014 The Android Open Source Project 3ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 4ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Licensed under the Apache License, Version 2.0 (the "License"); 5ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * you may not use this file except in compliance with the License. 6ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * You may obtain a copy of the License at 7ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 8ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * http://www.apache.org/licenses/LICENSE-2.0 9ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 10ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Unless required by applicable law or agreed to in writing, software 11ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * distributed under the License is distributed on an "AS IS" BASIS, 12ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * See the License for the specific language governing permissions and 14ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * limitations under the License 15ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 16ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 17ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaapackage android.location; 18ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tangimport android.annotation.TestApi; 20a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport android.annotation.IntDef; 21ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.Parcel; 22ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.Parcelable; 23ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 24a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport java.lang.annotation.Retention; 25a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport java.lang.annotation.RetentionPolicy; 26a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang 27ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/** 289363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * A class representing a GNSS satellite measurement, containing raw and computed information. 29ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 30818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tangpublic final class GnssMeasurement implements Parcelable { 312102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private int mFlags; 3276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mSvid; 3376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mConstellationType; 3476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mTimeOffsetNanos; 3576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mState; 3676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private long mReceivedSvTimeNanos; 3776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private long mReceivedSvTimeUncertaintyNanos; 3876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mCn0DbHz; 3976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mPseudorangeRateMetersPerSecond; 4076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mPseudorangeRateUncertaintyMetersPerSecond; 4176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mAccumulatedDeltaRangeState; 4276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mAccumulatedDeltaRangeMeters; 4376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mAccumulatedDeltaRangeUncertaintyMeters; 4476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private float mCarrierFrequencyHz; 45ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private long mCarrierCycles; 46ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private double mCarrierPhase; 47ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private double mCarrierPhaseUncertainty; 4876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mMultipathIndicator; 49ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private double mSnrInDb; 50ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 51ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa // The following enumerations must be in sync with the values declared in gps.h 52ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_NO_FLAGS = 0; 542102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_SNR = (1<<0); 552102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_FREQUENCY = (1<<9); 562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_CYCLES = (1<<10); 572102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_PHASE = (1<<11); 582102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_PHASE_UNCERTAINTY = (1<<12); 592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 602b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza /** 612b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza * The status of the multipath indicator. 622b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza * @hide 632b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza */ 64a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @Retention(RetentionPolicy.SOURCE) 65a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @IntDef({MULTIPATH_INDICATOR_UNKNOWN, MULTIPATH_INDICATOR_DETECTED, 66a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang MULTIPATH_INDICATOR_NOT_USED}) 67a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang public @interface MultipathIndicator {} 68a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang 69ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 70e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The indicator is not available or the presence or absence of multipath is unknown. 71ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int MULTIPATH_INDICATOR_UNKNOWN = 0; 73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 74ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 75e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The measurement shows signs of multi-path. 76ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int MULTIPATH_INDICATOR_DETECTED = 1; 78ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 79ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 80e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The measurement shows no signs of multi-path. 81ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 82e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang public static final int MULTIPATH_INDICATOR_NOT_DETECTED = 2; 83e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang 84e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang /** @removed */ 8576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int MULTIPATH_INDICATOR_NOT_USED = 2; 862102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 87047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state is invalid or unknown. */ 8876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_UNKNOWN = 0; 89047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has code lock. */ 9076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_CODE_LOCK = (1<<0); 91047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has bit sync. */ 9276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_BIT_SYNC = (1<<1); 93047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has sub-frame sync. */ 9476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_SUBFRAME_SYNC = (1<<2); 95047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has time-of-week decoded. */ 9676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_TOW_DECODED = (1<<3); 97047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state contains millisecond ambiguity. */ 9876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_MSEC_AMBIGUOUS = (1<<4); 99047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has symbol sync. */ 100047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_SYMBOL_SYNC = (1<<5); 101047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Glonass measurement's tracking state has string sync. */ 102047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GLO_STRING_SYNC = (1<<6); 103047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Glonass measurement's tracking state has time-of-day decoded. */ 104047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GLO_TOD_DECODED = (1<<7); 105047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Beidou measurement's tracking state has D2 bit sync. */ 106047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_BDS_D2_BIT_SYNC = (1<<8); 107047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Beidou measurement's tracking state has D2 sub-frame sync. */ 108047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_BDS_D2_SUBFRAME_SYNC = (1<<9); 109047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1B/C code lock. */ 110047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1BC_CODE_LOCK = (1<<10); 111047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1C secondary code lock. */ 112047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1C_2ND_CODE_LOCK = (1<<11); 113047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1B page sync. */ 114047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1B_PAGE_SYNC = (1<<12); 115047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This SBAS measurement's tracking state has whole second level sync. */ 116047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_SBAS_SYNC = (1<<13); 1175e72118f193258259912c0a51688bd4434c8896edestradaa 1185e72118f193258259912c0a51688bd4434c8896edestradaa /** 119047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang * All the GNSS receiver state flags, for bit masking purposes (not a sensible state for any 120047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang * individual measurement.) 121c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa */ 122047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang private static final int STATE_ALL = 0x3fff; // 2 bits + 4 bits + 4 bits + 4 bits = 14 bits 123c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa 124c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa /** 1252102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The state of the 'Accumulated Delta Range' is invalid or unknown. 1262102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 12776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_UNKNOWN = 0; 1282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1302102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The state of the 'Accumulated Delta Range' is valid. 1312102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 13276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_VALID = (1<<0); 1332102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1342102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1352102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The state of the 'Accumulated Delta Range' has detected a reset. 1362102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 13776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_RESET = (1<<1); 1382102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1392102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1402102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The state of the 'Accumulated Delta Range' has a cycle slip detected. 1412102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 14276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_CYCLE_SLIP = (1<<2); 143ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 144c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa /** 145c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa * All the 'Accumulated Delta Range' flags. 146c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa */ 14776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int ADR_ALL = ADR_STATE_VALID | ADR_STATE_RESET | ADR_STATE_CYCLE_SLIP; 148c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa 149ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa // End enumerations in sync with gps.h 150ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1510f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang /** 1520f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1530f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang */ 1540f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 1550f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang public GnssMeasurement() { 1562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 157ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 158ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 159ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 160ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets all contents to the values stored in the provided object. 1610f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 162ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 1630f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 164818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public void set(GnssMeasurement measurement) { 1652102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = measurement.mFlags; 166120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = measurement.mSvid; 1679363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mConstellationType = measurement.mConstellationType; 16876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeOffsetNanos = measurement.mTimeOffsetNanos; 1692102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mState = measurement.mState; 17076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos = measurement.mReceivedSvTimeNanos; 17176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos = measurement.mReceivedSvTimeUncertaintyNanos; 17276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCn0DbHz = measurement.mCn0DbHz; 17376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond = measurement.mPseudorangeRateMetersPerSecond; 17476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond = 17576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang measurement.mPseudorangeRateUncertaintyMetersPerSecond; 1762102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mAccumulatedDeltaRangeState = measurement.mAccumulatedDeltaRangeState; 17776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters = measurement.mAccumulatedDeltaRangeMeters; 17876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters = 17976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang measurement.mAccumulatedDeltaRangeUncertaintyMeters; 18076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = measurement.mCarrierFrequencyHz; 181ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = measurement.mCarrierCycles; 182ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = measurement.mCarrierPhase; 183ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = measurement.mCarrierPhaseUncertainty; 184ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mMultipathIndicator = measurement.mMultipathIndicator; 185ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = measurement.mSnrInDb; 186ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 187ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 188ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 189ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets all the contents to its original state. 1900f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 191ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 1920f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 193ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void reset() { 1942102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 195ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 196ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 197ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 198e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the satellite ID. 199e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 200e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Interpretation depends on {@link #getConstellationType()}. 201e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * See {@link GnssStatus#getSvid(int)}. 202ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 20376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getSvid() { 204120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang return mSvid; 205ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 206ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 207ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 208e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Sets the Satellite ID. 2090f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 210ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 2110f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 21276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setSvid(int value) { 213120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = value; 214ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 215ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 216ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 217e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the constellation type. 218e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 219e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The return value is one of those constants with {@code CONSTELLATION_} prefix in 220e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * {@link GnssStatus}. 2219363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang */ 2229363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang @GnssStatus.ConstellationType 22376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getConstellationType() { 2249363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return mConstellationType; 2259363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang } 2269363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang 2279363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** 2289363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the constellation type. 2290f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2309363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang */ 2310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 23276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setConstellationType(@GnssStatus.ConstellationType int value) { 2339363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mConstellationType = value; 2349363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang } 2359363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang 2369363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** 2372102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets the time offset at which the measurement was taken in nanoseconds. 23838bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * 239e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference receiver's time from which this is offset is specified by 24076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * {@link GnssClock#getTimeNanos()}. 2412102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 242e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The sign of this value is given by the following equation: 243e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 244e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * measurement time = TimeNanos + TimeOffsetNanos</pre> 2452102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 246e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value provides an individual time-stamp for the measurement, and allows sub-nanosecond 2472102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * accuracy. 2482102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 24976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getTimeOffsetNanos() { 25076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mTimeOffsetNanos; 2512102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 2522102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 2532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 2542102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the time offset at which the measurement was taken in nanoseconds. 2550f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 2570f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 25876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setTimeOffsetNanos(double value) { 25976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeOffsetNanos = value; 2602102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 2612102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 2622102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 2632102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets per-satellite sync state. 2642102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 265e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>It represents the current sync state for the associated satellite. 266e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 267e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This value helps interpret {@link #getReceivedSvTimeNanos()}. 268ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 26976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getState() { 2702102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return mState; 271ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 272ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 273ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 2742102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the sync state. 2750f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 276ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 2770f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 27876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setState(int value) { 279c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mState = value; 280ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 281ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 282ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 2832102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets a string representation of the 'sync state'. 284e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 285e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 2862102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 2872102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private String getStateString() { 288c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (mState == STATE_UNKNOWN) { 289c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "Unknown"; 290c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 291047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang 292c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa StringBuilder builder = new StringBuilder(); 293047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_CODE_LOCK) != 0) { 294c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("CodeLock|"); 295c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 296047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BIT_SYNC) != 0) { 297c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("BitSync|"); 298c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 299047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SUBFRAME_SYNC) != 0) { 300c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("SubframeSync|"); 3012102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 302047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_TOW_DECODED) != 0) { 303c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("TowDecoded|"); 304c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 305047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_MSEC_AMBIGUOUS) != 0) { 306047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("MsecAmbiguous|"); 307047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 308047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SYMBOL_SYNC) != 0) { 309047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("SymbolSync|"); 310047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 311047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GLO_STRING_SYNC) != 0) { 312047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GloStringSync|"); 313047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 314047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GLO_TOD_DECODED) != 0) { 315047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GloTodDecoded|"); 3165e72118f193258259912c0a51688bd4434c8896edestradaa } 317047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BDS_D2_BIT_SYNC) != 0) { 318047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("BdsD2BitSync|"); 319047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 320047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BDS_D2_SUBFRAME_SYNC) != 0) { 321047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("BdsD2SubframeSync|"); 322047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 323047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1BC_CODE_LOCK) != 0) { 324047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GalE1bcCodeLock|"); 325047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 326047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1C_2ND_CODE_LOCK) != 0) { 327047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("E1c2ndCodeLock|"); 328047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 329047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1B_PAGE_SYNC) != 0) { 330047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GalE1bPageSync|"); 331047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 332047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SBAS_SYNC) != 0) { 333047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("SbasSync|"); 334047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 335047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang 336c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa int remainingStates = mState & ~STATE_ALL; 337c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (remainingStates > 0) { 338c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Other("); 339c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(Integer.toBinaryString(remainingStates)); 340c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(")|"); 341c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 342047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.setLength(builder.length() - 1); 343c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return builder.toString(); 3442102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 3452102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 3462102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 3479363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Gets the received GNSS satellite time, at the measurement time, in nanoseconds. 3489363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 349e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For GPS & QZSS, this is: 350e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 351e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received GPS Time-of-Week at the measurement time, in nanoseconds.</li> 352e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>The value is relative to the beginning of the current GPS week.</li> 353e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 3549363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 355e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range 356e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * for this field can be: 357e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 3589363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 3599363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 3609363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Bit sync : [ 0 20ms ] : STATE_BIT_SYNC is set 3619363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Subframe sync : [ 0 6s ] : STATE_SUBFRAME_SYNC is set 362e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * TOW decoded : [ 0 1week ] : STATE_TOW_DECODED is set</pre> 3639363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 364e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Note well: if there is any ambiguity in integer millisecond, {@code STATE_MSEC_AMBIGUOUS} 365e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * should be set accordingly, in the 'state' field. 3669363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 367e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This value must be populated if 'state' != {@code STATE_UNKNOWN}. 3689363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 369e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Glonass, this is: 370e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 371e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Glonass time of day, at the measurement time in nanoseconds.</li> 372e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 3739363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 374e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 375e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 376e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 3779363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 3789363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 379e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Symbol sync : [ 0 10ms ] : STATE_SYMBOL_SYNC is set 380e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Bit sync : [ 0 20ms ] : STATE_BIT_SYNC is set 381e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * String sync : [ 0 2s ] : STATE_GLO_STRING_SYNC is set 382e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Time of day : [ 0 1day ] : STATE_GLO_TOD_DECODED is set</pre> 3839363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 384e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Beidou, this is: 385e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 386e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Beidou time of week, at the measurement time in nanoseconds.</li> 387e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 3889363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 389e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 390e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 391e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 3929363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 3939363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 3949363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Bit sync (D2) : [ 0 2ms ] : STATE_BDS_D2_BIT_SYNC is set 3959363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Bit sync (D1) : [ 0 20ms ] : STATE_BIT_SYNC is set 3969363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Subframe (D2) : [ 0 0.6s ] : STATE_BDS_D2_SUBFRAME_SYNC is set 3979363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Subframe (D1) : [ 0 6s ] : STATE_SUBFRAME_SYNC is set 398e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Time of week : [ 0 1week ] : STATE_TOW_DECODED is set</pre> 399e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 400e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Galileo, this is: 401e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 402e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Galileo time of week, at the measurement time in nanoseconds.</li> 403e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 404e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 405e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * E1BC code lock : [ 0 4ms ] : STATE_GAL_E1BC_CODE_LOCK is set 406e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * E1C 2nd code lock: [ 0 100ms ] : STATE_GAL_E1C_2ND_CODE_LOCK is set 407e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * E1B page : [ 0 2s ] : STATE_GAL_E1B_PAGE_SYNC is set 408e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Time of week : [ 0 1week ] : STATE_GAL_TOW_DECODED is set</pre> 409e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 410e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For SBAS, this is: 411e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 412e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received SBAS time, at the measurement time in nanoseconds.</li> 413e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 414e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 415e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 416e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 417e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 4189363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 4199363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 4209363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Symbol sync : [ 0 2ms ] : STATE_SYMBOL_SYNC is set 421e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Message : [ 0 1s ] : STATE_SBAS_SYNC is set</pre> 422ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 42376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getReceivedSvTimeNanos() { 42476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mReceivedSvTimeNanos; 425ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 426ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 427ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 4289363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the received GNSS time in nanoseconds. 4290f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 430ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 4310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 43276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setReceivedSvTimeNanos(long value) { 43376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos = value; 434ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 435ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 436ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 437e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the error estimate (1-sigma) for the received GNSS time, in nanoseconds. 43881cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa */ 43976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getReceivedSvTimeUncertaintyNanos() { 44076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mReceivedSvTimeUncertaintyNanos; 44181cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa } 44281cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa 44381cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa /** 4449363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the received GNSS time uncertainty (1-Sigma) in nanoseconds. 4450f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 44681cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa */ 4470f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 44876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setReceivedSvTimeUncertaintyNanos(long value) { 44976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos = value; 45081cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa } 45181cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa 45281cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa /** 453ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the Carrier-to-noise density in dB-Hz. 454ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 455e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Typical range: 10-50 db-Hz. 456e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 457e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value contains the measured C/N0 for the signal at the antenna input. 458ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 45976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getCn0DbHz() { 46076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mCn0DbHz; 461ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 462ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 463ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 464ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the carrier-to-noise density in dB-Hz. 4650f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 466ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 4670f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 46876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setCn0DbHz(double value) { 46976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCn0DbHz = value; 470ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 471ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 472ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 473ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the Pseudorange rate at the timestamp in m/s. 4745e72118f193258259912c0a51688bd4434c8896edestradaa * 475e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is 476e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * {@link #getPseudorangeRateUncertaintyMetersPerSecond()}. 47776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * 478e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is uncorrected, i.e. corrections for receiver and satellite clock frequency 479e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * errors are not included. 48076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * 481e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>A positive 'uncorrected' value indicates that the SV is moving away from the receiver. The 48276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * sign of the 'uncorrected' 'pseudorange rate' and its relation to the sign of 'doppler shift' 48376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * is given by the equation: 4845e72118f193258259912c0a51688bd4434c8896edestradaa * 485e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 486e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * pseudorange rate = -k * doppler shift (where k is a constant)</pre> 487ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 48876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getPseudorangeRateMetersPerSecond() { 48976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mPseudorangeRateMetersPerSecond; 490ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 491ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 492ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 493ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the pseudorange rate at the timestamp in m/s. 4940f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 495ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 4960f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 49776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setPseudorangeRateMetersPerSecond(double value) { 49876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond = value; 499ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 500ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 501ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 502ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the pseudorange's rate uncertainty (1-Sigma) in m/s. 503e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 504e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 505ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 50676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getPseudorangeRateUncertaintyMetersPerSecond() { 50776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mPseudorangeRateUncertaintyMetersPerSecond; 508ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 509ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 510ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 511ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the pseudorange's rate uncertainty (1-Sigma) in m/s. 5120f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 513ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 5140f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 51576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setPseudorangeRateUncertaintyMetersPerSecond(double value) { 51676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond = value; 517ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 518ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 519ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 5202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets 'Accumulated Delta Range' state. 521e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 522e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>It indicates whether {@link #getAccumulatedDeltaRangeMeters()} is reset or there is a 5232102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * cycle slip (indicating 'loss of lock'). 5242102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 52576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getAccumulatedDeltaRangeState() { 5262102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return mAccumulatedDeltaRangeState; 5272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 5282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 5292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 5302102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the 'Accumulated Delta Range' state. 5310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 5322102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 5330f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 53476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setAccumulatedDeltaRangeState(int value) { 535c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mAccumulatedDeltaRangeState = value; 5362102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 5372102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 5382102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 5392102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets a string representation of the 'Accumulated Delta Range state'. 540e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 541e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 5422102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 5432102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private String getAccumulatedDeltaRangeStateString() { 544c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (mAccumulatedDeltaRangeState == ADR_STATE_UNKNOWN) { 545c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "Unknown"; 546c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 547c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa StringBuilder builder = new StringBuilder(); 548c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_VALID) == ADR_STATE_VALID) { 549c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Valid|"); 550c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 551c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_RESET) == ADR_STATE_RESET) { 552c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Reset|"); 5532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 554c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_CYCLE_SLIP) == ADR_STATE_CYCLE_SLIP) { 555c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("CycleSlip|"); 556c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 557c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa int remainingStates = mAccumulatedDeltaRangeState & ~ADR_ALL; 558c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (remainingStates > 0) { 559c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Other("); 560c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(Integer.toBinaryString(remainingStates)); 561c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(")|"); 562c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 563c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.deleteCharAt(builder.length() - 1); 564c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return builder.toString(); 5652102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 5662102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 5672102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 568ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the accumulated delta range since the last channel reset, in meters. 5692102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 570e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is {@link #getAccumulatedDeltaRangeUncertaintyMeters()}. 571e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 572e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The availability of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 5735e72118f193258259912c0a51688bd4434c8896edestradaa * 574e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>A positive value indicates that the SV is moving away from the receiver. 57576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The sign of {@link #getAccumulatedDeltaRangeMeters()} and its relation to the sign of 5765e72118f193258259912c0a51688bd4434c8896edestradaa * {@link #getCarrierPhase()} is given by the equation: 577e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 578e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 579e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * accumulated delta range = -k * carrier phase (where k is a constant)</pre> 580ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 58176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getAccumulatedDeltaRangeMeters() { 58276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mAccumulatedDeltaRangeMeters; 583ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 584ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 585ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 586ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the accumulated delta range in meters. 5870f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 588ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 5890f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 59076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setAccumulatedDeltaRangeMeters(double value) { 59176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters = value; 592ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 593ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 594ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 595ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the accumulated delta range's uncertainty (1-Sigma) in meters. 5965e72118f193258259912c0a51688bd4434c8896edestradaa * 597e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 598e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 599e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The status of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 600ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 60176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getAccumulatedDeltaRangeUncertaintyMeters() { 60276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mAccumulatedDeltaRangeUncertaintyMeters; 603ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 604ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 605ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 606ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the accumulated delta range's uncertainty (1-sigma) in meters. 6072102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 608e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The status of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 6090f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * 6100f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 611ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6120f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 61376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setAccumulatedDeltaRangeUncertaintyMeters(double value) { 61476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters = value; 615ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 616ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 617ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 618e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierFrequencyHz()} is available, {@code false} 619e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * otherwise. 620ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 62176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasCarrierFrequencyHz() { 6222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_FREQUENCY); 623ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 624ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 625ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 626e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the carrier frequency at which codes and messages are modulated. 627e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 628e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For GPS, e.g., it can be L1 or L2. If the field is not set, it is the primary common use 629e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * frequency, e.g. L1 for GPS. 630ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 631e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierFrequencyHz()} is {@code true}. 632ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 63376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public float getCarrierFrequencyHz() { 63476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mCarrierFrequencyHz; 635ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 636ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 637ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 638ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the Carrier frequency (L1 or L2) in Hz. 6390f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 640ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6410f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 64276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setCarrierFrequencyHz(float carrierFrequencyHz) { 6432102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_FREQUENCY); 64476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = carrierFrequencyHz; 645ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 646ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 647ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 648ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the Carrier frequency (L1 or L2) in Hz. 6490f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 650ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6510f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 65276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetCarrierFrequencyHz() { 6532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_FREQUENCY); 65476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = Float.NaN; 655ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 656ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 657ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 658e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierCycles()} is available, {@code false} otherwise. 659ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 660ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierCycles() { 6612102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_CYCLES); 662ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 663ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 664ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 665ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * The number of full carrier cycles between the satellite and the receiver. 666ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 667e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference frequency is given by the value of {@link #getCarrierFrequencyHz()}. 668e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 669e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierCycles()} is {@code true}. 670ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 671ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public long getCarrierCycles() { 672ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierCycles; 673ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 674ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 675ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 676ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the number of full carrier cycles between the satellite and the receiver. 6770f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 678ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6790f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 680ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierCycles(long value) { 6812102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_CYCLES); 682ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = value; 683ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 684ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 685ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 686ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the number of full carrier cycles between the satellite and the receiver. 6870f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 688ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6890f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 690ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierCycles() { 6912102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_CYCLES); 692ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = Long.MIN_VALUE; 693ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 694ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 695ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 696e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierPhase()} is available, {@code false} otherwise. 697ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 698ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierPhase() { 6992102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_PHASE); 700ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 701ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 702ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 703ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the RF phase detected by the receiver. 704ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 705e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Range: [0.0, 1.0]. 706e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 707e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This is the fractional part of the complete carrier phase measurement. 708e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 709e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference frequency is given by the value of {@link #getCarrierFrequencyHz()}. 710ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 711e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is {@link #getCarrierPhaseUncertainty()}. 712e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 713e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierPhase()} is {@code true}. 714ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 715ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getCarrierPhase() { 716ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierPhase; 717ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 718ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 719ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 720ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the RF phase detected by the receiver. 7210f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 722ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7230f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 724ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierPhase(double value) { 7252102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_PHASE); 726ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = value; 727ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 728ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 729ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 730ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the RF phase detected by the receiver. 7310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 732ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7330f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 734ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierPhase() { 7352102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_PHASE); 736ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = Double.NaN; 737ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 738ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 739ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 740e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierPhaseUncertainty()} is available, {@code false} 741e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * otherwise. 742ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 743ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierPhaseUncertainty() { 7442102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_PHASE_UNCERTAINTY); 745ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 746ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 747ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 748ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the carrier-phase's uncertainty (1-Sigma). 749ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 750e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 751e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 752e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierPhaseUncertainty()} is {@code true}. 753ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 754ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getCarrierPhaseUncertainty() { 755ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierPhaseUncertainty; 756ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 757ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 758ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 759ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the Carrier-phase's uncertainty (1-Sigma) in cycles. 7600f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 761ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7620f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 763ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierPhaseUncertainty(double value) { 7642102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_PHASE_UNCERTAINTY); 765ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = value; 766ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 767ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 768ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 769ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the Carrier-phase's uncertainty (1-Sigma) in cycles. 7700f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 771ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7720f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 773ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierPhaseUncertainty() { 7742102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_PHASE_UNCERTAINTY); 775ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = Double.NaN; 776ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 777ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 778ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 779ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets a value indicating the 'multipath' state of the event. 780ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 781a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @MultipathIndicator 78276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getMultipathIndicator() { 783ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mMultipathIndicator; 784ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 785ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 786ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 787ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the 'multi-path' indicator. 7880f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 789ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7900f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 79176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setMultipathIndicator(@MultipathIndicator int value) { 792c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mMultipathIndicator = value; 793ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 794ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 795ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 796ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets a string representation of the 'multi-path indicator'. 797e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 798e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 799ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 800ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private String getMultipathIndicatorString() { 801ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa switch(mMultipathIndicator) { 802ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa case MULTIPATH_INDICATOR_UNKNOWN: 803ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return "Unknown"; 804ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa case MULTIPATH_INDICATOR_DETECTED: 805ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return "Detected"; 806ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa case MULTIPATH_INDICATOR_NOT_USED: 8072102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return "NotUsed"; 808ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa default: 809c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "<Invalid:" + mMultipathIndicator + ">"; 810ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 811ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 812ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 813ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 814e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getSnrInDb()} is available, {@code false} otherwise. 815ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 816ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasSnrInDb() { 8172102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_SNR); 818ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 819ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 820ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 821ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the Signal-to-Noise ratio (SNR) in dB. 822ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 823e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasSnrInDb()} is {@code true}. 824ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 825ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getSnrInDb() { 826ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mSnrInDb; 827ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 828ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 829ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 830ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the Signal-to-noise ratio (SNR) in dB. 8310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 832ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8330f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 834ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setSnrInDb(double snrInDb) { 8352102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_SNR); 836ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = snrInDb; 837ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 838ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 839ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 840ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the Signal-to-noise ratio (SNR) in dB. 8410f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 842ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8430f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 844ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetSnrInDb() { 8452102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_SNR); 846ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = Double.NaN; 847ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 848ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 849818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public static final Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() { 850ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 851818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssMeasurement createFromParcel(Parcel parcel) { 852818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang GnssMeasurement gnssMeasurement = new GnssMeasurement(); 853818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang 854818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mFlags = parcel.readInt(); 85576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mSvid = parcel.readInt(); 85676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mConstellationType = parcel.readInt(); 85776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mTimeOffsetNanos = parcel.readDouble(); 85876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mState = parcel.readInt(); 85976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mReceivedSvTimeNanos = parcel.readLong(); 86076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mReceivedSvTimeUncertaintyNanos = parcel.readLong(); 86176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mCn0DbHz = parcel.readDouble(); 86276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mPseudorangeRateMetersPerSecond = parcel.readDouble(); 86376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mPseudorangeRateUncertaintyMetersPerSecond = parcel.readDouble(); 86476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeState = parcel.readInt(); 86576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeMeters = parcel.readDouble(); 86676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeUncertaintyMeters = parcel.readDouble(); 86776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mCarrierFrequencyHz = parcel.readFloat(); 868818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierCycles = parcel.readLong(); 869818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierPhase = parcel.readDouble(); 870818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierPhaseUncertainty = parcel.readDouble(); 87176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mMultipathIndicator = parcel.readInt(); 872818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mSnrInDb = parcel.readDouble(); 873818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang 874818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return gnssMeasurement; 875ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 876ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 877ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 878818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssMeasurement[] newArray(int i) { 879818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return new GnssMeasurement[i]; 880ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 881ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa }; 882ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 883120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang @Override 884ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void writeToParcel(Parcel parcel, int flags) { 8852102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mFlags); 886120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang parcel.writeInt(mSvid); 88776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeInt(mConstellationType); 88876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mTimeOffsetNanos); 8892102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mState); 89076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mReceivedSvTimeNanos); 89176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mReceivedSvTimeUncertaintyNanos); 89276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mCn0DbHz); 89376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mPseudorangeRateMetersPerSecond); 89476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mPseudorangeRateUncertaintyMetersPerSecond); 8952102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mAccumulatedDeltaRangeState); 89676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mAccumulatedDeltaRangeMeters); 89776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mAccumulatedDeltaRangeUncertaintyMeters); 89876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeFloat(mCarrierFrequencyHz); 899ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeLong(mCarrierCycles); 900ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mCarrierPhase); 901ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mCarrierPhaseUncertainty); 90276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeInt(mMultipathIndicator); 903ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mSnrInDb); 904ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 905ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 906ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 907ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public int describeContents() { 908ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return 0; 909ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 910ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 911ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 912ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public String toString() { 913ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa final String format = " %-29s = %s\n"; 914ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa final String formatWithUncertainty = " %-29s = %-25s %-40s = %s\n"; 915818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang StringBuilder builder = new StringBuilder("GnssMeasurement:\n"); 916ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 917120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang builder.append(String.format(format, "Svid", mSvid)); 9189363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang builder.append(String.format(format, "ConstellationType", mConstellationType)); 91976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang builder.append(String.format(format, "TimeOffsetNanos", mTimeOffsetNanos)); 9202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 9212102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format(format, "State", getStateString())); 922ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 92381cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa builder.append(String.format( 92481cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa formatWithUncertainty, 92576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "ReceivedSvTimeNanos", 92676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos, 92776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "ReceivedSvTimeUncertaintyNanos", 92876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos)); 929ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 93076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang builder.append(String.format(format, "Cn0DbHz", mCn0DbHz)); 931ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 932ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 933ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 93476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "PseudorangeRateMetersPerSecond", 93576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond, 93676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "PseudorangeRateUncertaintyMetersPerSecond", 93776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond)); 938ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 939ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 9402102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa format, 9412102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa "AccumulatedDeltaRangeState", 9422102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa getAccumulatedDeltaRangeStateString())); 9432102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 9442102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format( 945ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 94676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "AccumulatedDeltaRangeMeters", 94776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters, 94876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "AccumulatedDeltaRangeUncertaintyMeters", 94976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters)); 950ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 951ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 952ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 95376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "CarrierFrequencyHz", 95476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasCarrierFrequencyHz() ? mCarrierFrequencyHz : null)); 955ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 956ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 957ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 958ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierCycles", 9592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierCycles() ? mCarrierCycles : null)); 960ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 961ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 962ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 963ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierPhase", 9642102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierPhase() ? mCarrierPhase : null, 965ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierPhaseUncertainty", 9662102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierPhaseUncertainty() ? mCarrierPhaseUncertainty : null)); 967ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 968ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format(format, "MultipathIndicator", getMultipathIndicatorString())); 969ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 970ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 971ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 972ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "SnrInDb", 9732102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasSnrInDb() ? mSnrInDb : null)); 974ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 975ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return builder.toString(); 976ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 9772102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 9782102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void initialize() { 9792102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = HAS_NO_FLAGS; 98076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setSvid(0); 98176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setTimeOffsetNanos(Long.MIN_VALUE); 9822102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setState(STATE_UNKNOWN); 98376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setReceivedSvTimeNanos(Long.MIN_VALUE); 98476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setReceivedSvTimeUncertaintyNanos(Long.MAX_VALUE); 98576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setCn0DbHz(Double.MIN_VALUE); 98676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setPseudorangeRateMetersPerSecond(Double.MIN_VALUE); 98776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setPseudorangeRateUncertaintyMetersPerSecond(Double.MIN_VALUE); 9882102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setAccumulatedDeltaRangeState(ADR_STATE_UNKNOWN); 98976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setAccumulatedDeltaRangeMeters(Double.MIN_VALUE); 99076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setAccumulatedDeltaRangeUncertaintyMeters(Double.MIN_VALUE); 99176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetCarrierFrequencyHz(); 9922102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierCycles(); 9932102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierPhase(); 9942102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierPhaseUncertainty(); 9952102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setMultipathIndicator(MULTIPATH_INDICATOR_UNKNOWN); 9962102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetSnrInDb(); 9972102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 9982102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 9992102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void setFlag(int flag) { 10002102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags |= flag; 10012102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 10022102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 10032102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void resetFlag(int flag) { 10042102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags &= ~flag; 10052102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 10062102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 10072102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private boolean isFlagSet(int flag) { 10082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return (mFlags & flag) == flag; 10092102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 1010ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa} 1011