GnssClock.java revision 76a620f0482ba54a4921c7c7e7eeb8ea87c12d3e
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 19ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.Parcel; 20ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.Parcelable; 21ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 22ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/** 23ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * A class containing a GPS clock timestamp. 24ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * It represents a measurement of the GPS receiver's clock. 25ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 26818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tangpublic final class GnssClock implements Parcelable { 272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa // The following enumerations must be in sync with the values declared in gps.h 282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 2976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_NO_FLAGS = 0; 3076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_LEAP_SECOND = (1<<0); 3176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_TIME_UNCERTAINTY = (1<<1); 3276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_FULL_BIAS = (1<<2); 3376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_BIAS = (1<<3); 3476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_BIAS_UNCERTAINTY = (1<<4); 3576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_DRIFT = (1<<5); 3676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private static final int HAS_DRIFT_UNCERTAINTY = (1<<6); 372102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 382102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa // End enumerations in sync with gps.h 392102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 4076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mFlags; 4176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mLeapSecond; 4276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private long mTimeNanos; 4376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mTimeUncertaintyNanos; 4476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private long mFullBiasNanos; 4576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mBiasNanos; 4676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mBiasUncertaintyNanos; 4776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mDriftNanosPerSecond; 4876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private double mDriftUncertaintyNanosPerSecond; 499363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang private int mHardwareClockDiscontinuityCount; 50ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 51818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang GnssClock() { 522102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 53ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 54ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 55ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 56ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets all contents to the values stored in the provided object. 57ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 58818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public void set(GnssClock clock) { 592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = clock.mFlags; 60ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mLeapSecond = clock.mLeapSecond; 6176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeNanos = clock.mTimeNanos; 6276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeUncertaintyNanos = clock.mTimeUncertaintyNanos; 6376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mFullBiasNanos = clock.mFullBiasNanos; 6476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasNanos = clock.mBiasNanos; 6576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasUncertaintyNanos = clock.mBiasUncertaintyNanos; 6676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftNanosPerSecond = clock.mDriftNanosPerSecond; 6776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftUncertaintyNanosPerSecond = clock.mDriftUncertaintyNanosPerSecond; 689363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mHardwareClockDiscontinuityCount = clock.mHardwareClockDiscontinuityCount; 69ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 70ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 71ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 72ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets all the contents to its original state. 73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 74ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void reset() { 752102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa initialize(); 762102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 77ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 782102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 79ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Returns true if {@link #getLeapSecond()} is available, false otherwise. 80ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 81ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public boolean hasLeapSecond() { 822102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_LEAP_SECOND); 83ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 84ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 85ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 86ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the leap second associated with the clock's time. 872102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The sign of the value is defined by the following equation: 882102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * utc_time_ns = time_ns + (full_bias_ns + bias_ns) - leap_second * 1,000,000,000 89ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 90ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * The value is only available if {@link #hasLeapSecond()} is true. 91ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getLeapSecond() { 93ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return mLeapSecond; 94ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 95ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 96ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 97ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the leap second associated with the clock's time. 98ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 9976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setLeapSecond(int leapSecond) { 1002102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_LEAP_SECOND); 101ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa mLeapSecond = leapSecond; 102ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 103ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 104ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 105ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the leap second associated with the clock's time. 106ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 107ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void resetLeapSecond() { 1082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_LEAP_SECOND); 10976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mLeapSecond = Integer.MIN_VALUE; 110ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 111ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 112ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 11338bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * Gets the GNSS receiver internal clock value in nanoseconds. 1142102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 1152102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * For 'local hardware clock' this value is expected to be monotonically increasing during the 1162102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * reporting session. The real GPS time can be derived by compensating 11776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * {@link #getFullBiasNanos()} (when it is available) from this value. 1182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 1192102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * For 'GPS time' this value is expected to be the best estimation of current GPS time that GPS 12076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * receiver can achieve. {@link #getTimeUncertaintyNanos()} should be available when GPS time is 1212102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * specified. 1222102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 12376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Sub-nanosecond accuracy can be provided by means of {@link #getBiasNanos()}. 12476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The reported time includes {@link #getTimeUncertaintyNanos()}. 125ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 12676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getTimeNanos() { 12776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mTimeNanos; 128ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 129ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 130ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 13176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Sets the GNSS receiver internal clock in nanoseconds. 132ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 13376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setTimeNanos(long timeNanos) { 13476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeNanos = timeNanos; 135ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 136ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 137ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 13876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getTimeUncertaintyNanos()} is available, false otherwise. 139ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 14076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasTimeUncertaintyNanos() { 1412102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_TIME_UNCERTAINTY); 142ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 143ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 144ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 145ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the clock's time Uncertainty (1-Sigma) in nanoseconds. 1462102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The uncertainty is represented as an absolute (single sided) value. 147ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 14876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The value is only available if {@link #hasTimeUncertaintyNanos()} is true. 149ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 15076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getTimeUncertaintyNanos() { 15176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mTimeUncertaintyNanos; 152ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 153ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 154ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 155ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the clock's Time Uncertainty (1-Sigma) in nanoseconds. 156ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 15776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setTimeUncertaintyNanos(double timeUncertaintyNanos) { 1582102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_TIME_UNCERTAINTY); 15976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeUncertaintyNanos = timeUncertaintyNanos; 160ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 161ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 162ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 163ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the clock's Time Uncertainty (1-Sigma) in nanoseconds. 164ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 16576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetTimeUncertaintyNanos() { 1662102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_TIME_UNCERTAINTY); 16776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeUncertaintyNanos = Double.NaN; 168ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 169ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 170ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 17176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getFullBiasNanos()} is available, false otherwise. 1722102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 17376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasFullBiasNanos() { 1742102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_FULL_BIAS); 1752102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 1762102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1772102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 17876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Gets the difference between hardware clock ({@link #getTimeNanos()}) inside GPS receiver and 1792102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * the true GPS time since 0000Z, January 6, 1980, in nanoseconds. 1802102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 18138bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * This value is available if the receiver has estimated GPS time. If the computed time is for a 18238bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * non-GPS constellation, the time offset of that constellation to GPS has to be applied to fill 18376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * this value. The value contains the 'bias uncertainty' {@link #getBiasUncertaintyNanos()} in 18438bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * it, and it should be used for quality check. The value is only available if 18576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * {@link #hasFullBiasNanos()} is true. 1862102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * 1872102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * The sign of the value is defined by the following equation: 18838bce7925c58fe585144f25ea6c954bab4f5da42Lifu Tang * local estimate of GPS time = time_ns + (full_bias_ns + bias_ns) 1892102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 19076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public long getFullBiasNanos() { 19176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mFullBiasNanos; 1922102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 1932102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 1942102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 1952102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the full bias in nanoseconds. 1962102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 19776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setFullBiasNanos(long value) { 1982102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_FULL_BIAS); 19976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mFullBiasNanos = value; 2002102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 2012102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 2022102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 2032102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Resets the full bias in nanoseconds. 2042102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa */ 20576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetFullBiasNanos() { 2062102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_FULL_BIAS); 20776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mFullBiasNanos = Long.MIN_VALUE; 2082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 2092102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 2102102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa /** 21176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getBiasNanos()} is available, false otherwise. 212ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 21376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasBiasNanos() { 2142102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_BIAS); 215ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 216ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 217ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 2182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Gets the clock's sub-nanosecond bias. 21976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The reported bias includes {@link #getBiasUncertaintyNanos()}. 220ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 22176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The value is only available if {@link #hasBiasNanos()} is true. 222ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 22376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getBiasNanos() { 22476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mBiasNanos; 225ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 226ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 227ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 2282102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa * Sets the sub-nanosecond bias. 229ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 23076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setBiasNanos(double biasNanos) { 2312102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_BIAS); 23276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasNanos = biasNanos; 233ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 234ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 235ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 236ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the clock's Bias in nanoseconds. 237ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 23876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetBiasNanos() { 2392102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_BIAS); 24076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasNanos = Double.NaN; 241ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 242ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 243ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 24476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getBiasUncertaintyNanos()} is available, false otherwise. 245ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 24676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasBiasUncertaintyNanos() { 2472102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_BIAS_UNCERTAINTY); 248ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 249ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 250ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 251ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the clock's Bias Uncertainty (1-Sigma) in nanoseconds. 252ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 25376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The value is only available if {@link #hasBiasUncertaintyNanos()} is true. 254ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 25576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getBiasUncertaintyNanos() { 25676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mBiasUncertaintyNanos; 257ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 258ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 259ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 260ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the clock's Bias Uncertainty (1-Sigma) in nanoseconds. 261ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 26276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setBiasUncertaintyNanos(double biasUncertaintyNanos) { 2632102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_BIAS_UNCERTAINTY); 26476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasUncertaintyNanos = biasUncertaintyNanos; 265ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 266ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 267ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 268ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the clock's Bias Uncertainty (1-Sigma) in nanoseconds. 269ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 27076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetBiasUncertaintyNanos() { 2712102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_BIAS_UNCERTAINTY); 27276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mBiasUncertaintyNanos = Double.NaN; 273ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 274ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 275ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 27676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getDriftNanosPerSecond()} is available, false otherwise. 277ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 27876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasDriftNanosPerSecond() { 2792102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_DRIFT); 280ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 281ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 282ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 283ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the clock's Drift in nanoseconds per second. 284ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * A positive value indicates that the frequency is higher than the nominal frequency. 28576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The reported drift includes {@link #getDriftUncertaintyNanosPerSecond()}. 286ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 28776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The value is only available if {@link #hasDriftNanosPerSecond()} is true. 288ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 28976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getDriftNanosPerSecond() { 29076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mDriftNanosPerSecond; 291ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 292ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 293ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 294ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the clock's Drift in nanoseconds per second. 295ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 29676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setDriftNanosPerSecond(double driftNanosPerSecond) { 2972102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_DRIFT); 29876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftNanosPerSecond = driftNanosPerSecond; 299ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 300ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 301ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 302ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the clock's Drift in nanoseconds per second. 303ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 30476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetDriftNanosPerSecond() { 3052102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_DRIFT); 30676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftNanosPerSecond = Double.NaN; 307ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 308ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 309ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 31076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * Returns true if {@link #getDriftUncertaintyNanosPerSecond()} is available, false otherwise. 311ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 31276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public boolean hasDriftUncertaintyNanosPerSecond() { 3132102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return isFlagSet(HAS_DRIFT_UNCERTAINTY); 314ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 315ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 316ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 317ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Gets the clock's Drift Uncertainty (1-Sigma) in nanoseconds per second. 318ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * 31976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang * The value is only available if {@link #hasDriftUncertaintyNanosPerSecond()} is true. 320ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 32176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public double getDriftUncertaintyNanosPerSecond() { 32276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang return mDriftUncertaintyNanosPerSecond; 323ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 324ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 325ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 326ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Sets the clock's Drift Uncertainty (1-Sigma) in nanoseconds per second. 327ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 32876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setDriftUncertaintyNanosPerSecond(double driftUncertaintyNanosPerSecond) { 3292102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa setFlag(HAS_DRIFT_UNCERTAINTY); 33076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftUncertaintyNanosPerSecond = driftUncertaintyNanosPerSecond; 331ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 332ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 333ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa /** 3349363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Gets count of last hardware clock discontinuity. 335e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang */ 3369363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang public int getHardwareClockDiscontinuityCount() { 3379363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return mHardwareClockDiscontinuityCount; 338e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang } 339e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang 340e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang /** 3419363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang * Sets count of last hardware clock discontinuity. 342e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang */ 3439363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang public void setHardwareClockDiscontinuityCount(int value) { 3449363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang mHardwareClockDiscontinuityCount = value; 345e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang } 346e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang 347e5a0e21b6fcba32e6d7486c5e7736d7d0348d55cLifu Tang /** 348ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Resets the clock's Drift Uncertainty (1-Sigma) in nanoseconds per second. 349ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */ 35076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void resetDriftUncertaintyNanosPerSecond() { 3512102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetFlag(HAS_DRIFT_UNCERTAINTY); 35276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mDriftUncertaintyNanosPerSecond = Double.NaN; 353ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 354ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 355818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public static final Creator<GnssClock> CREATOR = new Creator<GnssClock>() { 356ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 357818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssClock createFromParcel(Parcel parcel) { 358818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang GnssClock gpsClock = new GnssClock(); 359ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 36076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mFlags = parcel.readInt(); 36176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mLeapSecond = parcel.readInt(); 36276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mTimeNanos = parcel.readLong(); 36376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mTimeUncertaintyNanos = parcel.readDouble(); 36476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mFullBiasNanos = parcel.readLong(); 36576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mBiasNanos = parcel.readDouble(); 36676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mBiasUncertaintyNanos = parcel.readDouble(); 36776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mDriftNanosPerSecond = parcel.readDouble(); 36876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang gpsClock.mDriftUncertaintyNanosPerSecond = parcel.readDouble(); 3699363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang gpsClock.mHardwareClockDiscontinuityCount = parcel.readInt(); 370ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 371ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return gpsClock; 372ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 373ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 374ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 375818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssClock[] newArray(int size) { 376818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return new GnssClock[size]; 377ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 378ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa }; 379ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 3809363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang @Override 381ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public void writeToParcel(Parcel parcel, int flags) { 3822102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa parcel.writeInt(mFlags); 383ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa parcel.writeInt(mLeapSecond); 38476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mTimeNanos); 38576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mTimeUncertaintyNanos); 38676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeLong(mFullBiasNanos); 38776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mBiasNanos); 38876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mBiasUncertaintyNanos); 38976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mDriftNanosPerSecond); 39076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang parcel.writeDouble(mDriftUncertaintyNanosPerSecond); 3919363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang parcel.writeInt(mHardwareClockDiscontinuityCount); 392ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 393ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 394ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 395ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public int describeContents() { 396ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return 0; 397ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 398ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 399ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa @Override 400ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa public String toString() { 4012102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa final String format = " %-15s = %s\n"; 4022102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa final String formatWithUncertainty = " %-15s = %-25s %-26s = %s\n"; 403818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang StringBuilder builder = new StringBuilder("GnssClock:\n"); 404ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 4052102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format(format, "LeapSecond", hasLeapSecond() ? mLeapSecond : null)); 406ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 407ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 4082102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa formatWithUncertainty, 40976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "TimeNanos", 41076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mTimeNanos, 41176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "TimeUncertaintyNanos", 41276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasTimeUncertaintyNanos() ? mTimeUncertaintyNanos : null)); 413ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 414ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 415ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa format, 41676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "FullBiasNanos", 41776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasFullBiasNanos() ? mFullBiasNanos : null)); 4182102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 4192102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa builder.append(String.format( 4202102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa formatWithUncertainty, 42176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "BiasNanos", 42276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasBiasNanos() ? mBiasNanos : null, 42376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "BiasUncertaintyNanos", 42476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasBiasUncertaintyNanos() ? mBiasUncertaintyNanos : null)); 425ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 426ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa builder.append(String.format( 4272102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa formatWithUncertainty, 42876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "DriftNanosPerSecond", 42976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasDriftNanosPerSecond() ? mDriftNanosPerSecond : null, 43076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang "DriftUncertaintyNanosPerSecond", 43176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang hasDriftUncertaintyNanosPerSecond() ? mDriftUncertaintyNanosPerSecond : null)); 432ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa 433ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa return builder.toString(); 434ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa } 4352102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 4362102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa private void initialize() { 4372102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags = HAS_NO_FLAGS; 4382102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa resetLeapSecond(); 43976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang setTimeNanos(Long.MIN_VALUE); 44076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetTimeUncertaintyNanos(); 44176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetFullBiasNanos(); 44276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetBiasNanos(); 44376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetBiasUncertaintyNanos(); 44476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetDriftNanosPerSecond(); 44576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang resetDriftUncertaintyNanosPerSecond(); 4469363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang setHardwareClockDiscontinuityCount(Integer.MIN_VALUE); 4472102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 4482102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 44976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private void setFlag(int flag) { 4502102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags |= flag; 4512102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 4522102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 45376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private void resetFlag(int flag) { 4542102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa mFlags &= ~flag; 4552102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 4562102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa 45776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private boolean isFlagSet(int flag) { 4582102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa return (mFlags & flag) == flag; 4592102dd725540bcf51bf324a2775fbcffe45dd32fdestradaa } 460ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa} 461