blob: c339e72d436033894eaeed07139932b0257069e0 [file] [log] [blame]
Yu-Han Yanga5098612019-02-08 16:22:07 -08001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <Constants.h>
Enrico Granata3ba5d222020-10-21 17:20:00 -060018#include <MockLocation.h>
Yu-Han Yanga5098612019-02-08 16:22:07 -080019#include <Utils.h>
Yu-Han Yang04832302020-11-20 09:51:18 -080020#include <aidl/android/hardware/gnss/BnGnss.h>
Yu-Han Yangc06b5362019-10-25 14:14:35 -070021#include <utils/SystemClock.h>
Yu-Han Yanga5098612019-02-08 16:22:07 -080022
23namespace android {
24namespace hardware {
25namespace gnss {
26namespace common {
27
Yu-Han Yangcfca8a72020-12-12 09:36:28 -080028using aidl::android::hardware::gnss::ElapsedRealtime;
29using aidl::android::hardware::gnss::GnssClock;
30using aidl::android::hardware::gnss::GnssData;
Yu-Han Yang3a75dc02021-09-27 01:01:06 -070031using aidl::android::hardware::gnss::GnssLocation;
Yu-Han Yangcfca8a72020-12-12 09:36:28 -080032using aidl::android::hardware::gnss::GnssMeasurement;
33using aidl::android::hardware::gnss::IGnss;
34using aidl::android::hardware::gnss::IGnssMeasurementCallback;
Joe Huangf9853982021-05-08 13:27:29 +080035using aidl::android::hardware::gnss::SatellitePvt;
Yu-Han Yangcfca8a72020-12-12 09:36:28 -080036
Yu-Han Yanga5098612019-02-08 16:22:07 -080037using GnssSvFlags = V1_0::IGnssCallback::GnssSvFlags;
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080038using GnssMeasurementFlagsV1_0 = V1_0::IGnssMeasurementCallback::GnssMeasurementFlags;
39using GnssMeasurementFlagsV2_1 = V2_1::IGnssMeasurementCallback::GnssMeasurementFlags;
Yu-Han Yangc06b5362019-10-25 14:14:35 -070040using GnssMeasurementStateV2_0 = V2_0::IGnssMeasurementCallback::GnssMeasurementState;
Yu-Han Yangc06b5362019-10-25 14:14:35 -070041using ElapsedRealtimeFlags = V2_0::ElapsedRealtimeFlags;
42using GnssConstellationTypeV2_0 = V2_0::GnssConstellationType;
43using IGnssMeasurementCallbackV2_0 = V2_0::IGnssMeasurementCallback;
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080044using GnssSignalType = V2_1::GnssSignalType;
Yu-Han Yanga5098612019-02-08 16:22:07 -080045
Yu-Han Yang04832302020-11-20 09:51:18 -080046using GnssDataV2_0 = V2_0::IGnssMeasurementCallback::GnssData;
47using GnssDataV2_1 = V2_1::IGnssMeasurementCallback::GnssData;
48using GnssSvInfoV1_0 = V1_0::IGnssCallback::GnssSvInfo;
49using GnssSvInfoV2_0 = V2_0::IGnssCallback::GnssSvInfo;
50using GnssSvInfoV2_1 = V2_1::IGnssCallback::GnssSvInfo;
51using GnssAntennaInfo = ::android::hardware::gnss::V2_1::IGnssAntennaInfoCallback::GnssAntennaInfo;
52using Row = V2_1::IGnssAntennaInfoCallback::Row;
53using Coord = V2_1::IGnssAntennaInfoCallback::Coord;
54
Yu-Han Yangc06b5362019-10-25 14:14:35 -070055GnssDataV2_1 Utils::getMockMeasurementV2_1() {
56 GnssDataV2_0 gnssDataV2_0 = Utils::getMockMeasurementV2_0();
57 V2_1::IGnssMeasurementCallback::GnssMeasurement gnssMeasurementV2_1 = {
58 .v2_0 = gnssDataV2_0.measurements[0],
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080059 .flags = (uint32_t)(GnssMeasurementFlagsV2_1::HAS_CARRIER_FREQUENCY |
60 GnssMeasurementFlagsV2_1::HAS_CARRIER_PHASE |
Yu-Han Yang6668eab2020-03-03 15:23:50 -080061 GnssMeasurementFlagsV2_1::HAS_FULL_ISB |
62 GnssMeasurementFlagsV2_1::HAS_FULL_ISB_UNCERTAINTY |
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080063 GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB |
64 GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB_UNCERTAINTY),
Yu-Han Yang6668eab2020-03-03 15:23:50 -080065 .fullInterSignalBiasNs = 30.0,
66 .fullInterSignalBiasUncertaintyNs = 250.0,
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080067 .satelliteInterSignalBiasNs = 20.0,
68 .satelliteInterSignalBiasUncertaintyNs = 150.0,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070069 .basebandCN0DbHz = 25.0,
70 };
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080071 GnssSignalType referenceSignalTypeForIsb = {
72 .constellation = GnssConstellationTypeV2_0::GPS,
73 .carrierFrequencyHz = 1.59975e+09,
74 .codeType = "C",
75 };
76 V2_1::IGnssMeasurementCallback::GnssClock gnssClockV2_1 = {
77 .v1_0 = gnssDataV2_0.clock,
78 .referenceSignalTypeForIsb = referenceSignalTypeForIsb,
79 };
Yu-Han Yangc06b5362019-10-25 14:14:35 -070080 hidl_vec<V2_1::IGnssMeasurementCallback::GnssMeasurement> measurements(1);
81 measurements[0] = gnssMeasurementV2_1;
82 GnssDataV2_1 gnssDataV2_1 = {
83 .measurements = measurements,
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080084 .clock = gnssClockV2_1,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070085 .elapsedRealtime = gnssDataV2_0.elapsedRealtime,
86 };
87 return gnssDataV2_1;
88}
89
90GnssDataV2_0 Utils::getMockMeasurementV2_0() {
91 V1_0::IGnssMeasurementCallback::GnssMeasurement measurement_1_0 = {
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080092 .flags = (uint32_t)GnssMeasurementFlagsV1_0::HAS_CARRIER_FREQUENCY,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070093 .svid = (int16_t)6,
94 .constellation = V1_0::GnssConstellationType::UNKNOWN,
95 .timeOffsetNs = 0.0,
96 .receivedSvTimeInNs = 8195997131077,
97 .receivedSvTimeUncertaintyInNs = 15,
98 .cN0DbHz = 30.0,
99 .pseudorangeRateMps = -484.13739013671875,
100 .pseudorangeRateUncertaintyMps = 1.0379999876022339,
101 .accumulatedDeltaRangeState = (uint32_t)V1_0::IGnssMeasurementCallback::
102 GnssAccumulatedDeltaRangeState::ADR_STATE_UNKNOWN,
103 .accumulatedDeltaRangeM = 0.0,
104 .accumulatedDeltaRangeUncertaintyM = 0.0,
105 .carrierFrequencyHz = 1.59975e+09,
106 .multipathIndicator =
107 V1_0::IGnssMeasurementCallback::GnssMultipathIndicator::INDICATOR_UNKNOWN};
108 V1_1::IGnssMeasurementCallback::GnssMeasurement measurement_1_1 = {.v1_0 = measurement_1_0};
109 V2_0::IGnssMeasurementCallback::GnssMeasurement measurement_2_0 = {
110 .v1_1 = measurement_1_1,
111 .codeType = "C",
112 .state = GnssMeasurementStateV2_0::STATE_CODE_LOCK |
113 GnssMeasurementStateV2_0::STATE_BIT_SYNC |
114 GnssMeasurementStateV2_0::STATE_SUBFRAME_SYNC |
115 GnssMeasurementStateV2_0::STATE_TOW_DECODED |
116 GnssMeasurementStateV2_0::STATE_GLO_STRING_SYNC |
117 GnssMeasurementStateV2_0::STATE_GLO_TOD_DECODED,
118 .constellation = GnssConstellationTypeV2_0::GLONASS,
119 };
120
121 hidl_vec<IGnssMeasurementCallbackV2_0::GnssMeasurement> measurements(1);
122 measurements[0] = measurement_2_0;
123 V1_0::IGnssMeasurementCallback::GnssClock clock = {.timeNs = 2713545000000,
124 .fullBiasNs = -1226701900521857520,
125 .biasNs = 0.59689998626708984,
126 .biasUncertaintyNs = 47514.989972114563,
127 .driftNsps = -51.757811607455452,
128 .driftUncertaintyNsps = 310.64968328491528,
129 .hwClockDiscontinuityCount = 1};
130
Yu-Han Yang04832302020-11-20 09:51:18 -0800131 V2_0::ElapsedRealtime timestamp = {
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700132 .flags = ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
133 ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
134 .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
135 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
136 // In an actual implementation provide an estimate of the synchronization uncertainty
137 // or don't set the field.
138 .timeUncertaintyNs = 1000000};
139
140 GnssDataV2_0 gnssData = {
141 .measurements = measurements, .clock = clock, .elapsedRealtime = timestamp};
142 return gnssData;
143}
144
Shinru Han4abab502020-12-09 15:07:18 +0800145GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs) {
Yu-Han Yang04832302020-11-20 09:51:18 -0800146 aidl::android::hardware::gnss::GnssSignalType signalType = {
147 .constellation = aidl::android::hardware::gnss::GnssConstellationType::GLONASS,
148 .carrierFrequencyHz = 1.59975e+09,
149 .codeType = aidl::android::hardware::gnss::GnssSignalType::CODE_TYPE_C,
150 };
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800151 GnssMeasurement measurement = {
152 .flags = GnssMeasurement::HAS_AUTOMATIC_GAIN_CONTROL |
153 GnssMeasurement::HAS_CARRIER_FREQUENCY | GnssMeasurement::HAS_CARRIER_PHASE |
154 GnssMeasurement::HAS_CARRIER_PHASE_UNCERTAINTY |
155 GnssMeasurement::HAS_FULL_ISB | GnssMeasurement::HAS_FULL_ISB_UNCERTAINTY |
156 GnssMeasurement::HAS_SATELLITE_ISB |
Joe Huang0d203ba2020-12-07 23:57:48 +0800157 GnssMeasurement::HAS_SATELLITE_ISB_UNCERTAINTY |
158 GnssMeasurement::HAS_SATELLITE_PVT,
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800159 .svid = 13,
Yu-Han Yang04832302020-11-20 09:51:18 -0800160 .signalType = signalType,
Yu-Han Yang04832302020-11-20 09:51:18 -0800161 .receivedSvTimeInNs = 8195997131077,
162 .receivedSvTimeUncertaintyInNs = 15,
163 .antennaCN0DbHz = 30.0,
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800164 .basebandCN0DbHz = 26.5,
165 .agcLevelDb = 2.3,
Yu-Han Yang04832302020-11-20 09:51:18 -0800166 .pseudorangeRateMps = -484.13739013671875,
167 .pseudorangeRateUncertaintyMps = 1.0379999876022339,
168 .accumulatedDeltaRangeState = GnssMeasurement::ADR_STATE_UNKNOWN,
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800169 .accumulatedDeltaRangeM = 1.52,
170 .accumulatedDeltaRangeUncertaintyM = 2.43,
Yu-Han Yang04832302020-11-20 09:51:18 -0800171 .multipathIndicator = aidl::android::hardware::gnss::GnssMultipathIndicator::UNKNOWN,
172 .state = GnssMeasurement::STATE_CODE_LOCK | GnssMeasurement::STATE_BIT_SYNC |
173 GnssMeasurement::STATE_SUBFRAME_SYNC | GnssMeasurement::STATE_TOW_DECODED |
174 GnssMeasurement::STATE_GLO_STRING_SYNC |
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800175 GnssMeasurement::STATE_GLO_TOD_DECODED,
176 .fullInterSignalBiasNs = 21.5,
177 .fullInterSignalBiasUncertaintyNs = 792.0,
178 .satelliteInterSignalBiasNs = 233.9,
179 .satelliteInterSignalBiasUncertaintyNs = 921.2,
Joe Huangf9853982021-05-08 13:27:29 +0800180 .satellitePvt = {.flags = SatellitePvt::HAS_POSITION_VELOCITY_CLOCK_INFO |
181 SatellitePvt::HAS_IONO | SatellitePvt::HAS_TROPO,
182 .satPosEcef = {.posXMeters = 10442993.1153328,
Joe Huang0d203ba2020-12-07 23:57:48 +0800183 .posYMeters = -19926932.8051666,
184 .posZMeters = -12034295.0216203,
185 .ureMeters = 1000.2345678},
186 .satVelEcef = {.velXMps = -478.667183715732,
187 .velYMps = 1580.68371984114,
188 .velZMps = -3030.52994449997,
189 .ureRateMps = 10.2345678},
190 .satClockInfo = {.satHardwareCodeBiasMeters = 1.396983861923e-09,
191 .satTimeCorrectionMeters = -7113.08964331,
192 .satClkDriftMps = 0},
193 .ionoDelayMeters = 3.069949602639317e-08,
Shinru Han4abab502020-12-09 15:07:18 +0800194 .tropoDelayMeters = 3.882265204404031},
195 .correlationVectors = {}};
Yu-Han Yang04832302020-11-20 09:51:18 -0800196
Yipeng Cao4e9b3b72021-01-23 00:29:52 +0000197 GnssClock clock = {.gnssClockFlags = GnssClock::HAS_FULL_BIAS | GnssClock::HAS_BIAS |
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800198 GnssClock::HAS_BIAS_UNCERTAINTY | GnssClock::HAS_DRIFT |
199 GnssClock::HAS_DRIFT_UNCERTAINTY,
Yuchen He3b681692021-08-10 22:59:47 +0000200 .timeNs = 2713545000000,
201 .fullBiasNs = -1226701900521857520,
202 .biasNs = 0.59689998626708984,
203 .biasUncertaintyNs = 47514.989972114563,
204 .driftNsps = -51.757811607455452,
205 .driftUncertaintyNsps = 310.64968328491528,
206 .hwClockDiscontinuityCount = 1};
Yu-Han Yang04832302020-11-20 09:51:18 -0800207
208 ElapsedRealtime timestamp = {
209 .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
210 .timestampNs = ::android::elapsedRealtimeNano(),
211 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
212 // In an actual implementation provide an estimate of the synchronization uncertainty
213 // or don't set the field.
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800214 .timeUncertaintyNs = 1020400};
Yu-Han Yang04832302020-11-20 09:51:18 -0800215
Shinru Han4abab502020-12-09 15:07:18 +0800216 if (enableCorrVecOutputs) {
217 aidl::android::hardware::gnss::CorrelationVector correlationVector1 = {
218 .frequencyOffsetMps = 10,
219 .samplingWidthM = 30,
220 .samplingStartM = 0,
221 .magnitude = {0, 5000, 10000, 5000, 0, 0, 3000, 0}};
222 aidl::android::hardware::gnss::CorrelationVector correlationVector2 = {
223 .frequencyOffsetMps = 20,
224 .samplingWidthM = 30,
Shinru Han37f63ed2021-08-10 16:53:17 +0800225 .samplingStartM = -10,
Shinru Han4abab502020-12-09 15:07:18 +0800226 .magnitude = {0, 3000, 5000, 3000, 0, 0, 1000, 0}};
227 measurement.correlationVectors = {correlationVector1, correlationVector2};
228 measurement.flags |= GnssMeasurement::HAS_CORRELATION_VECTOR;
229 }
230
Yu-Han Yangcfca8a72020-12-12 09:36:28 -0800231 GnssData gnssData = {
Yu-Han Yang04832302020-11-20 09:51:18 -0800232 .measurements = {measurement}, .clock = clock, .elapsedRealtime = timestamp};
233 return gnssData;
234}
235
Yu-Han Yang3a75dc02021-09-27 01:01:06 -0700236GnssLocation Utils::getMockLocation() {
237 ElapsedRealtime elapsedRealtime = {
238 .flags = ElapsedRealtime::HAS_TIMESTAMP_NS | ElapsedRealtime::HAS_TIME_UNCERTAINTY_NS,
239 .timestampNs = ::android::elapsedRealtimeNano(),
240 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
241 // In an actual implementation provide an estimate of the synchronization uncertainty
242 // or don't set the field.
243 .timeUncertaintyNs = 1020400};
244 GnssLocation location = {.gnssLocationFlags = 0xFF,
245 .latitudeDegrees = gMockLatitudeDegrees,
246 .longitudeDegrees = gMockLongitudeDegrees,
247 .altitudeMeters = gMockAltitudeMeters,
248 .speedMetersPerSec = gMockSpeedMetersPerSec,
249 .bearingDegrees = gMockBearingDegrees,
250 .horizontalAccuracyMeters = kMockHorizontalAccuracyMeters,
251 .verticalAccuracyMeters = kMockVerticalAccuracyMeters,
252 .speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
253 .bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
254 .timestampMillis = static_cast<int64_t>(
255 kMockTimestamp + ::android::elapsedRealtimeNano() / 1e6),
256 .elapsedRealtime = elapsedRealtime};
257 return location;
258}
259
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700260V2_0::GnssLocation Utils::getMockLocationV2_0() {
261 const V2_0::ElapsedRealtime timestamp = {
262 .flags = V2_0::ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
263 V2_0::ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
264 .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
265 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
266 // In an actual implementation provide an estimate of the synchronization uncertainty
267 // or don't set the field.
268 .timeUncertaintyNs = 1000000};
269
270 V2_0::GnssLocation location = {.v1_0 = Utils::getMockLocationV1_0(),
271 .elapsedRealtime = timestamp};
Yu-Han Yanga5098612019-02-08 16:22:07 -0800272 return location;
273}
274
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700275V1_0::GnssLocation Utils::getMockLocationV1_0() {
276 V1_0::GnssLocation location = {
277 .gnssLocationFlags = 0xFF,
Enrico Granata3ba5d222020-10-21 17:20:00 -0600278 .latitudeDegrees = gMockLatitudeDegrees,
279 .longitudeDegrees = gMockLongitudeDegrees,
280 .altitudeMeters = gMockAltitudeMeters,
Enrico Granata72a47a22020-11-13 12:52:07 -0700281 .speedMetersPerSec = gMockSpeedMetersPerSec,
282 .bearingDegrees = gMockBearingDegrees,
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700283 .horizontalAccuracyMeters = kMockHorizontalAccuracyMeters,
284 .verticalAccuracyMeters = kMockVerticalAccuracyMeters,
285 .speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
286 .bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
Yu-Han Yangbcf3b222020-12-28 13:32:39 -0800287 .timestamp =
288 static_cast<int64_t>(kMockTimestamp + ::android::elapsedRealtimeNano() / 1e6)};
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700289 return location;
290}
291
292hidl_vec<GnssSvInfoV2_1> Utils::getMockSvInfoListV2_1() {
Yu-Han Yang703ac962021-07-20 16:47:37 -0700293 GnssSvInfoV1_0 gnssSvInfoV1_0 = Utils::getMockSvInfoV1_0(3, V1_0::GnssConstellationType::GPS,
294 32.5, 59.1, 166.5, kGpsL1FreqHz);
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700295 GnssSvInfoV2_0 gnssSvInfoV2_0 =
296 Utils::getMockSvInfoV2_0(gnssSvInfoV1_0, V2_0::GnssConstellationType::GPS);
297 hidl_vec<GnssSvInfoV2_1> gnssSvInfoList = {
298 Utils::getMockSvInfoV2_1(gnssSvInfoV2_0, 27.5),
299 getMockSvInfoV2_1(
300 getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GPS, 27.0,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700301 29.0, 56.5, kGpsL1FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700302 V2_0::GnssConstellationType::GPS),
303 22.0),
304 getMockSvInfoV2_1(
305 getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GPS, 30.5,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700306 71.0, 77.0, kGpsL5FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700307 V2_0::GnssConstellationType::GPS),
308 25.5),
309 getMockSvInfoV2_1(
310 getMockSvInfoV2_0(getMockSvInfoV1_0(26, V1_0::GnssConstellationType::GPS, 24.1,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700311 28.0, 253.0, kGpsL5FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700312 V2_0::GnssConstellationType::GPS),
313 19.1),
314 getMockSvInfoV2_1(
315 getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GLONASS,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700316 20.5, 11.5, 116.0, kGloG1FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700317 V2_0::GnssConstellationType::GLONASS),
318 15.5),
319 getMockSvInfoV2_1(
320 getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GLONASS,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700321 21.5, 28.5, 186.0, kGloG1FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700322 V2_0::GnssConstellationType::GLONASS),
323 16.5),
324 getMockSvInfoV2_1(
325 getMockSvInfoV2_0(getMockSvInfoV1_0(18, V1_0::GnssConstellationType::GLONASS,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700326 28.3, 38.8, 69.0, kGloG1FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700327 V2_0::GnssConstellationType::GLONASS),
328 25.3),
329 getMockSvInfoV2_1(
330 getMockSvInfoV2_0(getMockSvInfoV1_0(10, V1_0::GnssConstellationType::GLONASS,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700331 25.0, 66.0, 247.0, kGloG1FreqHz),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700332 V2_0::GnssConstellationType::GLONASS),
333 20.0),
Sasha Kuznetsov845f6d52019-12-04 12:17:50 -0800334 getMockSvInfoV2_1(
335 getMockSvInfoV2_0(getMockSvInfoV1_0(3, V1_0::GnssConstellationType::UNKNOWN,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700336 22.0, 35.0, 112.0, kIrnssL5FreqHz),
Sasha Kuznetsov845f6d52019-12-04 12:17:50 -0800337 V2_0::GnssConstellationType::IRNSS),
338 19.7),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700339 };
340 return gnssSvInfoList;
341}
342
343GnssSvInfoV2_1 Utils::getMockSvInfoV2_1(GnssSvInfoV2_0 gnssSvInfoV2_0, float basebandCN0DbHz) {
344 GnssSvInfoV2_1 gnssSvInfoV2_1 = {
345 .v2_0 = gnssSvInfoV2_0,
346 .basebandCN0DbHz = basebandCN0DbHz,
347 };
348 return gnssSvInfoV2_1;
349}
350
351GnssSvInfoV2_0 Utils::getMockSvInfoV2_0(GnssSvInfoV1_0 gnssSvInfoV1_0,
352 V2_0::GnssConstellationType type) {
353 GnssSvInfoV2_0 gnssSvInfoV2_0 = {
354 .v1_0 = gnssSvInfoV1_0,
355 .constellation = type,
356 };
357 return gnssSvInfoV2_0;
358}
359
360GnssSvInfoV1_0 Utils::getMockSvInfoV1_0(int16_t svid, V1_0::GnssConstellationType type,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700361 float cN0DbHz, float elevationDegrees, float azimuthDegrees,
362 float carrierFrequencyHz) {
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700363 GnssSvInfoV1_0 svInfo = {.svid = svid,
364 .constellation = type,
365 .cN0Dbhz = cN0DbHz,
366 .elevationDegrees = elevationDegrees,
367 .azimuthDegrees = azimuthDegrees,
Yu-Han Yang703ac962021-07-20 16:47:37 -0700368 .carrierFrequencyHz = carrierFrequencyHz,
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700369 .svFlag = GnssSvFlags::USED_IN_FIX | GnssSvFlags::HAS_EPHEMERIS_DATA |
Yu-Han Yang703ac962021-07-20 16:47:37 -0700370 GnssSvFlags::HAS_ALMANAC_DATA |
371 GnssSvFlags::HAS_CARRIER_FREQUENCY};
Yu-Han Yanga5098612019-02-08 16:22:07 -0800372 return svInfo;
373}
374
Sasha Kuznetsov768de572020-02-11 06:00:10 +0000375hidl_vec<GnssAntennaInfo> Utils::getMockAntennaInfos() {
376 GnssAntennaInfo mockAntennaInfo_1 = {
Yu-Han Yang703ac962021-07-20 16:47:37 -0700377 .carrierFrequencyMHz = kGpsL1FreqHz * 1e-6,
Sasha Kuznetsov768de572020-02-11 06:00:10 +0000378 .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 1,
379 .xUncertainty = 0.1,
380 .y = 2,
381 .yUncertainty = 0.1,
382 .z = 3,
383 .zUncertainty = 0.1},
384 .phaseCenterVariationCorrectionMillimeters =
385 {
386 Row{hidl_vec<double>{1, -1, 5, -2, 3, -1}},
387 Row{hidl_vec<double>{-2, 3, 2, 0, 1, 2}},
388 Row{hidl_vec<double>{1, 3, 2, -1, -3, 5}},
389 },
390 .phaseCenterVariationCorrectionUncertaintyMillimeters =
391 {
392 Row{hidl_vec<double>{0.1, 0.2, 0.4, 0.1, 0.2, 0.3}},
393 Row{hidl_vec<double>{0.3, 0.2, 0.3, 0.6, 0.1, 0.1}},
394 Row{hidl_vec<double>{0.1, 0.1, 0.4, 0.2, 0.5, 0.3}},
395 },
396 .signalGainCorrectionDbi =
397 {
398 Row{hidl_vec<double>{2, -3, 1, -3, 0, -4}},
399 Row{hidl_vec<double>{1, 0, -4, 1, 3, -2}},
400 Row{hidl_vec<double>{3, -2, 0, -2, 3, 0}},
401 },
402 .signalGainCorrectionUncertaintyDbi =
403 {
404 Row{hidl_vec<double>{0.3, 0.1, 0.2, 0.6, 0.1, 0.3}},
405 Row{hidl_vec<double>{0.1, 0.1, 0.5, 0.2, 0.3, 0.1}},
406 Row{hidl_vec<double>{0.2, 0.4, 0.2, 0.1, 0.1, 0.2}},
407 },
408 };
409
410 GnssAntennaInfo mockAntennaInfo_2 = {
Yu-Han Yang703ac962021-07-20 16:47:37 -0700411 .carrierFrequencyMHz = kGpsL5FreqHz * 1e-6,
Sasha Kuznetsov768de572020-02-11 06:00:10 +0000412 .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 5,
413 .xUncertainty = 0.1,
414 .y = 6,
415 .yUncertainty = 0.1,
416 .z = 7,
417 .zUncertainty = 0.1},
418 };
419
420 hidl_vec<GnssAntennaInfo> mockAntennaInfos = {
421 mockAntennaInfo_1,
422 mockAntennaInfo_2,
423 };
424 return mockAntennaInfos;
425}
426
Yu-Han Yanga5098612019-02-08 16:22:07 -0800427} // namespace common
428} // namespace gnss
429} // namespace hardware
430} // namespace android