Add ephSource, toc, toe, IODC, IODE to SatellitePvt
(hardware/interfaces)
Bug: 206670536
Test: atest VtsHalGnssTargetTest
Change-Id: I564e9e0f48d5a22d40f103286d0d7553006be1de
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssDebug.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssDebug.aidl
index 27d9887..8e4b5f2 100644
--- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssDebug.aidl
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssDebug.aidl
@@ -42,13 +42,6 @@
NOT_AVAILABLE = 2,
}
@Backing(type="int") @VintfStability
- enum SatelliteEphemerisSource {
- DEMODULATED = 0,
- SUPL_PROVIDED = 1,
- OTHER_SERVER_PROVIDED = 2,
- OTHER = 3,
- }
- @Backing(type="int") @VintfStability
enum SatelliteEphemerisHealth {
GOOD = 0,
BAD = 1,
@@ -79,7 +72,7 @@
int svid;
android.hardware.gnss.GnssConstellationType constellation;
android.hardware.gnss.IGnssDebug.SatelliteEphemerisType ephemerisType;
- android.hardware.gnss.IGnssDebug.SatelliteEphemerisSource ephemerisSource;
+ android.hardware.gnss.SatellitePvt.SatelliteEphemerisSource ephemerisSource;
android.hardware.gnss.IGnssDebug.SatelliteEphemerisHealth ephemerisHealth;
float ephemerisAgeSeconds;
boolean serverPredictionIsAvailable;
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/SatellitePvt.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/SatellitePvt.aidl
index 8c17841..21a2520 100644
--- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/SatellitePvt.aidl
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/SatellitePvt.aidl
@@ -40,7 +40,19 @@
android.hardware.gnss.SatelliteClockInfo satClockInfo;
double ionoDelayMeters;
double tropoDelayMeters;
+ int TOC;
+ int IODC;
+ int TOE;
+ int IODE;
+ android.hardware.gnss.SatellitePvt.SatelliteEphemerisSource ephemerisSource = android.hardware.gnss.SatellitePvt.SatelliteEphemerisSource.OTHER;
const int HAS_POSITION_VELOCITY_CLOCK_INFO = 1;
const int HAS_IONO = 2;
const int HAS_TROPO = 4;
+ @Backing(type="int") @VintfStability
+ enum SatelliteEphemerisSource {
+ DEMODULATED = 0,
+ SERVER_NORMAL = 1,
+ SERVER_LONG_TERM = 2,
+ OTHER = 3,
+ }
}
diff --git a/gnss/aidl/android/hardware/gnss/IGnssDebug.aidl b/gnss/aidl/android/hardware/gnss/IGnssDebug.aidl
index 475a4a3..3071dce5 100644
--- a/gnss/aidl/android/hardware/gnss/IGnssDebug.aidl
+++ b/gnss/aidl/android/hardware/gnss/IGnssDebug.aidl
@@ -17,6 +17,7 @@
package android.hardware.gnss;
import android.hardware.gnss.GnssConstellationType;
+import android.hardware.gnss.SatellitePvt.SatelliteEphemerisSource;
/**
* Extended interface for GNSS Debug support
@@ -35,16 +36,6 @@
NOT_AVAILABLE = 2,
}
- /** Satellite's ephemeris source */
- @VintfStability
- @Backing(type="int")
- enum SatelliteEphemerisSource {
- DEMODULATED = 0,
- SUPL_PROVIDED = 1,
- OTHER_SERVER_PROVIDED = 2,
- OTHER = 3,
- }
-
/** Satellite's ephemeris health */
@VintfStability
@Backing(type="int")
diff --git a/gnss/aidl/android/hardware/gnss/SatellitePvt.aidl b/gnss/aidl/android/hardware/gnss/SatellitePvt.aidl
index a238e3f..e79249d 100644
--- a/gnss/aidl/android/hardware/gnss/SatellitePvt.aidl
+++ b/gnss/aidl/android/hardware/gnss/SatellitePvt.aidl
@@ -74,4 +74,62 @@
/** Tropospheric delay in meters. */
double tropoDelayMeters;
+
+ /**
+ * Time of Clock.
+ *
+ * This is defined in GPS ICD200 documentation
+ * (e.g., https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf).
+ */
+ int TOC;
+
+ /**
+ * Issue of Data, Clock.
+ *
+ * This is defined in GPS ICD200 documentation
+ * (e.g., https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf).
+ *
+ * The field must be set to 0 if it is not supported.
+ */
+ int IODC;
+
+ /**
+ * Time of Ephemeris.
+ *
+ * This is defined in GPS ICD200 documentation
+ * (e.g., https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf).
+ */
+ int TOE;
+
+ /**
+ * Issue of Data, Ephemeris.
+ *
+ * This is defined in GPS ICD200 documentation
+ * (e.g., https://www.gps.gov/technical/icwg/IS-GPS-200H.pdf).
+ *
+ * The field must be set to 0 if it is not supported.
+ */
+ int IODE;
+
+ /** Satellite's ephemeris source */
+ @VintfStability
+ @Backing(type="int")
+ enum SatelliteEphemerisSource {
+ // Demodulated from broadcast signals
+ 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.
+ 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.
+ SERVER_LONG_TERM = 2,
+ // Other source
+ OTHER = 3,
+ }
+
+ /**
+ * Source of the ephemeris.
+ */
+ SatelliteEphemerisSource ephemerisSource = SatelliteEphemerisSource.OTHER;
}
diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp
index 1fa6825..cbd9d8e 100644
--- a/gnss/aidl/vts/gnss_hal_test_cases.cpp
+++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp
@@ -102,7 +102,7 @@
}
}
-void CheckSatellitePvt(const SatellitePvt& satellitePvt) {
+void CheckSatellitePvt(const SatellitePvt& satellitePvt, const int interfaceVersion) {
const double kMaxOrbitRadiusMeters = 43000000.0;
const double kMaxVelocityMps = 4000.0;
// The below values are determined using GPS ICD Table 20-1
@@ -147,6 +147,14 @@
ALOGD("Found HAS_TROPO");
ASSERT_TRUE(satellitePvt.tropoDelayMeters > 0 && satellitePvt.tropoDelayMeters < 100);
}
+ if (interfaceVersion >= 2) {
+ ASSERT_TRUE(satellitePvt.TOC >= 0 && satellitePvt.TOC <= 604784);
+ ASSERT_TRUE(satellitePvt.TOE >= 0 && satellitePvt.TOE <= 604784);
+ // IODC has 10 bits
+ ASSERT_TRUE(satellitePvt.IODC >= 0 && satellitePvt.IODC <= 1023);
+ // IODE has 8 bits
+ ASSERT_TRUE(satellitePvt.IODE >= 0 && satellitePvt.IODE <= 255);
+ }
}
void CheckGnssMeasurementClockFields(const GnssData& measurement) {
@@ -226,7 +234,7 @@
kIsSatellitePvtSupported == true) {
ALOGD("Found a measurement with SatellitePvt");
satellitePvtFound = true;
- CheckSatellitePvt(measurement.satellitePvt);
+ CheckSatellitePvt(measurement.satellitePvt, aidl_gnss_hal_->getInterfaceVersion());
}
}
}
diff --git a/gnss/common/utils/default/Utils.cpp b/gnss/common/utils/default/Utils.cpp
index 1ff84eb..65b62a9 100644
--- a/gnss/common/utils/default/Utils.cpp
+++ b/gnss/common/utils/default/Utils.cpp
@@ -32,6 +32,7 @@
using aidl::android::hardware::gnss::GnssLocation;
using aidl::android::hardware::gnss::GnssMeasurement;
using aidl::android::hardware::gnss::IGnss;
+using aidl::android::hardware::gnss::IGnssDebug;
using aidl::android::hardware::gnss::IGnssMeasurementCallback;
using aidl::android::hardware::gnss::SatellitePvt;
using GnssSvInfo = aidl::android::hardware::gnss::IGnssCallback::GnssSvInfo;
@@ -181,21 +182,30 @@
.fullInterSignalBiasUncertaintyNs = 792.0,
.satelliteInterSignalBiasNs = 233.9,
.satelliteInterSignalBiasUncertaintyNs = 921.2,
- .satellitePvt = {.flags = SatellitePvt::HAS_POSITION_VELOCITY_CLOCK_INFO |
- SatellitePvt::HAS_IONO | SatellitePvt::HAS_TROPO,
- .satPosEcef = {.posXMeters = 10442993.1153328,
- .posYMeters = -19926932.8051666,
- .posZMeters = -12034295.0216203,
- .ureMeters = 1000.2345678},
- .satVelEcef = {.velXMps = -478.667183715732,
- .velYMps = 1580.68371984114,
- .velZMps = -3030.52994449997,
- .ureRateMps = 10.2345678},
- .satClockInfo = {.satHardwareCodeBiasMeters = 1.396983861923e-09,
- .satTimeCorrectionMeters = -7113.08964331,
- .satClkDriftMps = 0},
- .ionoDelayMeters = 3.069949602639317e-08,
- .tropoDelayMeters = 3.882265204404031},
+ .satellitePvt =
+ {
+ .flags = SatellitePvt::HAS_POSITION_VELOCITY_CLOCK_INFO |
+ SatellitePvt::HAS_IONO | SatellitePvt::HAS_TROPO,
+ .satPosEcef = {.posXMeters = 10442993.1153328,
+ .posYMeters = -19926932.8051666,
+ .posZMeters = -12034295.0216203,
+ .ureMeters = 1000.2345678},
+ .satVelEcef = {.velXMps = -478.667183715732,
+ .velYMps = 1580.68371984114,
+ .velZMps = -3030.52994449997,
+ .ureRateMps = 10.2345678},
+ .satClockInfo = {.satHardwareCodeBiasMeters = 1.396983861923e-09,
+ .satTimeCorrectionMeters = -7113.08964331,
+ .satClkDriftMps = 0},
+ .ionoDelayMeters = 3.069949602639317e-08,
+ .tropoDelayMeters = 3.882265204404031,
+ .ephemerisSource =
+ SatellitePvt::SatelliteEphemerisSource::SERVER_LONG_TERM,
+ .TOC = 12345,
+ .IODC = 143,
+ .TOE = 9876,
+ .IODE = 48,
+ },
.correlationVectors = {}};
GnssClock clock = {.gnssClockFlags = GnssClock::HAS_FULL_BIAS | GnssClock::HAS_BIAS |