blob: d336f1bd5bc576baab2178716f96c4066916cad2 [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 Yangc06b5362019-10-25 14:14:35 -070020#include <utils/SystemClock.h>
Yu-Han Yanga5098612019-02-08 16:22:07 -080021
22namespace android {
23namespace hardware {
24namespace gnss {
25namespace common {
26
27using GnssSvFlags = V1_0::IGnssCallback::GnssSvFlags;
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080028using GnssMeasurementFlagsV1_0 = V1_0::IGnssMeasurementCallback::GnssMeasurementFlags;
29using GnssMeasurementFlagsV2_1 = V2_1::IGnssMeasurementCallback::GnssMeasurementFlags;
Yu-Han Yangc06b5362019-10-25 14:14:35 -070030using GnssMeasurementStateV2_0 = V2_0::IGnssMeasurementCallback::GnssMeasurementState;
31using ElapsedRealtime = V2_0::ElapsedRealtime;
32using ElapsedRealtimeFlags = V2_0::ElapsedRealtimeFlags;
33using GnssConstellationTypeV2_0 = V2_0::GnssConstellationType;
34using IGnssMeasurementCallbackV2_0 = V2_0::IGnssMeasurementCallback;
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080035using GnssSignalType = V2_1::GnssSignalType;
Yu-Han Yanga5098612019-02-08 16:22:07 -080036
Yu-Han Yangc06b5362019-10-25 14:14:35 -070037GnssDataV2_1 Utils::getMockMeasurementV2_1() {
38 GnssDataV2_0 gnssDataV2_0 = Utils::getMockMeasurementV2_0();
39 V2_1::IGnssMeasurementCallback::GnssMeasurement gnssMeasurementV2_1 = {
40 .v2_0 = gnssDataV2_0.measurements[0],
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080041 .flags = (uint32_t)(GnssMeasurementFlagsV2_1::HAS_CARRIER_FREQUENCY |
42 GnssMeasurementFlagsV2_1::HAS_CARRIER_PHASE |
Yu-Han Yang6668eab2020-03-03 15:23:50 -080043 GnssMeasurementFlagsV2_1::HAS_FULL_ISB |
44 GnssMeasurementFlagsV2_1::HAS_FULL_ISB_UNCERTAINTY |
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080045 GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB |
46 GnssMeasurementFlagsV2_1::HAS_SATELLITE_ISB_UNCERTAINTY),
Yu-Han Yang6668eab2020-03-03 15:23:50 -080047 .fullInterSignalBiasNs = 30.0,
48 .fullInterSignalBiasUncertaintyNs = 250.0,
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080049 .satelliteInterSignalBiasNs = 20.0,
50 .satelliteInterSignalBiasUncertaintyNs = 150.0,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070051 .basebandCN0DbHz = 25.0,
52 };
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080053 GnssSignalType referenceSignalTypeForIsb = {
54 .constellation = GnssConstellationTypeV2_0::GPS,
55 .carrierFrequencyHz = 1.59975e+09,
56 .codeType = "C",
57 };
58 V2_1::IGnssMeasurementCallback::GnssClock gnssClockV2_1 = {
59 .v1_0 = gnssDataV2_0.clock,
60 .referenceSignalTypeForIsb = referenceSignalTypeForIsb,
61 };
Yu-Han Yangc06b5362019-10-25 14:14:35 -070062 hidl_vec<V2_1::IGnssMeasurementCallback::GnssMeasurement> measurements(1);
63 measurements[0] = gnssMeasurementV2_1;
64 GnssDataV2_1 gnssDataV2_1 = {
65 .measurements = measurements,
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080066 .clock = gnssClockV2_1,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070067 .elapsedRealtime = gnssDataV2_0.elapsedRealtime,
68 };
69 return gnssDataV2_1;
70}
71
72GnssDataV2_0 Utils::getMockMeasurementV2_0() {
73 V1_0::IGnssMeasurementCallback::GnssMeasurement measurement_1_0 = {
Yu-Han Yang5fe14fa2019-12-03 20:54:53 -080074 .flags = (uint32_t)GnssMeasurementFlagsV1_0::HAS_CARRIER_FREQUENCY,
Yu-Han Yangc06b5362019-10-25 14:14:35 -070075 .svid = (int16_t)6,
76 .constellation = V1_0::GnssConstellationType::UNKNOWN,
77 .timeOffsetNs = 0.0,
78 .receivedSvTimeInNs = 8195997131077,
79 .receivedSvTimeUncertaintyInNs = 15,
80 .cN0DbHz = 30.0,
81 .pseudorangeRateMps = -484.13739013671875,
82 .pseudorangeRateUncertaintyMps = 1.0379999876022339,
83 .accumulatedDeltaRangeState = (uint32_t)V1_0::IGnssMeasurementCallback::
84 GnssAccumulatedDeltaRangeState::ADR_STATE_UNKNOWN,
85 .accumulatedDeltaRangeM = 0.0,
86 .accumulatedDeltaRangeUncertaintyM = 0.0,
87 .carrierFrequencyHz = 1.59975e+09,
88 .multipathIndicator =
89 V1_0::IGnssMeasurementCallback::GnssMultipathIndicator::INDICATOR_UNKNOWN};
90 V1_1::IGnssMeasurementCallback::GnssMeasurement measurement_1_1 = {.v1_0 = measurement_1_0};
91 V2_0::IGnssMeasurementCallback::GnssMeasurement measurement_2_0 = {
92 .v1_1 = measurement_1_1,
93 .codeType = "C",
94 .state = GnssMeasurementStateV2_0::STATE_CODE_LOCK |
95 GnssMeasurementStateV2_0::STATE_BIT_SYNC |
96 GnssMeasurementStateV2_0::STATE_SUBFRAME_SYNC |
97 GnssMeasurementStateV2_0::STATE_TOW_DECODED |
98 GnssMeasurementStateV2_0::STATE_GLO_STRING_SYNC |
99 GnssMeasurementStateV2_0::STATE_GLO_TOD_DECODED,
100 .constellation = GnssConstellationTypeV2_0::GLONASS,
101 };
102
103 hidl_vec<IGnssMeasurementCallbackV2_0::GnssMeasurement> measurements(1);
104 measurements[0] = measurement_2_0;
105 V1_0::IGnssMeasurementCallback::GnssClock clock = {.timeNs = 2713545000000,
106 .fullBiasNs = -1226701900521857520,
107 .biasNs = 0.59689998626708984,
108 .biasUncertaintyNs = 47514.989972114563,
109 .driftNsps = -51.757811607455452,
110 .driftUncertaintyNsps = 310.64968328491528,
111 .hwClockDiscontinuityCount = 1};
112
113 ElapsedRealtime timestamp = {
114 .flags = ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
115 ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
116 .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
117 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
118 // In an actual implementation provide an estimate of the synchronization uncertainty
119 // or don't set the field.
120 .timeUncertaintyNs = 1000000};
121
122 GnssDataV2_0 gnssData = {
123 .measurements = measurements, .clock = clock, .elapsedRealtime = timestamp};
124 return gnssData;
125}
126
127V2_0::GnssLocation Utils::getMockLocationV2_0() {
128 const V2_0::ElapsedRealtime timestamp = {
129 .flags = V2_0::ElapsedRealtimeFlags::HAS_TIMESTAMP_NS |
130 V2_0::ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS,
131 .timestampNs = static_cast<uint64_t>(::android::elapsedRealtimeNano()),
132 // This is an hardcoded value indicating a 1ms of uncertainty between the two clocks.
133 // In an actual implementation provide an estimate of the synchronization uncertainty
134 // or don't set the field.
135 .timeUncertaintyNs = 1000000};
136
137 V2_0::GnssLocation location = {.v1_0 = Utils::getMockLocationV1_0(),
138 .elapsedRealtime = timestamp};
Yu-Han Yanga5098612019-02-08 16:22:07 -0800139 return location;
140}
141
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700142V1_0::GnssLocation Utils::getMockLocationV1_0() {
143 V1_0::GnssLocation location = {
144 .gnssLocationFlags = 0xFF,
Enrico Granata3ba5d222020-10-21 17:20:00 -0600145 .latitudeDegrees = gMockLatitudeDegrees,
146 .longitudeDegrees = gMockLongitudeDegrees,
147 .altitudeMeters = gMockAltitudeMeters,
Enrico Granata72a47a22020-11-13 12:52:07 -0700148 .speedMetersPerSec = gMockSpeedMetersPerSec,
149 .bearingDegrees = gMockBearingDegrees,
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700150 .horizontalAccuracyMeters = kMockHorizontalAccuracyMeters,
151 .verticalAccuracyMeters = kMockVerticalAccuracyMeters,
152 .speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
153 .bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
154 .timestamp = kMockTimestamp};
155 return location;
156}
157
158hidl_vec<GnssSvInfoV2_1> Utils::getMockSvInfoListV2_1() {
159 GnssSvInfoV1_0 gnssSvInfoV1_0 =
160 Utils::getMockSvInfoV1_0(3, V1_0::GnssConstellationType::GPS, 32.5, 59.1, 166.5);
161 GnssSvInfoV2_0 gnssSvInfoV2_0 =
162 Utils::getMockSvInfoV2_0(gnssSvInfoV1_0, V2_0::GnssConstellationType::GPS);
163 hidl_vec<GnssSvInfoV2_1> gnssSvInfoList = {
164 Utils::getMockSvInfoV2_1(gnssSvInfoV2_0, 27.5),
165 getMockSvInfoV2_1(
166 getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GPS, 27.0,
167 29.0, 56.5),
168 V2_0::GnssConstellationType::GPS),
169 22.0),
170 getMockSvInfoV2_1(
171 getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GPS, 30.5,
172 71.0, 77.0),
173 V2_0::GnssConstellationType::GPS),
174 25.5),
175 getMockSvInfoV2_1(
176 getMockSvInfoV2_0(getMockSvInfoV1_0(26, V1_0::GnssConstellationType::GPS, 24.1,
177 28.0, 253.0),
178 V2_0::GnssConstellationType::GPS),
179 19.1),
180 getMockSvInfoV2_1(
181 getMockSvInfoV2_0(getMockSvInfoV1_0(5, V1_0::GnssConstellationType::GLONASS,
182 20.5, 11.5, 116.0),
183 V2_0::GnssConstellationType::GLONASS),
184 15.5),
185 getMockSvInfoV2_1(
186 getMockSvInfoV2_0(getMockSvInfoV1_0(17, V1_0::GnssConstellationType::GLONASS,
187 21.5, 28.5, 186.0),
188 V2_0::GnssConstellationType::GLONASS),
189 16.5),
190 getMockSvInfoV2_1(
191 getMockSvInfoV2_0(getMockSvInfoV1_0(18, V1_0::GnssConstellationType::GLONASS,
192 28.3, 38.8, 69.0),
193 V2_0::GnssConstellationType::GLONASS),
194 25.3),
195 getMockSvInfoV2_1(
196 getMockSvInfoV2_0(getMockSvInfoV1_0(10, V1_0::GnssConstellationType::GLONASS,
197 25.0, 66.0, 247.0),
198 V2_0::GnssConstellationType::GLONASS),
199 20.0),
Sasha Kuznetsov845f6d52019-12-04 12:17:50 -0800200 getMockSvInfoV2_1(
201 getMockSvInfoV2_0(getMockSvInfoV1_0(3, V1_0::GnssConstellationType::UNKNOWN,
202 22.0, 35.0, 112.0),
203 V2_0::GnssConstellationType::IRNSS),
204 19.7),
Yu-Han Yangc06b5362019-10-25 14:14:35 -0700205 };
206 return gnssSvInfoList;
207}
208
209GnssSvInfoV2_1 Utils::getMockSvInfoV2_1(GnssSvInfoV2_0 gnssSvInfoV2_0, float basebandCN0DbHz) {
210 GnssSvInfoV2_1 gnssSvInfoV2_1 = {
211 .v2_0 = gnssSvInfoV2_0,
212 .basebandCN0DbHz = basebandCN0DbHz,
213 };
214 return gnssSvInfoV2_1;
215}
216
217GnssSvInfoV2_0 Utils::getMockSvInfoV2_0(GnssSvInfoV1_0 gnssSvInfoV1_0,
218 V2_0::GnssConstellationType type) {
219 GnssSvInfoV2_0 gnssSvInfoV2_0 = {
220 .v1_0 = gnssSvInfoV1_0,
221 .constellation = type,
222 };
223 return gnssSvInfoV2_0;
224}
225
226GnssSvInfoV1_0 Utils::getMockSvInfoV1_0(int16_t svid, V1_0::GnssConstellationType type,
227 float cN0DbHz, float elevationDegrees,
228 float azimuthDegrees) {
229 GnssSvInfoV1_0 svInfo = {.svid = svid,
230 .constellation = type,
231 .cN0Dbhz = cN0DbHz,
232 .elevationDegrees = elevationDegrees,
233 .azimuthDegrees = azimuthDegrees,
234 .svFlag = GnssSvFlags::USED_IN_FIX | GnssSvFlags::HAS_EPHEMERIS_DATA |
235 GnssSvFlags::HAS_ALMANAC_DATA};
Yu-Han Yanga5098612019-02-08 16:22:07 -0800236 return svInfo;
237}
238
Sasha Kuznetsov768de572020-02-11 06:00:10 +0000239hidl_vec<GnssAntennaInfo> Utils::getMockAntennaInfos() {
240 GnssAntennaInfo mockAntennaInfo_1 = {
241 .carrierFrequencyMHz = 123412.12,
242 .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 1,
243 .xUncertainty = 0.1,
244 .y = 2,
245 .yUncertainty = 0.1,
246 .z = 3,
247 .zUncertainty = 0.1},
248 .phaseCenterVariationCorrectionMillimeters =
249 {
250 Row{hidl_vec<double>{1, -1, 5, -2, 3, -1}},
251 Row{hidl_vec<double>{-2, 3, 2, 0, 1, 2}},
252 Row{hidl_vec<double>{1, 3, 2, -1, -3, 5}},
253 },
254 .phaseCenterVariationCorrectionUncertaintyMillimeters =
255 {
256 Row{hidl_vec<double>{0.1, 0.2, 0.4, 0.1, 0.2, 0.3}},
257 Row{hidl_vec<double>{0.3, 0.2, 0.3, 0.6, 0.1, 0.1}},
258 Row{hidl_vec<double>{0.1, 0.1, 0.4, 0.2, 0.5, 0.3}},
259 },
260 .signalGainCorrectionDbi =
261 {
262 Row{hidl_vec<double>{2, -3, 1, -3, 0, -4}},
263 Row{hidl_vec<double>{1, 0, -4, 1, 3, -2}},
264 Row{hidl_vec<double>{3, -2, 0, -2, 3, 0}},
265 },
266 .signalGainCorrectionUncertaintyDbi =
267 {
268 Row{hidl_vec<double>{0.3, 0.1, 0.2, 0.6, 0.1, 0.3}},
269 Row{hidl_vec<double>{0.1, 0.1, 0.5, 0.2, 0.3, 0.1}},
270 Row{hidl_vec<double>{0.2, 0.4, 0.2, 0.1, 0.1, 0.2}},
271 },
272 };
273
274 GnssAntennaInfo mockAntennaInfo_2 = {
275 .carrierFrequencyMHz = 532324.23,
276 .phaseCenterOffsetCoordinateMillimeters = Coord{.x = 5,
277 .xUncertainty = 0.1,
278 .y = 6,
279 .yUncertainty = 0.1,
280 .z = 7,
281 .zUncertainty = 0.1},
282 };
283
284 hidl_vec<GnssAntennaInfo> mockAntennaInfos = {
285 mockAntennaInfo_1,
286 mockAntennaInfo_2,
287 };
288 return mockAntennaInfos;
289}
290
Yu-Han Yanga5098612019-02-08 16:22:07 -0800291} // namespace common
292} // namespace gnss
293} // namespace hardware
294} // namespace android