1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #include <Constants.h>
18*4d7e907cSAndroid Build Coastguard Worker #include <MockLocation.h>
19*4d7e907cSAndroid Build Coastguard Worker #include <Utils.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnss.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <utils/SystemClock.h>
22*4d7e907cSAndroid Build Coastguard Worker
23*4d7e907cSAndroid Build Coastguard Worker namespace android {
24*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
25*4d7e907cSAndroid Build Coastguard Worker namespace gnss {
26*4d7e907cSAndroid Build Coastguard Worker namespace common {
27*4d7e907cSAndroid Build Coastguard Worker
28*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::ElapsedRealtime;
29*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::GnssClock;
30*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::GnssConstellationType;
31*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::GnssData;
32*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::GnssLocation;
33*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::GnssMeasurement;
34*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::IGnss;
35*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::IGnssDebug;
36*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::IGnssMeasurementCallback;
37*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::gnss::SatellitePvt;
38*4d7e907cSAndroid Build Coastguard Worker using GnssSvInfo = aidl::android::hardware::gnss::IGnssCallback::GnssSvInfo;
39*4d7e907cSAndroid Build Coastguard Worker using GnssSvFlags = aidl::android::hardware::gnss::IGnssCallback::GnssSvFlags;
40*4d7e907cSAndroid Build Coastguard Worker
41*4d7e907cSAndroid Build Coastguard Worker using GnssSvFlagsV1_0 = V1_0::IGnssCallback::GnssSvFlags;
42*4d7e907cSAndroid Build Coastguard Worker using GnssAgc = aidl::android::hardware::gnss::GnssData::GnssAgc;
43*4d7e907cSAndroid Build Coastguard Worker using GnssMeasurementFlagsV1_0 = V1_0::IGnssMeasurementCallback::GnssMeasurementFlags;
44*4d7e907cSAndroid Build Coastguard Worker using GnssMeasurementFlagsV2_1 = V2_1::IGnssMeasurementCallback::GnssMeasurementFlags;
45*4d7e907cSAndroid Build Coastguard Worker using GnssMeasurementStateV2_0 = V2_0::IGnssMeasurementCallback::GnssMeasurementState;
46*4d7e907cSAndroid Build Coastguard Worker using ElapsedRealtimeFlags = V2_0::ElapsedRealtimeFlags;
47*4d7e907cSAndroid Build Coastguard Worker using GnssConstellationTypeV2_0 = V2_0::GnssConstellationType;
48*4d7e907cSAndroid Build Coastguard Worker using IGnssMeasurementCallbackV2_0 = V2_0::IGnssMeasurementCallback;
49*4d7e907cSAndroid Build Coastguard Worker using GnssSignalType = V2_1::GnssSignalType;
50*4d7e907cSAndroid Build Coastguard Worker
51*4d7e907cSAndroid Build Coastguard Worker using GnssDataV2_0 = V2_0::IGnssMeasurementCallback::GnssData;
52*4d7e907cSAndroid Build Coastguard Worker using GnssDataV2_1 = V2_1::IGnssMeasurementCallback::GnssData;
53*4d7e907cSAndroid Build Coastguard Worker using GnssSvInfoV1_0 = V1_0::IGnssCallback::GnssSvInfo;
54*4d7e907cSAndroid Build Coastguard Worker using GnssSvInfoV2_0 = V2_0::IGnssCallback::GnssSvInfo;
55*4d7e907cSAndroid Build Coastguard Worker using GnssSvInfoV2_1 = V2_1::IGnssCallback::GnssSvInfo;
56*4d7e907cSAndroid Build Coastguard Worker using GnssAntennaInfo = ::android::hardware::gnss::V2_1::IGnssAntennaInfoCallback::GnssAntennaInfo;
57*4d7e907cSAndroid Build Coastguard Worker using Row = V2_1::IGnssAntennaInfoCallback::Row;
58*4d7e907cSAndroid Build Coastguard Worker using Coord = V2_1::IGnssAntennaInfoCallback::Coord;
59*4d7e907cSAndroid Build Coastguard Worker
getMockMeasurementV2_1()60*4d7e907cSAndroid Build Coastguard Worker GnssDataV2_1 Utils::getMockMeasurementV2_1() {
61*4d7e907cSAndroid Build Coastguard Worker GnssDataV2_0 gnssDataV2_0 = Utils::getMockMeasurementV2_0();
62*4d7e907cSAndroid Build Coastguard Worker V2_1::IGnssMeasurementCallback::GnssMeasurement gnssMeasurementV2_1 = {
63*4d7e907cSAndroid Build Coastguard Worker .v2_0 = gnssDataV2_0.measurements[0],
64*4d7e907cSAndroid Build Coastguard Worker .flags = (uint32_t)(GnssMeasurementFlagsV2_1::HAS_CARRIER_FREQUENCY |
65*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementFlagsV2_1::HAS_CARRIER_PHASE |
66*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementFlagsV2_1::HAS_FULL_ISB |
67*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementFlagsV2_1::HAS_FULL_ISB_UNCERTAINTY |
68*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB |
69*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB_UNCERTAINTY),
70*4d7e907cSAndroid Build Coastguard Worker .fullInterSignalBiasNs = 30.0,
71*4d7e907cSAndroid Build Coastguard Worker .fullInterSignalBiasUncertaintyNs = 250.0,
72*4d7e907cSAndroid Build Coastguard Worker .satelliteInterSignalBiasNs = 20.0,
73*4d7e907cSAndroid Build Coastguard Worker .satelliteInterSignalBiasUncertaintyNs = 150.0,
74*4d7e907cSAndroid Build Coastguard Worker .basebandCN0DbHz = 25.0,
75*4d7e907cSAndroid Build Coastguard Worker };
76*4d7e907cSAndroid Build Coastguard Worker GnssSignalType referenceSignalTypeForIsb = {
77*4d7e907cSAndroid Build Coastguard Worker .constellation = GnssConstellationTypeV2_0::GPS,
78*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = 1.59975e+09,
79*4d7e907cSAndroid Build Coastguard Worker .codeType = "C",
80*4d7e907cSAndroid Build Coastguard Worker };
81*4d7e907cSAndroid Build Coastguard Worker V2_1::IGnssMeasurementCallback::GnssClock gnssClockV2_1 = {
82*4d7e907cSAndroid Build Coastguard Worker .v1_0 = gnssDataV2_0.clock,
83*4d7e907cSAndroid Build Coastguard Worker .referenceSignalTypeForIsb = referenceSignalTypeForIsb,
84*4d7e907cSAndroid Build Coastguard Worker };
85*4d7e907cSAndroid Build Coastguard Worker hidl_vec<V2_1::IGnssMeasurementCallback::GnssMeasurement> measurements(1);
86*4d7e907cSAndroid Build Coastguard Worker measurements[0] = gnssMeasurementV2_1;
87*4d7e907cSAndroid Build Coastguard Worker GnssDataV2_1 gnssDataV2_1 = {
88*4d7e907cSAndroid Build Coastguard Worker .measurements = measurements,
89*4d7e907cSAndroid Build Coastguard Worker .clock = gnssClockV2_1,
90*4d7e907cSAndroid Build Coastguard Worker .elapsedRealtime = gnssDataV2_0.elapsedRealtime,
91*4d7e907cSAndroid Build Coastguard Worker };
92*4d7e907cSAndroid Build Coastguard Worker return gnssDataV2_1;
93*4d7e907cSAndroid Build Coastguard Worker }
94*4d7e907cSAndroid Build Coastguard Worker
getMockMeasurementV2_0()95*4d7e907cSAndroid Build Coastguard Worker GnssDataV2_0 Utils::getMockMeasurementV2_0() {
96*4d7e907cSAndroid Build Coastguard Worker V1_0::IGnssMeasurementCallback::GnssMeasurement measurement_1_0 = {
97*4d7e907cSAndroid Build Coastguard Worker .flags = (uint32_t)GnssMeasurementFlagsV1_0::HAS_CARRIER_FREQUENCY,
98*4d7e907cSAndroid Build Coastguard Worker .svid = (int16_t)6,
99*4d7e907cSAndroid Build Coastguard Worker .constellation = V1_0::GnssConstellationType::UNKNOWN,
100*4d7e907cSAndroid Build Coastguard Worker .timeOffsetNs = 0.0,
101*4d7e907cSAndroid Build Coastguard Worker .receivedSvTimeInNs = 8195997131077,
102*4d7e907cSAndroid Build Coastguard Worker .receivedSvTimeUncertaintyInNs = 15,
103*4d7e907cSAndroid Build Coastguard Worker .cN0DbHz = 30.0,
104*4d7e907cSAndroid Build Coastguard Worker .pseudorangeRateMps = -484.13739013671875,
105*4d7e907cSAndroid Build Coastguard Worker .pseudorangeRateUncertaintyMps = 0.1037999987602233,
106*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeState = (uint32_t)V1_0::IGnssMeasurementCallback::
107*4d7e907cSAndroid Build Coastguard Worker GnssAccumulatedDeltaRangeState::ADR_STATE_UNKNOWN,
108*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeM = 0.0,
109*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeUncertaintyM = 0.0,
110*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = 1.59975e+09,
111*4d7e907cSAndroid Build Coastguard Worker .multipathIndicator =
112*4d7e907cSAndroid Build Coastguard Worker V1_0::IGnssMeasurementCallback::GnssMultipathIndicator::INDICATOR_UNKNOWN};
113*4d7e907cSAndroid Build Coastguard Worker V1_1::IGnssMeasurementCallback::GnssMeasurement measurement_1_1 = {.v1_0 = measurement_1_0};
114*4d7e907cSAndroid Build Coastguard Worker V2_0::IGnssMeasurementCallback::GnssMeasurement measurement_2_0 = {
115*4d7e907cSAndroid Build Coastguard Worker .v1_1 = measurement_1_1,
116*4d7e907cSAndroid Build Coastguard Worker .codeType = "C",
117*4d7e907cSAndroid Build Coastguard Worker .state = GnssMeasurementStateV2_0::STATE_CODE_LOCK |
118*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementStateV2_0::STATE_BIT_SYNC |
119*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementStateV2_0::STATE_SUBFRAME_SYNC |
120*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementStateV2_0::STATE_TOW_DECODED |
121*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementStateV2_0::STATE_GLO_STRING_SYNC |
122*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementStateV2_0::STATE_GLO_TOD_DECODED,
123*4d7e907cSAndroid Build Coastguard Worker .constellation = GnssConstellationTypeV2_0::GLONASS,
124*4d7e907cSAndroid Build Coastguard Worker };
125*4d7e907cSAndroid Build Coastguard Worker
126*4d7e907cSAndroid Build Coastguard Worker hidl_vec<IGnssMeasurementCallbackV2_0::GnssMeasurement> measurements(1);
127*4d7e907cSAndroid Build Coastguard Worker measurements[0] = measurement_2_0;
128*4d7e907cSAndroid Build Coastguard Worker V1_0::IGnssMeasurementCallback::GnssClock clock = {.timeNs = 2713545000000,
129*4d7e907cSAndroid Build Coastguard Worker .fullBiasNs = -1226701900521857520,
130*4d7e907cSAndroid Build Coastguard Worker .biasNs = 0.59689998626708984,
131*4d7e907cSAndroid Build Coastguard Worker .biasUncertaintyNs = 47514.989972114563,
132*4d7e907cSAndroid Build Coastguard Worker .driftNsps = -51.757811607455452,
133*4d7e907cSAndroid Build Coastguard Worker .driftUncertaintyNsps = 310.64968328491528,
134*4d7e907cSAndroid Build Coastguard Worker .hwClockDiscontinuityCount = 1};
135*4d7e907cSAndroid Build Coastguard Worker
136*4d7e907cSAndroid Build Coastguard Worker V2_0::ElapsedRealtime timestamp = {
137*4d7e907cSAndroid Build Coastguard Worker .flags = ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
138*4d7e907cSAndroid Build Coastguard Worker ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
139*4d7e907cSAndroid Build Coastguard Worker .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
140*4d7e907cSAndroid Build Coastguard Worker // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
141*4d7e907cSAndroid Build Coastguard Worker // In an actual implementation provide an estimate of the synchronization uncertainty
142*4d7e907cSAndroid Build Coastguard Worker // or don't set the field.
143*4d7e907cSAndroid Build Coastguard Worker .timeUncertaintyNs = 1000000};
144*4d7e907cSAndroid Build Coastguard Worker
145*4d7e907cSAndroid Build Coastguard Worker GnssDataV2_0 gnssData = {
146*4d7e907cSAndroid Build Coastguard Worker .measurements = measurements, .clock = clock, .elapsedRealtime = timestamp};
147*4d7e907cSAndroid Build Coastguard Worker return gnssData;
148*4d7e907cSAndroid Build Coastguard Worker }
149*4d7e907cSAndroid Build Coastguard Worker
getMockMeasurement(const bool enableCorrVecOutputs,const bool enableFullTracking)150*4d7e907cSAndroid Build Coastguard Worker GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool enableFullTracking) {
151*4d7e907cSAndroid Build Coastguard Worker aidl::android::hardware::gnss::GnssSignalType signalType = {
152*4d7e907cSAndroid Build Coastguard Worker .constellation = GnssConstellationType::GLONASS,
153*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = 1.59975e+09,
154*4d7e907cSAndroid Build Coastguard Worker .codeType = aidl::android::hardware::gnss::GnssSignalType::CODE_TYPE_C,
155*4d7e907cSAndroid Build Coastguard Worker };
156*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement measurement = {
157*4d7e907cSAndroid Build Coastguard Worker .flags = GnssMeasurement::HAS_AUTOMATIC_GAIN_CONTROL |
158*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_CARRIER_FREQUENCY | GnssMeasurement::HAS_CARRIER_PHASE |
159*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_CARRIER_PHASE_UNCERTAINTY |
160*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_FULL_ISB | GnssMeasurement::HAS_FULL_ISB_UNCERTAINTY |
161*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_SATELLITE_ISB |
162*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_SATELLITE_ISB_UNCERTAINTY |
163*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::HAS_SATELLITE_PVT,
164*4d7e907cSAndroid Build Coastguard Worker .svid = 13,
165*4d7e907cSAndroid Build Coastguard Worker .signalType = signalType,
166*4d7e907cSAndroid Build Coastguard Worker .receivedSvTimeInNs = 8195997131077,
167*4d7e907cSAndroid Build Coastguard Worker .receivedSvTimeUncertaintyInNs = 15,
168*4d7e907cSAndroid Build Coastguard Worker .antennaCN0DbHz = 30.0,
169*4d7e907cSAndroid Build Coastguard Worker .basebandCN0DbHz = 26.5,
170*4d7e907cSAndroid Build Coastguard Worker .agcLevelDb = 2.3,
171*4d7e907cSAndroid Build Coastguard Worker .pseudorangeRateMps = -484.13739013671875,
172*4d7e907cSAndroid Build Coastguard Worker .pseudorangeRateUncertaintyMps = 0.1037999987602233,
173*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeState = GnssMeasurement::ADR_STATE_VALID,
174*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeM = 1.52,
175*4d7e907cSAndroid Build Coastguard Worker .accumulatedDeltaRangeUncertaintyM = 2.43,
176*4d7e907cSAndroid Build Coastguard Worker .multipathIndicator = aidl::android::hardware::gnss::GnssMultipathIndicator::UNKNOWN,
177*4d7e907cSAndroid Build Coastguard Worker .state = GnssMeasurement::STATE_CODE_LOCK | GnssMeasurement::STATE_BIT_SYNC |
178*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::STATE_SUBFRAME_SYNC | GnssMeasurement::STATE_TOW_DECODED |
179*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::STATE_GLO_STRING_SYNC |
180*4d7e907cSAndroid Build Coastguard Worker GnssMeasurement::STATE_GLO_TOD_DECODED,
181*4d7e907cSAndroid Build Coastguard Worker .fullInterSignalBiasNs = 21.5,
182*4d7e907cSAndroid Build Coastguard Worker .fullInterSignalBiasUncertaintyNs = 792.0,
183*4d7e907cSAndroid Build Coastguard Worker .satelliteInterSignalBiasNs = 233.9,
184*4d7e907cSAndroid Build Coastguard Worker .satelliteInterSignalBiasUncertaintyNs = 921.2,
185*4d7e907cSAndroid Build Coastguard Worker .satellitePvt =
186*4d7e907cSAndroid Build Coastguard Worker {
187*4d7e907cSAndroid Build Coastguard Worker .flags = SatellitePvt::HAS_POSITION_VELOCITY_CLOCK_INFO |
188*4d7e907cSAndroid Build Coastguard Worker SatellitePvt::HAS_IONO | SatellitePvt::HAS_TROPO,
189*4d7e907cSAndroid Build Coastguard Worker .satPosEcef = {.posXMeters = 10442993.1153328,
190*4d7e907cSAndroid Build Coastguard Worker .posYMeters = -19926932.8051666,
191*4d7e907cSAndroid Build Coastguard Worker .posZMeters = -12034295.0216203,
192*4d7e907cSAndroid Build Coastguard Worker .ureMeters = 1000.2345678},
193*4d7e907cSAndroid Build Coastguard Worker .satVelEcef = {.velXMps = -478.667183715732,
194*4d7e907cSAndroid Build Coastguard Worker .velYMps = 1580.68371984114,
195*4d7e907cSAndroid Build Coastguard Worker .velZMps = -3030.52994449997,
196*4d7e907cSAndroid Build Coastguard Worker .ureRateMps = 10.2345678},
197*4d7e907cSAndroid Build Coastguard Worker .satClockInfo = {.satHardwareCodeBiasMeters = 1.396983861923e-09,
198*4d7e907cSAndroid Build Coastguard Worker .satTimeCorrectionMeters = -7113.08964331,
199*4d7e907cSAndroid Build Coastguard Worker .satClkDriftMps = 0},
200*4d7e907cSAndroid Build Coastguard Worker .ionoDelayMeters = 3.069949602639317e-08,
201*4d7e907cSAndroid Build Coastguard Worker .tropoDelayMeters = 3.882265204404031,
202*4d7e907cSAndroid Build Coastguard Worker .ephemerisSource =
203*4d7e907cSAndroid Build Coastguard Worker SatellitePvt::SatelliteEphemerisSource::SERVER_LONG_TERM,
204*4d7e907cSAndroid Build Coastguard Worker .timeOfClockSeconds = 12345,
205*4d7e907cSAndroid Build Coastguard Worker .issueOfDataClock = 143,
206*4d7e907cSAndroid Build Coastguard Worker .timeOfEphemerisSeconds = 9876,
207*4d7e907cSAndroid Build Coastguard Worker .issueOfDataEphemeris = 48,
208*4d7e907cSAndroid Build Coastguard Worker },
209*4d7e907cSAndroid Build Coastguard Worker .correlationVectors = {}};
210*4d7e907cSAndroid Build Coastguard Worker
211*4d7e907cSAndroid Build Coastguard Worker GnssClock clock = {.gnssClockFlags = GnssClock::HAS_FULL_BIAS | GnssClock::HAS_BIAS |
212*4d7e907cSAndroid Build Coastguard Worker GnssClock::HAS_BIAS_UNCERTAINTY | GnssClock::HAS_DRIFT |
213*4d7e907cSAndroid Build Coastguard Worker GnssClock::HAS_DRIFT_UNCERTAINTY,
214*4d7e907cSAndroid Build Coastguard Worker .timeNs = 2713545000000,
215*4d7e907cSAndroid Build Coastguard Worker .fullBiasNs = -1226701900521857520,
216*4d7e907cSAndroid Build Coastguard Worker .biasNs = 0.59689998626708984,
217*4d7e907cSAndroid Build Coastguard Worker .biasUncertaintyNs = 47514.989972114563,
218*4d7e907cSAndroid Build Coastguard Worker .driftNsps = -51.757811607455452,
219*4d7e907cSAndroid Build Coastguard Worker .driftUncertaintyNsps = 310.64968328491528,
220*4d7e907cSAndroid Build Coastguard Worker .hwClockDiscontinuityCount = 1,
221*4d7e907cSAndroid Build Coastguard Worker .referenceSignalTypeForIsb = signalType};
222*4d7e907cSAndroid Build Coastguard Worker
223*4d7e907cSAndroid Build Coastguard Worker ElapsedRealtime timestamp = {
224*4d7e907cSAndroid Build Coastguard Worker .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
225*4d7e907cSAndroid Build Coastguard Worker .timestampNs = ::android::elapsedRealtimeNano(),
226*4d7e907cSAndroid Build Coastguard Worker // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
227*4d7e907cSAndroid Build Coastguard Worker // In an actual implementation provide an estimate of the synchronization uncertainty
228*4d7e907cSAndroid Build Coastguard Worker // or don't set the field.
229*4d7e907cSAndroid Build Coastguard Worker .timeUncertaintyNs = 1020400};
230*4d7e907cSAndroid Build Coastguard Worker
231*4d7e907cSAndroid Build Coastguard Worker if (enableCorrVecOutputs) {
232*4d7e907cSAndroid Build Coastguard Worker aidl::android::hardware::gnss::CorrelationVector correlationVector1 = {
233*4d7e907cSAndroid Build Coastguard Worker .frequencyOffsetMps = 10,
234*4d7e907cSAndroid Build Coastguard Worker .samplingWidthM = 30,
235*4d7e907cSAndroid Build Coastguard Worker .samplingStartM = 0,
236*4d7e907cSAndroid Build Coastguard Worker .magnitude = {0, 5000, 10000, 5000, 0, 0, 3000, 0}};
237*4d7e907cSAndroid Build Coastguard Worker aidl::android::hardware::gnss::CorrelationVector correlationVector2 = {
238*4d7e907cSAndroid Build Coastguard Worker .frequencyOffsetMps = 20,
239*4d7e907cSAndroid Build Coastguard Worker .samplingWidthM = 30,
240*4d7e907cSAndroid Build Coastguard Worker .samplingStartM = -10,
241*4d7e907cSAndroid Build Coastguard Worker .magnitude = {0, 3000, 5000, 3000, 0, 0, 1000, 0}};
242*4d7e907cSAndroid Build Coastguard Worker measurement.correlationVectors = {correlationVector1, correlationVector2};
243*4d7e907cSAndroid Build Coastguard Worker measurement.flags |= GnssMeasurement::HAS_CORRELATION_VECTOR;
244*4d7e907cSAndroid Build Coastguard Worker }
245*4d7e907cSAndroid Build Coastguard Worker
246*4d7e907cSAndroid Build Coastguard Worker GnssAgc gnssAgc1 = {
247*4d7e907cSAndroid Build Coastguard Worker .agcLevelDb = 3.5,
248*4d7e907cSAndroid Build Coastguard Worker .constellation = GnssConstellationType::GLONASS,
249*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = (int64_t)kGloG1FreqHz,
250*4d7e907cSAndroid Build Coastguard Worker };
251*4d7e907cSAndroid Build Coastguard Worker
252*4d7e907cSAndroid Build Coastguard Worker GnssAgc gnssAgc2 = {
253*4d7e907cSAndroid Build Coastguard Worker .agcLevelDb = -5.1,
254*4d7e907cSAndroid Build Coastguard Worker .constellation = GnssConstellationType::GPS,
255*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = (int64_t)kGpsL1FreqHz,
256*4d7e907cSAndroid Build Coastguard Worker };
257*4d7e907cSAndroid Build Coastguard Worker
258*4d7e907cSAndroid Build Coastguard Worker GnssData gnssData = {.measurements = {measurement},
259*4d7e907cSAndroid Build Coastguard Worker .clock = clock,
260*4d7e907cSAndroid Build Coastguard Worker .elapsedRealtime = timestamp,
261*4d7e907cSAndroid Build Coastguard Worker .gnssAgcs = std::vector({gnssAgc1, gnssAgc2}),
262*4d7e907cSAndroid Build Coastguard Worker .isFullTracking = enableFullTracking};
263*4d7e907cSAndroid Build Coastguard Worker return gnssData;
264*4d7e907cSAndroid Build Coastguard Worker }
265*4d7e907cSAndroid Build Coastguard Worker
getMockLocation()266*4d7e907cSAndroid Build Coastguard Worker GnssLocation Utils::getMockLocation() {
267*4d7e907cSAndroid Build Coastguard Worker ElapsedRealtime elapsedRealtime = {
268*4d7e907cSAndroid Build Coastguard Worker .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
269*4d7e907cSAndroid Build Coastguard Worker .timestampNs = ::android::elapsedRealtimeNano(),
270*4d7e907cSAndroid Build Coastguard Worker // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
271*4d7e907cSAndroid Build Coastguard Worker // In an actual implementation provide an estimate of the synchronization uncertainty
272*4d7e907cSAndroid Build Coastguard Worker // or don't set the field.
273*4d7e907cSAndroid Build Coastguard Worker .timeUncertaintyNs = 1020400};
274*4d7e907cSAndroid Build Coastguard Worker GnssLocation location = {.gnssLocationFlags = 0xFF,
275*4d7e907cSAndroid Build Coastguard Worker .latitudeDegrees = gMockLatitudeDegrees,
276*4d7e907cSAndroid Build Coastguard Worker .longitudeDegrees = gMockLongitudeDegrees,
277*4d7e907cSAndroid Build Coastguard Worker .altitudeMeters = gMockAltitudeMeters,
278*4d7e907cSAndroid Build Coastguard Worker .speedMetersPerSec = gMockSpeedMetersPerSec,
279*4d7e907cSAndroid Build Coastguard Worker .bearingDegrees = gMockBearingDegrees,
280*4d7e907cSAndroid Build Coastguard Worker .horizontalAccuracyMeters = kMockHorizontalAccuracyMeters,
281*4d7e907cSAndroid Build Coastguard Worker .verticalAccuracyMeters = kMockVerticalAccuracyMeters,
282*4d7e907cSAndroid Build Coastguard Worker .speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
283*4d7e907cSAndroid Build Coastguard Worker .bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
284*4d7e907cSAndroid Build Coastguard Worker .timestampMillis = static_cast<int64_t>(
285*4d7e907cSAndroid Build Coastguard Worker kMockTimestamp + ::android::elapsedRealtimeNano() / 1e6),
286*4d7e907cSAndroid Build Coastguard Worker .elapsedRealtime = elapsedRealtime};
287*4d7e907cSAndroid Build Coastguard Worker return location;
288*4d7e907cSAndroid Build Coastguard Worker }
289*4d7e907cSAndroid Build Coastguard Worker
getMockLocationV2_0()290*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssLocation Utils::getMockLocationV2_0() {
291*4d7e907cSAndroid Build Coastguard Worker const V2_0::ElapsedRealtime timestamp = {
292*4d7e907cSAndroid Build Coastguard Worker .flags = V2_0::ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
293*4d7e907cSAndroid Build Coastguard Worker V2_0::ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
294*4d7e907cSAndroid Build Coastguard Worker .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
295*4d7e907cSAndroid Build Coastguard Worker // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
296*4d7e907cSAndroid Build Coastguard Worker // In an actual implementation provide an estimate of the synchronization uncertainty
297*4d7e907cSAndroid Build Coastguard Worker // or don't set the field.
298*4d7e907cSAndroid Build Coastguard Worker .timeUncertaintyNs = 1000000};
299*4d7e907cSAndroid Build Coastguard Worker
300*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssLocation location = {.v1_0 = Utils::getMockLocationV1_0(),
301*4d7e907cSAndroid Build Coastguard Worker .elapsedRealtime = timestamp};
302*4d7e907cSAndroid Build Coastguard Worker return location;
303*4d7e907cSAndroid Build Coastguard Worker }
304*4d7e907cSAndroid Build Coastguard Worker
getMockLocationV1_0()305*4d7e907cSAndroid Build Coastguard Worker V1_0::GnssLocation Utils::getMockLocationV1_0() {
306*4d7e907cSAndroid Build Coastguard Worker V1_0::GnssLocation location = {
307*4d7e907cSAndroid Build Coastguard Worker .gnssLocationFlags = 0xFF,
308*4d7e907cSAndroid Build Coastguard Worker .latitudeDegrees = gMockLatitudeDegrees,
309*4d7e907cSAndroid Build Coastguard Worker .longitudeDegrees = gMockLongitudeDegrees,
310*4d7e907cSAndroid Build Coastguard Worker .altitudeMeters = gMockAltitudeMeters,
311*4d7e907cSAndroid Build Coastguard Worker .speedMetersPerSec = gMockSpeedMetersPerSec,
312*4d7e907cSAndroid Build Coastguard Worker .bearingDegrees = gMockBearingDegrees,
313*4d7e907cSAndroid Build Coastguard Worker .horizontalAccuracyMeters = kMockHorizontalAccuracyMeters,
314*4d7e907cSAndroid Build Coastguard Worker .verticalAccuracyMeters = kMockVerticalAccuracyMeters,
315*4d7e907cSAndroid Build Coastguard Worker .speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
316*4d7e907cSAndroid Build Coastguard Worker .bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
317*4d7e907cSAndroid Build Coastguard Worker .timestamp =
318*4d7e907cSAndroid Build Coastguard Worker static_cast<int64_t>(kMockTimestamp + ::android::elapsedRealtimeNano() / 1e6)};
319*4d7e907cSAndroid Build Coastguard Worker return location;
320*4d7e907cSAndroid Build Coastguard Worker }
321*4d7e907cSAndroid Build Coastguard Worker
322*4d7e907cSAndroid Build Coastguard Worker namespace {
getMockSvInfo(int svid,GnssConstellationType type,float cN0DbHz,float basebandCN0DbHz,float elevationDegrees,float azimuthDegrees,long carrierFrequencyHz)323*4d7e907cSAndroid Build Coastguard Worker GnssSvInfo getMockSvInfo(int svid, GnssConstellationType type, float cN0DbHz, float basebandCN0DbHz,
324*4d7e907cSAndroid Build Coastguard Worker float elevationDegrees, float azimuthDegrees, long carrierFrequencyHz) {
325*4d7e907cSAndroid Build Coastguard Worker GnssSvInfo svInfo = {
326*4d7e907cSAndroid Build Coastguard Worker .svid = svid,
327*4d7e907cSAndroid Build Coastguard Worker .constellation = type,
328*4d7e907cSAndroid Build Coastguard Worker .cN0Dbhz = cN0DbHz,
329*4d7e907cSAndroid Build Coastguard Worker .basebandCN0DbHz = basebandCN0DbHz,
330*4d7e907cSAndroid Build Coastguard Worker .elevationDegrees = elevationDegrees,
331*4d7e907cSAndroid Build Coastguard Worker .azimuthDegrees = azimuthDegrees,
332*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = carrierFrequencyHz,
333*4d7e907cSAndroid Build Coastguard Worker .svFlag = (int)GnssSvFlags::USED_IN_FIX | (int)GnssSvFlags::HAS_EPHEMERIS_DATA |
334*4d7e907cSAndroid Build Coastguard Worker (int)GnssSvFlags::HAS_ALMANAC_DATA | (int)GnssSvFlags::HAS_CARRIER_FREQUENCY};
335*4d7e907cSAndroid Build Coastguard Worker return svInfo;
336*4d7e907cSAndroid Build Coastguard Worker }
337*4d7e907cSAndroid Build Coastguard Worker } // anonymous namespace
338*4d7e907cSAndroid Build Coastguard Worker
getMockSvInfoList()339*4d7e907cSAndroid Build Coastguard Worker std::vector<GnssSvInfo> Utils::getMockSvInfoList() {
340*4d7e907cSAndroid Build Coastguard Worker std::vector<GnssSvInfo> gnssSvInfoList = {
341*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(3, GnssConstellationType::GPS, 32.5, 27.5, 59.1, 166.5, kGpsL1FreqHz),
342*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(5, GnssConstellationType::GPS, 27.0, 22.0, 29.0, 56.5, kGpsL1FreqHz),
343*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(17, GnssConstellationType::GPS, 30.5, 25.5, 71.0, 77.0, kGpsL5FreqHz),
344*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(26, GnssConstellationType::GPS, 24.1, 19.1, 28.0, 253.0, kGpsL5FreqHz),
345*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(5, GnssConstellationType::GLONASS, 20.5, 15.5, 11.5, 116.0, kGloG1FreqHz),
346*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(17, GnssConstellationType::GLONASS, 21.5, 16.5, 28.5, 186.0,
347*4d7e907cSAndroid Build Coastguard Worker kGloG1FreqHz),
348*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(18, GnssConstellationType::GLONASS, 28.3, 25.3, 38.8, 69.0, kGloG1FreqHz),
349*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(10, GnssConstellationType::GLONASS, 25.0, 20.0, 66.0, 247.0,
350*4d7e907cSAndroid Build Coastguard Worker kGloG1FreqHz),
351*4d7e907cSAndroid Build Coastguard Worker getMockSvInfo(3, GnssConstellationType::IRNSS, 22.0, 19.7, 35.0, 112.0, kIrnssL5FreqHz),
352*4d7e907cSAndroid Build Coastguard Worker };
353*4d7e907cSAndroid Build Coastguard Worker return gnssSvInfoList;
354*4d7e907cSAndroid Build Coastguard Worker }
355*4d7e907cSAndroid Build Coastguard Worker
getMockSvInfoListV2_1()356*4d7e907cSAndroid Build Coastguard Worker hidl_vec<GnssSvInfoV2_1> Utils::getMockSvInfoListV2_1() {
357*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV1_0 gnssSvInfoV1_0 = Utils::getMockSvInfoV1_0(3, V1_0::GnssConstellationType::GPS,
358*4d7e907cSAndroid Build Coastguard Worker 32.5, 59.1, 166.5, kGpsL1FreqHz);
359*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV2_0 gnssSvInfoV2_0 =
360*4d7e907cSAndroid Build Coastguard Worker Utils::getMockSvInfoV2_0(gnssSvInfoV1_0, V2_0::GnssConstellationType::GPS);
361*4d7e907cSAndroid Build Coastguard Worker hidl_vec<GnssSvInfoV2_1> gnssSvInfoList = {
362*4d7e907cSAndroid Build Coastguard Worker Utils::getMockSvInfoV2_1(gnssSvInfoV2_0, 27.5),
363*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
364*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GPS, 27.0,
365*4d7e907cSAndroid Build Coastguard Worker 29.0, 56.5, kGpsL1FreqHz),
366*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GPS),
367*4d7e907cSAndroid Build Coastguard Worker 22.0),
368*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
369*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GPS, 30.5,
370*4d7e907cSAndroid Build Coastguard Worker 71.0, 77.0, kGpsL5FreqHz),
371*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GPS),
372*4d7e907cSAndroid Build Coastguard Worker 25.5),
373*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
374*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(26, V1_0::GnssConstellationType::GPS, 24.1,
375*4d7e907cSAndroid Build Coastguard Worker 28.0, 253.0, kGpsL5FreqHz),
376*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GPS),
377*4d7e907cSAndroid Build Coastguard Worker 19.1),
378*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
379*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GLONASS,
380*4d7e907cSAndroid Build Coastguard Worker 20.5, 11.5, 116.0, kGloG1FreqHz),
381*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GLONASS),
382*4d7e907cSAndroid Build Coastguard Worker 15.5),
383*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
384*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GLONASS,
385*4d7e907cSAndroid Build Coastguard Worker 21.5, 28.5, 186.0, kGloG1FreqHz),
386*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GLONASS),
387*4d7e907cSAndroid Build Coastguard Worker 16.5),
388*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
389*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(18, V1_0::GnssConstellationType::GLONASS,
390*4d7e907cSAndroid Build Coastguard Worker 28.3, 38.8, 69.0, kGloG1FreqHz),
391*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GLONASS),
392*4d7e907cSAndroid Build Coastguard Worker 25.3),
393*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
394*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(10, V1_0::GnssConstellationType::GLONASS,
395*4d7e907cSAndroid Build Coastguard Worker 25.0, 66.0, 247.0, kGloG1FreqHz),
396*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::GLONASS),
397*4d7e907cSAndroid Build Coastguard Worker 20.0),
398*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_1(
399*4d7e907cSAndroid Build Coastguard Worker getMockSvInfoV2_0(getMockSvInfoV1_0(3, V1_0::GnssConstellationType::UNKNOWN,
400*4d7e907cSAndroid Build Coastguard Worker 22.0, 35.0, 112.0, kIrnssL5FreqHz),
401*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType::IRNSS),
402*4d7e907cSAndroid Build Coastguard Worker 19.7),
403*4d7e907cSAndroid Build Coastguard Worker };
404*4d7e907cSAndroid Build Coastguard Worker return gnssSvInfoList;
405*4d7e907cSAndroid Build Coastguard Worker }
406*4d7e907cSAndroid Build Coastguard Worker
getMockSvInfoV2_1(GnssSvInfoV2_0 gnssSvInfoV2_0,float basebandCN0DbHz)407*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV2_1 Utils::getMockSvInfoV2_1(GnssSvInfoV2_0 gnssSvInfoV2_0, float basebandCN0DbHz) {
408*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV2_1 gnssSvInfoV2_1 = {
409*4d7e907cSAndroid Build Coastguard Worker .v2_0 = gnssSvInfoV2_0,
410*4d7e907cSAndroid Build Coastguard Worker .basebandCN0DbHz = basebandCN0DbHz,
411*4d7e907cSAndroid Build Coastguard Worker };
412*4d7e907cSAndroid Build Coastguard Worker return gnssSvInfoV2_1;
413*4d7e907cSAndroid Build Coastguard Worker }
414*4d7e907cSAndroid Build Coastguard Worker
getMockSvInfoV2_0(GnssSvInfoV1_0 gnssSvInfoV1_0,V2_0::GnssConstellationType type)415*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV2_0 Utils::getMockSvInfoV2_0(GnssSvInfoV1_0 gnssSvInfoV1_0,
416*4d7e907cSAndroid Build Coastguard Worker V2_0::GnssConstellationType type) {
417*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV2_0 gnssSvInfoV2_0 = {
418*4d7e907cSAndroid Build Coastguard Worker .v1_0 = gnssSvInfoV1_0,
419*4d7e907cSAndroid Build Coastguard Worker .constellation = type,
420*4d7e907cSAndroid Build Coastguard Worker };
421*4d7e907cSAndroid Build Coastguard Worker return gnssSvInfoV2_0;
422*4d7e907cSAndroid Build Coastguard Worker }
423*4d7e907cSAndroid Build Coastguard Worker
getMockSvInfoV1_0(int16_t svid,V1_0::GnssConstellationType type,float cN0DbHz,float elevationDegrees,float azimuthDegrees,float carrierFrequencyHz)424*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV1_0 Utils::getMockSvInfoV1_0(int16_t svid, V1_0::GnssConstellationType type,
425*4d7e907cSAndroid Build Coastguard Worker float cN0DbHz, float elevationDegrees, float azimuthDegrees,
426*4d7e907cSAndroid Build Coastguard Worker float carrierFrequencyHz) {
427*4d7e907cSAndroid Build Coastguard Worker GnssSvInfoV1_0 svInfo = {
428*4d7e907cSAndroid Build Coastguard Worker .svid = svid,
429*4d7e907cSAndroid Build Coastguard Worker .constellation = type,
430*4d7e907cSAndroid Build Coastguard Worker .cN0Dbhz = cN0DbHz,
431*4d7e907cSAndroid Build Coastguard Worker .elevationDegrees = elevationDegrees,
432*4d7e907cSAndroid Build Coastguard Worker .azimuthDegrees = azimuthDegrees,
433*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyHz = carrierFrequencyHz,
434*4d7e907cSAndroid Build Coastguard Worker .svFlag = GnssSvFlagsV1_0::USED_IN_FIX | GnssSvFlagsV1_0::HAS_EPHEMERIS_DATA |
435*4d7e907cSAndroid Build Coastguard Worker GnssSvFlagsV1_0::HAS_ALMANAC_DATA | GnssSvFlagsV1_0::HAS_CARRIER_FREQUENCY};
436*4d7e907cSAndroid Build Coastguard Worker return svInfo;
437*4d7e907cSAndroid Build Coastguard Worker }
438*4d7e907cSAndroid Build Coastguard Worker
getMockAntennaInfos()439*4d7e907cSAndroid Build Coastguard Worker hidl_vec<GnssAntennaInfo> Utils::getMockAntennaInfos() {
440*4d7e907cSAndroid Build Coastguard Worker GnssAntennaInfo mockAntennaInfo_1 = {
441*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyMHz = kGpsL1FreqHz * 1e-6,
442*4d7e907cSAndroid Build Coastguard Worker .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 1,
443*4d7e907cSAndroid Build Coastguard Worker .xUncertainty = 0.1,
444*4d7e907cSAndroid Build Coastguard Worker .y = 2,
445*4d7e907cSAndroid Build Coastguard Worker .yUncertainty = 0.1,
446*4d7e907cSAndroid Build Coastguard Worker .z = 3,
447*4d7e907cSAndroid Build Coastguard Worker .zUncertainty = 0.1},
448*4d7e907cSAndroid Build Coastguard Worker .phaseCenterVariationCorrectionMillimeters =
449*4d7e907cSAndroid Build Coastguard Worker {
450*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{1, -1, 5, -2, 3, -1}},
451*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{-2, 3, 2, 0, 1, 2}},
452*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{1, 3, 2, -1, -3, 5}},
453*4d7e907cSAndroid Build Coastguard Worker },
454*4d7e907cSAndroid Build Coastguard Worker .phaseCenterVariationCorrectionUncertaintyMillimeters =
455*4d7e907cSAndroid Build Coastguard Worker {
456*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.1, 0.2, 0.4, 0.1, 0.2, 0.3}},
457*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.3, 0.2, 0.3, 0.6, 0.1, 0.1}},
458*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.1, 0.1, 0.4, 0.2, 0.5, 0.3}},
459*4d7e907cSAndroid Build Coastguard Worker },
460*4d7e907cSAndroid Build Coastguard Worker .signalGainCorrectionDbi =
461*4d7e907cSAndroid Build Coastguard Worker {
462*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{2, -3, 1, -3, 0, -4}},
463*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{1, 0, -4, 1, 3, -2}},
464*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{3, -2, 0, -2, 3, 0}},
465*4d7e907cSAndroid Build Coastguard Worker },
466*4d7e907cSAndroid Build Coastguard Worker .signalGainCorrectionUncertaintyDbi =
467*4d7e907cSAndroid Build Coastguard Worker {
468*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.3, 0.1, 0.2, 0.6, 0.1, 0.3}},
469*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.1, 0.1, 0.5, 0.2, 0.3, 0.1}},
470*4d7e907cSAndroid Build Coastguard Worker Row{hidl_vec<double>{0.2, 0.4, 0.2, 0.1, 0.1, 0.2}},
471*4d7e907cSAndroid Build Coastguard Worker },
472*4d7e907cSAndroid Build Coastguard Worker };
473*4d7e907cSAndroid Build Coastguard Worker
474*4d7e907cSAndroid Build Coastguard Worker GnssAntennaInfo mockAntennaInfo_2 = {
475*4d7e907cSAndroid Build Coastguard Worker .carrierFrequencyMHz = kGpsL5FreqHz * 1e-6,
476*4d7e907cSAndroid Build Coastguard Worker .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 5,
477*4d7e907cSAndroid Build Coastguard Worker .xUncertainty = 0.1,
478*4d7e907cSAndroid Build Coastguard Worker .y = 6,
479*4d7e907cSAndroid Build Coastguard Worker .yUncertainty = 0.1,
480*4d7e907cSAndroid Build Coastguard Worker .z = 7,
481*4d7e907cSAndroid Build Coastguard Worker .zUncertainty = 0.1},
482*4d7e907cSAndroid Build Coastguard Worker };
483*4d7e907cSAndroid Build Coastguard Worker
484*4d7e907cSAndroid Build Coastguard Worker hidl_vec<GnssAntennaInfo> mockAntennaInfos = {
485*4d7e907cSAndroid Build Coastguard Worker mockAntennaInfo_1,
486*4d7e907cSAndroid Build Coastguard Worker mockAntennaInfo_2,
487*4d7e907cSAndroid Build Coastguard Worker };
488*4d7e907cSAndroid Build Coastguard Worker return mockAntennaInfos;
489*4d7e907cSAndroid Build Coastguard Worker }
490*4d7e907cSAndroid Build Coastguard Worker
491*4d7e907cSAndroid Build Coastguard Worker } // namespace common
492*4d7e907cSAndroid Build Coastguard Worker } // namespace gnss
493*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware
494*4d7e907cSAndroid Build Coastguard Worker } // namespace android
495