Report mock measurements consistent with SvInfo

This CL updates the cuttlefish (emulator) implementation only.

Previously it only reports one GnssMeasurement but there are many more GnssStatus which are used-in-fix. It causes a CTS test failure which checks the consistency between GnssMeasurement and GnssStatus.

Bug: 401427992
Test: atest GnssMeasurementValuesTest#testListenForGnssMeasurements
Flag: TEST_ONLY
Change-Id: I255b88c583e21b3ca9b525853433800f1b4dc1e3
diff --git a/gnss/common/utils/default/Utils.cpp b/gnss/common/utils/default/Utils.cpp
index 740bc59..c603ff8 100644
--- a/gnss/common/utils/default/Utils.cpp
+++ b/gnss/common/utils/default/Utils.cpp
@@ -147,10 +147,13 @@
     return gnssData;
 }
 
-GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool enableFullTracking) {
+namespace {
+GnssMeasurement getMockGnssMeasurement(int svid, GnssConstellationType constellationType,
+                                       float cN0DbHz, float basebandCN0DbHz,
+                                       double carrierFrequencyHz, bool enableCorrVecOutputs) {
     aidl::android::hardware::gnss::GnssSignalType signalType = {
-            .constellation = GnssConstellationType::GLONASS,
-            .carrierFrequencyHz = 1.59975e+09,
+            .constellation = constellationType,
+            .carrierFrequencyHz = carrierFrequencyHz,
             .codeType = aidl::android::hardware::gnss::GnssSignalType::CODE_TYPE_C,
     };
     GnssMeasurement measurement = {
@@ -161,23 +164,23 @@
                      GnssMeasurement::HAS_SATELLITE_ISB |
                      GnssMeasurement::HAS_SATELLITE_ISB_UNCERTAINTY |
                      GnssMeasurement::HAS_SATELLITE_PVT,
-            .svid = 13,
+            .svid = svid,
             .signalType = signalType,
+            .state = GnssMeasurement::STATE_CODE_LOCK | GnssMeasurement::STATE_BIT_SYNC |
+                     GnssMeasurement::STATE_SUBFRAME_SYNC | GnssMeasurement::STATE_TOW_DECODED |
+                     GnssMeasurement::STATE_GLO_STRING_SYNC |
+                     GnssMeasurement::STATE_GLO_TOD_DECODED,
             .receivedSvTimeInNs = 8195997131077,
             .receivedSvTimeUncertaintyInNs = 15,
-            .antennaCN0DbHz = 30.0,
-            .basebandCN0DbHz = 26.5,
-            .agcLevelDb = 2.3,
+            .antennaCN0DbHz = cN0DbHz,
+            .basebandCN0DbHz = basebandCN0DbHz,
             .pseudorangeRateMps = -484.13739013671875,
             .pseudorangeRateUncertaintyMps = 0.1037999987602233,
             .accumulatedDeltaRangeState = GnssMeasurement::ADR_STATE_VALID,
             .accumulatedDeltaRangeM = 1.52,
             .accumulatedDeltaRangeUncertaintyM = 2.43,
             .multipathIndicator = aidl::android::hardware::gnss::GnssMultipathIndicator::UNKNOWN,
-            .state = GnssMeasurement::STATE_CODE_LOCK | GnssMeasurement::STATE_BIT_SYNC |
-                     GnssMeasurement::STATE_SUBFRAME_SYNC | GnssMeasurement::STATE_TOW_DECODED |
-                     GnssMeasurement::STATE_GLO_STRING_SYNC |
-                     GnssMeasurement::STATE_GLO_TOD_DECODED,
+            .agcLevelDb = 2.3,
             .fullInterSignalBiasNs = 21.5,
             .fullInterSignalBiasUncertaintyNs = 792.0,
             .satelliteInterSignalBiasNs = 233.9,
@@ -199,35 +202,15 @@
                                              .satClkDriftMps = 0},
                             .ionoDelayMeters = 3.069949602639317e-08,
                             .tropoDelayMeters = 3.882265204404031,
-                            .ephemerisSource =
-                                    SatellitePvt::SatelliteEphemerisSource::SERVER_LONG_TERM,
                             .timeOfClockSeconds = 12345,
                             .issueOfDataClock = 143,
                             .timeOfEphemerisSeconds = 9876,
                             .issueOfDataEphemeris = 48,
+                            .ephemerisSource =
+                                    SatellitePvt::SatelliteEphemerisSource::SERVER_LONG_TERM,
                     },
             .correlationVectors = {}};
 
-    GnssClock clock = {.gnssClockFlags = GnssClock::HAS_FULL_BIAS | GnssClock::HAS_BIAS |
-                                         GnssClock::HAS_BIAS_UNCERTAINTY | GnssClock::HAS_DRIFT |
-                                         GnssClock::HAS_DRIFT_UNCERTAINTY,
-                       .timeNs = 2713545000000,
-                       .fullBiasNs = -1226701900521857520,
-                       .biasNs = 0.59689998626708984,
-                       .biasUncertaintyNs = 47514.989972114563,
-                       .driftNsps = -51.757811607455452,
-                       .driftUncertaintyNsps = 310.64968328491528,
-                       .hwClockDiscontinuityCount = 1,
-                       .referenceSignalTypeForIsb = signalType};
-
-    ElapsedRealtime timestamp = {
-            .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
-            .timestampNs = ::android::elapsedRealtimeNano(),
-            // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
-            // In an actual implementation provide an estimate of the synchronization uncertainty
-            // or don't set the field.
-            .timeUncertaintyNs = 1020400};
-
     if (enableCorrVecOutputs) {
         aidl::android::hardware::gnss::CorrelationVector correlationVector1 = {
                 .frequencyOffsetMps = 10,
@@ -242,6 +225,68 @@
         measurement.correlationVectors = {correlationVector1, correlationVector2};
         measurement.flags |= GnssMeasurement::HAS_CORRELATION_VECTOR;
     }
+    return measurement;
+}
+}  // namespace
+
+GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool enableFullTracking) {
+    std::vector<GnssMeasurement> measurements = {
+            // GPS
+            getMockGnssMeasurement(3, GnssConstellationType::GPS, 32.5, 27.5, kGpsL1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(5, GnssConstellationType::GPS, 27.0, 22.0, kGpsL1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(17, GnssConstellationType::GPS, 30.5, 25.5, kGpsL5FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(26, GnssConstellationType::GPS, 24.1, 19.1, kGpsL5FreqHz,
+                                   enableCorrVecOutputs),
+            // GAL
+            getMockGnssMeasurement(2, GnssConstellationType::GALILEO, 33.5, 27.5, kGalE1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(4, GnssConstellationType::GALILEO, 28.0, 22.0, kGalE1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(10, GnssConstellationType::GALILEO, 35.5, 25.5, kGalE1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(29, GnssConstellationType::GALILEO, 34.1, 19.1, kGalE1FreqHz,
+                                   enableCorrVecOutputs),
+            // GLO
+            getMockGnssMeasurement(5, GnssConstellationType::GLONASS, 20.5, 15.5, kGloG1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(17, GnssConstellationType::GLONASS, 21.5, 16.5, kGloG1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(18, GnssConstellationType::GLONASS, 28.3, 25.3, kGloG1FreqHz,
+                                   enableCorrVecOutputs),
+            getMockGnssMeasurement(10, GnssConstellationType::GLONASS, 25.0, 20.0, kGloG1FreqHz,
+                                   enableCorrVecOutputs),
+            // IRNSS
+            getMockGnssMeasurement(3, GnssConstellationType::IRNSS, 22.0, 19.7, kIrnssL5FreqHz,
+                                   enableCorrVecOutputs),
+    };
+
+    GnssClock clock = {
+            .gnssClockFlags = GnssClock::HAS_FULL_BIAS | GnssClock::HAS_BIAS |
+                              GnssClock::HAS_BIAS_UNCERTAINTY | GnssClock::HAS_DRIFT |
+                              GnssClock::HAS_DRIFT_UNCERTAINTY,
+            .timeNs = 2713545000000,
+            .fullBiasNs = -1226701900521857520,
+            .biasNs = 0.59689998626708984,
+            .biasUncertaintyNs = 47514.989972114563,
+            .driftNsps = -51.757811607455452,
+            .driftUncertaintyNsps = 310.64968328491528,
+            .hwClockDiscontinuityCount = 1,
+            .referenceSignalTypeForIsb = {
+                    .constellation = GnssConstellationType::GLONASS,
+                    .carrierFrequencyHz = 1.59975e+09,
+                    .codeType = aidl::android::hardware::gnss::GnssSignalType::CODE_TYPE_C,
+            }};
+
+    ElapsedRealtime timestamp = {
+            .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
+            .timestampNs = ::android::elapsedRealtimeNano(),
+            // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
+            // In an actual implementation provide an estimate of the synchronization uncertainty
+            // or don't set the field.
+            .timeUncertaintyNs = 1020400};
 
     GnssAgc gnssAgc1 = {
             .agcLevelDb = 3.5,
@@ -255,7 +300,7 @@
             .carrierFrequencyHz = (int64_t)kGpsL1FreqHz,
     };
 
-    GnssData gnssData = {.measurements = {measurement},
+    GnssData gnssData = {.measurements = measurements,
                          .clock = clock,
                          .elapsedRealtime = timestamp,
                          .gnssAgcs = std::vector({gnssAgc1, gnssAgc2}),