Merge "Add inter-signal bias fields to GnssMeasurement and GnssClock"

This commit is contained in:
Yu-Han Yang
2020-01-23 20:35:28 +00:00
committed by Android (Google) Code Review
7 changed files with 550 additions and 77 deletions

View File

@@ -340,6 +340,7 @@ java_library {
"android.hardware.cas-V1.2-java",
"android.hardware.contexthub-V1.0-java",
"android.hardware.gnss-V1.0-java",
"android.hardware.gnss-V2.1-java",
"android.hardware.health-V1.0-java-constants",
"android.hardware.radio-V1.0-java",
"android.hardware.radio-V1.1-java",

View File

@@ -23390,6 +23390,9 @@ package android.location {
method public long getFullBiasNanos();
method public int getHardwareClockDiscontinuityCount();
method public int getLeapSecond();
method @FloatRange(from=0.0) public double getReferenceCarrierFrequencyHzForIsb();
method @NonNull public String getReferenceCodeTypeForIsb();
method public int getReferenceConstellationTypeForIsb();
method public long getTimeNanos();
method @FloatRange(from=0.0f) public double getTimeUncertaintyNanos();
method public boolean hasBiasNanos();
@@ -23400,6 +23403,9 @@ package android.location {
method public boolean hasElapsedRealtimeUncertaintyNanos();
method public boolean hasFullBiasNanos();
method public boolean hasLeapSecond();
method public boolean hasReferenceCarrierFrequencyHzForIsb();
method public boolean hasReferenceCodeTypeForIsb();
method public boolean hasReferenceConstellationTypeForIsb();
method public boolean hasTimeUncertaintyNanos();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssClock> CREATOR;
@@ -23424,6 +23430,10 @@ package android.location {
method public double getPseudorangeRateUncertaintyMetersPerSecond();
method public long getReceivedSvTimeNanos();
method public long getReceivedSvTimeUncertaintyNanos();
method public double getReceiverInterSignalBiasNanos();
method @FloatRange(from=0.0) public double getReceiverInterSignalBiasUncertaintyNanos();
method public double getSatelliteInterSignalBiasNanos();
method @FloatRange(from=0.0) public double getSatelliteInterSignalBiasUncertaintyNanos();
method public double getSnrInDb();
method public int getState();
method public int getSvid();
@@ -23435,6 +23445,10 @@ package android.location {
method @Deprecated public boolean hasCarrierPhase();
method @Deprecated public boolean hasCarrierPhaseUncertainty();
method public boolean hasCodeType();
method public boolean hasReceiverInterSignalBiasNanos();
method public boolean hasReceiverInterSignalBiasUncertaintyNanos();
method public boolean hasSatelliteInterSignalBiasNanos();
method public boolean hasSatelliteInterSignalBiasUncertaintyNanos();
method public boolean hasSnrInDb();
method public void writeToParcel(android.os.Parcel, int);
field public static final int ADR_STATE_CYCLE_SLIP = 4; // 0x4

View File

@@ -1187,6 +1187,9 @@ package android.location {
method public void resetElapsedRealtimeUncertaintyNanos();
method public void resetFullBiasNanos();
method public void resetLeapSecond();
method public void resetReferenceCarrierFrequencyHzForIsb();
method public void resetReferenceCodeTypeForIsb();
method public void resetReferenceConstellationTypeForIsb();
method public void resetTimeUncertaintyNanos();
method public void set(android.location.GnssClock);
method public void setBiasNanos(double);
@@ -1198,6 +1201,9 @@ package android.location {
method public void setFullBiasNanos(long);
method public void setHardwareClockDiscontinuityCount(int);
method public void setLeapSecond(int);
method public void setReferenceCarrierFrequencyHzForIsb(@FloatRange(from=0.0) double);
method public void setReferenceCodeTypeForIsb(@NonNull String);
method public void setReferenceConstellationTypeForIsb(int);
method public void setTimeNanos(long);
method public void setTimeUncertaintyNanos(@FloatRange(from=0.0f) double);
}
@@ -1212,6 +1218,10 @@ package android.location {
method @Deprecated public void resetCarrierPhase();
method @Deprecated public void resetCarrierPhaseUncertainty();
method public void resetCodeType();
method public void resetReceiverInterSignalBiasNanos();
method public void resetReceiverInterSignalBiasUncertaintyNanos();
method public void resetSatelliteInterSignalBiasNanos();
method public void resetSatelliteInterSignalBiasUncertaintyNanos();
method public void resetSnrInDb();
method public void set(android.location.GnssMeasurement);
method public void setAccumulatedDeltaRangeMeters(double);
@@ -1231,6 +1241,10 @@ package android.location {
method public void setPseudorangeRateUncertaintyMetersPerSecond(double);
method public void setReceivedSvTimeNanos(long);
method public void setReceivedSvTimeUncertaintyNanos(long);
method public void setReceiverInterSignalBiasNanos(double);
method public void setReceiverInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
method public void setSatelliteInterSignalBiasNanos(double);
method public void setSatelliteInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
method public void setSnrInDb(double);
method public void setState(int);
method public void setSvid(int);

View File

@@ -406,7 +406,13 @@ GetterSetterNames: android.location.GnssClock#setElapsedRealtimeUncertaintyNanos
GetterSetterNames: android.location.GnssClock#setFullBiasNanos(long):
GetterSetterNames: android.location.GnssClock#setLeapSecond(int):
GetterSetterNames: android.location.GnssClock#setReferenceConstellationTypeForIsb(int):
GetterSetterNames: android.location.GnssClock#setReferenceCarrierFrequencyHzForIsb(double):
GetterSetterNames: android.location.GnssClock#setReferenceCodeTypeForIsb(String):
GetterSetterNames: android.location.GnssClock#setTimeUncertaintyNanos(double):
GetterSetterNames: android.location.GnssMeasurement#setBasebandCn0DbHz(double):
@@ -414,7 +420,15 @@ GetterSetterNames: android.location.GnssMeasurement#setBasebandCn0DbHz(double):
GetterSetterNames: android.location.GnssMeasurement#setCarrierFrequencyHz(float):
GetterSetterNames: android.location.GnssMeasurement#setCodeType(String):
GetterSetterNames: android.location.GnssMeasurement#setReceiverInterSignalBiasNanos(double):
GetterSetterNames: android.location.GnssMeasurement#setReceiverInterSignalBiasUncertaintyNanos(double):
GetterSetterNames: android.location.GnssMeasurement#setSatelliteInterSignalBiasNanos(double):
GetterSetterNames: android.location.GnssMeasurement#setSatelliteInterSignalBiasUncertaintyNanos(double):
GetterSetterNames: android.location.GnssMeasurement#setSnrInDb(double):
GetterSetterNames: android.location.LocationRequest#isLocationSettingsIgnored():

View File

@@ -17,6 +17,7 @@
package android.location;
import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -39,6 +40,9 @@ public final class GnssClock implements Parcelable {
private static final int HAS_DRIFT_UNCERTAINTY = (1<<6);
private static final int HAS_ELAPSED_REALTIME_NANOS = (1 << 7);
private static final int HAS_ELAPSED_REALTIME_UNCERTAINTY_NANOS = (1 << 8);
private static final int HAS_REFERENCE_CONSTELLATION_TYPE_FOR_ISB = (1 << 9);
private static final int HAS_REFERENCE_CARRIER_FREQUENCY_FOR_ISB = (1 << 10);
private static final int HAS_REFERENCE_CODE_TYPE_FOR_ISB = (1 << 11);
// End enumerations in sync with gps.h
@@ -54,6 +58,9 @@ public final class GnssClock implements Parcelable {
private int mHardwareClockDiscontinuityCount;
private long mElapsedRealtimeNanos;
private double mElapsedRealtimeUncertaintyNanos;
private int mReferenceConstellationTypeForIsb;
private double mReferenceCarrierFrequencyHzForIsb;
private String mReferenceCodeTypeForIsb;
/**
* @hide
@@ -81,6 +88,9 @@ public final class GnssClock implements Parcelable {
mHardwareClockDiscontinuityCount = clock.mHardwareClockDiscontinuityCount;
mElapsedRealtimeNanos = clock.mElapsedRealtimeNanos;
mElapsedRealtimeUncertaintyNanos = clock.mElapsedRealtimeUncertaintyNanos;
mReferenceConstellationTypeForIsb = clock.mReferenceConstellationTypeForIsb;
mReferenceCarrierFrequencyHzForIsb = clock.mReferenceCarrierFrequencyHzForIsb;
mReferenceCodeTypeForIsb = clock.mReferenceCodeTypeForIsb;
}
/**
@@ -196,7 +206,6 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetTimeUncertaintyNanos() {
resetFlag(HAS_TIME_UNCERTAINTY);
mTimeUncertaintyNanos = Double.NaN;
}
/**
@@ -286,7 +295,6 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetBiasNanos() {
resetFlag(HAS_BIAS);
mBiasNanos = Double.NaN;
}
/**
@@ -327,7 +335,6 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetBiasUncertaintyNanos() {
resetFlag(HAS_BIAS_UNCERTAINTY);
mBiasUncertaintyNanos = Double.NaN;
}
/**
@@ -371,7 +378,6 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetDriftNanosPerSecond() {
resetFlag(HAS_DRIFT);
mDriftNanosPerSecond = Double.NaN;
}
/**
@@ -411,7 +417,6 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetDriftUncertaintyNanosPerSecond() {
resetFlag(HAS_DRIFT_UNCERTAINTY);
mDriftUncertaintyNanosPerSecond = Double.NaN;
}
/**
@@ -495,7 +500,128 @@ public final class GnssClock implements Parcelable {
@TestApi
public void resetElapsedRealtimeUncertaintyNanos() {
resetFlag(HAS_ELAPSED_REALTIME_UNCERTAINTY_NANOS);
mElapsedRealtimeUncertaintyNanos = Double.NaN;
}
/**
* Returns {@code true} if {@link #getReferenceConstellationTypeForIsb()} is available,
* {@code false} otherwise.
*/
public boolean hasReferenceConstellationTypeForIsb() {
return isFlagSet(HAS_REFERENCE_CONSTELLATION_TYPE_FOR_ISB);
}
/**
* Returns the reference constellation type for inter-signal bias.
*
* <p>The value is only available if {@link #hasReferenceConstellationTypeForIsb()} is
* {@code true}.
*
* <p>The return value is one of those constants with {@code CONSTELLATION_} prefix in
* {@link GnssStatus}.
*/
@GnssStatus.ConstellationType
public int getReferenceConstellationTypeForIsb() {
return mReferenceConstellationTypeForIsb;
}
/**
* Sets the reference constellation type for inter-signal bias.
* @hide
*/
@TestApi
public void setReferenceConstellationTypeForIsb(@GnssStatus.ConstellationType int value) {
setFlag(HAS_REFERENCE_CONSTELLATION_TYPE_FOR_ISB);
mReferenceConstellationTypeForIsb = value;
}
/**
* Resets the reference constellation type for inter-signal bias.
* @hide
*/
@TestApi
public void resetReferenceConstellationTypeForIsb() {
resetFlag(HAS_REFERENCE_CONSTELLATION_TYPE_FOR_ISB);
mReferenceConstellationTypeForIsb = GnssStatus.CONSTELLATION_UNKNOWN;
}
/**
* Returns {@code true} if {@link #getReferenceCarrierFrequencyHzForIsb()} is available, {@code
* false} otherwise.
*/
public boolean hasReferenceCarrierFrequencyHzForIsb() {
return isFlagSet(HAS_REFERENCE_CARRIER_FREQUENCY_FOR_ISB);
}
/**
* Returns the reference carrier frequency in Hz for inter-signal bias.
*
* <p>The value is only available if {@link #hasReferenceCarrierFrequencyHzForIsb()} is
* {@code true}.
*/
@FloatRange(from = 0.0)
public double getReferenceCarrierFrequencyHzForIsb() {
return mReferenceCarrierFrequencyHzForIsb;
}
/**
* Sets the reference carrier frequency in Hz for inter-signal bias.
* @hide
*/
@TestApi
public void setReferenceCarrierFrequencyHzForIsb(@FloatRange(from = 0.0) double value) {
setFlag(HAS_REFERENCE_CARRIER_FREQUENCY_FOR_ISB);
mReferenceCarrierFrequencyHzForIsb = value;
}
/**
* Resets the reference carrier frequency in Hz for inter-signal bias.
* @hide
*/
@TestApi
public void resetReferenceCarrierFrequencyHzForIsb() {
resetFlag(HAS_REFERENCE_CARRIER_FREQUENCY_FOR_ISB);
}
/**
* Returns {@code true} if {@link #getReferenceCodeTypeForIsb()} is available, {@code
* false} otherwise.
*/
public boolean hasReferenceCodeTypeForIsb() {
return isFlagSet(HAS_REFERENCE_CODE_TYPE_FOR_ISB);
}
/**
* Returns the reference code type for inter-signal bias.
*
* <p>The value is only available if {@link #hasReferenceCodeTypeForIsb()} is
* {@code true}.
*
* <p>The return value is one of those constants defined in
* {@link GnssMeasurement#getCodeType()}.
*/
@NonNull
public String getReferenceCodeTypeForIsb() {
return mReferenceCodeTypeForIsb;
}
/**
* Sets the reference code type for inter-signal bias.
* @hide
*/
@TestApi
public void setReferenceCodeTypeForIsb(@NonNull String codeType) {
setFlag(HAS_REFERENCE_CODE_TYPE_FOR_ISB);
mReferenceCodeTypeForIsb = codeType;
}
/**
* Resets the reference code type for inter-signal bias.
* @hide
*/
@TestApi
public void resetReferenceCodeTypeForIsb() {
resetFlag(HAS_REFERENCE_CODE_TYPE_FOR_ISB);
mReferenceCodeTypeForIsb = "UNKNOWN";
}
/**
@@ -543,6 +669,9 @@ public final class GnssClock implements Parcelable {
gpsClock.mHardwareClockDiscontinuityCount = parcel.readInt();
gpsClock.mElapsedRealtimeNanos = parcel.readLong();
gpsClock.mElapsedRealtimeUncertaintyNanos = parcel.readDouble();
gpsClock.mReferenceConstellationTypeForIsb = parcel.readInt();
gpsClock.mReferenceCarrierFrequencyHzForIsb = parcel.readDouble();
gpsClock.mReferenceCodeTypeForIsb = parcel.readString();
return gpsClock;
}
@@ -567,6 +696,9 @@ public final class GnssClock implements Parcelable {
parcel.writeInt(mHardwareClockDiscontinuityCount);
parcel.writeLong(mElapsedRealtimeNanos);
parcel.writeDouble(mElapsedRealtimeUncertaintyNanos);
parcel.writeInt(mReferenceConstellationTypeForIsb);
parcel.writeDouble(mReferenceCarrierFrequencyHzForIsb);
parcel.writeString(mReferenceCodeTypeForIsb);
}
@Override
@@ -580,7 +712,9 @@ public final class GnssClock implements Parcelable {
final String formatWithUncertainty = " %-15s = %-25s %-26s = %s\n";
StringBuilder builder = new StringBuilder("GnssClock:\n");
builder.append(String.format(format, "LeapSecond", hasLeapSecond() ? mLeapSecond : null));
if (hasLeapSecond()) {
builder.append(String.format(format, "LeapSecond", mLeapSecond));
}
builder.append(String.format(
formatWithUncertainty,
@@ -589,39 +723,57 @@ public final class GnssClock implements Parcelable {
"TimeUncertaintyNanos",
hasTimeUncertaintyNanos() ? mTimeUncertaintyNanos : null));
builder.append(String.format(
format,
"FullBiasNanos",
hasFullBiasNanos() ? mFullBiasNanos : null));
if (hasFullBiasNanos()) {
builder.append(String.format(format, "FullBiasNanos", mFullBiasNanos));
}
builder.append(String.format(
formatWithUncertainty,
"BiasNanos",
hasBiasNanos() ? mBiasNanos : null,
"BiasUncertaintyNanos",
hasBiasUncertaintyNanos() ? mBiasUncertaintyNanos : null));
if (hasBiasNanos() || hasBiasUncertaintyNanos()) {
builder.append(String.format(
formatWithUncertainty,
"BiasNanos",
hasBiasNanos() ? mBiasNanos : null,
"BiasUncertaintyNanos",
hasBiasUncertaintyNanos() ? mBiasUncertaintyNanos : null));
}
builder.append(String.format(
formatWithUncertainty,
"DriftNanosPerSecond",
hasDriftNanosPerSecond() ? mDriftNanosPerSecond : null,
"DriftUncertaintyNanosPerSecond",
hasDriftUncertaintyNanosPerSecond() ? mDriftUncertaintyNanosPerSecond : null));
if (hasDriftNanosPerSecond() || hasDriftUncertaintyNanosPerSecond()) {
builder.append(String.format(
formatWithUncertainty,
"DriftNanosPerSecond",
hasDriftNanosPerSecond() ? mDriftNanosPerSecond : null,
"DriftUncertaintyNanosPerSecond",
hasDriftUncertaintyNanosPerSecond() ? mDriftUncertaintyNanosPerSecond : null));
}
builder.append(String.format(
format,
"HardwareClockDiscontinuityCount",
mHardwareClockDiscontinuityCount));
builder.append(String.format(
format,
"ElapsedRealtimeNanos",
hasElapsedRealtimeNanos() ? mElapsedRealtimeNanos : null));
if (hasElapsedRealtimeNanos() || hasElapsedRealtimeUncertaintyNanos()) {
builder.append(String.format(
formatWithUncertainty,
"ElapsedRealtimeNanos",
hasElapsedRealtimeNanos() ? mElapsedRealtimeNanos : null,
"ElapsedRealtimeUncertaintyNanos",
hasElapsedRealtimeUncertaintyNanos() ? mElapsedRealtimeUncertaintyNanos
: null));
}
builder.append(String.format(
format,
"ElapsedRealtimeUncertaintyNanos",
hasElapsedRealtimeUncertaintyNanos() ? mElapsedRealtimeUncertaintyNanos : null));
if (hasReferenceConstellationTypeForIsb()) {
builder.append(String.format(format, "ReferenceConstellationTypeForIsb",
mReferenceConstellationTypeForIsb));
}
if (hasReferenceCarrierFrequencyHzForIsb()) {
builder.append(String.format(format, "ReferenceCarrierFrequencyHzForIsb",
mReferenceCarrierFrequencyHzForIsb));
}
if (hasReferenceCodeTypeForIsb()) {
builder.append(
String.format(format, "ReferenceCodeTypeForIsb", mReferenceCodeTypeForIsb));
}
return builder.toString();
}
@@ -639,6 +791,9 @@ public final class GnssClock implements Parcelable {
setHardwareClockDiscontinuityCount(Integer.MIN_VALUE);
resetElapsedRealtimeNanos();
resetElapsedRealtimeUncertaintyNanos();
resetReferenceConstellationTypeForIsb();
resetReferenceCarrierFrequencyHzForIsb();
resetReferenceCodeTypeForIsb();
}
private void setFlag(int flag) {

View File

@@ -16,11 +16,21 @@
package android.location;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_AUTOMATIC_GAIN_CONTROL;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_CARRIER_CYCLES;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_CARRIER_FREQUENCY;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_CARRIER_PHASE;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_CARRIER_PHASE_UNCERTAINTY;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_RECEIVER_ISB;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_RECEIVER_ISB_UNCERTAINTY;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_SATELLITE_ISB;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_SATELLITE_ISB_UNCERTAINTY;
import static android.hardware.gnss.V2_1.IGnssMeasurementCallback.GnssMeasurementFlags.HAS_SNR;
import android.annotation.FloatRange;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.hardware.gnss.V1_0.IGnssMeasurementCallback.GnssMeasurementFlags;
import android.os.Parcel;
import android.os.Parcelable;
@@ -53,19 +63,14 @@ public final class GnssMeasurement implements Parcelable {
private double mSnrInDb;
private double mAutomaticGainControlLevelInDb;
@NonNull private String mCodeType;
private double mReceiverInterSignalBiasNanos;
private double mReceiverInterSignalBiasUncertaintyNanos;
private double mSatelliteInterSignalBiasNanos;
private double mSatelliteInterSignalBiasUncertaintyNanos;
// The following enumerations must be in sync with the values declared in GNSS HAL.
private static final int HAS_NO_FLAGS = 0;
private static final int HAS_SNR = GnssMeasurementFlags.HAS_SNR;
private static final int HAS_CARRIER_FREQUENCY = GnssMeasurementFlags.HAS_CARRIER_FREQUENCY;
private static final int HAS_CARRIER_CYCLES = GnssMeasurementFlags.HAS_CARRIER_CYCLES;
private static final int HAS_CARRIER_PHASE = GnssMeasurementFlags.HAS_CARRIER_PHASE;
private static final int HAS_CARRIER_PHASE_UNCERTAINTY =
GnssMeasurementFlags.HAS_CARRIER_PHASE_UNCERTAINTY;
private static final int HAS_AUTOMATIC_GAIN_CONTROL =
GnssMeasurementFlags.HAS_AUTOMATIC_GAIN_CONTROL;
private static final int HAS_CODE_TYPE = (1 << 14);
private static final int HAS_BASEBAND_CN0 = (1 << 15);
@@ -263,6 +268,12 @@ public final class GnssMeasurement implements Parcelable {
mSnrInDb = measurement.mSnrInDb;
mAutomaticGainControlLevelInDb = measurement.mAutomaticGainControlLevelInDb;
mCodeType = measurement.mCodeType;
mReceiverInterSignalBiasNanos = measurement.mReceiverInterSignalBiasNanos;
mReceiverInterSignalBiasUncertaintyNanos =
measurement.mReceiverInterSignalBiasUncertaintyNanos;
mSatelliteInterSignalBiasNanos = measurement.mSatelliteInterSignalBiasNanos;
mSatelliteInterSignalBiasUncertaintyNanos =
measurement.mSatelliteInterSignalBiasUncertaintyNanos;
}
/**
@@ -838,7 +849,6 @@ public final class GnssMeasurement implements Parcelable {
@TestApi
public void resetBasebandCn0DbHz() {
resetFlag(HAS_BASEBAND_CN0);
mBasebandCn0DbHz = Double.NaN;
}
/**
@@ -1169,7 +1179,6 @@ public final class GnssMeasurement implements Parcelable {
@Deprecated
public void resetCarrierPhase() {
resetFlag(HAS_CARRIER_PHASE);
mCarrierPhase = Double.NaN;
}
/**
@@ -1224,7 +1233,6 @@ public final class GnssMeasurement implements Parcelable {
@Deprecated
public void resetCarrierPhaseUncertainty() {
resetFlag(HAS_CARRIER_PHASE_UNCERTAINTY);
mCarrierPhaseUncertainty = Double.NaN;
}
/**
@@ -1295,7 +1303,6 @@ public final class GnssMeasurement implements Parcelable {
@TestApi
public void resetSnrInDb() {
resetFlag(HAS_SNR);
mSnrInDb = Double.NaN;
}
/**
@@ -1343,7 +1350,6 @@ public final class GnssMeasurement implements Parcelable {
@TestApi
public void resetAutomaticGainControlLevel() {
resetFlag(HAS_AUTOMATIC_GAIN_CONTROL);
mAutomaticGainControlLevelInDb = Double.NaN;
}
/**
@@ -1428,7 +1434,200 @@ public final class GnssMeasurement implements Parcelable {
mCodeType = "UNKNOWN";
}
public static final @android.annotation.NonNull Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() {
/**
* Returns {@code true} if {@link #getReceiverInterSignalBiasNanos()} is available,
* {@code false} otherwise.
*/
public boolean hasReceiverInterSignalBiasNanos() {
return isFlagSet(HAS_RECEIVER_ISB);
}
/**
* Gets the GNSS measurement's receiver inter-signal bias in nanoseconds with sub-nanosecond
* accuracy.
*
* <p>This value is the estimated receiver-side inter-system (different from the
* constellation in {@link GnssClock#getReferenceConstellationTypeForIsb()} bias and
* inter-frequency (different from the carrier frequency in
* {@link GnssClock#getReferenceCarrierFrequencyHzForIsb()}) bias. The reported receiver
* inter-signal bias must include signal delays caused by:
*
* <ul>
* <li>Receiver inter-constellation bias</li>
* <li>Receiver inter-frequency bias</li>
* <li>Receiver inter-code bias</li>
* </ul>
*
* <p>The value does not include the inter-frequency Ionospheric bias.
*
* <p>The value is only available if {@link #hasReceiverInterSignalBiasNanos()} is {@code true}.
*/
public double getReceiverInterSignalBiasNanos() {
return mReceiverInterSignalBiasNanos;
}
/**
* Sets the GNSS measurement's receiver inter-signal bias in nanoseconds.
*
* @hide
*/
@TestApi
public void setReceiverInterSignalBiasNanos(double receiverInterSignalBiasNanos) {
setFlag(HAS_RECEIVER_ISB);
mReceiverInterSignalBiasNanos = receiverInterSignalBiasNanos;
}
/**
* Resets the GNSS measurement's receiver inter-signal bias in nanoseconds.
*
* @hide
*/
@TestApi
public void resetReceiverInterSignalBiasNanos() {
resetFlag(HAS_RECEIVER_ISB);
}
/**
* Returns {@code true} if {@link #getReceiverInterSignalBiasUncertaintyNanos()} is available,
* {@code false} otherwise.
*/
public boolean hasReceiverInterSignalBiasUncertaintyNanos() {
return isFlagSet(HAS_RECEIVER_ISB_UNCERTAINTY);
}
/**
* Gets the GNSS measurement's receiver inter-signal bias uncertainty (1 sigma) in
* nanoseconds with sub-nanosecond accuracy.
*
* <p>The value is only available if {@link #hasReceiverInterSignalBiasUncertaintyNanos()} is
* {@code true}.
*/
@FloatRange(from = 0.0)
public double getReceiverInterSignalBiasUncertaintyNanos() {
return mReceiverInterSignalBiasUncertaintyNanos;
}
/**
* Sets the GNSS measurement's receiver inter-signal bias uncertainty (1 sigma) in nanoseconds.
*
* @hide
*/
@TestApi
public void setReceiverInterSignalBiasUncertaintyNanos(@FloatRange(from = 0.0)
double receiverInterSignalBiasUncertaintyNanos) {
setFlag(HAS_RECEIVER_ISB_UNCERTAINTY);
mReceiverInterSignalBiasUncertaintyNanos = receiverInterSignalBiasUncertaintyNanos;
}
/**
* Resets the GNSS measurement's receiver inter-signal bias uncertainty (1 sigma) in
* nanoseconds.
*
* @hide
*/
@TestApi
public void resetReceiverInterSignalBiasUncertaintyNanos() {
resetFlag(HAS_RECEIVER_ISB_UNCERTAINTY);
}
/**
* Returns {@code true} if {@link #getSatelliteInterSignalBiasNanos()} is available,
* {@code false} otherwise.
*/
public boolean hasSatelliteInterSignalBiasNanos() {
return isFlagSet(HAS_SATELLITE_ISB);
}
/**
* Gets the GNSS measurement's satellite inter-signal bias in nanoseconds with sub-nanosecond
* accuracy.
*
* <p>This value is the satellite-and-control-segment-side inter-system (different from the
* constellation in {@link GnssClock#getReferenceConstellationTypeForIsb()}) bias and
* inter-frequency (different from the carrier frequency in
* {@link GnssClock#getReferenceCarrierFrequencyHzForIsb()}) bias, including:
*
* <ul>
* <li>Master clock bias (e.g., GPS-GAL Time Offset (GGTO), GPT-UTC Time Offset (TauGps),
* BDS-GLO Time Offset (BGTO))</li>
* <li>Group delay (e.g., Total Group Delay (TGD))</li>
* <li>Satellite inter-signal bias, which includes satellite inter-frequency bias (GLO only),
* and satellite inter-code bias (e.g., Differential Code Bias (DCB)).</li>
* </ul>
*
* <p>The value is only available if {@link #hasSatelliteInterSignalBiasNanos()} is {@code
* true}.
*/
public double getSatelliteInterSignalBiasNanos() {
return mSatelliteInterSignalBiasNanos;
}
/**
* Sets the GNSS measurement's satellite inter-signal bias in nanoseconds.
*
* @hide
*/
@TestApi
public void setSatelliteInterSignalBiasNanos(double satelliteInterSignalBiasNanos) {
setFlag(HAS_SATELLITE_ISB);
mSatelliteInterSignalBiasNanos = satelliteInterSignalBiasNanos;
}
/**
* Resets the GNSS measurement's satellite inter-signal bias in nanoseconds.
*
* @hide
*/
@TestApi
public void resetSatelliteInterSignalBiasNanos() {
resetFlag(HAS_SATELLITE_ISB);
}
/**
* Returns {@code true} if {@link #getSatelliteInterSignalBiasUncertaintyNanos()} is available,
* {@code false} otherwise.
*/
public boolean hasSatelliteInterSignalBiasUncertaintyNanos() {
return isFlagSet(HAS_SATELLITE_ISB_UNCERTAINTY);
}
/**
* Gets the GNSS measurement's satellite inter-signal bias uncertainty (1 sigma) in
* nanoseconds with sub-nanosecond accuracy.
*
* <p>The value is only available if {@link #hasSatelliteInterSignalBiasUncertaintyNanos()} is
* {@code true}.
*/
@FloatRange(from = 0.0)
public double getSatelliteInterSignalBiasUncertaintyNanos() {
return mSatelliteInterSignalBiasUncertaintyNanos;
}
/**
* Sets the GNSS measurement's satellite inter-signal bias uncertainty (1 sigma) in nanoseconds.
*
* @hide
*/
@TestApi
public void setSatelliteInterSignalBiasUncertaintyNanos(@FloatRange(from = 0.0)
double satelliteInterSignalBiasUncertaintyNanos) {
setFlag(HAS_SATELLITE_ISB_UNCERTAINTY);
mSatelliteInterSignalBiasUncertaintyNanos = satelliteInterSignalBiasUncertaintyNanos;
}
/**
* Resets the GNSS measurement's satellite inter-signal bias uncertainty (1 sigma) in
* nanoseconds.
*
* @hide
*/
@TestApi
public void resetSatelliteInterSignalBiasUncertaintyNanos() {
resetFlag(HAS_SATELLITE_ISB_UNCERTAINTY);
}
public static final @NonNull Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() {
@Override
public GnssMeasurement createFromParcel(Parcel parcel) {
GnssMeasurement gnssMeasurement = new GnssMeasurement();
@@ -1455,6 +1654,10 @@ public final class GnssMeasurement implements Parcelable {
gnssMeasurement.mAutomaticGainControlLevelInDb = parcel.readDouble();
gnssMeasurement.mCodeType = parcel.readString();
gnssMeasurement.mBasebandCn0DbHz = parcel.readDouble();
gnssMeasurement.mReceiverInterSignalBiasNanos = parcel.readDouble();
gnssMeasurement.mReceiverInterSignalBiasUncertaintyNanos = parcel.readDouble();
gnssMeasurement.mSatelliteInterSignalBiasNanos = parcel.readDouble();
gnssMeasurement.mSatelliteInterSignalBiasUncertaintyNanos = parcel.readDouble();
return gnssMeasurement;
}
@@ -1489,6 +1692,10 @@ public final class GnssMeasurement implements Parcelable {
parcel.writeDouble(mAutomaticGainControlLevelInDb);
parcel.writeString(mCodeType);
parcel.writeDouble(mBasebandCn0DbHz);
parcel.writeDouble(mReceiverInterSignalBiasNanos);
parcel.writeDouble(mReceiverInterSignalBiasUncertaintyNanos);
parcel.writeDouble(mSatelliteInterSignalBiasNanos);
parcel.writeDouble(mSatelliteInterSignalBiasUncertaintyNanos);
}
@Override
@@ -1517,8 +1724,9 @@ public final class GnssMeasurement implements Parcelable {
builder.append(String.format(format, "Cn0DbHz", mCn0DbHz));
builder.append(String.format(format, "BasebandCn0DbHz",
hasBasebandCn0DbHz() ? mBasebandCn0DbHz : null));
if (hasBasebandCn0DbHz()) {
builder.append(String.format(format, "BasebandCn0DbHz", mBasebandCn0DbHz));
}
builder.append(String.format(
formatWithUncertainty,
@@ -1539,37 +1747,57 @@ public final class GnssMeasurement implements Parcelable {
"AccumulatedDeltaRangeUncertaintyMeters",
mAccumulatedDeltaRangeUncertaintyMeters));
builder.append(String.format(
format,
"CarrierFrequencyHz",
hasCarrierFrequencyHz() ? mCarrierFrequencyHz : null));
if (hasCarrierFrequencyHz()) {
builder.append(String.format(format, "CarrierFrequencyHz", mCarrierFrequencyHz));
}
builder.append(String.format(
format,
"CarrierCycles",
hasCarrierCycles() ? mCarrierCycles : null));
if (hasCarrierCycles()) {
builder.append(String.format(format, "CarrierCycles", mCarrierCycles));
}
builder.append(String.format(
formatWithUncertainty,
"CarrierPhase",
hasCarrierPhase() ? mCarrierPhase : null,
"CarrierPhaseUncertainty",
hasCarrierPhaseUncertainty() ? mCarrierPhaseUncertainty : null));
if (hasCarrierPhase() || hasCarrierPhaseUncertainty()) {
builder.append(String.format(
formatWithUncertainty,
"CarrierPhase",
hasCarrierPhase() ? mCarrierPhase : null,
"CarrierPhaseUncertainty",
hasCarrierPhaseUncertainty() ? mCarrierPhaseUncertainty : null));
}
builder.append(String.format(format, "MultipathIndicator", getMultipathIndicatorString()));
builder.append(String.format(
format,
"SnrInDb",
hasSnrInDb() ? mSnrInDb : null));
builder.append(String.format(
format,
"AgcLevelDb",
hasAutomaticGainControlLevelDb() ? mAutomaticGainControlLevelInDb : null));
builder.append(String.format(
format,
"CodeType",
hasCodeType() ? mCodeType : null));
if (hasSnrInDb()) {
builder.append(String.format(format, "SnrInDb", mSnrInDb));
}
if (hasAutomaticGainControlLevelDb()) {
builder.append(String.format(format, "AgcLevelDb", mAutomaticGainControlLevelInDb));
}
if (hasCodeType()) {
builder.append(String.format(format, "CodeType", mCodeType));
}
if (hasReceiverInterSignalBiasNanos() || hasReceiverInterSignalBiasUncertaintyNanos()) {
builder.append(String.format(
formatWithUncertainty,
"ReceiverInterSignalBiasNs",
hasReceiverInterSignalBiasNanos() ? mReceiverInterSignalBiasNanos : null,
"ReceiverInterSignalBiasUncertaintyNs",
hasReceiverInterSignalBiasUncertaintyNanos()
? mReceiverInterSignalBiasUncertaintyNanos : null));
}
if (hasSatelliteInterSignalBiasNanos() || hasSatelliteInterSignalBiasUncertaintyNanos()) {
builder.append(String.format(
formatWithUncertainty,
"SatelliteInterSignalBiasNs",
hasSatelliteInterSignalBiasNanos() ? mSatelliteInterSignalBiasNanos : null,
"SatelliteInterSignalBiasUncertaintyNs",
hasSatelliteInterSignalBiasUncertaintyNanos()
? mSatelliteInterSignalBiasUncertaintyNanos
: null));
}
return builder.toString();
}
@@ -1596,6 +1824,10 @@ public final class GnssMeasurement implements Parcelable {
resetAutomaticGainControlLevel();
resetCodeType();
resetBasebandCn0DbHz();
resetReceiverInterSignalBiasNanos();
resetReceiverInterSignalBiasUncertaintyNanos();
resetSatelliteInterSignalBiasNanos();
resetSatelliteInterSignalBiasUncertaintyNanos();
}
private void setFlag(int flag) {

View File

@@ -1208,6 +1208,22 @@ void GnssMeasurementCallback::translateSingleGnssMeasurement
translateSingleGnssMeasurement(&(measurement_V2_1->v2_0), object);
SET(BasebandCn0DbHz, measurement_V2_1->basebandCN0DbHz);
if (measurement_V2_1->flags & GnssMeasurementFlags::HAS_RECEIVER_ISB) {
SET(ReceiverInterSignalBiasNs, measurement_V2_1->receiverInterSignalBiasNs);
}
if (measurement_V2_1->flags & GnssMeasurementFlags::HAS_RECEIVER_ISB_UNCERTAINTY) {
SET(ReceiverInterSignalBiasUncertaintyNs, measurement_V2_1->receiverInterSignalBiasUncertaintyNs);
}
if (measurement_V2_1->flags & GnssMeasurementFlags::HAS_SATELLITE_ISB) {
SET(SatelliteInterSignalBiasNs, measurement_V2_1->satelliteInterSignalBiasNs);
}
if (measurement_V2_1->flags & GnssMeasurementFlags::HAS_SATELLITE_ISB_UNCERTAINTY) {
SET(SatelliteInterSignalBiasUncertaintyNs, measurement_V2_1->satelliteInterSignalBiasUncertaintyNs);
}
}
template<class T>
@@ -1251,6 +1267,19 @@ void GnssMeasurementCallback::translateGnssClock(
SET(HardwareClockDiscontinuityCount, clock.hwClockDiscontinuityCount);
}
template<>
void GnssMeasurementCallback::translateGnssClock(
JavaObject& object, const IGnssMeasurementCallback_V2_1::GnssClock& clock) {
JNIEnv* env = getJniEnv();
SET(ReferenceConstellationTypeForIsb,
static_cast<int32_t>(clock.referenceSignalTypeForIsb.constellation));
SET(ReferenceCarrierFrequencyHzForIsb, clock.referenceSignalTypeForIsb.carrierFrequencyHz);
SET(ReferenceCodeTypeForIsb,
env->NewStringUTF(clock.referenceSignalTypeForIsb.codeType.c_str()));
translateGnssClock(object, clock.v1_0);
}
template<>
void GnssMeasurementCallback::translateGnssClock(
JavaObject& object, const IGnssMeasurementCallback_V2_0::GnssData& data) {
@@ -1265,6 +1294,20 @@ void GnssMeasurementCallback::translateGnssClock(
translateGnssClock(object, data.clock);
}
template<>
void GnssMeasurementCallback::translateGnssClock(
JavaObject& object, const IGnssMeasurementCallback_V2_1::GnssData& data) {
auto elapsedRealtime = data.elapsedRealtime;
uint16_t flags = static_cast<uint16_t>(elapsedRealtime.flags);
if (flags & ElapsedRealtimeFlags::HAS_TIMESTAMP_NS) {
SET(ElapsedRealtimeNanos, static_cast<uint64_t>(elapsedRealtime.timestampNs));
}
if (flags & ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS) {
SET(ElapsedRealtimeUncertaintyNanos, static_cast<double>(elapsedRealtime.timeUncertaintyNs));
}
translateGnssClock(object, data.clock);
}
template<class T>
jobjectArray GnssMeasurementCallback::translateAllGnssMeasurements(JNIEnv* env,
const T* measurements,