summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yu-Han Yang <yuhany@google.com> 2022-01-20 11:01:52 -0800
committer Yu-Han Yang <yuhany@google.com> 2022-01-24 14:41:12 -0800
commite088750093c2aeefb1ab80a47c7ecffe0c25c341 (patch)
tree00b171199b803ee98ce707627369e829c2d4c360
parentdbbc6fc44b61bdee5a47fecc020c2dd870faab85 (diff)
Add ephSource, toc, toe, IODC, IODE to SatellitePvt (frameworks/base)
Bug: 206670536 Test: atest SatellitePvtTest Change-Id: I3b4f084bc2a0b1e7603acb49f9bfbad1dbd441bb
-rw-r--r--core/api/system-current.txt18
-rw-r--r--location/java/android/location/SatellitePvt.java288
2 files changed, 293 insertions, 13 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index dea3ed55401f..8a4f86631ee2 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -5557,23 +5557,41 @@ package android.location {
public final class SatellitePvt implements android.os.Parcelable {
method public int describeContents();
method @Nullable public android.location.SatellitePvt.ClockInfo getClockInfo();
+ method public int getEphemerisSource();
method @FloatRange public double getIonoDelayMeters();
+ method @IntRange(from=0, to=1023) public int getIssueOfDataClock();
+ method @IntRange(from=0, to=255) public int getIssueOfDataEphemeris();
method @Nullable public android.location.SatellitePvt.PositionEcef getPositionEcef();
+ method @IntRange(from=0, to=604784) public int getTimeOfClock();
+ method @IntRange(from=0, to=604784) public int getTimeOfEphemeris();
method @FloatRange public double getTropoDelayMeters();
method @Nullable public android.location.SatellitePvt.VelocityEcef getVelocityEcef();
method public boolean hasIono();
+ method public boolean hasIssueOfDataClock();
+ method public boolean hasIssueOfDataEphemeris();
method public boolean hasPositionVelocityClockInfo();
+ method public boolean hasTimeOfClock();
+ method public boolean hasTimeOfEphemeris();
method public boolean hasTropo();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt> CREATOR;
+ field public static final int EPHEMERIS_SOURCE_DEMODULATED = 0; // 0x0
+ field public static final int EPHEMERIS_SOURCE_OTHER = 3; // 0x3
+ field public static final int EPHEMERIS_SOURCE_SERVER_LONG_TERM = 2; // 0x2
+ field public static final int EPHEMERIS_SOURCE_SERVER_NORMAL = 1; // 0x1
}
public static final class SatellitePvt.Builder {
ctor public SatellitePvt.Builder();
method @NonNull public android.location.SatellitePvt build();
method @NonNull public android.location.SatellitePvt.Builder setClockInfo(@NonNull android.location.SatellitePvt.ClockInfo);
+ method @NonNull public android.location.SatellitePvt.Builder setEphemerisSource(int);
method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
+ method @NonNull public android.location.SatellitePvt.Builder setIssueOfDataClock(@IntRange(from=0, to=1023) int);
+ method @NonNull public android.location.SatellitePvt.Builder setIssueOfDataEphemeris(@IntRange(from=0, to=255) int);
method @NonNull public android.location.SatellitePvt.Builder setPositionEcef(@NonNull android.location.SatellitePvt.PositionEcef);
+ method @NonNull public android.location.SatellitePvt.Builder setTimeOfClock(@IntRange(from=0, to=604784) int);
+ method @NonNull public android.location.SatellitePvt.Builder setTimeOfEphemeris(@IntRange(from=0, to=604784) int);
method @NonNull public android.location.SatellitePvt.Builder setTropoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
method @NonNull public android.location.SatellitePvt.Builder setVelocityEcef(@NonNull android.location.SatellitePvt.VelocityEcef);
}
diff --git a/location/java/android/location/SatellitePvt.java b/location/java/android/location/SatellitePvt.java
index aa43cfd8711c..29888e147c26 100644
--- a/location/java/android/location/SatellitePvt.java
+++ b/location/java/android/location/SatellitePvt.java
@@ -17,12 +17,19 @@
package android.location;
import android.annotation.FloatRange;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
+import com.android.internal.util.Preconditions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* A class that contains GNSS satellite position, velocity and time information at the
* same signal transmission time {@link GnssMeasurement#getReceivedSvTimeNanos()}.
@@ -64,6 +71,60 @@ public final class SatellitePvt implements Parcelable {
private static final int HAS_TROPO = 1 << 2;
/**
+ * Bit mask for {@link #mFlags} indicating a valid Issue of Data, Clock field is stored in the
+ * SatellitePvt.
+ */
+ private static final int HAS_ISSUE_OF_DATA_CLOCK = 1 << 3;
+
+ /**
+ * Bit mask for {@link #mFlags} indicating a valid Issue of Data, Ephemeris field is stored in
+ * the SatellitePvt.
+ */
+ private static final int HAS_ISSUE_OF_DATA_EPHEMERIS = 1 << 4;
+
+ /**
+ * Bit mask for {@link #mFlags} indicating a valid Time of Clock field is stored in the
+ * SatellitePvt.
+ */
+ private static final int HAS_TIME_OF_CLOCK = 1 << 5;
+
+ /**
+ * Bit mask for {@link #mFlags} indicating a valid Time of Ephemeris field is stored in
+ * the SatellitePvt.
+ */
+ private static final int HAS_TIME_OF_EPHEMERIS = 1 << 6;
+
+
+ /** Ephemeris demodulated from broadcast signals */
+ public static final int EPHEMERIS_SOURCE_DEMODULATED = 0;
+
+ /**
+ * Server provided Normal type ephemeris data, which is similar to broadcast ephemeris in
+ * longevity (e.g. SUPL) - lasting for few hours and providing satellite orbit and clock
+ * with accuracy of 1 - 2 meters.
+ */
+ public static final int EPHEMERIS_SOURCE_SERVER_NORMAL = 1;
+
+ /**
+ * Server provided Long-Term type ephemeris data, which lasts for many hours to several days
+ * and often provides satellite orbit and clock accuracy of 2 - 20 meters.
+ */
+ public static final int EPHEMERIS_SOURCE_SERVER_LONG_TERM = 2;
+
+ /** Other ephemeris source */
+ public static final int EPHEMERIS_SOURCE_OTHER = 3;
+
+ /**
+ * Satellite ephemeris source
+ * @hide
+ */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({EPHEMERIS_SOURCE_DEMODULATED, EPHEMERIS_SOURCE_SERVER_NORMAL,
+ EPHEMERIS_SOURCE_SERVER_LONG_TERM, EPHEMERIS_SOURCE_OTHER})
+ public @interface EphemerisSource {
+ }
+
+ /**
* A bitfield of flags indicating the validity of the fields in this SatellitePvt.
* The bit masks are defined in the constants with prefix HAS_*
*
@@ -83,6 +144,12 @@ public final class SatellitePvt implements Parcelable {
private final ClockInfo mClockInfo;
private final double mIonoDelayMeters;
private final double mTropoDelayMeters;
+ private final int mTimeOfClock;
+ private final int mTimeOfEphemeris;
+ private final int mIssueOfDataClock;
+ private final int mIssueOfDataEphemeris;
+ @EphemerisSource
+ private final int mEphemerisSource;
/**
* Class containing estimates of the satellite position fields in ECEF coordinate frame.
@@ -389,13 +456,23 @@ public final class SatellitePvt implements Parcelable {
@Nullable VelocityEcef velocityEcef,
@Nullable ClockInfo clockInfo,
double ionoDelayMeters,
- double tropoDelayMeters) {
+ double tropoDelayMeters,
+ int timeOfClock,
+ int timeOfEphemeris,
+ int issueOfDataClock,
+ int issueOfDataEphemeris,
+ @EphemerisSource int ephemerisSource) {
mFlags = flags;
mPositionEcef = positionEcef;
mVelocityEcef = velocityEcef;
mClockInfo = clockInfo;
mIonoDelayMeters = ionoDelayMeters;
mTropoDelayMeters = tropoDelayMeters;
+ mTimeOfClock = timeOfClock;
+ mTimeOfEphemeris = timeOfEphemeris;
+ mIssueOfDataClock = issueOfDataClock;
+ mIssueOfDataEphemeris = issueOfDataEphemeris;
+ mEphemerisSource = ephemerisSource;
}
/**
@@ -441,6 +518,66 @@ public final class SatellitePvt implements Parcelable {
return mTropoDelayMeters;
}
+ /**
+ * Issue of Data, Clock.
+ *
+ * <p>This is defined in GPS ICD200 documentation (e.g.,
+ * <a href="https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf"></a>).
+ *
+ * <p>This field is valid if {@link #hasIssueOfDataClock()} is true.
+ */
+ @IntRange(from = 0, to = 1023)
+ public int getIssueOfDataClock() {
+ return mIssueOfDataClock;
+ }
+
+ /**
+ * Issue of Data, Ephemeris.
+ *
+ * <p>This is defined in GPS ICD200 documentation (e.g.,
+ * <a href="https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf"></a>).
+ *
+ * <p>This field is valid if {@link #hasIssueOfDataEphemeris()} is true.
+ */
+ @IntRange(from = 0, to = 255)
+ public int getIssueOfDataEphemeris() {
+ return mIssueOfDataEphemeris;
+ }
+
+ /**
+ * Time of Clock.
+ *
+ * <p>This is defined in GPS ICD200 documentation (e.g.,
+ * <a href="https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf"></a>).
+ *
+ * <p>This field is valid if {@link #hasTimeOfClock()} is true.
+ */
+ @IntRange(from = 0, to = 604784)
+ public int getTimeOfClock() {
+ return mTimeOfClock;
+ }
+
+ /**
+ * Time of ephemeris.
+ *
+ * <p>This is defined in GPS ICD200 documentation (e.g.,
+ * <a href="https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf"></a>).
+ *
+ * <p>This field is valid if {@link #hasTimeOfEphemeris()} is true.
+ */
+ @IntRange(from = 0, to = 604784)
+ public int getTimeOfEphemeris() {
+ return mTimeOfEphemeris;
+ }
+
+ /**
+ * Satellite ephemeris source.
+ */
+ @EphemerisSource
+ public int getEphemerisSource() {
+ return mEphemerisSource;
+ }
+
/** Returns {@code true} if {@link #getPositionEcef()}, {@link #getVelocityEcef()},
* and {@link #getClockInfo()} are valid.
*/
@@ -458,6 +595,26 @@ public final class SatellitePvt implements Parcelable {
return (mFlags & HAS_TROPO) != 0;
}
+ /** Returns {@code true} if {@link #getIssueOfDataClock()} is valid. */
+ public boolean hasIssueOfDataClock() {
+ return (mFlags & HAS_ISSUE_OF_DATA_CLOCK) != 0;
+ }
+
+ /** Returns {@code true} if {@link #getIssueOfDataEphemeris()} is valid. */
+ public boolean hasIssueOfDataEphemeris() {
+ return (mFlags & HAS_ISSUE_OF_DATA_EPHEMERIS) != 0;
+ }
+
+ /** Returns {@code true} if {@link #getTimeOfClock()} ()} is valid. */
+ public boolean hasTimeOfClock() {
+ return (mFlags & HAS_TIME_OF_CLOCK) != 0;
+ }
+
+ /** Returns {@code true} if {@link #getTimeOfEphemeris()} is valid. */
+ public boolean hasTimeOfEphemeris() {
+ return (mFlags & HAS_TIME_OF_EPHEMERIS) != 0;
+ }
+
public static final @android.annotation.NonNull Creator<SatellitePvt> CREATOR =
new Creator<SatellitePvt>() {
@Override
@@ -465,11 +622,19 @@ public final class SatellitePvt implements Parcelable {
public SatellitePvt createFromParcel(Parcel in) {
int flags = in.readInt();
ClassLoader classLoader = getClass().getClassLoader();
- PositionEcef positionEcef = in.readParcelable(classLoader, android.location.SatellitePvt.PositionEcef.class);
- VelocityEcef velocityEcef = in.readParcelable(classLoader, android.location.SatellitePvt.VelocityEcef.class);
- ClockInfo clockInfo = in.readParcelable(classLoader, android.location.SatellitePvt.ClockInfo.class);
+ PositionEcef positionEcef = in.readParcelable(classLoader,
+ android.location.SatellitePvt.PositionEcef.class);
+ VelocityEcef velocityEcef = in.readParcelable(classLoader,
+ android.location.SatellitePvt.VelocityEcef.class);
+ ClockInfo clockInfo = in.readParcelable(classLoader,
+ android.location.SatellitePvt.ClockInfo.class);
double ionoDelayMeters = in.readDouble();
double tropoDelayMeters = in.readDouble();
+ int toc = in.readInt();
+ int toe = in.readInt();
+ int iodc = in.readInt();
+ int iode = in.readInt();
+ int ephemerisSource = in.readInt();
return new SatellitePvt(
flags,
@@ -477,7 +642,12 @@ public final class SatellitePvt implements Parcelable {
velocityEcef,
clockInfo,
ionoDelayMeters,
- tropoDelayMeters);
+ tropoDelayMeters,
+ toc,
+ toe,
+ iodc,
+ iode,
+ ephemerisSource);
}
@Override
@@ -499,18 +669,28 @@ public final class SatellitePvt implements Parcelable {
parcel.writeParcelable(mClockInfo, flags);
parcel.writeDouble(mIonoDelayMeters);
parcel.writeDouble(mTropoDelayMeters);
+ parcel.writeInt(mTimeOfClock);
+ parcel.writeInt(mTimeOfEphemeris);
+ parcel.writeInt(mIssueOfDataClock);
+ parcel.writeInt(mIssueOfDataEphemeris);
+ parcel.writeInt(mEphemerisSource);
}
@Override
public String toString() {
- return "SatellitePvt{"
+ return "SatellitePvt["
+ "Flags=" + mFlags
+ ", PositionEcef=" + mPositionEcef
+ ", VelocityEcef=" + mVelocityEcef
+ ", ClockInfo=" + mClockInfo
+ ", IonoDelayMeters=" + mIonoDelayMeters
+ ", TropoDelayMeters=" + mTropoDelayMeters
- + "}";
+ + ", TimeOfClock=" + mTimeOfClock
+ + ", TimeOfEphemeris=" + mTimeOfEphemeris
+ + ", IssueOfDataClock=" + mIssueOfDataClock
+ + ", IssueOfDataEphemeris=" + mIssueOfDataEphemeris
+ + ", EphemerisSource=" + mEphemerisSource
+ + "]";
}
/**
@@ -527,12 +707,18 @@ public final class SatellitePvt implements Parcelable {
@Nullable private ClockInfo mClockInfo;
private double mIonoDelayMeters;
private double mTropoDelayMeters;
+ private int mTimeOfClock;
+ private int mTimeOfEphemeris;
+ private int mIssueOfDataClock;
+ private int mIssueOfDataEphemeris;
+ @EphemerisSource
+ private int mEphemerisSource = EPHEMERIS_SOURCE_OTHER;
/**
* Set position ECEF.
*
* @param positionEcef position ECEF object
- * @return Builder builder object
+ * @return builder object
*/
@NonNull
public Builder setPositionEcef(
@@ -546,7 +732,7 @@ public final class SatellitePvt implements Parcelable {
* Set velocity ECEF.
*
* @param velocityEcef velocity ECEF object
- * @return Builder builder object
+ * @return builder object
*/
@NonNull
public Builder setVelocityEcef(
@@ -560,7 +746,7 @@ public final class SatellitePvt implements Parcelable {
* Set clock info.
*
* @param clockInfo clock info object
- * @return Builder builder object
+ * @return builder object
*/
@NonNull
public Builder setClockInfo(
@@ -580,7 +766,7 @@ public final class SatellitePvt implements Parcelable {
* Set ionospheric delay in meters.
*
* @param ionoDelayMeters ionospheric delay (meters)
- * @return Builder builder object
+ * @return builder object
*/
@NonNull
public Builder setIonoDelayMeters(
@@ -594,7 +780,7 @@ public final class SatellitePvt implements Parcelable {
* Set tropospheric delay in meters.
*
* @param tropoDelayMeters tropospheric delay (meters)
- * @return Builder builder object
+ * @return builder object
*/
@NonNull
public Builder setTropoDelayMeters(
@@ -605,6 +791,80 @@ public final class SatellitePvt implements Parcelable {
}
/**
+ * Set time of clock in seconds.
+ *
+ * @param timeOfClock time of clock (seconds)
+ * @return builder object
+ */
+ @NonNull
+ public Builder setTimeOfClock(@IntRange(from = 0, to = 604784) int timeOfClock) {
+ Preconditions.checkArgumentInRange(timeOfClock, 0, 604784, "timeOfClock");
+ mTimeOfClock = timeOfClock;
+ mFlags = (byte) (mFlags | HAS_TIME_OF_CLOCK);
+ return this;
+ }
+
+ /**
+ * Set time of ephemeris in seconds.
+ *
+ * @param timeOfEphemeris time of ephemeris (seconds)
+ * @return builder object
+ */
+ @NonNull
+ public Builder setTimeOfEphemeris(@IntRange(from = 0, to = 604784) int timeOfEphemeris) {
+ Preconditions.checkArgumentInRange(timeOfEphemeris, 0, 604784, "timeOfEphemeris");
+ mTimeOfEphemeris = timeOfEphemeris;
+ mFlags = (byte) (mFlags | HAS_TIME_OF_EPHEMERIS);
+ return this;
+ }
+
+ /**
+ * Set issue of data, clock.
+ *
+ * @param issueOfDataClock issue of data, clock.
+ * @return builder object
+ */
+ @NonNull
+ public Builder setIssueOfDataClock(@IntRange(from = 0, to = 1023) int issueOfDataClock) {
+ Preconditions.checkArgumentInRange(issueOfDataClock, 0, 1023, "issueOfDataClock");
+ mIssueOfDataClock = issueOfDataClock;
+ mFlags = (byte) (mFlags | HAS_ISSUE_OF_DATA_CLOCK);
+ return this;
+ }
+
+ /**
+ * Set issue of data, ephemeris.
+ *
+ * @param issueOfDataEphemeris issue of data, ephemeris.
+ * @return builder object
+ */
+ @NonNull
+ public Builder setIssueOfDataEphemeris(
+ @IntRange(from = 0, to = 255) int issueOfDataEphemeris) {
+ Preconditions.checkArgumentInRange(issueOfDataEphemeris, 0, 255,
+ "issueOfDataEphemeris");
+ mIssueOfDataEphemeris = issueOfDataEphemeris;
+ mFlags = (byte) (mFlags | HAS_ISSUE_OF_DATA_EPHEMERIS);
+ return this;
+ }
+
+ /**
+ * Set satellite ephemeris source.
+ *
+ * @param ephemerisSource satellite ephemeris source
+ * @return builder object
+ */
+ @NonNull
+ public Builder setEphemerisSource(@EphemerisSource int ephemerisSource) {
+ Preconditions.checkArgument(ephemerisSource == EPHEMERIS_SOURCE_DEMODULATED
+ || ephemerisSource == EPHEMERIS_SOURCE_SERVER_NORMAL
+ || ephemerisSource == EPHEMERIS_SOURCE_SERVER_LONG_TERM
+ || ephemerisSource == EPHEMERIS_SOURCE_OTHER);
+ mEphemerisSource = ephemerisSource;
+ return this;
+ }
+
+ /**
* Build SatellitePvt object.
*
* @return instance of SatellitePvt
@@ -612,7 +872,9 @@ public final class SatellitePvt implements Parcelable {
@NonNull
public SatellitePvt build() {
return new SatellitePvt(mFlags, mPositionEcef, mVelocityEcef, mClockInfo,
- mIonoDelayMeters, mTropoDelayMeters);
+ mIonoDelayMeters, mTropoDelayMeters, mTimeOfClock, mTimeOfEphemeris,
+ mIssueOfDataClock, mIssueOfDataEphemeris,
+ mEphemerisSource);
}
}
}