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; 50127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo private double mAutomaticGainControlLevelInDb; 51ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 52ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa // The following enumerations must be in sync with the values declared in gps.h 53ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 542102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_NO_FLAGS = 0; 552102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_SNR = (1<<0); 562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_FREQUENCY = (1<<9); 572102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_CYCLES = (1<<10); 582102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_PHASE = (1<<11); 592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private static final int HAS_CARRIER_PHASE_UNCERTAINTY = (1<<12); 604402af6be9de4782d218170203033618f079551dgomo private static final int HAS_AUTOMATIC_GAIN_CONTROL = (1<<13); 612102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 622b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza /** 632b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza * The status of the multipath indicator. 642b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza * @hide 652b67c07d82f59f9b776414576c21dd31ed9dac48Julius D'souza */ 66a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @Retention(RetentionPolicy.SOURCE) 67a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @IntDef({MULTIPATH_INDICATOR_UNKNOWN, MULTIPATH_INDICATOR_DETECTED, 68a2bbfbcf8920ecec5700c1824b0436118cada5beWyatt Riley MULTIPATH_INDICATOR_NOT_DETECTED}) 69a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang public @interface MultipathIndicator {} 70a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang 71ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 72e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The indicator is not available or the presence or absence of multipath is unknown. 73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int MULTIPATH_INDICATOR_UNKNOWN = 0; 75ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 76ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 77e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The measurement shows signs of multi-path. 78ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int MULTIPATH_INDICATOR_DETECTED = 1; 80ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 81ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 82e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * The measurement shows no signs of multi-path. 83ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 84e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang public static final int MULTIPATH_INDICATOR_NOT_DETECTED = 2; 85e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang 864cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley /** 874cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * GNSS measurement tracking loop state 884cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @hide 894cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley */ 904cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @IntDef(flag = true, prefix = { "STATE_" }, value = { 914cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley STATE_CODE_LOCK, STATE_BIT_SYNC, STATE_SUBFRAME_SYNC, 924cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley STATE_TOW_DECODED, STATE_MSEC_AMBIGUOUS, STATE_SYMBOL_SYNC, STATE_GLO_STRING_SYNC, 934cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley STATE_GLO_TOD_DECODED, STATE_BDS_D2_BIT_SYNC, STATE_BDS_D2_SUBFRAME_SYNC, 944cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley STATE_GAL_E1BC_CODE_LOCK, STATE_GAL_E1C_2ND_CODE_LOCK, STATE_GAL_E1B_PAGE_SYNC, 954cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley STATE_SBAS_SYNC, STATE_TOW_KNOWN, STATE_GLO_TOD_KNOWN 964cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley }) 974cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Retention(RetentionPolicy.SOURCE) 984cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public @interface State {} 994cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley 100047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state is invalid or unknown. */ 10176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_UNKNOWN = 0; 102047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has code lock. */ 10376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_CODE_LOCK = (1<<0); 104047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has bit sync. */ 10576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_BIT_SYNC = (1<<1); 106047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has sub-frame sync. */ 10776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_SUBFRAME_SYNC = (1<<2); 108047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has time-of-week decoded. */ 10976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_TOW_DECODED = (1<<3); 110047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state contains millisecond ambiguity. */ 11176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATE_MSEC_AMBIGUOUS = (1<<4); 112047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This GNSS measurement's tracking state has symbol sync. */ 113047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_SYMBOL_SYNC = (1<<5); 114047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Glonass measurement's tracking state has string sync. */ 115047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GLO_STRING_SYNC = (1<<6); 116047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Glonass measurement's tracking state has time-of-day decoded. */ 117047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GLO_TOD_DECODED = (1<<7); 118047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Beidou measurement's tracking state has D2 bit sync. */ 119047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_BDS_D2_BIT_SYNC = (1<<8); 120047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Beidou measurement's tracking state has D2 sub-frame sync. */ 121047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_BDS_D2_SUBFRAME_SYNC = (1<<9); 122047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1B/C code lock. */ 123047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1BC_CODE_LOCK = (1<<10); 124047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1C secondary code lock. */ 125047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1C_2ND_CODE_LOCK = (1<<11); 126047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This Galileo measurement's tracking state has E1B page sync. */ 127047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_GAL_E1B_PAGE_SYNC = (1<<12); 128047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang /** This SBAS measurement's tracking state has whole second level sync. */ 129047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang public static final int STATE_SBAS_SYNC = (1<<13); 1304402af6be9de4782d218170203033618f079551dgomo /** 1314402af6be9de4782d218170203033618f079551dgomo * This GNSS measurement's tracking state has time-of-week known, possibly not decoded 1324402af6be9de4782d218170203033618f079551dgomo * over the air but has been determined from other sources. If TOW decoded is set then TOW Known 1334402af6be9de4782d218170203033618f079551dgomo * will also be set. 1344402af6be9de4782d218170203033618f079551dgomo */ 1354402af6be9de4782d218170203033618f079551dgomo public static final int STATE_TOW_KNOWN = (1<<14); 1364402af6be9de4782d218170203033618f079551dgomo /** 1374402af6be9de4782d218170203033618f079551dgomo * This Glonass measurement's tracking state has time-of-day known, possibly not decoded 1384402af6be9de4782d218170203033618f079551dgomo * over the air but has been determined from other sources. If TOD decoded is set then TOD Known 1394402af6be9de4782d218170203033618f079551dgomo * will also be set. 1404402af6be9de4782d218170203033618f079551dgomo */ 1414402af6be9de4782d218170203033618f079551dgomo public static final int STATE_GLO_TOD_KNOWN = (1<<15); 1425e72118f193258259912c0a51688bd4434c8896edestradaa 1435e72118f193258259912c0a51688bd4434c8896edestradaa /** 144047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang * All the GNSS receiver state flags, for bit masking purposes (not a sensible state for any 145047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang * individual measurement.) 146c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa */ 147047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang private static final int STATE_ALL = 0x3fff; // 2 bits + 4 bits + 4 bits + 4 bits = 14 bits 148c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa 149c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa /** 1504cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * GNSS measurement accumulated delta range state 1514cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @hide 1524cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley */ 1534cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @IntDef(flag = true, prefix = { "ADR_STATE_" }, value = { 1544cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley ADR_STATE_VALID, ADR_STATE_RESET, ADR_STATE_CYCLE_SLIP, ADR_STATE_HALF_CYCLE_RESOLVED, 1554cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley ADR_STATE_HALF_CYCLE_REPORTED 1564cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley }) 1574cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Retention(RetentionPolicy.SOURCE) 1584cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public @interface AdrState {} 1594cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley 1604cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley /** 1614cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * The state of the value {@link #getAccumulatedDeltaRangeMeters()} is invalid or unknown. 1622102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 16376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_UNKNOWN = 0; 1642102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1652102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1664cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * The state of the {@link #getAccumulatedDeltaRangeMeters()} is valid. 1672102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 16876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_VALID = (1<<0); 1692102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1702102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1714cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * The state of the {@link #getAccumulatedDeltaRangeMeters()} has detected a reset. 1722102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 17376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_RESET = (1<<1); 1742102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1752102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1764cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * The state of the {@link #getAccumulatedDeltaRangeMeters()} has a cycle slip detected. 1772102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 17876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int ADR_STATE_CYCLE_SLIP = (1<<2); 179ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 180c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa /** 1814cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * Reports whether the value {@link #getAccumulatedDeltaRangeMeters()} has resolved the half 1824cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * cycle ambiguity. 1834cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 1844cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> When this bit is set, the {@link #getAccumulatedDeltaRangeMeters()} corresponds to the 1854cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * carrier phase measurement plus an accumulated integer number of carrier full cycles. 1864cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 1874cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> When this bit is unset, the {@link #getAccumulatedDeltaRangeMeters()} corresponds to the 1884cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * carrier phase measurement plus an accumulated integer number of carrier half cycles. 1894cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley */ 1904cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public static final int ADR_STATE_HALF_CYCLE_RESOLVED = (1<<3); 1914cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley 1924cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley /** 1934cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * Reports whether the flag {@link #ADR_STATE_HALF_CYCLE_RESOLVED} has been reported by the 1944cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * GNSS hardware. 1954cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 1964cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> When this bit is set, the value of {@link #getAccumulatedDeltaRangeUncertaintyMeters()} 1974cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * can be low (centimeter level) whether or not the half cycle ambiguity is resolved. 1984cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 1994cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> When this bit is unset, the value of {@link #getAccumulatedDeltaRangeUncertaintyMeters()} 2004cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * is larger, to cover the potential error due to half cycle ambiguity being unresolved. 2014cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley */ 2024cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public static final int ADR_STATE_HALF_CYCLE_REPORTED = (1<<4); 2034cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley 2044cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley /** 205c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa * All the 'Accumulated Delta Range' flags. 2064cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @hide 207c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa */ 2084cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @TestApi 2094cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public static final int ADR_STATE_ALL = 2104cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley ADR_STATE_VALID | ADR_STATE_RESET | ADR_STATE_CYCLE_SLIP | 2114cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley ADR_STATE_HALF_CYCLE_RESOLVED | ADR_STATE_HALF_CYCLE_REPORTED; 212c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa 213ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa // End enumerations in sync with gps.h 214ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 2150f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang /** 2160f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2170f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang */ 2180f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 2190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang public GnssMeasurement() { 2202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 221ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 222ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 223ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 224ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets all contents to the values stored in the provided object. 2250f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 226ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 2270f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 228818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public void set(GnssMeasurement measurement) { 2292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = measurement.mFlags; 230120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = measurement.mSvid; 2319363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mConstellationType = measurement.mConstellationType; 23276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeOffsetNanos = measurement.mTimeOffsetNanos; 2332102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mState = measurement.mState; 23476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos = measurement.mReceivedSvTimeNanos; 23576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos = measurement.mReceivedSvTimeUncertaintyNanos; 23676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCn0DbHz = measurement.mCn0DbHz; 23776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond = measurement.mPseudorangeRateMetersPerSecond; 23876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond = 23976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang measurement.mPseudorangeRateUncertaintyMetersPerSecond; 2402102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mAccumulatedDeltaRangeState = measurement.mAccumulatedDeltaRangeState; 24176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters = measurement.mAccumulatedDeltaRangeMeters; 24276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters = 24376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang measurement.mAccumulatedDeltaRangeUncertaintyMeters; 24476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = measurement.mCarrierFrequencyHz; 245ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = measurement.mCarrierCycles; 246ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = measurement.mCarrierPhase; 247ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = measurement.mCarrierPhaseUncertainty; 248ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mMultipathIndicator = measurement.mMultipathIndicator; 249ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = measurement.mSnrInDb; 250127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo mAutomaticGainControlLevelInDb = measurement.mAutomaticGainControlLevelInDb; 251ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 252ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 253ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 254ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets all the contents to its original state. 2550f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 256ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 2570f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 258ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void reset() { 2592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 260ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 261ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 262ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 263e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the satellite ID. 264e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 265e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Interpretation depends on {@link #getConstellationType()}. 266e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * See {@link GnssStatus#getSvid(int)}. 267ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 26876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getSvid() { 269120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang return mSvid; 270ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 271ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 272ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 273e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Sets the Satellite ID. 2740f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 275ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 2760f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 27776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setSvid(int value) { 278120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = value; 279ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 280ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 281ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 282e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the constellation type. 283e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 284e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The return value is one of those constants with {@code CONSTELLATION_} prefix in 285e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * {@link GnssStatus}. 2869363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang */ 2879363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang @GnssStatus.ConstellationType 28876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getConstellationType() { 2899363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return mConstellationType; 2909363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang } 2919363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang 2929363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** 2939363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the constellation type. 2940f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2959363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang */ 2960f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 29776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setConstellationType(@GnssStatus.ConstellationType int value) { 2989363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mConstellationType = value; 2999363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang } 3009363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang 3019363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** 3022102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets the time offset at which the measurement was taken in nanoseconds. 30338bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * 304e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference receiver's time from which this is offset is specified by 30576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * {@link GnssClock#getTimeNanos()}. 3062102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 307e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The sign of this value is given by the following equation: 308e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 309e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * measurement time = TimeNanos + TimeOffsetNanos</pre> 3102102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 311e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value provides an individual time-stamp for the measurement, and allows sub-nanosecond 3122102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * accuracy. 3132102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 31476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getTimeOffsetNanos() { 31576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mTimeOffsetNanos; 3162102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 3172102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 3182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 3192102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the time offset at which the measurement was taken in nanoseconds. 3200f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 3212102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 3220f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 32376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setTimeOffsetNanos(double value) { 32476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeOffsetNanos = value; 3252102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 3262102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 3272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 3282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets per-satellite sync state. 3292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 330e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>It represents the current sync state for the associated satellite. 331e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 332e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This value helps interpret {@link #getReceivedSvTimeNanos()}. 333ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 3344cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @State 33576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getState() { 3362102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return mState; 337ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 338ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 339ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 3402102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the sync state. 3410f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 342ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 3430f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 3444cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public void setState(@State int value) { 345c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mState = value; 346ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 347ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 348ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 3492102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets a string representation of the 'sync state'. 350e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 351e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 3522102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 3532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private String getStateString() { 354c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (mState == STATE_UNKNOWN) { 355c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "Unknown"; 356c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 357047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang 358c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa StringBuilder builder = new StringBuilder(); 359047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_CODE_LOCK) != 0) { 360c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("CodeLock|"); 361c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 362047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BIT_SYNC) != 0) { 363c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("BitSync|"); 364c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 365047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SUBFRAME_SYNC) != 0) { 366c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("SubframeSync|"); 3672102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 368047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_TOW_DECODED) != 0) { 369c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("TowDecoded|"); 370c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 3714402af6be9de4782d218170203033618f079551dgomo if ((mState & STATE_TOW_KNOWN) != 0) { 3724402af6be9de4782d218170203033618f079551dgomo builder.append("TowKnown|"); 3734402af6be9de4782d218170203033618f079551dgomo } 374047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_MSEC_AMBIGUOUS) != 0) { 375047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("MsecAmbiguous|"); 376047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 377047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SYMBOL_SYNC) != 0) { 378047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("SymbolSync|"); 379047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 380047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GLO_STRING_SYNC) != 0) { 381047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GloStringSync|"); 382047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 383047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GLO_TOD_DECODED) != 0) { 384047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GloTodDecoded|"); 3855e72118f193258259912c0a51688bd4434c8896edestradaa } 3864402af6be9de4782d218170203033618f079551dgomo if ((mState & STATE_GLO_TOD_KNOWN) != 0) { 3874402af6be9de4782d218170203033618f079551dgomo builder.append("GloTodKnown|"); 3884402af6be9de4782d218170203033618f079551dgomo } 389047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BDS_D2_BIT_SYNC) != 0) { 390047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("BdsD2BitSync|"); 391047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 392047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_BDS_D2_SUBFRAME_SYNC) != 0) { 393047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("BdsD2SubframeSync|"); 394047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 395047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1BC_CODE_LOCK) != 0) { 396047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GalE1bcCodeLock|"); 397047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 398047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1C_2ND_CODE_LOCK) != 0) { 399047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("E1c2ndCodeLock|"); 400047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 401047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_GAL_E1B_PAGE_SYNC) != 0) { 402047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("GalE1bPageSync|"); 403047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 404047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang if ((mState & STATE_SBAS_SYNC) != 0) { 405047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.append("SbasSync|"); 406047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang } 407047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang 408c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa int remainingStates = mState & ~STATE_ALL; 409c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (remainingStates > 0) { 410c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Other("); 411c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(Integer.toBinaryString(remainingStates)); 412c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(")|"); 413c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 414047b05ea6e290997f1bcc29fd6c4ec5f81708f9fLifu Tang builder.setLength(builder.length() - 1); 415c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return builder.toString(); 4162102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 4172102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 4182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 4199363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Gets the received GNSS satellite time, at the measurement time, in nanoseconds. 4209363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 421e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For GPS & QZSS, this is: 422e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 423e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received GPS Time-of-Week at the measurement time, in nanoseconds.</li> 424e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>The value is relative to the beginning of the current GPS week.</li> 425e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 4269363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 427e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range 428e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * for this field can be: 429e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 4309363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 4319363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 4329363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Bit sync : [ 0 20ms ] : STATE_BIT_SYNC is set 4339363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Subframe sync : [ 0 6s ] : STATE_SUBFRAME_SYNC is set 4344402af6be9de4782d218170203033618f079551dgomo * TOW decoded : [ 0 1week ] : STATE_TOW_DECODED is set 4354402af6be9de4782d218170203033618f079551dgomo * TOW Known : [ 0 1week ] : STATE_TOW_KNOWN set</pre> 4364402af6be9de4782d218170203033618f079551dgomo * 4374402af6be9de4782d218170203033618f079551dgomo * Note: TOW Known refers to the case where TOW is possibly not decoded over the air but has 4384402af6be9de4782d218170203033618f079551dgomo * been determined from other sources. If TOW decoded is set then TOW Known must also be set. 4399363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 440e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Note well: if there is any ambiguity in integer millisecond, {@code STATE_MSEC_AMBIGUOUS} 4414402af6be9de4782d218170203033618f079551dgomo * must be set accordingly, in the 'state' field. 4429363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 443e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This value must be populated if 'state' != {@code STATE_UNKNOWN}. 4449363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 445e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Glonass, this is: 446e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 447e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Glonass time of day, at the measurement time in nanoseconds.</li> 448e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 4499363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 450e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 451e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 452e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 4534402af6be9de4782d218170203033618f079551dgomo * Searching : [ 0 ] : STATE_UNKNOWN 4544402af6be9de4782d218170203033618f079551dgomo * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 4554402af6be9de4782d218170203033618f079551dgomo * Symbol sync : [ 0 10ms ] : STATE_SYMBOL_SYNC is set 4564402af6be9de4782d218170203033618f079551dgomo * Bit sync : [ 0 20ms ] : STATE_BIT_SYNC is set 4574402af6be9de4782d218170203033618f079551dgomo * String sync : [ 0 2s ] : STATE_GLO_STRING_SYNC is set 4584402af6be9de4782d218170203033618f079551dgomo * Time of day decoded : [ 0 1day ] : STATE_GLO_TOD_DECODED is set 4594402af6be9de4782d218170203033618f079551dgomo * Time of day known : [ 0 1day ] : STATE_GLO_TOD_KNOWN set</pre> 4604402af6be9de4782d218170203033618f079551dgomo * 4614402af6be9de4782d218170203033618f079551dgomo * Note: Time of day known refers to the case where it is possibly not decoded over the air but 4624402af6be9de4782d218170203033618f079551dgomo * has been determined from other sources. If Time of day decoded is set then Time of day known 4634402af6be9de4782d218170203033618f079551dgomo * must also be set. 4649363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 465e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Beidou, this is: 466e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 467e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Beidou time of week, at the measurement time in nanoseconds.</li> 468e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 4699363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * 470e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 471e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 472e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 4734402af6be9de4782d218170203033618f079551dgomo * Searching : [ 0 ] : STATE_UNKNOWN 4744402af6be9de4782d218170203033618f079551dgomo * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 4754402af6be9de4782d218170203033618f079551dgomo * Bit sync (D2) : [ 0 2ms ] : STATE_BDS_D2_BIT_SYNC is set 4764402af6be9de4782d218170203033618f079551dgomo * Bit sync (D1) : [ 0 20ms ] : STATE_BIT_SYNC is set 4774402af6be9de4782d218170203033618f079551dgomo * Subframe (D2) : [ 0 0.6s ] : STATE_BDS_D2_SUBFRAME_SYNC is set 4784402af6be9de4782d218170203033618f079551dgomo * Subframe (D1) : [ 0 6s ] : STATE_SUBFRAME_SYNC is set 4794402af6be9de4782d218170203033618f079551dgomo * Time of week decoded : [ 0 1week ] : STATE_TOW_DECODED is set 4804402af6be9de4782d218170203033618f079551dgomo * Time of week known : [ 0 1week ] : STATE_TOW_KNOWN set</pre> 4814402af6be9de4782d218170203033618f079551dgomo * 4824402af6be9de4782d218170203033618f079551dgomo * Note: TOW Known refers to the case where TOW is possibly not decoded over the air but has 4834402af6be9de4782d218170203033618f079551dgomo * been determined from other sources. If TOW decoded is set then TOW Known must also be set. 484e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 485e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For Galileo, this is: 486e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 487e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received Galileo time of week, at the measurement time in nanoseconds.</li> 488e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 489e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 4904402af6be9de4782d218170203033618f079551dgomo * E1BC code lock : [ 0 4ms ] : STATE_GAL_E1BC_CODE_LOCK is set 4914402af6be9de4782d218170203033618f079551dgomo * E1C 2nd code lock : [ 0 100ms ] : STATE_GAL_E1C_2ND_CODE_LOCK is set 4924402af6be9de4782d218170203033618f079551dgomo * E1B page : [ 0 2s ] : STATE_GAL_E1B_PAGE_SYNC is set 493455c3037c14b3fc4693c75b87cc57423cc8318c9Wyatt Riley * Time of week decoded : [ 0 1week ] : STATE_TOW_DECODED is set 494455c3037c14b3fc4693c75b87cc57423cc8318c9Wyatt Riley * Time of week known : [ 0 1week ] : STATE_TOW_KNOWN set</pre> 4954402af6be9de4782d218170203033618f079551dgomo * 4964402af6be9de4782d218170203033618f079551dgomo * Note: TOW Known refers to the case where TOW is possibly not decoded over the air but has 4974402af6be9de4782d218170203033618f079551dgomo * been determined from other sources. If TOW decoded is set then TOW Known must also be set. 498e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 499e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For SBAS, this is: 500e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <ul> 501e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <li>Received SBAS time, at the measurement time in nanoseconds.</li> 502e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * </ul> 503e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 504e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Given the highest sync state that can be achieved, per each satellite, valid range for 505e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * this field can be: 506e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 5079363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Searching : [ 0 ] : STATE_UNKNOWN 5089363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK is set 5099363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Symbol sync : [ 0 2ms ] : STATE_SYMBOL_SYNC is set 510e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Message : [ 0 1s ] : STATE_SBAS_SYNC is set</pre> 511ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 51276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getReceivedSvTimeNanos() { 51376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mReceivedSvTimeNanos; 514ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 515ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 516ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 5179363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the received GNSS time in nanoseconds. 5180f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 519ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 5200f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 52176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setReceivedSvTimeNanos(long value) { 52276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos = value; 523ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 524ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 525ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 526e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Gets the error estimate (1-sigma) for the received GNSS time, in nanoseconds. 52781cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa */ 52876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getReceivedSvTimeUncertaintyNanos() { 52976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mReceivedSvTimeUncertaintyNanos; 53081cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa } 53181cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa 53281cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa /** 5339363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets the received GNSS time uncertainty (1-Sigma) in nanoseconds. 5340f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 53581cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa */ 5360f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 53776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setReceivedSvTimeUncertaintyNanos(long value) { 53876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos = value; 53981cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa } 54081cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa 54181cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa /** 542ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the Carrier-to-noise density in dB-Hz. 543ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 544e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Typical range: 10-50 db-Hz. 545e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 546e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value contains the measured C/N0 for the signal at the antenna input. 547ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 54876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getCn0DbHz() { 54976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mCn0DbHz; 550ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 551ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 552ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 553ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the carrier-to-noise density in dB-Hz. 5540f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 555ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 5560f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 55776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setCn0DbHz(double value) { 55876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCn0DbHz = value; 559ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 560ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 561ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 562ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the Pseudorange rate at the timestamp in m/s. 5635e72118f193258259912c0a51688bd4434c8896edestradaa * 564e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is 565e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * {@link #getPseudorangeRateUncertaintyMetersPerSecond()}. 56676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * 567e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is uncorrected, i.e. corrections for receiver and satellite clock frequency 568e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * errors are not included. 56976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * 570e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>A positive 'uncorrected' value indicates that the SV is moving away from the receiver. The 57176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * sign of the 'uncorrected' 'pseudorange rate' and its relation to the sign of 'doppler shift' 57276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * is given by the equation: 5735e72118f193258259912c0a51688bd4434c8896edestradaa * 574e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 575e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * pseudorange rate = -k * doppler shift (where k is a constant)</pre> 576ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 57776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getPseudorangeRateMetersPerSecond() { 57876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mPseudorangeRateMetersPerSecond; 579ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 580ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 581ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 582ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the pseudorange rate at the timestamp in m/s. 5830f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 584ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 5850f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 58676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setPseudorangeRateMetersPerSecond(double value) { 58776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond = value; 588ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 589ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 590ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 591ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the pseudorange's rate uncertainty (1-Sigma) in m/s. 592e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 593e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 594ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 59576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getPseudorangeRateUncertaintyMetersPerSecond() { 59676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mPseudorangeRateUncertaintyMetersPerSecond; 597ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 598ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 599ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 600ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the pseudorange's rate uncertainty (1-Sigma) in m/s. 6010f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 602ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6030f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 60476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setPseudorangeRateUncertaintyMetersPerSecond(double value) { 60576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond = value; 606ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 607ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 608ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 6092102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets 'Accumulated Delta Range' state. 610e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 611e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>It indicates whether {@link #getAccumulatedDeltaRangeMeters()} is reset or there is a 6122102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * cycle slip (indicating 'loss of lock'). 6132102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 6144cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @AdrState 61576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getAccumulatedDeltaRangeState() { 6162102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return mAccumulatedDeltaRangeState; 6172102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 6182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 6192102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 6202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the 'Accumulated Delta Range' state. 6210f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 6222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 6230f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 6244cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley public void setAccumulatedDeltaRangeState(@AdrState int value) { 625c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mAccumulatedDeltaRangeState = value; 6262102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 6272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 6282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 6292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets a string representation of the 'Accumulated Delta Range state'. 630e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 631e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 6322102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 6332102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private String getAccumulatedDeltaRangeStateString() { 634c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (mAccumulatedDeltaRangeState == ADR_STATE_UNKNOWN) { 635c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "Unknown"; 636c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 637c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa StringBuilder builder = new StringBuilder(); 638c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_VALID) == ADR_STATE_VALID) { 639c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Valid|"); 640c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 641c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_RESET) == ADR_STATE_RESET) { 642c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Reset|"); 6432102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 644c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if ((mAccumulatedDeltaRangeState & ADR_STATE_CYCLE_SLIP) == ADR_STATE_CYCLE_SLIP) { 645c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("CycleSlip|"); 646c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 6474cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley if ((mAccumulatedDeltaRangeState & ADR_STATE_HALF_CYCLE_RESOLVED) == 6484cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley ADR_STATE_HALF_CYCLE_RESOLVED) { 6494cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley builder.append("HalfCycleResolved|"); 6504cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley } 6514cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley if ((mAccumulatedDeltaRangeState & ADR_STATE_HALF_CYCLE_REPORTED) 6524cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley == ADR_STATE_HALF_CYCLE_REPORTED) { 6534cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley builder.append("HalfCycleReported|"); 6544cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley } 6554cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley int remainingStates = mAccumulatedDeltaRangeState & ~ADR_STATE_ALL; 656c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa if (remainingStates > 0) { 657c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append("Other("); 658c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(Integer.toBinaryString(remainingStates)); 659c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.append(")|"); 660c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa } 661c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa builder.deleteCharAt(builder.length() - 1); 662c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return builder.toString(); 6632102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 6642102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 6652102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 666ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the accumulated delta range since the last channel reset, in meters. 6672102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 668e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is {@link #getAccumulatedDeltaRangeUncertaintyMeters()}. 669e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 670e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The availability of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 6715e72118f193258259912c0a51688bd4434c8896edestradaa * 672e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>A positive value indicates that the SV is moving away from the receiver. 67376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The sign of {@link #getAccumulatedDeltaRangeMeters()} and its relation to the sign of 6745e72118f193258259912c0a51688bd4434c8896edestradaa * {@link #getCarrierPhase()} is given by the equation: 675e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 676e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <pre> 677e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * accumulated delta range = -k * carrier phase (where k is a constant)</pre> 678252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * 679252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * <p>Similar to the concept of an RTCM "Phaserange", when the accumulated delta range is 680252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * initially chosen, and whenever it is reset, it will retain the integer nature 681252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * of the relative carrier phase offset between satellites observed by this receiver, such that 682252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * the double difference of this value between receivers and satellites may be used, together 683252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * with integer ambiguity resolution, to determine highly precise relative location between 684252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * receivers. 685252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * 686252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * <p>This includes ensuring that all half-cycle ambiguities are resolved before this value is 687252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * reported as {@link #ADR_STATE_VALID}. 688ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 68976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getAccumulatedDeltaRangeMeters() { 69076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mAccumulatedDeltaRangeMeters; 691ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 692ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 693ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 694ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the accumulated delta range in meters. 6950f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 696ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 6970f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 69876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setAccumulatedDeltaRangeMeters(double value) { 69976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters = value; 700ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 701ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 702ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 703ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the accumulated delta range's uncertainty (1-Sigma) in meters. 7045e72118f193258259912c0a51688bd4434c8896edestradaa * 705e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 706e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 707e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The status of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 708ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 70976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getAccumulatedDeltaRangeUncertaintyMeters() { 71076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mAccumulatedDeltaRangeUncertaintyMeters; 711ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 712ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 713ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 714ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the accumulated delta range's uncertainty (1-sigma) in meters. 7152102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 716e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The status of the value is represented by {@link #getAccumulatedDeltaRangeState()}. 7170f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * 7180f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 719ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7200f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 72176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setAccumulatedDeltaRangeUncertaintyMeters(double value) { 72276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters = value; 723ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 724ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 725ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 726e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierFrequencyHz()} is available, {@code false} 727e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * otherwise. 728ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 72976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasCarrierFrequencyHz() { 7302102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_FREQUENCY); 731ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 732ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 733ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 7344402af6be9de4782d218170203033618f079551dgomo * Gets the carrier frequency of the tracked signal. 735e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 736d1e856cb9e664c6167141b97e0aa0830c898083agomo * <p>For example it can be the GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, 737d1e856cb9e664c6167141b97e0aa0830c898083agomo * L5 = 1176.45 MHz, varying GLO channels, etc. If the field is not set, it is the primary 738d1e856cb9e664c6167141b97e0aa0830c898083agomo * common use central frequency, e.g. L1 = 1575.45 MHz for GPS. 739d1e856cb9e664c6167141b97e0aa0830c898083agomo * 7404cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> For an L1, L5 receiver tracking a satellite on L1 and L5 at the same time, two raw 741d1e856cb9e664c6167141b97e0aa0830c898083agomo * measurement objects will be reported for this same satellite, in one of the measurement 742d1e856cb9e664c6167141b97e0aa0830c898083agomo * objects, all the values related to L1 will be filled, and in the other all of the values 743d1e856cb9e664c6167141b97e0aa0830c898083agomo * related to L5 will be filled. 744ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 745e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierFrequencyHz()} is {@code true}. 7460e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu * 7470e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu * @return the carrier frequency of the signal tracked in Hz. 748ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 74976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public float getCarrierFrequencyHz() { 75076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mCarrierFrequencyHz; 751ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 752ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 753ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 7544402af6be9de4782d218170203033618f079551dgomo * Sets the Carrier frequency in Hz. 7550f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 756ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7570f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 75876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setCarrierFrequencyHz(float carrierFrequencyHz) { 7592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_FREQUENCY); 76076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = carrierFrequencyHz; 761ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 762ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 763ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 7644402af6be9de4782d218170203033618f079551dgomo * Resets the Carrier frequency in Hz. 7650f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 766ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7670f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 76876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetCarrierFrequencyHz() { 7692102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_FREQUENCY); 77076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mCarrierFrequencyHz = Float.NaN; 771ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 772ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 773ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 774e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierCycles()} is available, {@code false} otherwise. 7754cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 7764cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeState()} instead. 777ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7784cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 779ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierCycles() { 7802102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_CYCLES); 781ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 782ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 783ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 784ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * The number of full carrier cycles between the satellite and the receiver. 785ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 786e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference frequency is given by the value of {@link #getCarrierFrequencyHz()}. 787e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 788e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierCycles()} is {@code true}. 7894cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 7904cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeMeters()} instead. 791ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 7924cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 793ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public long getCarrierCycles() { 794ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierCycles; 795ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 796ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 797ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 798ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the number of full carrier cycles between the satellite and the receiver. 7994cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8004cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeMeters(double)} 8014cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 8024cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8030f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 804ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8050f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 8064cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 807ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierCycles(long value) { 8082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_CYCLES); 809ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = value; 810ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 811ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 812ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 813ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the number of full carrier cycles between the satellite and the receiver. 8144cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8154cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeMeters(double)} 8164cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 8170f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 818ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 8204cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 821ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierCycles() { 8222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_CYCLES); 823ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierCycles = Long.MIN_VALUE; 824ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 825ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 826ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 827e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierPhase()} is available, {@code false} otherwise. 8284cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8294cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeState()} instead. 830ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8314cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 832ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierPhase() { 8332102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_PHASE); 834ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 835ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 836ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 837ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the RF phase detected by the receiver. 838ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 839e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>Range: [0.0, 1.0]. 840e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 841e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>This is the fractional part of the complete carrier phase measurement. 842e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 843e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The reference frequency is given by the value of {@link #getCarrierFrequencyHz()}. 844ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 845e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The error estimate for this value is {@link #getCarrierPhaseUncertainty()}. 846e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 847e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierPhase()} is {@code true}. 8484cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8494cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeMeters()} instead. 850ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8514cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 852ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getCarrierPhase() { 853ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierPhase; 854ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 855ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 856ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 857ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the RF phase detected by the receiver. 8584cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8594cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeMeters(double)} 8604cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 8614cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8620f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 863ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8640f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 8654cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 866ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierPhase(double value) { 8672102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_PHASE); 868ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = value; 869ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 870ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 871ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 872ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the RF phase detected by the receiver. 8734cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8744cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeMeters(double)} 8754cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 8764cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8770f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 878ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8790f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 8804cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 881ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierPhase() { 8822102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_PHASE); 883ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhase = Double.NaN; 884ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 885ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 886ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 887e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getCarrierPhaseUncertainty()} is available, {@code false} 888e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * otherwise. 8894cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 8904cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeState()} instead. 891ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 8924cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 893ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasCarrierPhaseUncertainty() { 8942102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_CARRIER_PHASE_UNCERTAINTY); 895ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 896ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 897ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 898ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the carrier-phase's uncertainty (1-Sigma). 899ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 900e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The uncertainty is represented as an absolute (single sided) value. 901e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 902e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasCarrierPhaseUncertainty()} is {@code true}. 9034cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 9044cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #getAccumulatedDeltaRangeUncertaintyMeters()} instead. 905ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9064cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 907ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getCarrierPhaseUncertainty() { 908ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mCarrierPhaseUncertainty; 909ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 910ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 911ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 912ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the Carrier-phase's uncertainty (1-Sigma) in cycles. 9134cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 9144cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeUncertaintyMeters(double)} 9154cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 9164cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 9170f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 918ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 9204cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 921ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setCarrierPhaseUncertainty(double value) { 9222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_CARRIER_PHASE_UNCERTAINTY); 923ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = value; 924ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 925ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 926ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 927ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the Carrier-phase's uncertainty (1-Sigma) in cycles. 9284cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 9294cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * @deprecated use {@link #setAccumulatedDeltaRangeUncertaintyMeters(double)} 9304cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * and {@link #setAccumulatedDeltaRangeState(int)} instead. 9314cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 9320f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 933ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9340f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 9354cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley @Deprecated 936ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetCarrierPhaseUncertainty() { 9372102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_CARRIER_PHASE_UNCERTAINTY); 938ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mCarrierPhaseUncertainty = Double.NaN; 939ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 940ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 941ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 942ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets a value indicating the 'multipath' state of the event. 943ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 944a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @MultipathIndicator 94576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getMultipathIndicator() { 946ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mMultipathIndicator; 947ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 948ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 949ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 950ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the 'multi-path' indicator. 9510f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 952ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9530f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 95476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setMultipathIndicator(@MultipathIndicator int value) { 955c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mMultipathIndicator = value; 956ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 957ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 958ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 959ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets a string representation of the 'multi-path indicator'. 960e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * 961e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>For internal and logging use only. 962ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 963ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa private String getMultipathIndicatorString() { 964ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa switch(mMultipathIndicator) { 965ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa case MULTIPATH_INDICATOR_UNKNOWN: 966ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return "Unknown"; 967ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa case MULTIPATH_INDICATOR_DETECTED: 968ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return "Detected"; 969a2bbfbcf8920ecec5700c1824b0436118cada5beWyatt Riley case MULTIPATH_INDICATOR_NOT_DETECTED: 970a2bbfbcf8920ecec5700c1824b0436118cada5beWyatt Riley return "NotDetected"; 971ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa default: 9724cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley return "<Invalid: " + mMultipathIndicator + ">"; 973ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 974ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 975ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 976ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 977e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * Returns {@code true} if {@link #getSnrInDb()} is available, {@code false} otherwise. 978ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 979ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasSnrInDb() { 9802102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_SNR); 981ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 982ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 983ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 984252e0908bd729eaf41c6d53af0ea8111bd9464d7Wyatt Riley * Gets the (post-correlation & integration) Signal-to-Noise ratio (SNR) in dB. 985ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 986e8abe8e5ad830bd130b258c6801d75f6542200b5Lifu Tang * <p>The value is only available if {@link #hasSnrInDb()} is {@code true}. 987ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 988ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public double getSnrInDb() { 989ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mSnrInDb; 990ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 991ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 992ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 993ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the Signal-to-noise ratio (SNR) in dB. 9940f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 995ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9960f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 997ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void setSnrInDb(double snrInDb) { 9982102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_SNR); 999ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = snrInDb; 1000ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1001ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1002ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 1003ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the Signal-to-noise ratio (SNR) in dB. 10040f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1005ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 10060f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 1007ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetSnrInDb() { 10082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_SNR); 1009ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mSnrInDb = Double.NaN; 1010ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1011ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 10124402af6be9de4782d218170203033618f079551dgomo /** 10130e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu * Returns {@code true} if {@link #getAutomaticGainControlLevelDb()} is available, 1014127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo * {@code false} otherwise. 10154402af6be9de4782d218170203033618f079551dgomo */ 10160e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu public boolean hasAutomaticGainControlLevelDb() { 10174402af6be9de4782d218170203033618f079551dgomo return isFlagSet(HAS_AUTOMATIC_GAIN_CONTROL); 10184402af6be9de4782d218170203033618f079551dgomo } 10194402af6be9de4782d218170203033618f079551dgomo 10204402af6be9de4782d218170203033618f079551dgomo /** 10214402af6be9de4782d218170203033618f079551dgomo * Gets the Automatic Gain Control level in dB. 10224402af6be9de4782d218170203033618f079551dgomo * 1023d1e856cb9e664c6167141b97e0aa0830c898083agomo * <p> AGC acts as a variable gain amplifier adjusting the power of the incoming signal. The AGC 1024d1e856cb9e664c6167141b97e0aa0830c898083agomo * level may be used to indicate potential interference. When AGC is at a nominal level, this 1025d1e856cb9e664c6167141b97e0aa0830c898083agomo * value must be set as 0. Higher gain (and/or lower input power) shall be output as a positive 1026d1e856cb9e664c6167141b97e0aa0830c898083agomo * number. Hence in cases of strong jamming, in the band of this signal, this value will go more 1027d1e856cb9e664c6167141b97e0aa0830c898083agomo * negative. 1028d1e856cb9e664c6167141b97e0aa0830c898083agomo * 10294cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> Note: Different hardware designs (e.g. antenna, pre-amplification, or other RF HW 10304402af6be9de4782d218170203033618f079551dgomo * components) may also affect the typical output of of this value on any given hardware design 10314402af6be9de4782d218170203033618f079551dgomo * in an open sky test - the important aspect of this output is that changes in this value are 10324402af6be9de4782d218170203033618f079551dgomo * indicative of changes on input signal power in the frequency band for this measurement. 10334cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * 10344cbcb411b1198f14fbd41a231cc7fb738c958f1bWyatt Riley * <p> The value is only available if {@link #hasAutomaticGainControlLevelDb()} is {@code true} 10354402af6be9de4782d218170203033618f079551dgomo */ 10360e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu public double getAutomaticGainControlLevelDb() { 1037127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo return mAutomaticGainControlLevelInDb; 10384402af6be9de4782d218170203033618f079551dgomo } 10394402af6be9de4782d218170203033618f079551dgomo 10404402af6be9de4782d218170203033618f079551dgomo /** 10414402af6be9de4782d218170203033618f079551dgomo * Sets the Automatic Gain Control level in dB. 10424402af6be9de4782d218170203033618f079551dgomo * @hide 10434402af6be9de4782d218170203033618f079551dgomo */ 1044127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo @TestApi 1045127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo public void setAutomaticGainControlLevelInDb(double agcLevelDb) { 10464402af6be9de4782d218170203033618f079551dgomo setFlag(HAS_AUTOMATIC_GAIN_CONTROL); 1047127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo mAutomaticGainControlLevelInDb = agcLevelDb; 10484402af6be9de4782d218170203033618f079551dgomo } 10494402af6be9de4782d218170203033618f079551dgomo 10504402af6be9de4782d218170203033618f079551dgomo /** 10514402af6be9de4782d218170203033618f079551dgomo * Resets the Automatic Gain Control level. 10524402af6be9de4782d218170203033618f079551dgomo * @hide 10534402af6be9de4782d218170203033618f079551dgomo */ 1054127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo @TestApi 1055127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo public void resetAutomaticGainControlLevel() { 10564402af6be9de4782d218170203033618f079551dgomo resetFlag(HAS_AUTOMATIC_GAIN_CONTROL); 1057127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo mAutomaticGainControlLevelInDb = Double.NaN; 10584402af6be9de4782d218170203033618f079551dgomo } 10594402af6be9de4782d218170203033618f079551dgomo 1060818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public static final Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() { 1061ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 1062818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssMeasurement createFromParcel(Parcel parcel) { 1063818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang GnssMeasurement gnssMeasurement = new GnssMeasurement(); 1064818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang 1065818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mFlags = parcel.readInt(); 106676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mSvid = parcel.readInt(); 106776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mConstellationType = parcel.readInt(); 106876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mTimeOffsetNanos = parcel.readDouble(); 106976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mState = parcel.readInt(); 107076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mReceivedSvTimeNanos = parcel.readLong(); 107176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mReceivedSvTimeUncertaintyNanos = parcel.readLong(); 107276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mCn0DbHz = parcel.readDouble(); 107376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mPseudorangeRateMetersPerSecond = parcel.readDouble(); 107476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mPseudorangeRateUncertaintyMetersPerSecond = parcel.readDouble(); 107576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeState = parcel.readInt(); 107676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeMeters = parcel.readDouble(); 107776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mAccumulatedDeltaRangeUncertaintyMeters = parcel.readDouble(); 107876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mCarrierFrequencyHz = parcel.readFloat(); 1079818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierCycles = parcel.readLong(); 1080818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierPhase = parcel.readDouble(); 1081818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mCarrierPhaseUncertainty = parcel.readDouble(); 108276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gnssMeasurement.mMultipathIndicator = parcel.readInt(); 1083818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang gnssMeasurement.mSnrInDb = parcel.readDouble(); 1084127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo gnssMeasurement.mAutomaticGainControlLevelInDb = parcel.readDouble(); 1085818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang 1086818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return gnssMeasurement; 1087ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1088ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1089ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 1090818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssMeasurement[] newArray(int i) { 1091818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return new GnssMeasurement[i]; 1092ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1093ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa }; 1094ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1095120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang @Override 1096ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void writeToParcel(Parcel parcel, int flags) { 10972102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mFlags); 1098120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang parcel.writeInt(mSvid); 109976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeInt(mConstellationType); 110076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mTimeOffsetNanos); 11012102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mState); 110276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mReceivedSvTimeNanos); 110376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mReceivedSvTimeUncertaintyNanos); 110476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mCn0DbHz); 110576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mPseudorangeRateMetersPerSecond); 110676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mPseudorangeRateUncertaintyMetersPerSecond); 11072102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mAccumulatedDeltaRangeState); 110876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mAccumulatedDeltaRangeMeters); 110976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mAccumulatedDeltaRangeUncertaintyMeters); 111076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeFloat(mCarrierFrequencyHz); 1111ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeLong(mCarrierCycles); 1112ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mCarrierPhase); 1113ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mCarrierPhaseUncertainty); 111476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeInt(mMultipathIndicator); 1115ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeDouble(mSnrInDb); 1116127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo parcel.writeDouble(mAutomaticGainControlLevelInDb); 1117ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1118ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1119ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 1120ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public int describeContents() { 1121ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return 0; 1122ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 1123ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1124ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 1125ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public String toString() { 1126ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa final String format = " %-29s = %s\n"; 1127ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa final String formatWithUncertainty = " %-29s = %-25s %-40s = %s\n"; 1128818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang StringBuilder builder = new StringBuilder("GnssMeasurement:\n"); 1129ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1130120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang builder.append(String.format(format, "Svid", mSvid)); 11319363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang builder.append(String.format(format, "ConstellationType", mConstellationType)); 113276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang builder.append(String.format(format, "TimeOffsetNanos", mTimeOffsetNanos)); 11332102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 11342102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format(format, "State", getStateString())); 1135ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 113681cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa builder.append(String.format( 113781cabb8a7fb5b61f16bf49c2757ccb51bc88e708destradaa formatWithUncertainty, 113876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "ReceivedSvTimeNanos", 113976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeNanos, 114076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "ReceivedSvTimeUncertaintyNanos", 114176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mReceivedSvTimeUncertaintyNanos)); 1142ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 114376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang builder.append(String.format(format, "Cn0DbHz", mCn0DbHz)); 1144ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1145ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 1146ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 114776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "PseudorangeRateMetersPerSecond", 114876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateMetersPerSecond, 114976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "PseudorangeRateUncertaintyMetersPerSecond", 115076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mPseudorangeRateUncertaintyMetersPerSecond)); 1151ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1152ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 11532102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa format, 11542102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa "AccumulatedDeltaRangeState", 11552102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa getAccumulatedDeltaRangeStateString())); 11562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 11572102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format( 1158ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 115976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "AccumulatedDeltaRangeMeters", 116076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeMeters, 116176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "AccumulatedDeltaRangeUncertaintyMeters", 116276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mAccumulatedDeltaRangeUncertaintyMeters)); 1163ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1164ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 1165ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 116676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "CarrierFrequencyHz", 116776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasCarrierFrequencyHz() ? mCarrierFrequencyHz : null)); 1168ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1169ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 1170ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 1171ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierCycles", 11722102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierCycles() ? mCarrierCycles : null)); 1173ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1174ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 1175ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa formatWithUncertainty, 1176ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierPhase", 11772102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierPhase() ? mCarrierPhase : null, 1178ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "CarrierPhaseUncertainty", 11792102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasCarrierPhaseUncertainty() ? mCarrierPhaseUncertainty : null)); 1180ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1181ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format(format, "MultipathIndicator", getMultipathIndicatorString())); 1182ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1183ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 1184ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 1185ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa "SnrInDb", 11862102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa hasSnrInDb() ? mSnrInDb : null)); 11874402af6be9de4782d218170203033618f079551dgomo builder.append(String.format( 11884402af6be9de4782d218170203033618f079551dgomo format, 11894402af6be9de4782d218170203033618f079551dgomo "AgcLevelDb", 11900e342e1fdb892529b9fbc073dbe18c8704af0355Yu Liu hasAutomaticGainControlLevelDb() ? mAutomaticGainControlLevelInDb : null)); 1191ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 1192ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return builder.toString(); 1193ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 11942102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 11952102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void initialize() { 11962102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = HAS_NO_FLAGS; 119776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setSvid(0); 119876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setTimeOffsetNanos(Long.MIN_VALUE); 11992102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setState(STATE_UNKNOWN); 120076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setReceivedSvTimeNanos(Long.MIN_VALUE); 120176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setReceivedSvTimeUncertaintyNanos(Long.MAX_VALUE); 120276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setCn0DbHz(Double.MIN_VALUE); 120376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setPseudorangeRateMetersPerSecond(Double.MIN_VALUE); 120476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setPseudorangeRateUncertaintyMetersPerSecond(Double.MIN_VALUE); 12052102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setAccumulatedDeltaRangeState(ADR_STATE_UNKNOWN); 120676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setAccumulatedDeltaRangeMeters(Double.MIN_VALUE); 120776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setAccumulatedDeltaRangeUncertaintyMeters(Double.MIN_VALUE); 120876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetCarrierFrequencyHz(); 12092102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierCycles(); 12102102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierPhase(); 12112102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetCarrierPhaseUncertainty(); 12122102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setMultipathIndicator(MULTIPATH_INDICATOR_UNKNOWN); 12132102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetSnrInDb(); 1214127ba323d9ae2107ed58039f24ffade2c27ff7c9gomo resetAutomaticGainControlLevel(); 12152102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 12162102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 12172102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void setFlag(int flag) { 12182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags |= flag; 12192102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 12202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 12212102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void resetFlag(int flag) { 12222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags &= ~flag; 12232102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 12242102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 12252102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private boolean isFlagSet(int flag) { 12262102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return (mFlags & flag) == flag; 12272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 1228ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa} 1229