1 /*
2 * Copyright (C) 2024 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 // Define LOG_TAG before <log/log.h> to overwrite the default value.
18
19 #define LOG_TAG "GnssAssistanceJni"
20
21 #include "GnssAssistance.h"
22
23 #include <utils/String16.h>
24
25 #include "GnssAssistanceCallback.h"
26 #include "Utils.h"
27
28 namespace android::gnss {
29
30 using GnssConstellationType = android::hardware::gnss::GnssConstellationType;
31 using GnssCorrectionComponent = android::hardware::gnss::gnss_assistance::GnssCorrectionComponent;
32 using GnssInterval =
33 android::hardware::gnss::gnss_assistance::GnssCorrectionComponent::GnssInterval;
34 using GnssSatelliteAlmanac =
35 android::hardware::gnss::gnss_assistance::GnssAlmanac::GnssSatelliteAlmanac;
36 using IonosphericCorrection = android::hardware::gnss::gnss_assistance::IonosphericCorrection;
37 using PseudorangeCorrection =
38 android::hardware::gnss::gnss_assistance::GnssCorrectionComponent::PseudorangeCorrection;
39 using GalileoSatelliteClockModel = android::hardware::gnss::gnss_assistance::
40 GalileoSatelliteEphemeris::GalileoSatelliteClockModel;
41 using GalileoSvHealth =
42 android::hardware::gnss::gnss_assistance::GalileoSatelliteEphemeris::GalileoSvHealth;
43 using GlonassSatelliteAlmanac =
44 android::hardware::gnss::gnss_assistance::GlonassAlmanac::GlonassSatelliteAlmanac;
45 using GlonassSatelliteClockModel = android::hardware::gnss::gnss_assistance::
46 GlonassSatelliteEphemeris::GlonassSatelliteClockModel;
47 using GlonassSatelliteOrbitModel = android::hardware::gnss::gnss_assistance::
48 GlonassSatelliteEphemeris::GlonassSatelliteOrbitModel;
49 using GnssSignalType = hardware::gnss::GnssSignalType;
50 using GnssConstellationType = hardware::gnss::GnssConstellationType;
51 using BeidouB1CSatelliteOrbitType =
52 android::hardware::gnss::gnss_assistance::AuxiliaryInformation::BeidouB1CSatelliteOrbitType;
53 using QzssSatelliteEphemeris = android::hardware::gnss::gnss_assistance::QzssSatelliteEphemeris;
54
55 // Implementation of GnssAssistance (AIDL HAL)
56
57 namespace {
58 jmethodID method_gnssAssistanceGetGpsAssistance;
59 jmethodID method_gnssAssistanceGetGlonassAssistance;
60 jmethodID method_gnssAssistanceGetGalileoAssistance;
61 jmethodID method_gnssAssistanceGetBeidouAssistance;
62 jmethodID method_gnssAssistanceGetQzssAssistance;
63
64 jmethodID method_listSize;
65 jmethodID method_listGet;
66
67 jmethodID method_gnssAlmanacGetIssueDateMillis;
68 jmethodID method_gnssAlmanacGetIoda;
69 jmethodID method_gnssAlmanacGetWeekNumber;
70 jmethodID method_gnssAlmanacGetToaSeconds;
71 jmethodID method_gnssAlmanacGetSatelliteAlmanacs;
72 jmethodID method_gnssAlmanacIsCompleteAlmanacProvided;
73 jmethodID method_satelliteAlmanacGetSvid;
74 jmethodID method_satelliteAlmanacGetSvHealth;
75 jmethodID method_satelliteAlmanacGetAf0;
76 jmethodID method_satelliteAlmanacGetAf1;
77 jmethodID method_satelliteAlmanacGetEccentricity;
78 jmethodID method_satelliteAlmanacGetInclination;
79 jmethodID method_satelliteAlmanacGetM0;
80 jmethodID method_satelliteAlmanacGetOmega;
81 jmethodID method_satelliteAlmanacGetOmega0;
82 jmethodID method_satelliteAlmanacGetOmegaDot;
83 jmethodID method_satelliteAlmanacGetRootA;
84
85 jmethodID method_satelliteEphemerisTimeGetIode;
86 jmethodID method_satelliteEphemerisTimeGetToeSeconds;
87 jmethodID method_satelliteEphemerisTimeGetWeekNumber;
88
89 jmethodID method_keplerianOrbitModelGetDeltaN;
90 jmethodID method_keplerianOrbitModelGetEccentricity;
91 jmethodID method_keplerianOrbitModelGetI0;
92 jmethodID method_keplerianOrbitModelGetIDot;
93 jmethodID method_keplerianOrbitModelGetM0;
94 jmethodID method_keplerianOrbitModelGetOmega;
95 jmethodID method_keplerianOrbitModelGetOmega0;
96 jmethodID method_keplerianOrbitModelGetOmegaDot;
97 jmethodID method_keplerianOrbitModelGetRootA;
98 jmethodID method_keplerianOrbitModelGetSecondOrderHarmonicPerturbation;
99 jmethodID method_secondOrderHarmonicPerturbationGetCic;
100 jmethodID method_secondOrderHarmonicPerturbationGetCis;
101 jmethodID method_secondOrderHarmonicPerturbationGetCrc;
102 jmethodID method_secondOrderHarmonicPerturbationGetCrs;
103 jmethodID method_secondOrderHarmonicPerturbationGetCuc;
104 jmethodID method_secondOrderHarmonicPerturbationGetCus;
105
106 jmethodID method_klobucharIonosphericModelGetAlpha0;
107 jmethodID method_klobucharIonosphericModelGetAlpha1;
108 jmethodID method_klobucharIonosphericModelGetAlpha2;
109 jmethodID method_klobucharIonosphericModelGetAlpha3;
110 jmethodID method_klobucharIonosphericModelGetBeta0;
111 jmethodID method_klobucharIonosphericModelGetBeta1;
112 jmethodID method_klobucharIonosphericModelGetBeta2;
113 jmethodID method_klobucharIonosphericModelGetBeta3;
114
115 jmethodID method_utcModelGetA0;
116 jmethodID method_utcModelGetA1;
117 jmethodID method_utcModelGetTimeOfWeek;
118 jmethodID method_utcModelGetWeekNumber;
119
120 jmethodID method_leapSecondsModelGetDayNumberLeapSecondsFuture;
121 jmethodID method_leapSecondsModelGetLeapSeconds;
122 jmethodID method_leapSecondsModelGetLeapSecondsFuture;
123 jmethodID method_leapSecondsModelGetWeekNumberLeapSecondsFuture;
124
125 jmethodID method_timeModelsGetTimeOfWeek;
126 jmethodID method_timeModelsGetToGnss;
127 jmethodID method_timeModelsGetWeekNumber;
128 jmethodID method_timeModelsGetA0;
129 jmethodID method_timeModelsGetA1;
130
131 jmethodID method_realTimeIntegrityModelGetBadSvid;
132 jmethodID method_realTimeIntegrityModelGetBadSignalTypes;
133 jmethodID method_realTimeIntegrityModelGetStartDateSeconds;
134 jmethodID method_realTimeIntegrityModelGetEndDateSeconds;
135 jmethodID method_realTimeIntegrityModelGetPublishDateSeconds;
136 jmethodID method_realTimeIntegrityModelGetAdvisoryNumber;
137 jmethodID method_realTimeIntegrityModelGetAdvisoryType;
138
139 jmethodID method_gnssSignalTypeGetConstellationType;
140 jmethodID method_gnssSignalTypeGetCarrierFrequencyHz;
141 jmethodID method_gnssSignalTypeGetCodeType;
142
143 jmethodID method_auxiliaryInformationGetSvid;
144 jmethodID method_auxiliaryInformationGetAvailableSignalTypes;
145 jmethodID method_auxiliaryInformationGetFrequencyChannelNumber;
146 jmethodID method_auxiliaryInformationGetSatType;
147
148 jmethodID method_satelliteCorrectionGetSvid;
149 jmethodID method_satelliteCorrectionGetIonosphericCorrections;
150 jmethodID method_ionosphericCorrectionGetCarrierFrequencyHz;
151 jmethodID method_ionosphericCorrectionGetIonosphericCorrection;
152 jmethodID method_gnssCorrectionComponentGetPseudorangeCorrection;
153 jmethodID method_gnssCorrectionComponentGetSourceKey;
154 jmethodID method_gnssCorrectionComponentGetValidityInterval;
155 jmethodID method_pseudorangeCorrectionGetCorrectionMeters;
156 jmethodID method_pseudorangeCorrectionGetCorrectionUncertaintyMeters;
157 jmethodID method_pseudorangeCorrectionGetCorrectionRateMetersPerSecond;
158 jmethodID method_gnssIntervalGetStartMillisSinceGpsEpoch;
159 jmethodID method_gnssIntervalGetEndMillisSinceGpsEpoch;
160
161 jmethodID method_gpsAssistanceGetAlmanac;
162 jmethodID method_gpsAssistanceGetIonosphericModel;
163 jmethodID method_gpsAssistanceGetUtcModel;
164 jmethodID method_gpsAssistanceGetLeapSecondsModel;
165 jmethodID method_gpsAssistanceGetTimeModels;
166 jmethodID method_gpsAssistanceGetSatelliteEphemeris;
167 jmethodID method_gpsAssistanceGetRealTimeIntegrityModels;
168 jmethodID method_gpsAssistanceGetSatelliteCorrections;
169 jmethodID method_gpsAssistanceGetAuxiliaryInformation;
170 jmethodID method_gpsSatelliteEphemerisGetSvid;
171 jmethodID method_gpsSatelliteEphemerisGetGpsL2Params;
172 jmethodID method_gpsSatelliteEphemerisGetSatelliteClockModel;
173 jmethodID method_gpsSatelliteEphemerisGetSatelliteOrbitModel;
174 jmethodID method_gpsSatelliteEphemerisGetSatelliteHealth;
175 jmethodID method_gpsSatelliteEphemerisGetSatelliteEphemerisTime;
176 jmethodID method_gpsL2ParamsGetL2Code;
177 jmethodID method_gpsL2ParamsGetL2Flag;
178 jmethodID method_gpsSatelliteClockModelGetAf0;
179 jmethodID method_gpsSatelliteClockModelGetAf1;
180 jmethodID method_gpsSatelliteClockModelGetAf2;
181 jmethodID method_gpsSatelliteClockModelGetTgd;
182 jmethodID method_gpsSatelliteClockModelGetIodc;
183 jmethodID method_gpsSatelliteClockModelGetTimeOfClockSeconds;
184 jmethodID method_gpsSatelliteHealthGetFitInt;
185 jmethodID method_gpsSatelliteHealthGetSvAccur;
186 jmethodID method_gpsSatelliteHealthGetSvHealth;
187
188 jmethodID method_beidouAssistanceGetAlmanac;
189 jmethodID method_beidouAssistanceGetIonosphericModel;
190 jmethodID method_beidouAssistanceGetUtcModel;
191 jmethodID method_beidouAssistanceGetLeapSecondsModel;
192 jmethodID method_beidouAssistanceGetTimeModels;
193 jmethodID method_beidouAssistanceGetSatelliteEphemeris;
194 jmethodID method_beidouAssistanceGetSatelliteCorrections;
195 jmethodID method_beidouAssistanceGetRealTimeIntegrityModels;
196 jmethodID method_beidouAssistanceGetAuxiliaryInformation;
197 jmethodID method_beidouSatelliteEphemerisGetSvid;
198 jmethodID method_beidouSatelliteEphemerisGetSatelliteClockModel;
199 jmethodID method_beidouSatelliteEphemerisGetSatelliteOrbitModel;
200 jmethodID method_beidouSatelliteEphemerisGetSatelliteHealth;
201 jmethodID method_beidouSatelliteEphemerisGetSatelliteEphemerisTime;
202 jmethodID method_beidouSatelliteClockModelGetAf0;
203 jmethodID method_beidouSatelliteClockModelGetAf1;
204 jmethodID method_beidouSatelliteClockModelGetAf2;
205 jmethodID method_beidouSatelliteClockModelGetAodc;
206 jmethodID method_beidouSatelliteClockModelGetTgd1;
207 jmethodID method_beidouSatelliteClockModelGetTgd2;
208 jmethodID method_beidouSatelliteClockModelGetTimeOfClockSeconds;
209 jmethodID method_beidouSatelliteHealthGetSatH1;
210 jmethodID method_beidouSatelliteHealthGetSvAccur;
211 jmethodID method_beidouSatelliteEphemerisTimeGetAode;
212 jmethodID method_beidouSatelliteEphemerisTimeGetBeidouWeekNumber;
213 jmethodID method_beidouSatelliteEphemerisTimeGetToeSeconds;
214
215 jmethodID method_galileoAssistanceGetAlmanac;
216 jmethodID method_galileoAssistanceGetIonosphericModel;
217 jmethodID method_galileoAssistanceGetUtcModel;
218 jmethodID method_galileoAssistanceGetLeapSecondsModel;
219 jmethodID method_galileoAssistanceGetTimeModels;
220 jmethodID method_galileoAssistanceGetSatelliteEphemeris;
221 jmethodID method_galileoAssistanceGetSatelliteCorrections;
222 jmethodID method_galileoAssistanceGetRealTimeIntegrityModels;
223 jmethodID method_galileoAssistanceGetAuxiliaryInformation;
224 jmethodID method_galileoSatelliteEphemerisGetSvid;
225 jmethodID method_galileoSatelliteEphemerisGetSatelliteClockModels;
226 jmethodID method_galileoSatelliteEphemerisGetSatelliteOrbitModel;
227 jmethodID method_galileoSatelliteEphemerisGetSatelliteHealth;
228 jmethodID method_galileoSatelliteEphemerisGetSatelliteEphemerisTime;
229 jmethodID method_galileoSatelliteClockModelGetAf0;
230 jmethodID method_galileoSatelliteClockModelGetAf1;
231 jmethodID method_galileoSatelliteClockModelGetAf2;
232 jmethodID method_galileoSatelliteClockModelGetBgdSeconds;
233 jmethodID method_galileoSatelliteClockModelGetSatelliteClockType;
234 jmethodID method_galileoSatelliteClockModelGetSisaMeters;
235 jmethodID method_galileoSatelliteClockModelGetTimeOfClockSeconds;
236 jmethodID method_galileoSvHealthGetDataValidityStatusE1b;
237 jmethodID method_galileoSvHealthGetDataValidityStatusE5a;
238 jmethodID method_galileoSvHealthGetDataValidityStatusE5b;
239 jmethodID method_galileoSvHealthGetSignalHealthStatusE1b;
240 jmethodID method_galileoSvHealthGetSignalHealthStatusE5a;
241 jmethodID method_galileoSvHealthGetSignalHealthStatusE5b;
242 jmethodID method_galileoIonosphericModelGetAi0;
243 jmethodID method_galileoIonosphericModelGetAi1;
244 jmethodID method_galileoIonosphericModelGetAi2;
245
246 jmethodID method_glonassAssistanceGetAlmanac;
247 jmethodID method_glonassAssistanceGetUtcModel;
248 jmethodID method_glonassAssistanceGetTimeModels;
249 jmethodID method_glonassAssistanceGetSatelliteEphemeris;
250 jmethodID method_glonassAssistanceGetSatelliteCorrections;
251 jmethodID method_glonassAssistanceGetRealTimeIntegrityModels;
252 jmethodID method_glonassAssistanceGetAuxiliaryInformation;
253 jmethodID method_glonassAlmanacGetIssueDateMillis;
254 jmethodID method_glonassAlmanacGetSatelliteAlmanacs;
255 jmethodID method_glonassSatelliteAlmanacGetDeltaI;
256 jmethodID method_glonassSatelliteAlmanacGetDeltaT;
257 jmethodID method_glonassSatelliteAlmanacGetDeltaTDot;
258 jmethodID method_glonassSatelliteAlmanacGetEccentricity;
259 jmethodID method_glonassSatelliteAlmanacGetFrequencyChannelNumber;
260 jmethodID method_glonassSatelliteAlmanacGetLambda;
261 jmethodID method_glonassSatelliteAlmanacGetOmega;
262 jmethodID method_glonassSatelliteAlmanacGetSlotNumber;
263 jmethodID method_glonassSatelliteAlmanacGetHealthState;
264 jmethodID method_glonassSatelliteAlmanacGetTLambda;
265 jmethodID method_glonassSatelliteAlmanacGetTau;
266 jmethodID method_glonassSatelliteAlmanacGetIsGlonassM;
267 jmethodID method_glonassSatelliteAlmanacGetCalendarDayNumber;
268 jmethodID method_glonassSatelliteEphemerisGetAgeInDays;
269 jmethodID method_glonassSatelliteEphemerisGetSatelliteClockModel;
270 jmethodID method_glonassSatelliteEphemerisGetSatelliteOrbitModel;
271 jmethodID method_glonassSatelliteEphemerisGetHealthState;
272 jmethodID method_glonassSatelliteEphemerisGetSlotNumber;
273 jmethodID method_glonassSatelliteEphemerisGetFrameTimeSeconds;
274 jmethodID method_glonassSatelliteEphemerisGetUpdateIntervalMinutes;
275 jmethodID method_glonassSatelliteEphemerisGetIsGlonassM;
276 jmethodID method_glonassSatelliteEphemerisGetIsUpdateIntervalOdd;
277
278 jmethodID method_glonassSatelliteOrbitModelGetX;
279 jmethodID method_glonassSatelliteOrbitModelGetY;
280 jmethodID method_glonassSatelliteOrbitModelGetZ;
281 jmethodID method_glonassSatelliteOrbitModelGetXAccel;
282 jmethodID method_glonassSatelliteOrbitModelGetYAccel;
283 jmethodID method_glonassSatelliteOrbitModelGetZAccel;
284 jmethodID method_glonassSatelliteOrbitModelGetXDot;
285 jmethodID method_glonassSatelliteOrbitModelGetYDot;
286 jmethodID method_glonassSatelliteOrbitModelGetZDot;
287 jmethodID method_glonassSatelliteClockModelGetClockBias;
288 jmethodID method_glonassSatelliteClockModelGetFrequencyBias;
289 jmethodID method_glonassSatelliteClockModelGetFrequencyChannelNumber;
290 jmethodID method_glonassSatelliteClockModelGetTimeOfClockSeconds;
291
292 jmethodID method_qzssAssistanceGetAlmanac;
293 jmethodID method_qzssAssistanceGetIonosphericModel;
294 jmethodID method_qzssAssistanceGetUtcModel;
295 jmethodID method_qzssAssistanceGetLeapSecondsModel;
296 jmethodID method_qzssAssistanceGetTimeModels;
297 jmethodID method_qzssAssistanceGetSatelliteEphemeris;
298 jmethodID method_qzssAssistanceGetSatelliteCorrections;
299 jmethodID method_qzssAssistanceGetAuxiliaryInformation;
300 jmethodID method_qzssAssistanceGetRealTimeIntegrityModels;
301 jmethodID method_qzssSatelliteEphemerisGetSvid;
302 jmethodID method_qzssSatelliteEphemerisGetGpsL2Params;
303 jmethodID method_qzssSatelliteEphemerisGetSatelliteClockModel;
304 jmethodID method_qzssSatelliteEphemerisGetSatelliteOrbitModel;
305 jmethodID method_qzssSatelliteEphemerisGetSatelliteHealth;
306 jmethodID method_qzssSatelliteEphemerisGetSatelliteEphemerisTime;
307 jmethodID method_qzssSatelliteClockModelGetAf0;
308 jmethodID method_qzssSatelliteClockModelGetAf1;
309 jmethodID method_qzssSatelliteClockModelGetAf2;
310 jmethodID method_qzssSatelliteClockModelGetAodc;
311 jmethodID method_qzssSatelliteClockModelGetTgd1;
312 jmethodID method_qzssSatelliteClockModelGetTgd2;
313 jmethodID method_qzssSatelliteClockModelGetTimeOfClockSeconds;
314 } // namespace
315
GnssAssistance_class_init_once(JNIEnv * env,jclass clazz)316 void GnssAssistance_class_init_once(JNIEnv* env, jclass clazz) {
317 // Get the methods of GnssAssistance class.
318 jclass gnssAssistanceClass = env->FindClass("android/location/GnssAssistance");
319
320 method_gnssAssistanceGetGpsAssistance =
321 env->GetMethodID(gnssAssistanceClass, "getGpsAssistance",
322 "()Landroid/location/GpsAssistance;");
323 method_gnssAssistanceGetGlonassAssistance =
324 env->GetMethodID(gnssAssistanceClass, "getGlonassAssistance",
325 "()Landroid/location/GlonassAssistance;");
326 method_gnssAssistanceGetGalileoAssistance =
327 env->GetMethodID(gnssAssistanceClass, "getGalileoAssistance",
328 "()Landroid/location/GalileoAssistance;");
329 method_gnssAssistanceGetBeidouAssistance =
330 env->GetMethodID(gnssAssistanceClass, "getBeidouAssistance",
331 "()Landroid/location/BeidouAssistance;");
332 method_gnssAssistanceGetQzssAssistance =
333 env->GetMethodID(gnssAssistanceClass, "getQzssAssistance",
334 "()Landroid/location/QzssAssistance;");
335
336 // Get the methods of List class.
337 jclass listClass = env->FindClass("java/util/List");
338
339 method_listSize = env->GetMethodID(listClass, "size", "()I");
340 method_listGet = env->GetMethodID(listClass, "get", "(I)Ljava/lang/Object;");
341
342 // Get the methods of GnssAlmanac class.
343 jclass gnssAlmanacClass = env->FindClass("android/location/GnssAlmanac");
344
345 method_gnssAlmanacGetIssueDateMillis =
346 env->GetMethodID(gnssAlmanacClass, "getIssueDateMillis", "()J");
347 method_gnssAlmanacGetIoda = env->GetMethodID(gnssAlmanacClass, "getIoda", "()I");
348 method_gnssAlmanacGetWeekNumber = env->GetMethodID(gnssAlmanacClass, "getWeekNumber", "()I");
349 method_gnssAlmanacGetToaSeconds = env->GetMethodID(gnssAlmanacClass, "getToaSeconds", "()I");
350 method_gnssAlmanacGetSatelliteAlmanacs =
351 env->GetMethodID(gnssAlmanacClass, "getGnssSatelliteAlmanacs", "()Ljava/util/List;");
352 method_gnssAlmanacIsCompleteAlmanacProvided =
353 env->GetMethodID(gnssAlmanacClass, "isCompleteAlmanacProvided", "()Z");
354
355 // Get the methods of SatelliteAlmanac class.
356 jclass satelliteAlmanacClass =
357 env->FindClass("android/location/GnssAlmanac$GnssSatelliteAlmanac");
358
359 method_satelliteAlmanacGetSvid = env->GetMethodID(satelliteAlmanacClass, "getSvid", "()I");
360 method_satelliteAlmanacGetSvHealth =
361 env->GetMethodID(satelliteAlmanacClass, "getSvHealth", "()I");
362 method_satelliteAlmanacGetAf0 = env->GetMethodID(satelliteAlmanacClass, "getAf0", "()D");
363 method_satelliteAlmanacGetAf1 = env->GetMethodID(satelliteAlmanacClass, "getAf1", "()D");
364 method_satelliteAlmanacGetEccentricity =
365 env->GetMethodID(satelliteAlmanacClass, "getEccentricity", "()D");
366 method_satelliteAlmanacGetInclination =
367 env->GetMethodID(satelliteAlmanacClass, "getInclination", "()D");
368 method_satelliteAlmanacGetM0 = env->GetMethodID(satelliteAlmanacClass, "getM0", "()D");
369 method_satelliteAlmanacGetOmega = env->GetMethodID(satelliteAlmanacClass, "getOmega", "()D");
370 method_satelliteAlmanacGetOmega0 = env->GetMethodID(satelliteAlmanacClass, "getOmega0", "()D");
371 method_satelliteAlmanacGetOmegaDot =
372 env->GetMethodID(satelliteAlmanacClass, "getOmegaDot", "()D");
373 method_satelliteAlmanacGetRootA = env->GetMethodID(satelliteAlmanacClass, "getRootA", "()D");
374
375 // Get the mothods of SatelliteEphemerisTime class.
376 jclass satelliteEphemerisTimeClass = env->FindClass("android/location/SatelliteEphemerisTime");
377
378 method_satelliteEphemerisTimeGetIode =
379 env->GetMethodID(satelliteEphemerisTimeClass, "getIode", "()I");
380 method_satelliteEphemerisTimeGetToeSeconds =
381 env->GetMethodID(satelliteEphemerisTimeClass, "getToeSeconds", "()I");
382 method_satelliteEphemerisTimeGetWeekNumber =
383 env->GetMethodID(satelliteEphemerisTimeClass, "getWeekNumber", "()I");
384
385 // Get the mothods of KeplerianOrbitModel class.
386 jclass keplerianOrbitModelClass = env->FindClass("android/location/KeplerianOrbitModel");
387
388 method_keplerianOrbitModelGetDeltaN =
389 env->GetMethodID(keplerianOrbitModelClass, "getDeltaN", "()D");
390 method_keplerianOrbitModelGetEccentricity =
391 env->GetMethodID(keplerianOrbitModelClass, "getEccentricity", "()D");
392 method_keplerianOrbitModelGetI0 = env->GetMethodID(keplerianOrbitModelClass, "getI0", "()D");
393 method_keplerianOrbitModelGetIDot =
394 env->GetMethodID(keplerianOrbitModelClass, "getIDot", "()D");
395 method_keplerianOrbitModelGetM0 = env->GetMethodID(keplerianOrbitModelClass, "getM0", "()D");
396 method_keplerianOrbitModelGetOmega =
397 env->GetMethodID(keplerianOrbitModelClass, "getOmega", "()D");
398 method_keplerianOrbitModelGetOmega0 =
399 env->GetMethodID(keplerianOrbitModelClass, "getOmega0", "()D");
400 method_keplerianOrbitModelGetOmegaDot =
401 env->GetMethodID(keplerianOrbitModelClass, "getOmegaDot", "()D");
402 method_keplerianOrbitModelGetRootA =
403 env->GetMethodID(keplerianOrbitModelClass, "getRootA", "()D");
404 method_keplerianOrbitModelGetSecondOrderHarmonicPerturbation =
405 env->GetMethodID(keplerianOrbitModelClass, "getSecondOrderHarmonicPerturbation",
406 "()Landroid/location/"
407 "KeplerianOrbitModel$SecondOrderHarmonicPerturbation;");
408
409 // Get the methods of SecondOrderHarmonicPerturbation class.
410 jclass secondOrderHarmonicPerturbationClass =
411 env->FindClass("android/location/KeplerianOrbitModel$SecondOrderHarmonicPerturbation");
412
413 method_secondOrderHarmonicPerturbationGetCic =
414 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCic", "()D");
415 method_secondOrderHarmonicPerturbationGetCis =
416 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCis", "()D");
417 method_secondOrderHarmonicPerturbationGetCrc =
418 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCrc", "()D");
419 method_secondOrderHarmonicPerturbationGetCrs =
420 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCrs", "()D");
421 method_secondOrderHarmonicPerturbationGetCuc =
422 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCuc", "()D");
423 method_secondOrderHarmonicPerturbationGetCus =
424 env->GetMethodID(secondOrderHarmonicPerturbationClass, "getCus", "()D");
425
426 // Get the methods of KlobucharIonosphericModel class.
427 jclass klobucharIonosphericModelClass =
428 env->FindClass("android/location/KlobucharIonosphericModel");
429
430 method_klobucharIonosphericModelGetAlpha0 =
431 env->GetMethodID(klobucharIonosphericModelClass, "getAlpha0", "()D");
432 method_klobucharIonosphericModelGetAlpha1 =
433 env->GetMethodID(klobucharIonosphericModelClass, "getAlpha1", "()D");
434 method_klobucharIonosphericModelGetAlpha2 =
435 env->GetMethodID(klobucharIonosphericModelClass, "getAlpha2", "()D");
436 method_klobucharIonosphericModelGetAlpha3 =
437 env->GetMethodID(klobucharIonosphericModelClass, "getAlpha3", "()D");
438 method_klobucharIonosphericModelGetBeta0 =
439 env->GetMethodID(klobucharIonosphericModelClass, "getBeta0", "()D");
440 method_klobucharIonosphericModelGetBeta1 =
441 env->GetMethodID(klobucharIonosphericModelClass, "getBeta1", "()D");
442 method_klobucharIonosphericModelGetBeta2 =
443 env->GetMethodID(klobucharIonosphericModelClass, "getBeta2", "()D");
444 method_klobucharIonosphericModelGetBeta3 =
445 env->GetMethodID(klobucharIonosphericModelClass, "getBeta3", "()D");
446
447 // Get the methods of UtcModel class.
448 jclass utcModelClass = env->FindClass("android/location/UtcModel");
449
450 method_utcModelGetA0 = env->GetMethodID(utcModelClass, "getA0", "()D");
451 method_utcModelGetA1 = env->GetMethodID(utcModelClass, "getA1", "()D");
452 method_utcModelGetTimeOfWeek = env->GetMethodID(utcModelClass, "getTimeOfWeek", "()I");
453 method_utcModelGetWeekNumber = env->GetMethodID(utcModelClass, "getWeekNumber", "()I");
454
455 // Get the methods of LeapSecondsModel class.
456 jclass leapSecondsModelClass = env->FindClass("android/location/LeapSecondsModel");
457
458 method_leapSecondsModelGetDayNumberLeapSecondsFuture =
459 env->GetMethodID(leapSecondsModelClass, "getDayNumberLeapSecondsFuture", "()I");
460 method_leapSecondsModelGetLeapSeconds =
461 env->GetMethodID(leapSecondsModelClass, "getLeapSeconds", "()I");
462 method_leapSecondsModelGetLeapSecondsFuture =
463 env->GetMethodID(leapSecondsModelClass, "getLeapSecondsFuture", "()I");
464 method_leapSecondsModelGetWeekNumberLeapSecondsFuture =
465 env->GetMethodID(leapSecondsModelClass, "getWeekNumberLeapSecondsFuture", "()I");
466
467 // Get the methods of TimeModel class.
468 jclass timeModelsClass = env->FindClass("android/location/TimeModel");
469
470 method_timeModelsGetTimeOfWeek = env->GetMethodID(timeModelsClass, "getTimeOfWeek", "()I");
471 method_timeModelsGetToGnss = env->GetMethodID(timeModelsClass, "getToGnss", "()I");
472 method_timeModelsGetWeekNumber = env->GetMethodID(timeModelsClass, "getWeekNumber", "()I");
473 method_timeModelsGetA0 = env->GetMethodID(timeModelsClass, "getA0", "()D");
474 method_timeModelsGetA1 = env->GetMethodID(timeModelsClass, "getA1", "()D");
475
476 // Get the methods of AuxiliaryInformation class.
477 jclass auxiliaryInformationClass = env->FindClass("android/location/AuxiliaryInformation");
478
479 method_auxiliaryInformationGetSvid =
480 env->GetMethodID(auxiliaryInformationClass, "getSvid", "()I");
481 method_auxiliaryInformationGetAvailableSignalTypes =
482 env->GetMethodID(auxiliaryInformationClass, "getAvailableSignalTypes",
483 "()Ljava/util/List;");
484 method_auxiliaryInformationGetFrequencyChannelNumber =
485 env->GetMethodID(auxiliaryInformationClass, "getFrequencyChannelNumber", "()I");
486 method_auxiliaryInformationGetSatType =
487 env->GetMethodID(auxiliaryInformationClass, "getSatType", "()I");
488
489 // Get the methods of RealTimeIntegrityModel
490 jclass realTimeIntegrityModelClass = env->FindClass("android/location/RealTimeIntegrityModel");
491
492 method_realTimeIntegrityModelGetBadSvid =
493 env->GetMethodID(realTimeIntegrityModelClass, "getBadSvid", "()I");
494 method_realTimeIntegrityModelGetBadSignalTypes =
495 env->GetMethodID(realTimeIntegrityModelClass, "getBadSignalTypes",
496 "()Ljava/util/List;");
497 method_realTimeIntegrityModelGetStartDateSeconds =
498 env->GetMethodID(realTimeIntegrityModelClass, "getStartDateSeconds", "()J");
499 method_realTimeIntegrityModelGetEndDateSeconds =
500 env->GetMethodID(realTimeIntegrityModelClass, "getEndDateSeconds", "()J");
501 method_realTimeIntegrityModelGetPublishDateSeconds =
502 env->GetMethodID(realTimeIntegrityModelClass, "getPublishDateSeconds", "()J");
503 method_realTimeIntegrityModelGetAdvisoryNumber =
504 env->GetMethodID(realTimeIntegrityModelClass, "getAdvisoryNumber",
505 "()Ljava/lang/String;");
506 method_realTimeIntegrityModelGetAdvisoryType =
507 env->GetMethodID(realTimeIntegrityModelClass, "getAdvisoryType",
508 "()Ljava/lang/String;");
509
510 // Get the methods of GnssSignalType class.
511 jclass gnssSignalTypeClass = env->FindClass("android/location/GnssSignalType");
512
513 method_gnssSignalTypeGetConstellationType =
514 env->GetMethodID(gnssSignalTypeClass, "getConstellationType", "()I");
515 method_gnssSignalTypeGetCarrierFrequencyHz =
516 env->GetMethodID(gnssSignalTypeClass, "getCarrierFrequencyHz", "()D");
517 method_gnssSignalTypeGetCodeType =
518 env->GetMethodID(gnssSignalTypeClass, "getCodeType", "()Ljava/lang/String;");
519
520 // Get the methods of SatelliteCorrection class.
521 jclass satelliteCorrectionClass =
522 env->FindClass("android/location/GnssAssistance$GnssSatelliteCorrections");
523
524 method_satelliteCorrectionGetSvid =
525 env->GetMethodID(satelliteCorrectionClass, "getSvid", "()I");
526 method_satelliteCorrectionGetIonosphericCorrections =
527 env->GetMethodID(satelliteCorrectionClass, "getIonosphericCorrections",
528 "()Ljava/util/List;");
529
530 // Get the methods of IonosphericCorrection class.
531 jclass ionosphericCorrectionClass = env->FindClass("android/location/IonosphericCorrection");
532
533 method_ionosphericCorrectionGetCarrierFrequencyHz =
534 env->GetMethodID(ionosphericCorrectionClass, "getCarrierFrequencyHz", "()J");
535 method_ionosphericCorrectionGetIonosphericCorrection =
536 env->GetMethodID(ionosphericCorrectionClass, "getIonosphericCorrection",
537 "()Landroid/location/GnssCorrectionComponent;");
538
539 // Get the methods of GnssCorrectionComponent class.
540 jclass gnssCorrectionComponentClass =
541 env->FindClass("android/location/GnssCorrectionComponent");
542
543 method_gnssCorrectionComponentGetPseudorangeCorrection =
544 env->GetMethodID(gnssCorrectionComponentClass, "getPseudorangeCorrection",
545 "()Landroid/location/GnssCorrectionComponent$PseudorangeCorrection;");
546 method_gnssCorrectionComponentGetSourceKey =
547 env->GetMethodID(gnssCorrectionComponentClass, "getSourceKey", "()Ljava/lang/String;");
548 method_gnssCorrectionComponentGetValidityInterval =
549 env->GetMethodID(gnssCorrectionComponentClass, "getValidityInterval",
550 "()Landroid/location/GnssCorrectionComponent$GnssInterval;");
551
552 // Get the methods of PseudorangeCorrection class.
553 jclass pseudorangeCorrectionClass =
554 env->FindClass("android/location/GnssCorrectionComponent$PseudorangeCorrection");
555
556 method_pseudorangeCorrectionGetCorrectionMeters =
557 env->GetMethodID(pseudorangeCorrectionClass, "getCorrectionMeters", "()D");
558 method_pseudorangeCorrectionGetCorrectionRateMetersPerSecond =
559 env->GetMethodID(pseudorangeCorrectionClass, "getCorrectionRateMetersPerSecond", "()D");
560 method_pseudorangeCorrectionGetCorrectionUncertaintyMeters =
561 env->GetMethodID(pseudorangeCorrectionClass, "getCorrectionUncertaintyMeters", "()D");
562
563 // Get the methods of GnssInterval class.
564 jclass gnssIntervalClass =
565 env->FindClass("android/location/GnssCorrectionComponent$GnssInterval");
566
567 method_gnssIntervalGetStartMillisSinceGpsEpoch =
568 env->GetMethodID(gnssIntervalClass, "getStartMillisSinceGpsEpoch", "()J");
569 method_gnssIntervalGetEndMillisSinceGpsEpoch =
570 env->GetMethodID(gnssIntervalClass, "getEndMillisSinceGpsEpoch", "()J");
571
572 // Get the methods of GpsAssistance class.
573 jclass gpsAssistanceClass = env->FindClass("android/location/GpsAssistance");
574
575 method_gpsAssistanceGetAlmanac =
576 env->GetMethodID(gpsAssistanceClass, "getAlmanac", "()Landroid/location/GnssAlmanac;");
577 method_gpsAssistanceGetIonosphericModel =
578 env->GetMethodID(gpsAssistanceClass, "getIonosphericModel",
579 "()Landroid/location/KlobucharIonosphericModel;");
580 method_gpsAssistanceGetUtcModel =
581 env->GetMethodID(gpsAssistanceClass, "getUtcModel", "()Landroid/location/UtcModel;");
582 method_gpsAssistanceGetLeapSecondsModel =
583 env->GetMethodID(gpsAssistanceClass, "getLeapSecondsModel",
584 "()Landroid/location/LeapSecondsModel;");
585 method_gpsAssistanceGetTimeModels =
586 env->GetMethodID(gpsAssistanceClass, "getTimeModels", "()Ljava/util/List;");
587 method_gpsAssistanceGetSatelliteEphemeris =
588 env->GetMethodID(gpsAssistanceClass, "getSatelliteEphemeris", "()Ljava/util/List;");
589 method_gpsAssistanceGetRealTimeIntegrityModels =
590 env->GetMethodID(gpsAssistanceClass, "getRealTimeIntegrityModels",
591 "()Ljava/util/List;");
592 method_gpsAssistanceGetSatelliteCorrections =
593 env->GetMethodID(gpsAssistanceClass, "getSatelliteCorrections", "()Ljava/util/List;");
594 method_gpsAssistanceGetAuxiliaryInformation =
595 env->GetMethodID(gpsAssistanceClass, "getAuxiliaryInformation", "()Ljava/util/List;");
596
597 // Get the methods of GpsSatelliteEphemeris class.
598 jclass gpsSatelliteEphemerisClass = env->FindClass("android/location/GpsSatelliteEphemeris");
599
600 method_gpsSatelliteEphemerisGetSvid =
601 env->GetMethodID(gpsSatelliteEphemerisClass, "getSvid", "()I");
602 method_gpsSatelliteEphemerisGetGpsL2Params =
603 env->GetMethodID(gpsSatelliteEphemerisClass, "getGpsL2Params",
604 "()Landroid/location/GpsSatelliteEphemeris$GpsL2Params;");
605 method_gpsSatelliteEphemerisGetSatelliteClockModel =
606 env->GetMethodID(gpsSatelliteEphemerisClass, "getSatelliteClockModel",
607 "()Landroid/location/GpsSatelliteEphemeris$GpsSatelliteClockModel;");
608 method_gpsSatelliteEphemerisGetSatelliteOrbitModel =
609 env->GetMethodID(gpsSatelliteEphemerisClass, "getSatelliteOrbitModel",
610 "()Landroid/location/KeplerianOrbitModel;");
611 method_gpsSatelliteEphemerisGetSatelliteHealth =
612 env->GetMethodID(gpsSatelliteEphemerisClass, "getSatelliteHealth",
613 "()Landroid/location/GpsSatelliteEphemeris$GpsSatelliteHealth;");
614 method_gpsSatelliteEphemerisGetSatelliteEphemerisTime =
615 env->GetMethodID(gpsSatelliteEphemerisClass, "getSatelliteEphemerisTime",
616 "()Landroid/location/SatelliteEphemerisTime;");
617
618 // Get the methods of GpsL2Params class.
619 jclass gpsL2ParamsClass = env->FindClass("android/location/GpsSatelliteEphemeris$GpsL2Params");
620 method_gpsL2ParamsGetL2Code = env->GetMethodID(gpsL2ParamsClass, "getL2Code", "()I");
621 method_gpsL2ParamsGetL2Flag = env->GetMethodID(gpsL2ParamsClass, "getL2Flag", "()I");
622
623 // Get the methods of GpsSatelliteClockModel class.
624 jclass gpsSatelliteClockModelClass =
625 env->FindClass("android/location/GpsSatelliteEphemeris$GpsSatelliteClockModel");
626 method_gpsSatelliteClockModelGetAf0 =
627 env->GetMethodID(gpsSatelliteClockModelClass, "getAf0", "()D");
628 method_gpsSatelliteClockModelGetAf1 =
629 env->GetMethodID(gpsSatelliteClockModelClass, "getAf1", "()D");
630 method_gpsSatelliteClockModelGetAf2 =
631 env->GetMethodID(gpsSatelliteClockModelClass, "getAf2", "()D");
632 method_gpsSatelliteClockModelGetTgd =
633 env->GetMethodID(gpsSatelliteClockModelClass, "getTgd", "()D");
634 method_gpsSatelliteClockModelGetIodc =
635 env->GetMethodID(gpsSatelliteClockModelClass, "getIodc", "()I");
636 method_gpsSatelliteClockModelGetTimeOfClockSeconds =
637 env->GetMethodID(gpsSatelliteClockModelClass, "getTimeOfClockSeconds", "()J");
638
639 // Get the methods of GpsSatelliteHealth class.
640 jclass gpsSatelliteHealthClass =
641 env->FindClass("android/location/GpsSatelliteEphemeris$GpsSatelliteHealth");
642 method_gpsSatelliteHealthGetFitInt =
643 env->GetMethodID(gpsSatelliteHealthClass, "getFitInt", "()D");
644 method_gpsSatelliteHealthGetSvAccur =
645 env->GetMethodID(gpsSatelliteHealthClass, "getSvAccur", "()D");
646 method_gpsSatelliteHealthGetSvHealth =
647 env->GetMethodID(gpsSatelliteHealthClass, "getSvHealth", "()I");
648
649 // Get the methods of BeidouAssistance class.
650 jclass beidouAssistanceClass = env->FindClass("android/location/BeidouAssistance");
651 method_beidouAssistanceGetAlmanac = env->GetMethodID(beidouAssistanceClass, "getAlmanac",
652 "()Landroid/location/GnssAlmanac;");
653 method_beidouAssistanceGetIonosphericModel =
654 env->GetMethodID(beidouAssistanceClass, "getIonosphericModel",
655 "()Landroid/location/KlobucharIonosphericModel;");
656 method_beidouAssistanceGetUtcModel =
657 env->GetMethodID(beidouAssistanceClass, "getUtcModel", "()Landroid/location/UtcModel;");
658 method_beidouAssistanceGetLeapSecondsModel =
659 env->GetMethodID(beidouAssistanceClass, "getLeapSecondsModel",
660 "()Landroid/location/LeapSecondsModel;");
661 method_beidouAssistanceGetTimeModels =
662 env->GetMethodID(beidouAssistanceClass, "getTimeModels", "()Ljava/util/List;");
663 method_beidouAssistanceGetSatelliteEphemeris =
664 env->GetMethodID(beidouAssistanceClass, "getSatelliteEphemeris", "()Ljava/util/List;");
665 method_beidouAssistanceGetSatelliteCorrections =
666 env->GetMethodID(beidouAssistanceClass, "getSatelliteCorrections",
667 "()Ljava/util/List;");
668 method_beidouAssistanceGetRealTimeIntegrityModels =
669 env->GetMethodID(beidouAssistanceClass, "getRealTimeIntegrityModels",
670 "()Ljava/util/List;");
671 method_beidouAssistanceGetAuxiliaryInformation =
672 env->GetMethodID(beidouAssistanceClass, "getAuxiliaryInformation",
673 "()Ljava/util/List;");
674
675 // Get the methods of BeidouSatelliteEphemeris class.
676 jclass beidouSatelliteEphemerisClass =
677 env->FindClass("android/location/BeidouSatelliteEphemeris");
678 method_beidouSatelliteEphemerisGetSvid =
679 env->GetMethodID(beidouSatelliteEphemerisClass, "getSvid", "()I");
680 method_beidouSatelliteEphemerisGetSatelliteClockModel =
681 env->GetMethodID(beidouSatelliteEphemerisClass, "getSatelliteClockModel",
682 "()Landroid/location/"
683 "BeidouSatelliteEphemeris$BeidouSatelliteClockModel;");
684 method_beidouSatelliteEphemerisGetSatelliteOrbitModel =
685 env->GetMethodID(beidouSatelliteEphemerisClass, "getSatelliteOrbitModel",
686 "()Landroid/location/KeplerianOrbitModel;");
687 method_beidouSatelliteEphemerisGetSatelliteHealth =
688 env->GetMethodID(beidouSatelliteEphemerisClass, "getSatelliteHealth",
689 "()Landroid/location/BeidouSatelliteEphemeris$BeidouSatelliteHealth;");
690 method_beidouSatelliteEphemerisGetSatelliteEphemerisTime =
691 env->GetMethodID(beidouSatelliteEphemerisClass, "getSatelliteEphemerisTime",
692 "()Landroid/location/"
693 "BeidouSatelliteEphemeris$BeidouSatelliteEphemerisTime;");
694
695 // Get the methods of BeidouSatelliteClockModel
696 jclass beidouSatelliteClockModelClass =
697 env->FindClass("android/location/BeidouSatelliteEphemeris$BeidouSatelliteClockModel");
698 method_beidouSatelliteClockModelGetAf0 =
699 env->GetMethodID(beidouSatelliteClockModelClass, "getAf0", "()D");
700 method_beidouSatelliteClockModelGetAf1 =
701 env->GetMethodID(beidouSatelliteClockModelClass, "getAf1", "()D");
702 method_beidouSatelliteClockModelGetAf2 =
703 env->GetMethodID(beidouSatelliteClockModelClass, "getAf2", "()D");
704 method_beidouSatelliteClockModelGetAodc =
705 env->GetMethodID(beidouSatelliteClockModelClass, "getAodc", "()I");
706 method_beidouSatelliteClockModelGetTgd1 =
707 env->GetMethodID(beidouSatelliteClockModelClass, "getTgd1", "()D");
708 method_beidouSatelliteClockModelGetTgd2 =
709 env->GetMethodID(beidouSatelliteClockModelClass, "getTgd2", "()D");
710 method_beidouSatelliteClockModelGetTimeOfClockSeconds =
711 env->GetMethodID(beidouSatelliteClockModelClass, "getTimeOfClockSeconds", "()J");
712
713 // Get the methods of BeidouSatelliteHealth
714 jclass beidouSatelliteHealthClass =
715 env->FindClass("android/location/BeidouSatelliteEphemeris$BeidouSatelliteHealth");
716 method_beidouSatelliteHealthGetSatH1 =
717 env->GetMethodID(beidouSatelliteHealthClass, "getSatH1", "()I");
718 method_beidouSatelliteHealthGetSvAccur =
719 env->GetMethodID(beidouSatelliteHealthClass, "getSvAccur", "()D");
720
721 // Get the methods of BeidouSatelliteEphemerisTime
722 jclass beidouSatelliteEphemerisTimeClass = env->FindClass(
723 "android/location/BeidouSatelliteEphemeris$BeidouSatelliteEphemerisTime");
724 method_beidouSatelliteEphemerisTimeGetAode =
725 env->GetMethodID(beidouSatelliteEphemerisTimeClass, "getAode", "()I");
726 method_beidouSatelliteEphemerisTimeGetBeidouWeekNumber =
727 env->GetMethodID(beidouSatelliteEphemerisTimeClass, "getBeidouWeekNumber", "()I");
728 method_beidouSatelliteEphemerisTimeGetToeSeconds =
729 env->GetMethodID(beidouSatelliteEphemerisTimeClass, "getToeSeconds", "()I");
730
731 // Get the methods of GalileoAssistance class.
732 jclass galileoAssistanceClass = env->FindClass("android/location/GalileoAssistance");
733 method_galileoAssistanceGetAlmanac = env->GetMethodID(galileoAssistanceClass, "getAlmanac",
734 "()Landroid/location/GnssAlmanac;");
735 method_galileoAssistanceGetIonosphericModel =
736 env->GetMethodID(galileoAssistanceClass, "getIonosphericModel",
737 "()Landroid/location/GalileoIonosphericModel;");
738 method_galileoAssistanceGetUtcModel = env->GetMethodID(galileoAssistanceClass, "getUtcModel",
739 "()Landroid/location/UtcModel;");
740 method_galileoAssistanceGetLeapSecondsModel =
741 env->GetMethodID(galileoAssistanceClass, "getLeapSecondsModel",
742 "()Landroid/location/LeapSecondsModel;");
743 method_galileoAssistanceGetTimeModels =
744 env->GetMethodID(galileoAssistanceClass, "getTimeModels", "()Ljava/util/List;");
745 method_galileoAssistanceGetSatelliteEphemeris =
746 env->GetMethodID(galileoAssistanceClass, "getSatelliteEphemeris", "()Ljava/util/List;");
747 method_galileoAssistanceGetSatelliteCorrections =
748 env->GetMethodID(galileoAssistanceClass, "getSatelliteCorrections",
749 "()Ljava/util/List;");
750 method_galileoAssistanceGetRealTimeIntegrityModels =
751 env->GetMethodID(galileoAssistanceClass, "getRealTimeIntegrityModels",
752 "()Ljava/util/List;");
753 method_galileoAssistanceGetAuxiliaryInformation =
754 env->GetMethodID(galileoAssistanceClass, "getAuxiliaryInformation",
755 "()Ljava/util/List;");
756
757 // Get the methods of GalileoSatelliteEphemeris class
758 jclass galileoSatelliteEphemerisClass =
759 env->FindClass("android/location/GalileoSatelliteEphemeris");
760 method_galileoSatelliteEphemerisGetSatelliteClockModels =
761 env->GetMethodID(galileoSatelliteEphemerisClass, "getSatelliteClockModels",
762 "()Ljava/util/List;");
763 method_galileoSatelliteEphemerisGetSvid =
764 env->GetMethodID(galileoSatelliteEphemerisClass, "getSvid", "()I");
765 method_galileoSatelliteEphemerisGetSatelliteEphemerisTime =
766 env->GetMethodID(galileoSatelliteEphemerisClass, "getSatelliteEphemerisTime",
767 "()Landroid/location/SatelliteEphemerisTime;");
768 method_galileoSatelliteEphemerisGetSatelliteHealth =
769 env->GetMethodID(galileoSatelliteEphemerisClass, "getSatelliteHealth",
770 "()Landroid/location/GalileoSatelliteEphemeris$GalileoSvHealth;");
771 method_galileoSatelliteEphemerisGetSatelliteOrbitModel =
772 env->GetMethodID(galileoSatelliteEphemerisClass, "getSatelliteOrbitModel",
773 "()Landroid/location/KeplerianOrbitModel;");
774
775 // Get the methods of GalileoSatelliteClockModel class.
776 jclass galileoSatelliteClockModelClass =
777 env->FindClass("android/location/GalileoSatelliteEphemeris$GalileoSatelliteClockModel");
778 method_galileoSatelliteClockModelGetAf0 =
779 env->GetMethodID(galileoSatelliteClockModelClass, "getAf0", "()D");
780 method_galileoSatelliteClockModelGetAf1 =
781 env->GetMethodID(galileoSatelliteClockModelClass, "getAf1", "()D");
782 method_galileoSatelliteClockModelGetAf2 =
783 env->GetMethodID(galileoSatelliteClockModelClass, "getAf2", "()D");
784 method_galileoSatelliteClockModelGetBgdSeconds =
785 env->GetMethodID(galileoSatelliteClockModelClass, "getBgdSeconds", "()D");
786 method_galileoSatelliteClockModelGetSatelliteClockType =
787 env->GetMethodID(galileoSatelliteClockModelClass, "getSatelliteClockType", "()I");
788 method_galileoSatelliteClockModelGetSisaMeters =
789 env->GetMethodID(galileoSatelliteClockModelClass, "getSisaMeters", "()D");
790 method_galileoSatelliteClockModelGetTimeOfClockSeconds =
791 env->GetMethodID(galileoSatelliteClockModelClass, "getTimeOfClockSeconds", "()J");
792
793 // Get the methods of GalileoSvHealth class.
794 jclass galileoSvHealthClass =
795 env->FindClass("android/location/GalileoSatelliteEphemeris$GalileoSvHealth");
796 method_galileoSvHealthGetDataValidityStatusE1b =
797 env->GetMethodID(galileoSvHealthClass, "getDataValidityStatusE1b", "()I");
798 method_galileoSvHealthGetDataValidityStatusE5a =
799 env->GetMethodID(galileoSvHealthClass, "getDataValidityStatusE5a", "()I");
800 method_galileoSvHealthGetDataValidityStatusE5b =
801 env->GetMethodID(galileoSvHealthClass, "getDataValidityStatusE5b", "()I");
802 method_galileoSvHealthGetSignalHealthStatusE1b =
803 env->GetMethodID(galileoSvHealthClass, "getSignalHealthStatusE1b", "()I");
804 method_galileoSvHealthGetSignalHealthStatusE5a =
805 env->GetMethodID(galileoSvHealthClass, "getSignalHealthStatusE5a", "()I");
806 method_galileoSvHealthGetSignalHealthStatusE5b =
807 env->GetMethodID(galileoSvHealthClass, "getSignalHealthStatusE5b", "()I");
808
809 // Get the methods of GalileoIonosphericModel class.
810 jclass galileoIonosphericModelClass =
811 env->FindClass("android/location/GalileoIonosphericModel");
812 method_galileoIonosphericModelGetAi0 =
813 env->GetMethodID(galileoIonosphericModelClass, "getAi0", "()D");
814 method_galileoIonosphericModelGetAi1 =
815 env->GetMethodID(galileoIonosphericModelClass, "getAi1", "()D");
816 method_galileoIonosphericModelGetAi2 =
817 env->GetMethodID(galileoIonosphericModelClass, "getAi2", "()D");
818
819 // Get the methods of GlonassAssistance class.
820 jclass glonassAssistanceClass = env->FindClass("android/location/GlonassAssistance");
821 method_glonassAssistanceGetAlmanac = env->GetMethodID(glonassAssistanceClass, "getAlmanac",
822 "()Landroid/location/GlonassAlmanac;");
823 method_glonassAssistanceGetUtcModel = env->GetMethodID(glonassAssistanceClass, "getUtcModel",
824 "()Landroid/location/UtcModel;");
825 method_glonassAssistanceGetTimeModels =
826 env->GetMethodID(glonassAssistanceClass, "getTimeModels", "()Ljava/util/List;");
827 method_glonassAssistanceGetSatelliteEphemeris =
828 env->GetMethodID(glonassAssistanceClass, "getSatelliteEphemeris", "()Ljava/util/List;");
829 method_glonassAssistanceGetSatelliteCorrections =
830 env->GetMethodID(glonassAssistanceClass, "getSatelliteCorrections",
831 "()Ljava/util/List;");
832 method_glonassAssistanceGetRealTimeIntegrityModels =
833 env->GetMethodID(glonassAssistanceClass, "getRealTimeIntegrityModels",
834 "()Ljava/util/List;");
835 method_glonassAssistanceGetAuxiliaryInformation =
836 env->GetMethodID(glonassAssistanceClass, "getAuxiliaryInformation",
837 "()Ljava/util/List;");
838
839 // Get the methods of GlonassAlmanac class.
840 jclass glonassAlmanacClass = env->FindClass("android/location/GlonassAlmanac");
841 method_glonassAlmanacGetIssueDateMillis =
842 env->GetMethodID(glonassAlmanacClass, "getIssueDateMillis", "()J");
843 method_glonassAlmanacGetSatelliteAlmanacs =
844 env->GetMethodID(glonassAlmanacClass, "getSatelliteAlmanacs", "()Ljava/util/List;");
845
846 // Get the methods of GlonassSatelliteAlmanac class
847 jclass glonassSatelliteAlmanacClass =
848 env->FindClass("android/location/GlonassAlmanac$GlonassSatelliteAlmanac");
849 method_glonassSatelliteAlmanacGetDeltaI =
850 env->GetMethodID(glonassSatelliteAlmanacClass, "getDeltaI", "()D");
851 method_glonassSatelliteAlmanacGetDeltaT =
852 env->GetMethodID(glonassSatelliteAlmanacClass, "getDeltaT", "()D");
853 method_glonassSatelliteAlmanacGetDeltaTDot =
854 env->GetMethodID(glonassSatelliteAlmanacClass, "getDeltaTDot", "()D");
855 method_glonassSatelliteAlmanacGetEccentricity =
856 env->GetMethodID(glonassSatelliteAlmanacClass, "getEccentricity", "()D");
857 method_glonassSatelliteAlmanacGetFrequencyChannelNumber =
858 env->GetMethodID(glonassSatelliteAlmanacClass, "getFrequencyChannelNumber", "()I");
859 method_glonassSatelliteAlmanacGetLambda =
860 env->GetMethodID(glonassSatelliteAlmanacClass, "getLambda", "()D");
861 method_glonassSatelliteAlmanacGetOmega =
862 env->GetMethodID(glonassSatelliteAlmanacClass, "getOmega", "()D");
863 method_glonassSatelliteAlmanacGetSlotNumber =
864 env->GetMethodID(glonassSatelliteAlmanacClass, "getSlotNumber", "()I");
865 method_glonassSatelliteAlmanacGetHealthState =
866 env->GetMethodID(glonassSatelliteAlmanacClass, "getHealthState", "()I");
867 method_glonassSatelliteAlmanacGetTLambda =
868 env->GetMethodID(glonassSatelliteAlmanacClass, "getTLambda", "()D");
869 method_glonassSatelliteAlmanacGetTau =
870 env->GetMethodID(glonassSatelliteAlmanacClass, "getTau", "()D");
871 method_glonassSatelliteAlmanacGetCalendarDayNumber =
872 env->GetMethodID(glonassSatelliteAlmanacClass, "getCalendarDayNumber", "()I");
873 method_glonassSatelliteAlmanacGetIsGlonassM =
874 env->GetMethodID(glonassSatelliteAlmanacClass, "isGlonassM", "()Z");
875
876 // Get the methods of GlonassSatelliteEphemeris
877 jclass glonassSatelliteEphemerisClass =
878 env->FindClass("android/location/GlonassSatelliteEphemeris");
879 method_glonassSatelliteEphemerisGetAgeInDays =
880 env->GetMethodID(glonassSatelliteEphemerisClass, "getAgeInDays", "()I");
881 method_glonassSatelliteEphemerisGetFrameTimeSeconds =
882 env->GetMethodID(glonassSatelliteEphemerisClass, "getFrameTimeSeconds", "()D");
883 method_glonassSatelliteEphemerisGetHealthState =
884 env->GetMethodID(glonassSatelliteEphemerisClass, "getHealthState", "()I");
885 method_glonassSatelliteEphemerisGetSlotNumber =
886 env->GetMethodID(glonassSatelliteEphemerisClass, "getSlotNumber", "()I");
887 method_glonassSatelliteEphemerisGetSatelliteClockModel =
888 env->GetMethodID(glonassSatelliteEphemerisClass, "getSatelliteClockModel",
889 "()Landroid/location/"
890 "GlonassSatelliteEphemeris$GlonassSatelliteClockModel;");
891 method_glonassSatelliteEphemerisGetSatelliteOrbitModel =
892 env->GetMethodID(glonassSatelliteEphemerisClass, "getSatelliteOrbitModel",
893 "()Landroid/location/"
894 "GlonassSatelliteEphemeris$GlonassSatelliteOrbitModel;");
895 method_glonassSatelliteEphemerisGetUpdateIntervalMinutes =
896 env->GetMethodID(glonassSatelliteEphemerisClass, "getUpdateIntervalMinutes", "()I");
897 method_glonassSatelliteEphemerisGetIsGlonassM =
898 env->GetMethodID(glonassSatelliteEphemerisClass, "isGlonassM", "()Z");
899 method_glonassSatelliteEphemerisGetIsUpdateIntervalOdd =
900 env->GetMethodID(glonassSatelliteEphemerisClass, "isUpdateIntervalOdd", "()Z");
901
902 // Get the methods of GlonassSatelliteOrbitModel
903 jclass glonassSatelliteOrbitModelClass =
904 env->FindClass("android/location/GlonassSatelliteEphemeris$GlonassSatelliteOrbitModel");
905 method_glonassSatelliteOrbitModelGetX =
906 env->GetMethodID(glonassSatelliteOrbitModelClass, "getX", "()D");
907 method_glonassSatelliteOrbitModelGetXAccel =
908 env->GetMethodID(glonassSatelliteOrbitModelClass, "getXAccel", "()D");
909 method_glonassSatelliteOrbitModelGetXDot =
910 env->GetMethodID(glonassSatelliteOrbitModelClass, "getXDot", "()D");
911 method_glonassSatelliteOrbitModelGetY =
912 env->GetMethodID(glonassSatelliteOrbitModelClass, "getY", "()D");
913 method_glonassSatelliteOrbitModelGetYAccel =
914 env->GetMethodID(glonassSatelliteOrbitModelClass, "getYAccel", "()D");
915 method_glonassSatelliteOrbitModelGetYDot =
916 env->GetMethodID(glonassSatelliteOrbitModelClass, "getYDot", "()D");
917 method_glonassSatelliteOrbitModelGetZ =
918 env->GetMethodID(glonassSatelliteOrbitModelClass, "getZ", "()D");
919 method_glonassSatelliteOrbitModelGetZAccel =
920 env->GetMethodID(glonassSatelliteOrbitModelClass, "getZAccel", "()D");
921 method_glonassSatelliteOrbitModelGetZDot =
922 env->GetMethodID(glonassSatelliteOrbitModelClass, "getZDot", "()D");
923
924 // Get the methods of GlonassSatelliteClockModel
925 jclass glonassSatelliteClockModelClass =
926 env->FindClass("android/location/GlonassSatelliteEphemeris$GlonassSatelliteClockModel");
927 method_glonassSatelliteClockModelGetClockBias =
928 env->GetMethodID(glonassSatelliteClockModelClass, "getClockBias", "()D");
929 method_glonassSatelliteClockModelGetFrequencyBias =
930 env->GetMethodID(glonassSatelliteClockModelClass, "getFrequencyBias", "()D");
931 method_glonassSatelliteClockModelGetFrequencyChannelNumber =
932 env->GetMethodID(glonassSatelliteClockModelClass, "getFrequencyChannelNumber", "()I");
933 method_glonassSatelliteClockModelGetTimeOfClockSeconds =
934 env->GetMethodID(glonassSatelliteClockModelClass, "getTimeOfClockSeconds", "()J");
935
936 // Get the methods of QzssAssistance class.
937 jclass qzssAssistanceClass = env->FindClass("android/location/QzssAssistance");
938 method_qzssAssistanceGetAlmanac =
939 env->GetMethodID(qzssAssistanceClass, "getAlmanac", "()Landroid/location/GnssAlmanac;");
940 method_qzssAssistanceGetIonosphericModel =
941 env->GetMethodID(qzssAssistanceClass, "getIonosphericModel",
942 "()Landroid/location/KlobucharIonosphericModel;");
943 method_qzssAssistanceGetUtcModel =
944 env->GetMethodID(qzssAssistanceClass, "getUtcModel", "()Landroid/location/UtcModel;");
945 method_qzssAssistanceGetLeapSecondsModel =
946 env->GetMethodID(qzssAssistanceClass, "getLeapSecondsModel",
947 "()Landroid/location/LeapSecondsModel;");
948 method_qzssAssistanceGetTimeModels =
949 env->GetMethodID(qzssAssistanceClass, "getTimeModels", "()Ljava/util/List;");
950 method_qzssAssistanceGetSatelliteEphemeris =
951 env->GetMethodID(qzssAssistanceClass, "getSatelliteEphemeris", "()Ljava/util/List;");
952 method_qzssAssistanceGetSatelliteCorrections =
953 env->GetMethodID(qzssAssistanceClass, "getSatelliteCorrections", "()Ljava/util/List;");
954 method_qzssAssistanceGetAuxiliaryInformation =
955 env->GetMethodID(qzssAssistanceClass, "getAuxiliaryInformation", "()Ljava/util/List;");
956
957 // Get the methods of QzssSatelliteEphemeris class.
958 jclass qzssSatelliteEphemerisClass = env->FindClass("android/location/QzssSatelliteEphemeris");
959 method_qzssSatelliteEphemerisGetSvid =
960 env->GetMethodID(qzssSatelliteEphemerisClass, "getSvid", "()I");
961 method_qzssSatelliteEphemerisGetGpsL2Params =
962 env->GetMethodID(qzssSatelliteEphemerisClass, "getGpsL2Params",
963 "()Landroid/location/GpsSatelliteEphemeris$GpsL2Params;");
964 method_qzssSatelliteEphemerisGetSatelliteEphemerisTime =
965 env->GetMethodID(qzssSatelliteEphemerisClass, "getSatelliteEphemerisTime",
966 "()Landroid/location/SatelliteEphemerisTime;");
967 method_qzssSatelliteEphemerisGetSatelliteHealth =
968 env->GetMethodID(qzssSatelliteEphemerisClass, "getSatelliteHealth",
969 "()Landroid/location/GpsSatelliteEphemeris$GpsSatelliteHealth;");
970 method_qzssSatelliteEphemerisGetSatelliteOrbitModel =
971 env->GetMethodID(qzssSatelliteEphemerisClass, "getSatelliteOrbitModel",
972 "()Landroid/location/KeplerianOrbitModel;");
973 }
974
GnssAssistanceInterface(const sp<IGnssAssistanceInterface> & iGnssAssistance)975 GnssAssistanceInterface::GnssAssistanceInterface(
976 const sp<IGnssAssistanceInterface>& iGnssAssistance)
977 : mGnssAssistanceInterface(iGnssAssistance) {
978 assert(mGnssAssistanceInterface != nullptr);
979 }
980
injectGnssAssistance(JNIEnv * env,jobject gnssAssistanceObj)981 jboolean GnssAssistanceInterface::injectGnssAssistance(JNIEnv* env, jobject gnssAssistanceObj) {
982 GnssAssistance gnssAssistance;
983 GnssAssistanceUtil::setGnssAssistance(env, gnssAssistanceObj, gnssAssistance);
984 auto status = mGnssAssistanceInterface->injectGnssAssistance(gnssAssistance);
985 return checkAidlStatus(status, "IGnssAssistanceInterface injectGnssAssistance() failed.");
986 }
987
setCallback(const sp<IGnssAssistanceCallback> & callback)988 jboolean GnssAssistanceInterface::setCallback(const sp<IGnssAssistanceCallback>& callback) {
989 auto status = mGnssAssistanceInterface->setCallback(callback);
990 return checkAidlStatus(status, "IGnssAssistanceInterface setCallback() failed.");
991 }
992
setGnssAssistance(JNIEnv * env,jobject gnssAssistanceObj,GnssAssistance & gnssAssistance)993 void GnssAssistanceUtil::setGnssAssistance(JNIEnv* env, jobject gnssAssistanceObj,
994 GnssAssistance& gnssAssistance) {
995 jobject gpsAssistanceObj =
996 env->CallObjectMethod(gnssAssistanceObj, method_gnssAssistanceGetGpsAssistance);
997 jobject glonassAssistanceObj =
998 env->CallObjectMethod(gnssAssistanceObj, method_gnssAssistanceGetGlonassAssistance);
999 jobject qzssAssistanceObj =
1000 env->CallObjectMethod(gnssAssistanceObj, method_gnssAssistanceGetQzssAssistance);
1001 jobject galileoAssistanceObj =
1002 env->CallObjectMethod(gnssAssistanceObj, method_gnssAssistanceGetGalileoAssistance);
1003 jobject beidouAssistanceObj =
1004 env->CallObjectMethod(gnssAssistanceObj, method_gnssAssistanceGetBeidouAssistance);
1005
1006 GnssAssistanceUtil::setGpsAssistance(env, gpsAssistanceObj, gnssAssistance.gpsAssistance);
1007 GnssAssistanceUtil::setGlonassAssistance(env, glonassAssistanceObj,
1008 gnssAssistance.glonassAssistance);
1009 GnssAssistanceUtil::setQzssAssistance(env, qzssAssistanceObj, gnssAssistance.qzssAssistance);
1010 GnssAssistanceUtil::setGalileoAssistance(env, galileoAssistanceObj,
1011 gnssAssistance.galileoAssistance);
1012 GnssAssistanceUtil::setBeidouAssistance(env, beidouAssistanceObj,
1013 gnssAssistance.beidouAssistance);
1014 env->DeleteLocalRef(gpsAssistanceObj);
1015 env->DeleteLocalRef(glonassAssistanceObj);
1016 env->DeleteLocalRef(qzssAssistanceObj);
1017 env->DeleteLocalRef(galileoAssistanceObj);
1018 env->DeleteLocalRef(beidouAssistanceObj);
1019 }
1020
setQzssAssistance(JNIEnv * env,jobject qzssAssistanceObj,std::optional<QzssAssistance> & qzssAssistanceOpt)1021 void GnssAssistanceUtil::setQzssAssistance(JNIEnv* env, jobject qzssAssistanceObj,
1022 std::optional<QzssAssistance>& qzssAssistanceOpt) {
1023 QzssAssistance qzssAssistance;
1024 jobject qzssAlmanacObj =
1025 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetAlmanac);
1026 jobject qzssIonosphericModelObj =
1027 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetIonosphericModel);
1028 jobject qzssUtcModelObj =
1029 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetUtcModel);
1030 jobject qzssLeapSecondsModelObj =
1031 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetLeapSecondsModel);
1032 jobject qzssTimeModelsObj =
1033 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetTimeModels);
1034 jobject qzssSatelliteEphemerisObj =
1035 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetSatelliteEphemeris);
1036 jobject qzssSatelliteCorrectionsObj =
1037 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetSatelliteCorrections);
1038 jobject qzssAuxiliaryInformationObj =
1039 env->CallObjectMethod(qzssAssistanceObj, method_qzssAssistanceGetAuxiliaryInformation);
1040 setGnssAlmanac(env, qzssAlmanacObj, qzssAssistance.almanac);
1041 setKlobucharIonosphericModel(env, qzssIonosphericModelObj, qzssAssistance.ionosphericModel);
1042 setUtcModel(env, qzssUtcModelObj, qzssAssistance.utcModel);
1043 setLeapSecondsModel(env, qzssLeapSecondsModelObj, qzssAssistance.leapSecondsModel);
1044 setTimeModels(env, qzssTimeModelsObj, qzssAssistance.timeModels);
1045 setGpsOrQzssSatelliteEphemeris<QzssSatelliteEphemeris>(env, qzssSatelliteEphemerisObj,
1046 qzssAssistance.satelliteEphemeris);
1047 setSatelliteCorrections(env, qzssSatelliteCorrectionsObj, qzssAssistance.satelliteCorrections);
1048 setAuxiliaryInformations(env, qzssAuxiliaryInformationObj,
1049 qzssAssistance.auxiliaryInformations);
1050 qzssAssistanceOpt = qzssAssistance;
1051 env->DeleteLocalRef(qzssAlmanacObj);
1052 env->DeleteLocalRef(qzssIonosphericModelObj);
1053 env->DeleteLocalRef(qzssUtcModelObj);
1054 env->DeleteLocalRef(qzssLeapSecondsModelObj);
1055 env->DeleteLocalRef(qzssTimeModelsObj);
1056 env->DeleteLocalRef(qzssSatelliteEphemerisObj);
1057 env->DeleteLocalRef(qzssSatelliteCorrectionsObj);
1058 env->DeleteLocalRef(qzssAuxiliaryInformationObj);
1059 }
1060
setGlonassAssistance(JNIEnv * env,jobject glonassAssistanceObj,std::optional<GlonassAssistance> & glonassAssistanceOpt)1061 void GnssAssistanceUtil::setGlonassAssistance(
1062 JNIEnv* env, jobject glonassAssistanceObj,
1063 std::optional<GlonassAssistance>& glonassAssistanceOpt) {
1064 GlonassAssistance glonassAssistance;
1065 jobject glonassAlmanacObj =
1066 env->CallObjectMethod(glonassAssistanceObj, method_glonassAssistanceGetAlmanac);
1067 jobject utcModelObj =
1068 env->CallObjectMethod(glonassAssistanceObj, method_glonassAssistanceGetUtcModel);
1069 jobject timeModelsObj =
1070 env->CallObjectMethod(glonassAssistanceObj, method_glonassAssistanceGetTimeModels);
1071 jobject satelliteEphemerisObj =
1072 env->CallObjectMethod(glonassAssistanceObj,
1073 method_glonassAssistanceGetSatelliteEphemeris);
1074 jobject satelliteCorrectionsObj =
1075 env->CallObjectMethod(glonassAssistanceObj,
1076 method_glonassAssistanceGetSatelliteCorrections);
1077 jobject realTimeIntegrityModelsObj =
1078 env->CallObjectMethod(glonassAssistanceObj,
1079 method_glonassAssistanceGetRealTimeIntegrityModels);
1080 jobject auxiliaryInformationObj =
1081 env->CallObjectMethod(glonassAssistanceObj,
1082 method_glonassAssistanceGetAuxiliaryInformation);
1083 setGlonassAlmanac(env, glonassAlmanacObj, glonassAssistance.almanac);
1084 setUtcModel(env, utcModelObj, glonassAssistance.utcModel);
1085 setTimeModels(env, timeModelsObj, glonassAssistance.timeModels);
1086 setGlonassSatelliteEphemeris(env, satelliteEphemerisObj, glonassAssistance.satelliteEphemeris);
1087 setSatelliteCorrections(env, satelliteCorrectionsObj, glonassAssistance.satelliteCorrections);
1088 setRealTimeIntegrityModels(env, realTimeIntegrityModelsObj,
1089 glonassAssistance.realTimeIntegrityModels);
1090 setAuxiliaryInformations(env, auxiliaryInformationObj, glonassAssistance.auxiliaryInformations);
1091 glonassAssistanceOpt = glonassAssistance;
1092 env->DeleteLocalRef(glonassAlmanacObj);
1093 env->DeleteLocalRef(utcModelObj);
1094 env->DeleteLocalRef(timeModelsObj);
1095 env->DeleteLocalRef(satelliteEphemerisObj);
1096 env->DeleteLocalRef(satelliteCorrectionsObj);
1097 env->DeleteLocalRef(realTimeIntegrityModelsObj);
1098 env->DeleteLocalRef(auxiliaryInformationObj);
1099 }
1100
setGlonassAlmanac(JNIEnv * env,jobject glonassAlmanacObj,std::optional<GlonassAlmanac> & glonassAlmanacOpt)1101 void GnssAssistanceUtil::setGlonassAlmanac(JNIEnv* env, jobject glonassAlmanacObj,
1102 std::optional<GlonassAlmanac>& glonassAlmanacOpt) {
1103 if (glonassAlmanacObj == nullptr) return;
1104 GlonassAlmanac glonassAlmanac;
1105 jlong issueDateMillis =
1106 env->CallLongMethod(glonassAlmanacObj, method_glonassAlmanacGetIssueDateMillis);
1107 glonassAlmanac.issueDateMs = issueDateMillis;
1108 jobject satelliteAlmanacsObj =
1109 env->CallObjectMethod(glonassAlmanacObj, method_glonassAlmanacGetSatelliteAlmanacs);
1110 if (satelliteAlmanacsObj == nullptr) return;
1111 auto len = env->CallIntMethod(satelliteAlmanacsObj, method_listSize);
1112 for (uint16_t i = 0; i < len; ++i) {
1113 jobject glonassSatelliteAlmanacObj =
1114 env->CallObjectMethod(satelliteAlmanacsObj, method_listGet, i);
1115 if (glonassSatelliteAlmanacObj == nullptr) continue;
1116 GlonassSatelliteAlmanac glonassSatelliteAlmanac;
1117 jdouble deltaI = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1118 method_glonassSatelliteAlmanacGetDeltaI);
1119 glonassSatelliteAlmanac.deltaI = deltaI;
1120 jdouble deltaT = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1121 method_glonassSatelliteAlmanacGetDeltaT);
1122 glonassSatelliteAlmanac.deltaT = deltaT;
1123 jdouble deltaTDot = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1124 method_glonassSatelliteAlmanacGetDeltaTDot);
1125 glonassSatelliteAlmanac.deltaTDot = deltaTDot;
1126 jdouble eccentricity = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1127 method_glonassSatelliteAlmanacGetEccentricity);
1128 glonassSatelliteAlmanac.eccentricity = eccentricity;
1129 jint frequencyChannelNumber =
1130 env->CallIntMethod(glonassSatelliteAlmanacObj,
1131 method_glonassSatelliteAlmanacGetFrequencyChannelNumber);
1132 glonassSatelliteAlmanac.frequencyChannelNumber =
1133 static_cast<int32_t>(frequencyChannelNumber);
1134 jdouble lambda = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1135 method_glonassSatelliteAlmanacGetLambda);
1136 glonassSatelliteAlmanac.lambda = lambda;
1137 jdouble omega = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1138 method_glonassSatelliteAlmanacGetOmega);
1139 glonassSatelliteAlmanac.omega = omega;
1140 jint slotNumber = env->CallIntMethod(glonassSatelliteAlmanacObj,
1141 method_glonassSatelliteAlmanacGetSlotNumber);
1142 glonassSatelliteAlmanac.slotNumber = static_cast<int32_t>(slotNumber);
1143 jint healthState = env->CallIntMethod(glonassSatelliteAlmanacObj,
1144 method_glonassSatelliteAlmanacGetHealthState);
1145 glonassSatelliteAlmanac.svHealth = static_cast<int32_t>(healthState);
1146 jdouble tLambda = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1147 method_glonassSatelliteAlmanacGetTLambda);
1148 glonassSatelliteAlmanac.tLambda = tLambda;
1149 jdouble tau = env->CallDoubleMethod(glonassSatelliteAlmanacObj,
1150 method_glonassSatelliteAlmanacGetTau);
1151 glonassSatelliteAlmanac.tau = tau;
1152 jboolean isGlonassM = env->CallBooleanMethod(glonassSatelliteAlmanacObj,
1153 method_glonassSatelliteAlmanacGetIsGlonassM);
1154 glonassSatelliteAlmanac.isGlonassM = isGlonassM;
1155 jint calendarDayNumber =
1156 env->CallIntMethod(glonassSatelliteAlmanacObj,
1157 method_glonassSatelliteAlmanacGetCalendarDayNumber);
1158 glonassSatelliteAlmanac.calendarDayNumber = static_cast<int32_t>(calendarDayNumber);
1159 env->DeleteLocalRef(glonassSatelliteAlmanacObj);
1160 glonassAlmanac.satelliteAlmanacs.push_back(glonassSatelliteAlmanac);
1161 glonassAlmanacOpt = glonassAlmanac;
1162 }
1163 env->DeleteLocalRef(satelliteAlmanacsObj);
1164 }
1165
setGlonassSatelliteEphemeris(JNIEnv * env,jobject glonassSatelliteEphemerisListObj,std::vector<GlonassSatelliteEphemeris> & glonassSatelliteEphemerisList)1166 void GnssAssistanceUtil::setGlonassSatelliteEphemeris(
1167 JNIEnv* env, jobject glonassSatelliteEphemerisListObj,
1168 std::vector<GlonassSatelliteEphemeris>& glonassSatelliteEphemerisList) {
1169 if (glonassSatelliteEphemerisListObj == nullptr) return;
1170 auto len = env->CallIntMethod(glonassSatelliteEphemerisListObj, method_listSize);
1171 for (uint16_t i = 0; i < len; ++i) {
1172 jobject glonassSatelliteEphemerisObj =
1173 env->CallObjectMethod(glonassSatelliteEphemerisListObj, method_listGet, i);
1174 if (glonassSatelliteEphemerisObj == nullptr) continue;
1175 GlonassSatelliteEphemeris glonassSatelliteEphemeris;
1176 jdouble ageInDays = env->CallDoubleMethod(glonassSatelliteEphemerisObj,
1177 method_glonassSatelliteEphemerisGetAgeInDays);
1178 glonassSatelliteEphemeris.ageInDays = ageInDays;
1179
1180 // Set the GlonassSatelliteClockModel.
1181 jobject glonassSatelliteClockModelObj =
1182 env->CallObjectMethod(glonassSatelliteEphemerisObj,
1183 method_glonassSatelliteEphemerisGetSatelliteClockModel);
1184 GlonassSatelliteClockModel glonassSatelliteClockModel;
1185 jdouble clockBias = env->CallDoubleMethod(glonassSatelliteClockModelObj,
1186 method_glonassSatelliteClockModelGetClockBias);
1187 glonassSatelliteClockModel.clockBias = clockBias;
1188 jdouble frequencyBias =
1189 env->CallDoubleMethod(glonassSatelliteClockModelObj,
1190 method_glonassSatelliteClockModelGetFrequencyBias);
1191 glonassSatelliteClockModel.frequencyBias = frequencyBias;
1192 jint frequencyChannelNumber =
1193 env->CallIntMethod(glonassSatelliteClockModelObj,
1194 method_glonassSatelliteClockModelGetFrequencyChannelNumber);
1195 glonassSatelliteClockModel.frequencyChannelNumber =
1196 static_cast<int32_t>(frequencyChannelNumber);
1197 jdouble timeOfClockSeconds =
1198 env->CallDoubleMethod(glonassSatelliteClockModelObj,
1199 method_glonassSatelliteClockModelGetTimeOfClockSeconds);
1200 glonassSatelliteClockModel.timeOfClockSeconds = timeOfClockSeconds;
1201 glonassSatelliteEphemeris.satelliteClockModel = glonassSatelliteClockModel;
1202 env->DeleteLocalRef(glonassSatelliteClockModelObj);
1203
1204 // Set the GlonassSatelliteOrbitModel.
1205 jobject glonassSatelliteOrbitModelObj =
1206 env->CallObjectMethod(glonassSatelliteEphemerisObj,
1207 method_glonassSatelliteEphemerisGetSatelliteOrbitModel);
1208 GlonassSatelliteOrbitModel glonassSatelliteOrbitModel;
1209 jdouble x = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1210 method_glonassSatelliteOrbitModelGetX);
1211 glonassSatelliteOrbitModel.x = x;
1212 jdouble y = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1213 method_glonassSatelliteOrbitModelGetY);
1214 glonassSatelliteOrbitModel.y = y;
1215 jdouble z = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1216 method_glonassSatelliteOrbitModelGetZ);
1217 glonassSatelliteOrbitModel.z = z;
1218 jdouble xAccel = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1219 method_glonassSatelliteOrbitModelGetXAccel);
1220 glonassSatelliteOrbitModel.xAccel = xAccel;
1221 jdouble yAccel = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1222 method_glonassSatelliteOrbitModelGetYAccel);
1223 glonassSatelliteOrbitModel.yAccel = yAccel;
1224 jdouble zAccel = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1225 method_glonassSatelliteOrbitModelGetZAccel);
1226 glonassSatelliteOrbitModel.zAccel = zAccel;
1227 jdouble xDot = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1228 method_glonassSatelliteOrbitModelGetXDot);
1229 glonassSatelliteOrbitModel.xDot = xDot;
1230 jdouble yDot = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1231 method_glonassSatelliteOrbitModelGetYDot);
1232 glonassSatelliteOrbitModel.yDot = yDot;
1233 jdouble zDot = env->CallDoubleMethod(glonassSatelliteOrbitModelObj,
1234 method_glonassSatelliteOrbitModelGetZDot);
1235 glonassSatelliteOrbitModel.zDot = zDot;
1236 glonassSatelliteEphemeris.satelliteOrbitModel = glonassSatelliteOrbitModel;
1237 env->DeleteLocalRef(glonassSatelliteOrbitModelObj);
1238
1239 jint healthState = env->CallIntMethod(glonassSatelliteEphemerisObj,
1240 method_glonassSatelliteEphemerisGetHealthState);
1241 glonassSatelliteEphemeris.svHealth = static_cast<int32_t>(healthState);
1242 jint slotNumber = env->CallIntMethod(glonassSatelliteEphemerisObj,
1243 method_glonassSatelliteEphemerisGetSlotNumber);
1244 glonassSatelliteEphemeris.slotNumber = static_cast<int32_t>(slotNumber);
1245 jdouble frameTimeSeconds =
1246 env->CallDoubleMethod(glonassSatelliteEphemerisObj,
1247 method_glonassSatelliteEphemerisGetFrameTimeSeconds);
1248 glonassSatelliteEphemeris.frameTimeSeconds = frameTimeSeconds;
1249 jint updateIntervalMinutes =
1250 env->CallIntMethod(glonassSatelliteEphemerisObj,
1251 method_glonassSatelliteEphemerisGetUpdateIntervalMinutes);
1252 glonassSatelliteEphemeris.updateIntervalMinutes =
1253 static_cast<int32_t>(updateIntervalMinutes);
1254 jboolean isGlonassM = env->CallBooleanMethod(glonassSatelliteEphemerisObj,
1255 method_glonassSatelliteEphemerisGetIsGlonassM);
1256 glonassSatelliteEphemeris.isGlonassM = isGlonassM;
1257 jboolean isUpdateIntervalOdd =
1258 env->CallBooleanMethod(glonassSatelliteEphemerisObj,
1259 method_glonassSatelliteEphemerisGetIsUpdateIntervalOdd);
1260 glonassSatelliteEphemeris.isOddUpdateInterval = isUpdateIntervalOdd;
1261 glonassSatelliteEphemerisList.push_back(glonassSatelliteEphemeris);
1262 env->DeleteLocalRef(glonassSatelliteEphemerisObj);
1263 }
1264 }
1265
setGalileoAssistance(JNIEnv * env,jobject galileoAssistanceObj,std::optional<GalileoAssistance> & galileoAssistanceOpt)1266 void GnssAssistanceUtil::setGalileoAssistance(
1267 JNIEnv* env, jobject galileoAssistanceObj,
1268 std::optional<GalileoAssistance>& galileoAssistanceOpt) {
1269 GalileoAssistance galileoAssistance;
1270 jobject galileoAlmanacObj =
1271 env->CallObjectMethod(galileoAssistanceObj, method_galileoAssistanceGetAlmanac);
1272 jobject ionosphericModelObj =
1273 env->CallObjectMethod(galileoAssistanceObj,
1274 method_galileoAssistanceGetIonosphericModel);
1275 jobject utcModelObj =
1276 env->CallObjectMethod(galileoAssistanceObj, method_galileoAssistanceGetUtcModel);
1277 jobject leapSecondsModelObj =
1278 env->CallObjectMethod(galileoAssistanceObj,
1279 method_galileoAssistanceGetLeapSecondsModel);
1280 jobject timeModelsObj =
1281 env->CallObjectMethod(galileoAssistanceObj, method_galileoAssistanceGetTimeModels);
1282 jobject satelliteEphemerisObj =
1283 env->CallObjectMethod(galileoAssistanceObj,
1284 method_galileoAssistanceGetSatelliteEphemeris);
1285 jobject realTimeIntegrityModelsObj =
1286 env->CallObjectMethod(galileoAssistanceObj,
1287 method_galileoAssistanceGetRealTimeIntegrityModels);
1288 jobject satelliteCorrectionsObj =
1289 env->CallObjectMethod(galileoAssistanceObj,
1290 method_galileoAssistanceGetSatelliteCorrections);
1291 jobject auxiliaryInformationsObj =
1292 env->CallObjectMethod(galileoAssistanceObj,
1293 method_galileoAssistanceGetAuxiliaryInformation);
1294 setGnssAlmanac(env, galileoAlmanacObj, galileoAssistance.almanac);
1295 setGalileoIonosphericModel(env, ionosphericModelObj, galileoAssistance.ionosphericModel);
1296 setUtcModel(env, utcModelObj, galileoAssistance.utcModel);
1297 setLeapSecondsModel(env, leapSecondsModelObj, galileoAssistance.leapSecondsModel);
1298 setTimeModels(env, timeModelsObj, galileoAssistance.timeModels);
1299 setGalileoSatelliteEphemeris(env, satelliteEphemerisObj, galileoAssistance.satelliteEphemeris);
1300 setRealTimeIntegrityModels(env, realTimeIntegrityModelsObj,
1301 galileoAssistance.realTimeIntegrityModels);
1302 setSatelliteCorrections(env, satelliteCorrectionsObj, galileoAssistance.satelliteCorrections);
1303 setAuxiliaryInformations(env, auxiliaryInformationsObj,
1304 galileoAssistance.auxiliaryInformations);
1305 galileoAssistanceOpt = galileoAssistance;
1306 env->DeleteLocalRef(galileoAlmanacObj);
1307 env->DeleteLocalRef(ionosphericModelObj);
1308 env->DeleteLocalRef(utcModelObj);
1309 env->DeleteLocalRef(leapSecondsModelObj);
1310 env->DeleteLocalRef(timeModelsObj);
1311 env->DeleteLocalRef(satelliteEphemerisObj);
1312 env->DeleteLocalRef(realTimeIntegrityModelsObj);
1313 env->DeleteLocalRef(satelliteCorrectionsObj);
1314 env->DeleteLocalRef(auxiliaryInformationsObj);
1315 }
1316
setGalileoIonosphericModel(JNIEnv * env,jobject galileoIonosphericModelObj,std::optional<GalileoIonosphericModel> & ionosphericModelOpt)1317 void GnssAssistanceUtil::setGalileoIonosphericModel(
1318 JNIEnv* env, jobject galileoIonosphericModelObj,
1319 std::optional<GalileoIonosphericModel>& ionosphericModelOpt) {
1320 if (galileoIonosphericModelObj == nullptr) return;
1321 GalileoIonosphericModel ionosphericModel;
1322 jdouble ai0 =
1323 env->CallDoubleMethod(galileoIonosphericModelObj, method_galileoIonosphericModelGetAi0);
1324 ionosphericModel.ai0 = ai0;
1325 jdouble ai1 =
1326 env->CallDoubleMethod(galileoIonosphericModelObj, method_galileoIonosphericModelGetAi1);
1327 ionosphericModel.ai1 = ai1;
1328 jdouble ai2 =
1329 env->CallDoubleMethod(galileoIonosphericModelObj, method_galileoIonosphericModelGetAi2);
1330 ionosphericModel.ai2 = ai2;
1331 ionosphericModelOpt = ionosphericModel;
1332 }
1333
setGalileoSatelliteEphemeris(JNIEnv * env,jobject galileoSatelliteEphemerisListObj,std::vector<GalileoSatelliteEphemeris> & galileoSatelliteEphemerisList)1334 void GnssAssistanceUtil::setGalileoSatelliteEphemeris(
1335 JNIEnv* env, jobject galileoSatelliteEphemerisListObj,
1336 std::vector<GalileoSatelliteEphemeris>& galileoSatelliteEphemerisList) {
1337 if (galileoSatelliteEphemerisListObj == nullptr) return;
1338 auto len = env->CallIntMethod(galileoSatelliteEphemerisListObj, method_listSize);
1339 for (uint16_t i = 0; i < len; ++i) {
1340 jobject galileoSatelliteEphemerisObj =
1341 env->CallObjectMethod(galileoSatelliteEphemerisListObj, method_listGet, i);
1342 GalileoSatelliteEphemeris galileoSatelliteEphemeris;
1343 GalileoSvHealth galileoSvHealth;
1344 // Set the svid of the satellite.
1345 jint svid = env->CallLongMethod(galileoSatelliteEphemerisObj,
1346 method_galileoSatelliteEphemerisGetSvid);
1347 galileoSatelliteEphemeris.svid = svid;
1348
1349 // Set the satellite clock models.
1350 jobject galileoSatelliteClockModelListObj =
1351 env->CallObjectMethod(galileoSatelliteEphemerisObj,
1352 method_galileoSatelliteEphemerisGetSatelliteClockModels);
1353 auto size = env->CallIntMethod(galileoSatelliteClockModelListObj, method_listSize);
1354 for (uint16_t j = 0; j < size; ++j) {
1355 jobject galileoSatelliteClockModelObj =
1356 env->CallObjectMethod(galileoSatelliteClockModelListObj, method_listGet, j);
1357 if (galileoSatelliteClockModelObj == nullptr) continue;
1358 GalileoSatelliteClockModel galileoSatelliteClockModel;
1359 jdouble af0 = env->CallDoubleMethod(galileoSatelliteClockModelObj,
1360 method_galileoSatelliteClockModelGetAf0);
1361 galileoSatelliteClockModel.af0 = af0;
1362 jdouble af1 = env->CallDoubleMethod(galileoSatelliteClockModelObj,
1363 method_galileoSatelliteClockModelGetAf1);
1364 galileoSatelliteClockModel.af1 = af1;
1365 jdouble af2 = env->CallDoubleMethod(galileoSatelliteClockModelObj,
1366 method_galileoSatelliteClockModelGetAf2);
1367 galileoSatelliteClockModel.af2 = af2;
1368 jdouble bgdSeconds =
1369 env->CallDoubleMethod(galileoSatelliteClockModelObj,
1370 method_galileoSatelliteClockModelGetBgdSeconds);
1371 galileoSatelliteClockModel.bgdSeconds = bgdSeconds;
1372 jint satelliteClockType =
1373 env->CallIntMethod(galileoSatelliteClockModelObj,
1374 method_galileoSatelliteClockModelGetSatelliteClockType);
1375 galileoSatelliteClockModel.satelliteClockType =
1376 static_cast<GalileoSatelliteClockModel::SatelliteClockType>(satelliteClockType);
1377 jdouble sisaMeters =
1378 env->CallDoubleMethod(galileoSatelliteClockModelObj,
1379 method_galileoSatelliteClockModelGetSisaMeters);
1380 galileoSatelliteClockModel.sisaMeters = sisaMeters;
1381 jdouble timeOfClockSeconds =
1382 env->CallDoubleMethod(galileoSatelliteClockModelObj,
1383 method_galileoSatelliteClockModelGetTimeOfClockSeconds);
1384 galileoSatelliteClockModel.timeOfClockSeconds = timeOfClockSeconds;
1385 galileoSatelliteEphemeris.satelliteClockModel.push_back(galileoSatelliteClockModel);
1386 env->DeleteLocalRef(galileoSatelliteClockModelObj);
1387 }
1388 env->DeleteLocalRef(galileoSatelliteClockModelListObj);
1389
1390 // Set the satelliteOrbitModel of the satellite.
1391 jobject satelliteOrbitModelObj =
1392 env->CallObjectMethod(galileoSatelliteEphemerisObj,
1393 method_galileoSatelliteEphemerisGetSatelliteOrbitModel);
1394 GnssAssistanceUtil::setKeplerianOrbitModel(env, satelliteOrbitModelObj,
1395 galileoSatelliteEphemeris.satelliteOrbitModel);
1396 env->DeleteLocalRef(satelliteOrbitModelObj);
1397
1398 // Set the satellite health of the satellite clock model.
1399 jobject galileoSvHealthObj =
1400 env->CallObjectMethod(galileoSatelliteEphemerisObj,
1401 method_galileoSatelliteEphemerisGetSatelliteHealth);
1402 jint dataValidityStatusE1b =
1403 env->CallIntMethod(galileoSvHealthObj,
1404 method_galileoSvHealthGetDataValidityStatusE1b);
1405 galileoSvHealth.dataValidityStatusE1b =
1406 static_cast<GalileoSvHealth::GalileoHealthDataVaidityType>(dataValidityStatusE1b);
1407 jint dataValidityStatusE5a =
1408 env->CallIntMethod(galileoSvHealthObj,
1409 method_galileoSvHealthGetDataValidityStatusE5a);
1410 galileoSvHealth.dataValidityStatusE5a =
1411 static_cast<GalileoSvHealth::GalileoHealthDataVaidityType>(dataValidityStatusE5a);
1412 jint dataValidityStatusE5b =
1413 env->CallIntMethod(galileoSvHealthObj,
1414 method_galileoSvHealthGetDataValidityStatusE5b);
1415 galileoSvHealth.dataValidityStatusE5b =
1416 static_cast<GalileoSvHealth::GalileoHealthDataVaidityType>(dataValidityStatusE5b);
1417 jint signalHealthStatusE1b =
1418 env->CallIntMethod(galileoSvHealthObj,
1419 method_galileoSvHealthGetSignalHealthStatusE1b);
1420 galileoSvHealth.signalHealthStatusE1b =
1421 static_cast<GalileoSvHealth::GalileoHealthStatusType>(signalHealthStatusE1b);
1422 jint signalHealthStatusE5a =
1423 env->CallIntMethod(galileoSvHealthObj,
1424 method_galileoSvHealthGetSignalHealthStatusE5a);
1425 galileoSvHealth.signalHealthStatusE5a =
1426 static_cast<GalileoSvHealth::GalileoHealthStatusType>(signalHealthStatusE5a);
1427 jint signalHealthStatusE5b =
1428 env->CallIntMethod(galileoSvHealthObj,
1429 method_galileoSvHealthGetSignalHealthStatusE5b);
1430 galileoSvHealth.signalHealthStatusE5b =
1431 static_cast<GalileoSvHealth::GalileoHealthStatusType>(signalHealthStatusE5b);
1432 galileoSatelliteEphemeris.svHealth = galileoSvHealth;
1433 env->DeleteLocalRef(galileoSvHealthObj);
1434
1435 // Set the satelliteEphemerisTime of the satellite.
1436 jobject satelliteEphemerisTimeObj =
1437 env->CallObjectMethod(galileoSatelliteEphemerisObj,
1438 method_galileoSatelliteEphemerisGetSatelliteEphemerisTime);
1439 GnssAssistanceUtil::setSatelliteEphemerisTime(env, satelliteEphemerisTimeObj,
1440 galileoSatelliteEphemeris
1441 .satelliteEphemerisTime);
1442 env->DeleteLocalRef(satelliteEphemerisTimeObj);
1443
1444 galileoSatelliteEphemerisList.push_back(galileoSatelliteEphemeris);
1445 env->DeleteLocalRef(galileoSatelliteEphemerisObj);
1446 }
1447 }
1448
setBeidouAssistance(JNIEnv * env,jobject beidouAssistanceObj,std::optional<BeidouAssistance> & beidouAssistanceOpt)1449 void GnssAssistanceUtil::setBeidouAssistance(JNIEnv* env, jobject beidouAssistanceObj,
1450 std::optional<BeidouAssistance>& beidouAssistanceOpt) {
1451 BeidouAssistance beidouAssistance;
1452 jobject beidouAlmanacObj =
1453 env->CallObjectMethod(beidouAssistanceObj, method_beidouAssistanceGetAlmanac);
1454 jobject ionosphericModelObj =
1455 env->CallObjectMethod(beidouAssistanceObj, method_beidouAssistanceGetIonosphericModel);
1456 jobject utcModelObj =
1457 env->CallObjectMethod(beidouAssistanceObj, method_beidouAssistanceGetUtcModel);
1458 jobject leapSecondsModelObj =
1459 env->CallObjectMethod(beidouAssistanceObj, method_beidouAssistanceGetLeapSecondsModel);
1460 jobject timeModelsObj =
1461 env->CallObjectMethod(beidouAssistanceObj, method_beidouAssistanceGetTimeModels);
1462 jobject satelliteEphemerisObj =
1463 env->CallObjectMethod(beidouAssistanceObj,
1464 method_beidouAssistanceGetSatelliteEphemeris);
1465 jobject realTimeIntegrityModelsObj =
1466 env->CallObjectMethod(beidouAssistanceObj,
1467 method_beidouAssistanceGetRealTimeIntegrityModels);
1468 jobject satelliteCorrectionsObj =
1469 env->CallObjectMethod(beidouAssistanceObj,
1470 method_beidouAssistanceGetSatelliteCorrections);
1471 jobject auxiliaryInformationsObj =
1472 env->CallObjectMethod(beidouAssistanceObj,
1473 method_beidouAssistanceGetAuxiliaryInformation);
1474 setGnssAlmanac(env, beidouAlmanacObj, beidouAssistance.almanac);
1475 setKlobucharIonosphericModel(env, ionosphericModelObj, beidouAssistance.ionosphericModel);
1476 setUtcModel(env, utcModelObj, beidouAssistance.utcModel);
1477 setLeapSecondsModel(env, leapSecondsModelObj, beidouAssistance.leapSecondsModel);
1478 setTimeModels(env, timeModelsObj, beidouAssistance.timeModels);
1479 setBeidouSatelliteEphemeris(env, satelliteEphemerisObj, beidouAssistance.satelliteEphemeris);
1480 setRealTimeIntegrityModels(env, realTimeIntegrityModelsObj,
1481 beidouAssistance.realTimeIntegrityModels);
1482 setSatelliteCorrections(env, satelliteCorrectionsObj, beidouAssistance.satelliteCorrections);
1483 setAuxiliaryInformations(env, auxiliaryInformationsObj, beidouAssistance.auxiliaryInformations);
1484 beidouAssistanceOpt = beidouAssistance;
1485 env->DeleteLocalRef(beidouAlmanacObj);
1486 env->DeleteLocalRef(ionosphericModelObj);
1487 env->DeleteLocalRef(utcModelObj);
1488 env->DeleteLocalRef(leapSecondsModelObj);
1489 env->DeleteLocalRef(timeModelsObj);
1490 env->DeleteLocalRef(satelliteEphemerisObj);
1491 env->DeleteLocalRef(realTimeIntegrityModelsObj);
1492 env->DeleteLocalRef(satelliteCorrectionsObj);
1493 env->DeleteLocalRef(auxiliaryInformationsObj);
1494 }
1495
setBeidouSatelliteEphemeris(JNIEnv * env,jobject beidouSatelliteEphemerisListObj,std::vector<BeidouSatelliteEphemeris> & beidouSatelliteEphemerisList)1496 void GnssAssistanceUtil::setBeidouSatelliteEphemeris(
1497 JNIEnv* env, jobject beidouSatelliteEphemerisListObj,
1498 std::vector<BeidouSatelliteEphemeris>& beidouSatelliteEphemerisList) {
1499 if (beidouSatelliteEphemerisListObj == nullptr) return;
1500 auto len = env->CallIntMethod(beidouSatelliteEphemerisListObj, method_listSize);
1501 for (uint16_t i = 0; i < len; ++i) {
1502 jobject beidouSatelliteEphemerisObj =
1503 env->CallObjectMethod(beidouSatelliteEphemerisListObj, method_listGet, i);
1504 if (beidouSatelliteEphemerisObj == nullptr) continue;
1505 BeidouSatelliteEphemeris beidouSatelliteEphemeris;
1506
1507 // Set the svid of the satellite.
1508 jint svid = env->CallIntMethod(beidouSatelliteEphemerisObj,
1509 method_beidouSatelliteEphemerisGetSvid);
1510 beidouSatelliteEphemeris.svid = static_cast<int32_t>(svid);
1511
1512 // Set the satelliteClockModel of the satellite.
1513 jobject satelliteClockModelObj =
1514 env->CallObjectMethod(beidouSatelliteEphemerisObj,
1515 method_beidouSatelliteEphemerisGetSatelliteClockModel);
1516 jdouble af0 = env->CallDoubleMethod(satelliteClockModelObj,
1517 method_beidouSatelliteClockModelGetAf0);
1518 jdouble af1 = env->CallDoubleMethod(satelliteClockModelObj,
1519 method_beidouSatelliteClockModelGetAf1);
1520 jdouble af2 = env->CallDoubleMethod(satelliteClockModelObj,
1521 method_beidouSatelliteClockModelGetAf2);
1522 jdouble tgd1 = env->CallDoubleMethod(satelliteClockModelObj,
1523 method_beidouSatelliteClockModelGetTgd1);
1524 jdouble tgd2 = env->CallDoubleMethod(satelliteClockModelObj,
1525 method_beidouSatelliteClockModelGetTgd2);
1526 jdouble aodc = env->CallDoubleMethod(satelliteClockModelObj,
1527 method_beidouSatelliteClockModelGetAodc);
1528 jlong timeOfClockSeconds =
1529 env->CallLongMethod(satelliteClockModelObj,
1530 method_beidouSatelliteClockModelGetTimeOfClockSeconds);
1531 beidouSatelliteEphemeris.satelliteClockModel.af0 = af0;
1532 beidouSatelliteEphemeris.satelliteClockModel.af1 = af1;
1533 beidouSatelliteEphemeris.satelliteClockModel.af2 = af2;
1534 beidouSatelliteEphemeris.satelliteClockModel.tgd1 = tgd1;
1535 beidouSatelliteEphemeris.satelliteClockModel.tgd2 = tgd2;
1536 beidouSatelliteEphemeris.satelliteClockModel.aodc = aodc;
1537 beidouSatelliteEphemeris.satelliteClockModel.timeOfClockSeconds = timeOfClockSeconds;
1538 env->DeleteLocalRef(satelliteClockModelObj);
1539
1540 // Set the satelliteOrbitModel of the satellite.
1541 jobject satelliteOrbitModelObj =
1542 env->CallObjectMethod(beidouSatelliteEphemerisObj,
1543 method_beidouSatelliteEphemerisGetSatelliteOrbitModel);
1544 GnssAssistanceUtil::setKeplerianOrbitModel(env, satelliteOrbitModelObj,
1545 beidouSatelliteEphemeris.satelliteOrbitModel);
1546 env->DeleteLocalRef(satelliteOrbitModelObj);
1547
1548 // Set the satelliteHealth of the satellite.
1549 jobject satelliteHealthObj =
1550 env->CallObjectMethod(beidouSatelliteEphemerisObj,
1551 method_beidouSatelliteEphemerisGetSatelliteHealth);
1552 jint satH1 = env->CallIntMethod(satelliteHealthObj, method_beidouSatelliteHealthGetSatH1);
1553 jint svAccur =
1554 env->CallIntMethod(satelliteHealthObj, method_beidouSatelliteHealthGetSvAccur);
1555 beidouSatelliteEphemeris.satelliteHealth.satH1 = static_cast<int32_t>(satH1);
1556 beidouSatelliteEphemeris.satelliteHealth.svAccur = static_cast<int32_t>(svAccur);
1557 env->DeleteLocalRef(satelliteHealthObj);
1558
1559 // Set the satelliteEphemerisTime of the satellite.
1560 jobject satelliteEphemerisTimeObj =
1561 env->CallObjectMethod(beidouSatelliteEphemerisObj,
1562 method_beidouSatelliteEphemerisGetSatelliteEphemerisTime);
1563 jint aode = env->CallIntMethod(satelliteEphemerisTimeObj,
1564 method_beidouSatelliteEphemerisTimeGetAode);
1565 jint beidouWeekNumber =
1566 env->CallIntMethod(satelliteEphemerisTimeObj,
1567 method_beidouSatelliteEphemerisTimeGetBeidouWeekNumber);
1568 jint toeSeconds = env->CallDoubleMethod(satelliteEphemerisTimeObj,
1569 method_beidouSatelliteEphemerisTimeGetToeSeconds);
1570 beidouSatelliteEphemeris.satelliteEphemerisTime.aode = static_cast<int32_t>(aode);
1571 beidouSatelliteEphemeris.satelliteEphemerisTime.weekNumber =
1572 static_cast<int32_t>(beidouWeekNumber);
1573 beidouSatelliteEphemeris.satelliteEphemerisTime.toeSeconds =
1574 static_cast<int32_t>(toeSeconds);
1575 env->DeleteLocalRef(satelliteEphemerisTimeObj);
1576
1577 beidouSatelliteEphemerisList.push_back(beidouSatelliteEphemeris);
1578 env->DeleteLocalRef(beidouSatelliteEphemerisObj);
1579 }
1580 }
1581
setGpsAssistance(JNIEnv * env,jobject gpsAssistanceObj,std::optional<GpsAssistance> & gpsAssistanceOpt)1582 void GnssAssistanceUtil::setGpsAssistance(JNIEnv* env, jobject gpsAssistanceObj,
1583 std::optional<GpsAssistance>& gpsAssistanceOpt) {
1584 if (gpsAssistanceObj == nullptr) return;
1585 GpsAssistance gpsAssistance;
1586 jobject gnssAlmanacObj =
1587 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetAlmanac);
1588 jobject ionosphericModelObj =
1589 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetIonosphericModel);
1590 jobject utcModelObj = env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetUtcModel);
1591 jobject leapSecondsModelObj =
1592 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetLeapSecondsModel);
1593 jobject timeModelsObj =
1594 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetTimeModels);
1595 jobject satelliteEphemerisObj =
1596 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetSatelliteEphemeris);
1597 jobject realTimeIntegrityModelsObj =
1598 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetRealTimeIntegrityModels);
1599 jobject satelliteCorrectionsObj =
1600 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetSatelliteCorrections);
1601 jobject auxiliaryInformationsObj =
1602 env->CallObjectMethod(gpsAssistanceObj, method_gpsAssistanceGetAuxiliaryInformation);
1603 setGnssAlmanac(env, gnssAlmanacObj, gpsAssistance.almanac);
1604 setKlobucharIonosphericModel(env, ionosphericModelObj, gpsAssistance.ionosphericModel);
1605 setUtcModel(env, utcModelObj, gpsAssistance.utcModel);
1606 setLeapSecondsModel(env, leapSecondsModelObj, gpsAssistance.leapSecondsModel);
1607 setTimeModels(env, timeModelsObj, gpsAssistance.timeModels);
1608 setGpsOrQzssSatelliteEphemeris<GpsSatelliteEphemeris>(env, satelliteEphemerisObj,
1609 gpsAssistance.satelliteEphemeris);
1610 setRealTimeIntegrityModels(env, realTimeIntegrityModelsObj,
1611 gpsAssistance.realTimeIntegrityModels);
1612 setSatelliteCorrections(env, satelliteCorrectionsObj, gpsAssistance.satelliteCorrections);
1613 setAuxiliaryInformations(env, auxiliaryInformationsObj, gpsAssistance.auxiliaryInformations);
1614 gpsAssistanceOpt = gpsAssistance;
1615 env->DeleteLocalRef(gnssAlmanacObj);
1616 env->DeleteLocalRef(ionosphericModelObj);
1617 env->DeleteLocalRef(utcModelObj);
1618 env->DeleteLocalRef(leapSecondsModelObj);
1619 env->DeleteLocalRef(timeModelsObj);
1620 env->DeleteLocalRef(satelliteEphemerisObj);
1621 env->DeleteLocalRef(realTimeIntegrityModelsObj);
1622 env->DeleteLocalRef(satelliteCorrectionsObj);
1623 env->DeleteLocalRef(auxiliaryInformationsObj);
1624 }
1625
1626 /** Set the GPS/QZSS satellite ephemeris list. */
1627 template <class T>
setGpsOrQzssSatelliteEphemeris(JNIEnv * env,jobject satelliteEphemerisListObj,std::vector<T> & satelliteEphemerisList)1628 void GnssAssistanceUtil::setGpsOrQzssSatelliteEphemeris(JNIEnv* env,
1629 jobject satelliteEphemerisListObj,
1630 std::vector<T>& satelliteEphemerisList) {
1631 if (satelliteEphemerisListObj == nullptr) return;
1632 auto len = env->CallIntMethod(satelliteEphemerisListObj, method_listSize);
1633 for (uint16_t i = 0; i < len; ++i) {
1634 jobject satelliteEphemerisObj =
1635 env->CallObjectMethod(satelliteEphemerisListObj, method_listGet, i);
1636 if (satelliteEphemerisObj == nullptr) continue;
1637 T satelliteEphemeris;
1638 // Set the svid of the satellite.
1639 jint svid = env->CallIntMethod(satelliteEphemerisObj, method_gpsSatelliteEphemerisGetSvid);
1640 satelliteEphemeris.svid = static_cast<int32_t>(svid);
1641
1642 // Set the gpsL2Params of the satellite.
1643 jobject gpsL2ParamsObj = env->CallObjectMethod(satelliteEphemerisObj,
1644 method_gpsSatelliteEphemerisGetGpsL2Params);
1645 jint l2Code = env->CallIntMethod(gpsL2ParamsObj, method_gpsL2ParamsGetL2Code);
1646 jint l2Flag = env->CallIntMethod(gpsL2ParamsObj, method_gpsL2ParamsGetL2Flag);
1647 satelliteEphemeris.gpsL2Params.l2Code = static_cast<int32_t>(l2Code);
1648 satelliteEphemeris.gpsL2Params.l2Flag = static_cast<int32_t>(l2Flag);
1649 env->DeleteLocalRef(gpsL2ParamsObj);
1650
1651 // Set the satelliteClockModel of the satellite.
1652 jobject satelliteClockModelObj =
1653 env->CallObjectMethod(satelliteEphemerisObj,
1654 method_gpsSatelliteEphemerisGetSatelliteClockModel);
1655 jdouble af0 =
1656 env->CallDoubleMethod(satelliteClockModelObj, method_gpsSatelliteClockModelGetAf0);
1657 jdouble af1 =
1658 env->CallDoubleMethod(satelliteClockModelObj, method_gpsSatelliteClockModelGetAf1);
1659 jdouble af2 =
1660 env->CallDoubleMethod(satelliteClockModelObj, method_gpsSatelliteClockModelGetAf2);
1661 jdouble tgd =
1662 env->CallDoubleMethod(satelliteClockModelObj, method_gpsSatelliteClockModelGetTgd);
1663 jint iodc =
1664 env->CallDoubleMethod(satelliteClockModelObj, method_gpsSatelliteClockModelGetIodc);
1665 jlong timeOfClockSeconds =
1666 env->CallLongMethod(satelliteClockModelObj,
1667 method_gpsSatelliteClockModelGetTimeOfClockSeconds);
1668 satelliteEphemeris.satelliteClockModel.af0 = af0;
1669 satelliteEphemeris.satelliteClockModel.af1 = af1;
1670 satelliteEphemeris.satelliteClockModel.af2 = af2;
1671 satelliteEphemeris.satelliteClockModel.tgd = tgd;
1672 satelliteEphemeris.satelliteClockModel.iodc = static_cast<int32_t>(iodc);
1673 satelliteEphemeris.satelliteClockModel.timeOfClockSeconds = timeOfClockSeconds;
1674 env->DeleteLocalRef(satelliteClockModelObj);
1675
1676 // Set the satelliteOrbitModel of the satellite.
1677 jobject satelliteOrbitModelObj =
1678 env->CallObjectMethod(satelliteEphemerisObj,
1679 method_gpsSatelliteEphemerisGetSatelliteOrbitModel);
1680 GnssAssistanceUtil::setKeplerianOrbitModel(env, satelliteOrbitModelObj,
1681 satelliteEphemeris.satelliteOrbitModel);
1682 env->DeleteLocalRef(satelliteOrbitModelObj);
1683
1684 // Set the satelliteHealth of the satellite.
1685 jobject satelliteHealthObj =
1686 env->CallObjectMethod(satelliteEphemerisObj,
1687 method_gpsSatelliteEphemerisGetSatelliteHealth);
1688 jint svHealth =
1689 env->CallIntMethod(satelliteHealthObj, method_gpsSatelliteHealthGetSvHealth);
1690 jdouble svAccur =
1691 env->CallDoubleMethod(satelliteHealthObj, method_gpsSatelliteHealthGetSvAccur);
1692 jdouble fitInt = env->CallIntMethod(satelliteHealthObj, method_gpsSatelliteHealthGetFitInt);
1693 satelliteEphemeris.satelliteHealth.svHealth = static_cast<int32_t>(svHealth);
1694 satelliteEphemeris.satelliteHealth.svAccur = svAccur;
1695 satelliteEphemeris.satelliteHealth.fitInt = fitInt;
1696 env->DeleteLocalRef(satelliteHealthObj);
1697
1698 // Set the satelliteEphemerisTime of the satellite.
1699 jobject satelliteEphemerisTimeObj =
1700 env->CallObjectMethod(satelliteEphemerisObj,
1701 method_gpsSatelliteEphemerisGetSatelliteEphemerisTime);
1702 GnssAssistanceUtil::setSatelliteEphemerisTime(env, satelliteEphemerisTimeObj,
1703 satelliteEphemeris.satelliteEphemerisTime);
1704 env->DeleteLocalRef(satelliteEphemerisTimeObj);
1705
1706 satelliteEphemerisList.push_back(satelliteEphemeris);
1707 env->DeleteLocalRef(satelliteEphemerisObj);
1708 }
1709 }
1710
setSatelliteCorrections(JNIEnv * env,jobject satelliteCorrectionsObj,std::vector<GnssSatelliteCorrections> & gnssSatelliteCorrectionsList)1711 void GnssAssistanceUtil::setSatelliteCorrections(
1712 JNIEnv* env, jobject satelliteCorrectionsObj,
1713 std::vector<GnssSatelliteCorrections>& gnssSatelliteCorrectionsList) {
1714 if (satelliteCorrectionsObj == nullptr) return;
1715 auto len = env->CallIntMethod(satelliteCorrectionsObj, method_listSize);
1716 for (uint16_t i = 0; i < len; ++i) {
1717 GnssSatelliteCorrections gnssSatelliteCorrections;
1718 jobject satelliteCorrectionObj =
1719 env->CallObjectMethod(satelliteCorrectionsObj, method_listGet, i);
1720 if (satelliteCorrectionObj == nullptr) continue;
1721 jint svid = env->CallIntMethod(satelliteCorrectionObj, method_satelliteCorrectionGetSvid);
1722 gnssSatelliteCorrections.svid = svid;
1723 jobject ionosphericCorrectionsObj =
1724 env->CallObjectMethod(satelliteCorrectionObj,
1725 method_satelliteCorrectionGetIonosphericCorrections);
1726 env->DeleteLocalRef(satelliteCorrectionObj);
1727 auto size = env->CallIntMethod(ionosphericCorrectionsObj, method_listSize);
1728 for (uint16_t j = 0; j < size; ++j) {
1729 jobject ionosphericCorrectionObj =
1730 env->CallObjectMethod(ionosphericCorrectionsObj, method_listGet, j);
1731 if (ionosphericCorrectionObj == nullptr) continue;
1732 IonosphericCorrection ionosphericCorrection;
1733 jlong carrierFrequencyHz =
1734 env->CallLongMethod(ionosphericCorrectionObj,
1735 method_ionosphericCorrectionGetCarrierFrequencyHz);
1736 ionosphericCorrection.carrierFrequencyHz = carrierFrequencyHz;
1737
1738 jobject gnssCorrectionComponentObj =
1739 env->CallObjectMethod(ionosphericCorrectionObj,
1740 method_ionosphericCorrectionGetIonosphericCorrection);
1741 env->DeleteLocalRef(ionosphericCorrectionObj);
1742
1743 jstring sourceKey = static_cast<jstring>(
1744 env->CallObjectMethod(gnssCorrectionComponentObj,
1745 method_gnssCorrectionComponentGetSourceKey));
1746 ScopedJniString jniSourceKey{env, sourceKey};
1747 ionosphericCorrection.ionosphericCorrectionComponent.sourceKey =
1748 android::String16(jniSourceKey.c_str());
1749
1750 jobject pseudorangeCorrectionObj =
1751 env->CallObjectMethod(gnssCorrectionComponentObj,
1752 method_gnssCorrectionComponentGetPseudorangeCorrection);
1753 jdouble correctionMeters =
1754 env->CallDoubleMethod(pseudorangeCorrectionObj,
1755 method_pseudorangeCorrectionGetCorrectionMeters);
1756 jdouble correctionUncertaintyMeters = env->CallDoubleMethod(
1757 pseudorangeCorrectionObj,
1758 method_pseudorangeCorrectionGetCorrectionUncertaintyMeters);
1759 jdouble correctionRateMetersPerSecond = env->CallDoubleMethod(
1760 pseudorangeCorrectionObj,
1761 method_pseudorangeCorrectionGetCorrectionRateMetersPerSecond);
1762 ionosphericCorrection.ionosphericCorrectionComponent.pseudorangeCorrection
1763 .correctionMeters = correctionMeters;
1764 ionosphericCorrection.ionosphericCorrectionComponent.pseudorangeCorrection
1765 .correctionUncertaintyMeters = correctionUncertaintyMeters;
1766 ionosphericCorrection.ionosphericCorrectionComponent.pseudorangeCorrection
1767 .correctionRateMetersPerSecond = correctionRateMetersPerSecond;
1768 env->DeleteLocalRef(pseudorangeCorrectionObj);
1769
1770 jobject gnssIntervalObj =
1771 env->CallObjectMethod(gnssCorrectionComponentObj,
1772 method_gnssCorrectionComponentGetValidityInterval);
1773 jdouble startMillisSinceGpsEpoch =
1774 env->CallDoubleMethod(gnssIntervalObj,
1775 method_gnssIntervalGetStartMillisSinceGpsEpoch);
1776 jdouble endMillisSinceGpsEpoch =
1777 env->CallDoubleMethod(gnssIntervalObj,
1778 method_gnssIntervalGetEndMillisSinceGpsEpoch);
1779 ionosphericCorrection.ionosphericCorrectionComponent.validityInterval
1780 .startMillisSinceGpsEpoch = startMillisSinceGpsEpoch;
1781 ionosphericCorrection.ionosphericCorrectionComponent.validityInterval
1782 .endMillisSinceGpsEpoch = endMillisSinceGpsEpoch;
1783 env->DeleteLocalRef(gnssIntervalObj);
1784
1785 env->DeleteLocalRef(gnssCorrectionComponentObj);
1786 gnssSatelliteCorrections.ionosphericCorrections.push_back(ionosphericCorrection);
1787 }
1788 gnssSatelliteCorrectionsList.push_back(gnssSatelliteCorrections);
1789 env->DeleteLocalRef(ionosphericCorrectionsObj);
1790 }
1791 }
1792
setRealTimeIntegrityModels(JNIEnv * env,jobject realTimeIntegrityModelsObj,std::vector<RealTimeIntegrityModel> & realTimeIntegrityModels)1793 void GnssAssistanceUtil::setRealTimeIntegrityModels(
1794 JNIEnv* env, jobject realTimeIntegrityModelsObj,
1795 std::vector<RealTimeIntegrityModel>& realTimeIntegrityModels) {
1796 if (realTimeIntegrityModelsObj == nullptr) return;
1797 auto len = env->CallIntMethod(realTimeIntegrityModelsObj, method_listSize);
1798 for (uint16_t i = 0; i < len; ++i) {
1799 jobject realTimeIntegrityModelObj =
1800 env->CallObjectMethod(realTimeIntegrityModelsObj, method_listGet, i);
1801 if (realTimeIntegrityModelObj == nullptr) continue;
1802 RealTimeIntegrityModel realTimeIntegrityModel;
1803 jint badSvid = env->CallIntMethod(realTimeIntegrityModelObj,
1804 method_realTimeIntegrityModelGetBadSvid);
1805 jobject badSignalTypesObj =
1806 env->CallObjectMethod(realTimeIntegrityModelObj,
1807 method_realTimeIntegrityModelGetBadSignalTypes);
1808 auto badSignalTypesSize = env->CallIntMethod(badSignalTypesObj, method_listSize);
1809 for (uint16_t j = 0; j < badSignalTypesSize; ++j) {
1810 GnssSignalType badSignalType;
1811 jobject badSignalTypeObj = env->CallObjectMethod(badSignalTypesObj, method_listGet, j);
1812 if (badSignalTypeObj != nullptr) {
1813 setGnssSignalType(env, badSignalTypeObj, badSignalType);
1814 realTimeIntegrityModel.badSignalTypes.push_back(badSignalType);
1815 env->DeleteLocalRef(badSignalTypeObj);
1816 }
1817 }
1818 jlong startDateSeconds =
1819 env->CallLongMethod(realTimeIntegrityModelObj,
1820 method_realTimeIntegrityModelGetStartDateSeconds);
1821 jlong endDateSeconds = env->CallLongMethod(realTimeIntegrityModelObj,
1822 method_realTimeIntegrityModelGetEndDateSeconds);
1823 jlong publishDateSeconds =
1824 env->CallLongMethod(realTimeIntegrityModelObj,
1825 method_realTimeIntegrityModelGetPublishDateSeconds);
1826 jstring advisoryNumber = static_cast<jstring>(
1827 env->CallObjectMethod(realTimeIntegrityModelObj,
1828 method_realTimeIntegrityModelGetAdvisoryNumber));
1829 ScopedJniString jniAdvisoryNumber{env, advisoryNumber};
1830 jstring advisoryType = static_cast<jstring>(
1831 env->CallObjectMethod(realTimeIntegrityModelObj,
1832 method_realTimeIntegrityModelGetAdvisoryType));
1833 ScopedJniString jniAdvisoryType{env, advisoryType};
1834
1835 realTimeIntegrityModel.badSvid = badSvid;
1836 realTimeIntegrityModel.startDateSeconds = startDateSeconds;
1837 realTimeIntegrityModel.endDateSeconds = endDateSeconds;
1838 realTimeIntegrityModel.publishDateSeconds = publishDateSeconds;
1839 realTimeIntegrityModel.advisoryNumber = android::String16(jniAdvisoryNumber.c_str());
1840 realTimeIntegrityModel.advisoryType = android::String16(jniAdvisoryType.c_str());
1841 realTimeIntegrityModels.push_back(realTimeIntegrityModel);
1842 env->DeleteLocalRef(badSignalTypesObj);
1843 env->DeleteLocalRef(realTimeIntegrityModelObj);
1844 }
1845 }
1846
setGnssSignalType(JNIEnv * env,jobject gnssSignalTypeObj,GnssSignalType & gnssSignalType)1847 void GnssAssistanceUtil::setGnssSignalType(JNIEnv* env, jobject gnssSignalTypeObj,
1848 GnssSignalType& gnssSignalType) {
1849 if (gnssSignalTypeObj == nullptr) {
1850 ALOGE("gnssSignalTypeObj is null");
1851 return;
1852 }
1853 jint constellationType =
1854 env->CallIntMethod(gnssSignalTypeObj, method_gnssSignalTypeGetConstellationType);
1855 jdouble carrierFrequencyHz =
1856 env->CallIntMethod(gnssSignalTypeObj, method_gnssSignalTypeGetCarrierFrequencyHz);
1857 jstring codeType = static_cast<jstring>(
1858 env->CallObjectMethod(gnssSignalTypeObj, method_gnssSignalTypeGetCodeType));
1859 ScopedJniString jniCodeType{env, codeType};
1860
1861 gnssSignalType.constellation = static_cast<GnssConstellationType>(constellationType);
1862 gnssSignalType.carrierFrequencyHz = static_cast<int32_t>(carrierFrequencyHz);
1863 gnssSignalType.codeType = std::string(jniCodeType.c_str());
1864 }
1865
setTimeModels(JNIEnv * env,jobject timeModelsObj,std::vector<TimeModel> & timeModels)1866 void GnssAssistanceUtil::setTimeModels(JNIEnv* env, jobject timeModelsObj,
1867 std::vector<TimeModel>& timeModels) {
1868 if (timeModelsObj == nullptr) return;
1869 auto len = env->CallIntMethod(timeModelsObj, method_listSize);
1870 for (uint16_t i = 0; i < len; ++i) {
1871 jobject timeModelObj = env->CallObjectMethod(timeModelsObj, method_listGet, i);
1872 TimeModel timeModel;
1873 jint toGnss = env->CallIntMethod(timeModelObj, method_timeModelsGetToGnss);
1874 jlong timeOfWeek = env->CallLongMethod(timeModelObj, method_timeModelsGetTimeOfWeek);
1875 jint weekNumber = env->CallIntMethod(timeModelObj, method_timeModelsGetWeekNumber);
1876 jdouble a0 = env->CallDoubleMethod(timeModelObj, method_timeModelsGetA0);
1877 jdouble a1 = env->CallDoubleMethod(timeModelObj, method_timeModelsGetA1);
1878 timeModel.toGnss = static_cast<GnssConstellationType>(toGnss);
1879 timeModel.timeOfWeek = timeOfWeek;
1880 timeModel.weekNumber = static_cast<int32_t>(weekNumber);
1881 timeModel.a0 = a0;
1882 timeModel.a1 = a1;
1883 timeModels.push_back(timeModel);
1884 env->DeleteLocalRef(timeModelObj);
1885 }
1886 }
1887
setLeapSecondsModel(JNIEnv * env,jobject leapSecondsModelObj,std::optional<LeapSecondsModel> & leapSecondsModelOpt)1888 void GnssAssistanceUtil::setLeapSecondsModel(JNIEnv* env, jobject leapSecondsModelObj,
1889 std::optional<LeapSecondsModel>& leapSecondsModelOpt) {
1890 if (leapSecondsModelObj == nullptr) return;
1891 LeapSecondsModel leapSecondsModel;
1892 jint dayNumberLeapSecondsFuture =
1893 env->CallIntMethod(leapSecondsModelObj,
1894 method_leapSecondsModelGetDayNumberLeapSecondsFuture);
1895 jint leapSeconds =
1896 env->CallIntMethod(leapSecondsModelObj, method_leapSecondsModelGetLeapSeconds);
1897 jint leapSecondsFuture =
1898 env->CallIntMethod(leapSecondsModelObj, method_leapSecondsModelGetLeapSecondsFuture);
1899 jint weekNumberLeapSecondsFuture =
1900 env->CallIntMethod(leapSecondsModelObj,
1901 method_leapSecondsModelGetWeekNumberLeapSecondsFuture);
1902 leapSecondsModel.dayNumberLeapSecondsFuture = static_cast<int32_t>(dayNumberLeapSecondsFuture);
1903 leapSecondsModel.leapSeconds = static_cast<int32_t>(leapSeconds);
1904 leapSecondsModel.leapSecondsFuture = static_cast<int32_t>(leapSecondsFuture);
1905 leapSecondsModel.weekNumberLeapSecondsFuture =
1906 static_cast<int32_t>(weekNumberLeapSecondsFuture);
1907 leapSecondsModelOpt = leapSecondsModel;
1908 }
1909
setSatelliteEphemerisTime(JNIEnv * env,jobject satelliteEphemerisTimeObj,SatelliteEphemerisTime & satelliteEphemerisTime)1910 void GnssAssistanceUtil::setSatelliteEphemerisTime(JNIEnv* env, jobject satelliteEphemerisTimeObj,
1911 SatelliteEphemerisTime& satelliteEphemerisTime) {
1912 if (satelliteEphemerisTimeObj == nullptr) return;
1913 jdouble iode =
1914 env->CallDoubleMethod(satelliteEphemerisTimeObj, method_satelliteEphemerisTimeGetIode);
1915 jdouble toeSeconds = env->CallDoubleMethod(satelliteEphemerisTimeObj,
1916 method_satelliteEphemerisTimeGetToeSeconds);
1917 jint weekNumber = env->CallIntMethod(satelliteEphemerisTimeObj,
1918 method_satelliteEphemerisTimeGetWeekNumber);
1919 satelliteEphemerisTime.iode = iode;
1920 satelliteEphemerisTime.toeSeconds = toeSeconds;
1921 satelliteEphemerisTime.weekNumber = weekNumber;
1922 }
1923
setKeplerianOrbitModel(JNIEnv * env,jobject keplerianOrbitModelObj,KeplerianOrbitModel & keplerianOrbitModel)1924 void GnssAssistanceUtil::setKeplerianOrbitModel(JNIEnv* env, jobject keplerianOrbitModelObj,
1925 KeplerianOrbitModel& keplerianOrbitModel) {
1926 if (keplerianOrbitModelObj == nullptr) return;
1927 jdouble rootA =
1928 env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetRootA);
1929 jdouble eccentricity = env->CallDoubleMethod(keplerianOrbitModelObj,
1930 method_keplerianOrbitModelGetEccentricity);
1931 jdouble m0 = env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetM0);
1932 jdouble omega =
1933 env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetOmega);
1934 jdouble omegaDot =
1935 env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetOmegaDot);
1936 jdouble deltaN =
1937 env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetDeltaN);
1938 jdouble iDot = env->CallDoubleMethod(keplerianOrbitModelObj, method_keplerianOrbitModelGetIDot);
1939 jobject secondOrderHarmonicPerturbationObj =
1940 env->CallObjectMethod(keplerianOrbitModelObj,
1941 method_keplerianOrbitModelGetSecondOrderHarmonicPerturbation);
1942 jdouble cic = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1943 method_secondOrderHarmonicPerturbationGetCic);
1944 jdouble cis = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1945 method_secondOrderHarmonicPerturbationGetCis);
1946 jdouble crs = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1947 method_secondOrderHarmonicPerturbationGetCrs);
1948 jdouble crc = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1949 method_secondOrderHarmonicPerturbationGetCrc);
1950 jdouble cuc = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1951 method_secondOrderHarmonicPerturbationGetCuc);
1952 jdouble cus = env->CallDoubleMethod(secondOrderHarmonicPerturbationObj,
1953 method_secondOrderHarmonicPerturbationGetCus);
1954 keplerianOrbitModel.rootA = rootA;
1955 keplerianOrbitModel.eccentricity = eccentricity;
1956 keplerianOrbitModel.m0 = m0;
1957 keplerianOrbitModel.omega = omega;
1958 keplerianOrbitModel.omegaDot = omegaDot;
1959 keplerianOrbitModel.deltaN = deltaN;
1960 keplerianOrbitModel.iDot = iDot;
1961 keplerianOrbitModel.secondOrderHarmonicPerturbation.cic = cic;
1962 keplerianOrbitModel.secondOrderHarmonicPerturbation.cis = cis;
1963 keplerianOrbitModel.secondOrderHarmonicPerturbation.crs = crs;
1964 keplerianOrbitModel.secondOrderHarmonicPerturbation.crc = crc;
1965 keplerianOrbitModel.secondOrderHarmonicPerturbation.cuc = cuc;
1966 keplerianOrbitModel.secondOrderHarmonicPerturbation.cus = cus;
1967 env->DeleteLocalRef(secondOrderHarmonicPerturbationObj);
1968 }
1969
setKlobucharIonosphericModel(JNIEnv * env,jobject klobucharIonosphericModelObj,std::optional<KlobucharIonosphericModel> & klobucharIonosphericModelOpt)1970 void GnssAssistanceUtil::setKlobucharIonosphericModel(
1971 JNIEnv* env, jobject klobucharIonosphericModelObj,
1972 std::optional<KlobucharIonosphericModel>& klobucharIonosphericModelOpt) {
1973 if (klobucharIonosphericModelObj == nullptr) return;
1974 KlobucharIonosphericModel klobucharIonosphericModel;
1975 jdouble alpha0 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1976 method_klobucharIonosphericModelGetAlpha0);
1977 jdouble alpha1 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1978 method_klobucharIonosphericModelGetAlpha1);
1979 jdouble alpha2 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1980 method_klobucharIonosphericModelGetAlpha2);
1981 jdouble alpha3 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1982 method_klobucharIonosphericModelGetAlpha3);
1983 jdouble beta0 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1984 method_klobucharIonosphericModelGetBeta0);
1985 jdouble beta1 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1986 method_klobucharIonosphericModelGetBeta1);
1987 jdouble beta2 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1988 method_klobucharIonosphericModelGetBeta2);
1989 jdouble beta3 = env->CallDoubleMethod(klobucharIonosphericModelObj,
1990 method_klobucharIonosphericModelGetBeta3);
1991 klobucharIonosphericModel.alpha0 = alpha0;
1992 klobucharIonosphericModel.alpha1 = alpha1;
1993 klobucharIonosphericModel.alpha2 = alpha2;
1994 klobucharIonosphericModel.alpha3 = alpha3;
1995 klobucharIonosphericModel.beta0 = beta0;
1996 klobucharIonosphericModel.beta1 = beta1;
1997 klobucharIonosphericModel.beta2 = beta2;
1998 klobucharIonosphericModel.beta3 = beta3;
1999 klobucharIonosphericModelOpt = klobucharIonosphericModel;
2000 }
2001
setUtcModel(JNIEnv * env,jobject utcModelObj,std::optional<UtcModel> & utcModelOpt)2002 void GnssAssistanceUtil::setUtcModel(JNIEnv* env, jobject utcModelObj,
2003 std::optional<UtcModel>& utcModelOpt) {
2004 if (utcModelObj == nullptr) return;
2005 UtcModel utcModel;
2006 jdouble a0 = env->CallDoubleMethod(utcModelObj, method_utcModelGetA0);
2007 jdouble a1 = env->CallDoubleMethod(utcModelObj, method_utcModelGetA1);
2008 jlong timeOfWeek = env->CallLongMethod(utcModelObj, method_utcModelGetTimeOfWeek);
2009 jint weekNumber = env->CallIntMethod(utcModelObj, method_utcModelGetWeekNumber);
2010 utcModel.a0 = a0;
2011 utcModel.a1 = a1;
2012 utcModel.timeOfWeek = timeOfWeek;
2013 utcModel.weekNumber = static_cast<int32_t>(weekNumber);
2014 utcModelOpt = utcModel;
2015 }
2016
setGnssAlmanac(JNIEnv * env,jobject gnssAlmanacObj,std::optional<GnssAlmanac> & gnssAlmanacOpt)2017 void GnssAssistanceUtil::setGnssAlmanac(JNIEnv* env, jobject gnssAlmanacObj,
2018 std::optional<GnssAlmanac>& gnssAlmanacOpt) {
2019 if (gnssAlmanacObj == nullptr) return;
2020 GnssAlmanac gnssAlmanac;
2021 jlong issueDateMillis =
2022 env->CallLongMethod(gnssAlmanacObj, method_gnssAlmanacGetIssueDateMillis);
2023 jint ioda = env->CallIntMethod(gnssAlmanacObj, method_gnssAlmanacGetIoda);
2024 jint weekNumber = env->CallIntMethod(gnssAlmanacObj, method_gnssAlmanacGetWeekNumber);
2025 jlong toaSeconds = env->CallLongMethod(gnssAlmanacObj, method_gnssAlmanacGetToaSeconds);
2026 jboolean isCompleteAlmanacProvided =
2027 env->CallBooleanMethod(gnssAlmanacObj, method_gnssAlmanacIsCompleteAlmanacProvided);
2028 gnssAlmanac.issueDateMs = issueDateMillis;
2029 gnssAlmanac.ioda = ioda;
2030 gnssAlmanac.weekNumber = weekNumber;
2031 gnssAlmanac.toaSeconds = toaSeconds;
2032 gnssAlmanac.isCompleteAlmanacProvided = isCompleteAlmanacProvided;
2033
2034 jobject satelliteAlmanacsListObj =
2035 env->CallObjectMethod(gnssAlmanacObj, method_gnssAlmanacGetSatelliteAlmanacs);
2036 auto len = env->CallIntMethod(satelliteAlmanacsListObj, method_listSize);
2037 std::vector<GnssSatelliteAlmanac> list(len);
2038 for (uint16_t i = 0; i < len; ++i) {
2039 jobject gnssSatelliteAlmanacObj =
2040 env->CallObjectMethod(satelliteAlmanacsListObj, method_listGet, i);
2041 if (gnssSatelliteAlmanacObj == nullptr) continue;
2042 GnssSatelliteAlmanac gnssSatelliteAlmanac;
2043 jint svid = env->CallIntMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetSvid);
2044 jint svHealth =
2045 env->CallIntMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetSvHealth);
2046 jdouble af0 = env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetAf0);
2047 jdouble af1 = env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetAf1);
2048 jdouble eccentricity = env->CallDoubleMethod(gnssSatelliteAlmanacObj,
2049 method_satelliteAlmanacGetEccentricity);
2050 jdouble inclination = env->CallDoubleMethod(gnssSatelliteAlmanacObj,
2051 method_satelliteAlmanacGetInclination);
2052 jdouble m0 = env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetM0);
2053 jdouble omega =
2054 env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetOmega);
2055 jdouble omega0 =
2056 env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetOmega0);
2057 jdouble omegaDot =
2058 env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetOmegaDot);
2059 jdouble rootA =
2060 env->CallDoubleMethod(gnssSatelliteAlmanacObj, method_satelliteAlmanacGetRootA);
2061 gnssSatelliteAlmanac.svid = static_cast<int32_t>(svid);
2062 gnssSatelliteAlmanac.svHealth = static_cast<int32_t>(svHealth);
2063 gnssSatelliteAlmanac.af0 = af0;
2064 gnssSatelliteAlmanac.af1 = af1;
2065 gnssSatelliteAlmanac.eccentricity = eccentricity;
2066 gnssSatelliteAlmanac.inclination = inclination;
2067 gnssSatelliteAlmanac.m0 = m0;
2068 gnssSatelliteAlmanac.omega = omega;
2069 gnssSatelliteAlmanac.omega0 = omega0;
2070 gnssSatelliteAlmanac.omegaDot = omegaDot;
2071 gnssSatelliteAlmanac.rootA = rootA;
2072 list.at(i) = gnssSatelliteAlmanac;
2073 env->DeleteLocalRef(gnssSatelliteAlmanacObj);
2074 }
2075 gnssAlmanac.satelliteAlmanacs = list;
2076 gnssAlmanacOpt = gnssAlmanac;
2077 env->DeleteLocalRef(satelliteAlmanacsListObj);
2078 }
2079
setAuxiliaryInformations(JNIEnv * env,jobject auxiliaryInformationListObj,std::vector<AuxiliaryInformation> & auxiliaryInformations)2080 void GnssAssistanceUtil::setAuxiliaryInformations(
2081 JNIEnv* env, jobject auxiliaryInformationListObj,
2082 std::vector<AuxiliaryInformation>& auxiliaryInformations) {
2083 if (auxiliaryInformationListObj == nullptr) return;
2084 auto len = env->CallIntMethod(auxiliaryInformationListObj, method_listSize);
2085 for (uint16_t i = 0; i < len; ++i) {
2086 AuxiliaryInformation auxiliaryInformation;
2087 jobject auxiliaryInformationObj =
2088 env->CallObjectMethod(auxiliaryInformationListObj, method_listGet, i);
2089 if (auxiliaryInformationObj == nullptr) continue;
2090
2091 jint svid = env->CallIntMethod(auxiliaryInformationObj, method_auxiliaryInformationGetSvid);
2092 auxiliaryInformation.svid = static_cast<int32_t>(svid);
2093
2094 jobject availableSignalTypesObj =
2095 env->CallObjectMethod(auxiliaryInformationObj,
2096 method_auxiliaryInformationGetAvailableSignalTypes);
2097 auto size = env->CallIntMethod(availableSignalTypesObj, method_listSize);
2098 std::vector<GnssSignalType> availableSignalTypes(size);
2099 for (uint16_t i = 0; i < size; ++i) {
2100 jobject availableSignalTypeObj =
2101 env->CallObjectMethod(availableSignalTypesObj, method_listGet, i);
2102 GnssSignalType availableSignalType;
2103 setGnssSignalType(env, availableSignalTypeObj, availableSignalType);
2104 availableSignalTypes.at(i) = availableSignalType;
2105 env->DeleteLocalRef(availableSignalTypeObj);
2106 }
2107 auxiliaryInformation.availableSignalTypes = availableSignalTypes;
2108 env->DeleteLocalRef(availableSignalTypesObj);
2109
2110 jint frequencyChannelNumber =
2111 env->CallIntMethod(auxiliaryInformationObj,
2112 method_auxiliaryInformationGetFrequencyChannelNumber);
2113 auxiliaryInformation.frequencyChannelNumber = static_cast<int32_t>(frequencyChannelNumber);
2114
2115 jint satType =
2116 env->CallIntMethod(auxiliaryInformationObj, method_auxiliaryInformationGetSatType);
2117 auxiliaryInformation.satType = static_cast<BeidouB1CSatelliteOrbitType>(satType);
2118 env->DeleteLocalRef(auxiliaryInformationObj);
2119 auxiliaryInformations.push_back(auxiliaryInformation);
2120 }
2121 }
2122
2123 } // namespace android::gnss
2124