Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0de81a85 authored by Yu-Han Yang's avatar Yu-Han Yang
Browse files

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
parent f33aa725
Loading
Loading
Loading
Loading
+79 −34
Original line number Diff line number Diff line
@@ -147,10 +147,13 @@ GnssDataV2_0 Utils::getMockMeasurementV2_0() {
    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 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
                     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,16 +202,69 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
                                             .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 |
    if (enableCorrVecOutputs) {
        aidl::android::hardware::gnss::CorrelationVector correlationVector1 = {
                .frequencyOffsetMps = 10,
                .samplingWidthM = 30,
                .samplingStartM = 0,
                .magnitude = {0, 5000, 10000, 5000, 0, 0, 3000, 0}};
        aidl::android::hardware::gnss::CorrelationVector correlationVector2 = {
                .frequencyOffsetMps = 20,
                .samplingWidthM = 30,
                .samplingStartM = -10,
                .magnitude = {0, 3000, 5000, 3000, 0, 0, 1000, 0}};
        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,
@@ -218,7 +274,11 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
            .driftNsps = -51.757811607455452,
            .driftUncertaintyNsps = 310.64968328491528,
            .hwClockDiscontinuityCount = 1,
                       .referenceSignalTypeForIsb = signalType};
            .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,
@@ -228,21 +288,6 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
            // or don't set the field.
            .timeUncertaintyNs = 1020400};

    if (enableCorrVecOutputs) {
        aidl::android::hardware::gnss::CorrelationVector correlationVector1 = {
                .frequencyOffsetMps = 10,
                .samplingWidthM = 30,
                .samplingStartM = 0,
                .magnitude = {0, 5000, 10000, 5000, 0, 0, 3000, 0}};
        aidl::android::hardware::gnss::CorrelationVector correlationVector2 = {
                .frequencyOffsetMps = 20,
                .samplingWidthM = 30,
                .samplingStartM = -10,
                .magnitude = {0, 3000, 5000, 3000, 0, 0, 1000, 0}};
        measurement.correlationVectors = {correlationVector1, correlationVector2};
        measurement.flags |= GnssMeasurement::HAS_CORRELATION_VECTOR;
    }

    GnssAgc gnssAgc1 = {
            .agcLevelDb = 3.5,
            .constellation = GnssConstellationType::GLONASS,
@@ -255,7 +300,7 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
            .carrierFrequencyHz = (int64_t)kGpsL1FreqHz,
    };

    GnssData gnssData = {.measurements = {measurement},
    GnssData gnssData = {.measurements = measurements,
                         .clock = clock,
                         .elapsedRealtime = timestamp,
                         .gnssAgcs = std::vector({gnssAgc1, gnssAgc2}),