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 package android.location.cts.none; 18 19 import static org.junit.Assert.assertEquals; 20 import static org.junit.Assert.assertTrue; 21 22 import android.location.BeidouAssistance; 23 import android.location.BeidouSatelliteEphemeris; 24 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteClockModel; 25 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteEphemerisTime; 26 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteHealth; 27 import android.location.GalileoAssistance; 28 import android.location.GalileoSatelliteEphemeris; 29 import android.location.GalileoSatelliteEphemeris.GalileoSatelliteClockModel; 30 import android.location.GalileoSatelliteEphemeris.GalileoSvHealth; 31 import android.location.GlonassAlmanac; 32 import android.location.GlonassAlmanac.GlonassSatelliteAlmanac; 33 import android.location.GlonassAssistance; 34 import android.location.GlonassSatelliteEphemeris; 35 import android.location.GlonassSatelliteEphemeris.GlonassSatelliteClockModel; 36 import android.location.GlonassSatelliteEphemeris.GlonassSatelliteOrbitModel; 37 import android.location.GnssAlmanac; 38 import android.location.GnssAlmanac.GnssSatelliteAlmanac; 39 import android.location.GnssAssistance; 40 import android.location.GnssAssistance.GnssSatelliteCorrections; 41 import android.location.GnssCorrectionComponent; 42 import android.location.GnssCorrectionComponent.GnssInterval; 43 import android.location.GnssCorrectionComponent.PseudorangeCorrection; 44 import android.location.GnssStatus; 45 import android.location.GpsAssistance; 46 import android.location.GpsSatelliteEphemeris; 47 import android.location.GpsSatelliteEphemeris.GpsL2Params; 48 import android.location.GpsSatelliteEphemeris.GpsSatelliteClockModel; 49 import android.location.GpsSatelliteEphemeris.GpsSatelliteHealth; 50 import android.location.IonosphericCorrection; 51 import android.location.KeplerianOrbitModel; 52 import android.location.KeplerianOrbitModel.SecondOrderHarmonicPerturbation; 53 import android.location.KlobucharIonosphericModel; 54 import android.location.LeapSecondsModel; 55 import android.location.QzssAssistance; 56 import android.location.QzssSatelliteEphemeris; 57 import android.location.RealTimeIntegrityModel; 58 import android.location.SatelliteEphemerisTime; 59 import android.location.TimeModel; 60 import android.location.UtcModel; 61 import android.os.Parcel; 62 63 import androidx.test.ext.junit.runners.AndroidJUnit4; 64 65 import org.junit.Test; 66 import org.junit.runner.RunWith; 67 68 import java.util.ArrayList; 69 import java.util.List; 70 71 @RunWith(AndroidJUnit4.class) 72 public class GnssAssistanceTest { 73 74 @Test testDescribeContents()75 public void testDescribeContents() { 76 GnssAssistance gnssAssistance = getTestGnssAssistance(); 77 assertEquals(0, gnssAssistance.describeContents()); 78 } 79 80 @Test testWriteToParcel()81 public void testWriteToParcel() { 82 GnssAssistance gnssAssistance = getTestGnssAssistance(); 83 Parcel parcel = Parcel.obtain(); 84 gnssAssistance.writeToParcel(parcel, 0); 85 parcel.setDataPosition(0); 86 GnssAssistance newGnssAssistance = GnssAssistance.CREATOR.createFromParcel(parcel); 87 assertTrue(verifyTestGpsAssistance(newGnssAssistance.getGpsAssistance())); 88 assertTrue(verifyTestGlonassAssistance(newGnssAssistance.getGlonassAssistance())); 89 assertTrue(verifyTestGalileoAssistance(newGnssAssistance.getGalileoAssistance())); 90 assertTrue(verifyTestBeidouAssistance(newGnssAssistance.getBeidouAssistance())); 91 assertTrue(verifyTestQzssAssistance(newGnssAssistance.getQzssAssistance())); 92 parcel.recycle(); 93 } 94 assertEqualsWithDelta(final double expected, final double actual)95 private void assertEqualsWithDelta(final double expected, final double actual) { 96 final double delta = 10 * Math.ulp(expected); 97 assertEquals(expected, actual, delta); 98 } 99 getTestGnssAssistance()100 private GnssAssistance getTestGnssAssistance() { 101 return new GnssAssistance.Builder() 102 .setGpsAssistance(getTestGpsAssistance()) 103 .setGlonassAssistance(getTestGlonassAssistance()) 104 .setGalileoAssistance(getTestGalileoAssistance()) 105 .setBeidouAssistance(getTestBeidouAssistance()) 106 .setQzssAssistance(getTestQzssAssistance()) 107 .build(); 108 } 109 verifyTestGpsAssistance(GpsAssistance gpsAssistance)110 private boolean verifyTestGpsAssistance(GpsAssistance gpsAssistance) { 111 // verify almanac 112 GnssAlmanac almanac = gpsAssistance.getAlmanac(); 113 assertEquals(958, almanac.getWeekNumber()); 114 assertEquals(503808, almanac.getToaSeconds()); 115 List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs(); 116 GnssSatelliteAlmanac satelliteAlmanac1 = satelliteAlmanacList.get(0); 117 GnssSatelliteAlmanac satelliteAlmanac2 = satelliteAlmanacList.get(1); 118 assertEquals(1, satelliteAlmanac1.getSvid()); 119 assertEquals(0, satelliteAlmanac1.getSvHealth()); 120 assertEqualsWithDelta(7.23e-3, satelliteAlmanac1.getEccentricity()); 121 assertEqualsWithDelta(8.79e-3, satelliteAlmanac1.getInclination()); 122 assertEqualsWithDelta(1.97e-1, satelliteAlmanac1.getOmega()); 123 assertEqualsWithDelta(-3.79e-2, satelliteAlmanac1.getOmega0()); 124 assertEqualsWithDelta(-2.55e-9, satelliteAlmanac1.getOmegaDot()); 125 assertEqualsWithDelta(5.15e3, satelliteAlmanac1.getRootA()); 126 assertEqualsWithDelta(6.14e-1, satelliteAlmanac1.getM0()); 127 assertEqualsWithDelta(-2.19e-5, satelliteAlmanac1.getAf0()); 128 assertEqualsWithDelta(-3.63e-12, satelliteAlmanac1.getAf1()); 129 assertEquals(2, satelliteAlmanac2.getSvid()); 130 assertEquals(0, satelliteAlmanac2.getSvHealth()); 131 assertEqualsWithDelta(7.22e-3, satelliteAlmanac2.getEccentricity()); 132 assertEqualsWithDelta(8.78e-3, satelliteAlmanac2.getInclination()); 133 assertEqualsWithDelta(1.96e-1, satelliteAlmanac2.getOmega()); 134 assertEqualsWithDelta(-3.78e-2, satelliteAlmanac2.getOmega0()); 135 assertEqualsWithDelta(-2.54e-9, satelliteAlmanac2.getOmegaDot()); 136 assertEqualsWithDelta(5.14e3, satelliteAlmanac2.getRootA()); 137 assertEqualsWithDelta(6.13e-1, satelliteAlmanac2.getM0()); 138 assertEqualsWithDelta(-2.18e-5, satelliteAlmanac2.getAf0()); 139 assertEqualsWithDelta(-3.62e-12, satelliteAlmanac2.getAf1()); 140 141 // verify ionospheric model 142 assertTrue(verifyTestKlobucharIonosphericModel(gpsAssistance.getIonosphericModel())); 143 // verify utc model 144 assertTrue(verifyTestUtcModel(gpsAssistance.getUtcModel())); 145 // verify leap seconds model 146 assertTrue(verifyTestLeapSecondsModel(gpsAssistance.getLeapSecondsModel())); 147 // verify time model list 148 assertTrue(verifyTestTimeModelList(gpsAssistance.getTimeModels())); 149 150 // verify satellite ephemeris list 151 List<GpsSatelliteEphemeris> satelliteEphemerisList = gpsAssistance.getSatelliteEphemeris(); 152 assertEquals(1, satelliteEphemerisList.size()); 153 GpsSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0); 154 155 assertEquals(1, satelliteEphemeris.getPrn()); 156 157 GpsL2Params gpsL2Params = satelliteEphemeris.getGpsL2Params(); 158 assertEquals(0, gpsL2Params.getL2Code()); 159 assertEquals(0, gpsL2Params.getL2Flag()); 160 161 GpsSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel(); 162 assertEqualsWithDelta(-8.39e-4, satelliteClockModel.getAf0()); 163 assertEqualsWithDelta(-1.65e-11, satelliteClockModel.getAf1()); 164 assertEqualsWithDelta(0.0, satelliteClockModel.getAf2()); 165 assertEqualsWithDelta(0.0, satelliteClockModel.getTgd()); 166 assertEquals(91, satelliteClockModel.getIodc()); 167 assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds())); 168 assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel())); 169 170 GpsSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth(); 171 assertEquals(0, satelliteHealth.getSvHealth()); 172 assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur()); 173 assertEqualsWithDelta(0.0, satelliteHealth.getFitInt()); 174 175 SatelliteEphemerisTime satelliteEphemerisTime = 176 satelliteEphemeris.getSatelliteEphemerisTime(); 177 assertEquals(59, satelliteEphemerisTime.getIode()); 178 assertEquals(2290, satelliteEphemerisTime.getWeekNumber()); 179 assertEquals(463472, satelliteEphemerisTime.getToeSeconds()); 180 181 // verify real time integrity model list 182 assertTrue( 183 verifyTestRealTimeIntegrityModelList(gpsAssistance.getRealTimeIntegrityModels())); 184 // verify satellite correction list 185 assertTrue(verifyTestGnssCorrectionList(gpsAssistance.getSatelliteCorrections())); 186 return true; 187 } 188 verifyTestQzssAssistance(QzssAssistance qzssAssistance)189 private boolean verifyTestQzssAssistance(QzssAssistance qzssAssistance) { 190 // verify almanac 191 GnssAlmanac almanac = qzssAssistance.getAlmanac(); 192 assertEquals(261, almanac.getWeekNumber()); 193 assertEquals(176128, almanac.getToaSeconds()); 194 List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs(); 195 assertEquals(1, satelliteAlmanacList.size()); 196 GnssSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0); 197 assertEquals(194, satelliteAlmanac.getSvid()); 198 assertEquals(0, satelliteAlmanac.getSvHealth()); 199 assertEqualsWithDelta(7.428e-2, satelliteAlmanac.getEccentricity()); 200 assertEqualsWithDelta(0.7101072704 / Math.PI, satelliteAlmanac.getInclination()); 201 assertEqualsWithDelta(-1.559158521 / Math.PI, satelliteAlmanac.getOmega()); 202 assertEqualsWithDelta(1.029787968 / Math.PI, satelliteAlmanac.getOmega0()); 203 assertEqualsWithDelta(-3.120129966e-9 / Math.PI, satelliteAlmanac.getOmegaDot()); 204 assertEqualsWithDelta(6493.731445, satelliteAlmanac.getRootA()); 205 assertEqualsWithDelta(-3.041552089 / Math.PI, satelliteAlmanac.getM0()); 206 assertEqualsWithDelta(-3.814697266e-6, satelliteAlmanac.getAf0()); 207 assertEqualsWithDelta(0.0, satelliteAlmanac.getAf1()); 208 209 // verify ionospheric model 210 assertTrue(verifyTestKlobucharIonosphericModel(qzssAssistance.getIonosphericModel())); 211 // verify utc model 212 assertTrue(verifyTestUtcModel(qzssAssistance.getUtcModel())); 213 // verify leap seconds model 214 assertTrue(verifyTestLeapSecondsModel(qzssAssistance.getLeapSecondsModel())); 215 // verify time model list 216 assertTrue(verifyTestTimeModelList(qzssAssistance.getTimeModels())); 217 218 // verify satellite ephemeris list 219 List<QzssSatelliteEphemeris> satelliteEphemerisList = 220 qzssAssistance.getSatelliteEphemeris(); 221 assertEquals(1, satelliteEphemerisList.size()); 222 QzssSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0); 223 224 assertEquals(194, satelliteEphemeris.getPrn()); 225 226 GpsL2Params gpsL2Params = satelliteEphemeris.getGpsL2Params(); 227 assertEquals(0, gpsL2Params.getL2Code()); 228 assertEquals(0, gpsL2Params.getL2Flag()); 229 230 GpsSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel(); 231 assertEqualsWithDelta(-8.39e-4, satelliteClockModel.getAf0()); 232 assertEqualsWithDelta(-1.65e-11, satelliteClockModel.getAf1()); 233 assertEqualsWithDelta(0.0, satelliteClockModel.getAf2()); 234 assertEqualsWithDelta(0.0, satelliteClockModel.getTgd()); 235 assertEquals(91, satelliteClockModel.getIodc()); 236 assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds())); 237 assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel())); 238 239 GpsSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth(); 240 assertEquals(0, satelliteHealth.getSvHealth()); 241 assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur()); 242 assertEqualsWithDelta(0.0, satelliteHealth.getFitInt()); 243 244 SatelliteEphemerisTime satelliteEphemerisTime = 245 satelliteEphemeris.getSatelliteEphemerisTime(); 246 assertEquals(59, satelliteEphemerisTime.getIode()); 247 assertEquals(2290, satelliteEphemerisTime.getWeekNumber()); 248 assertEquals(463472, satelliteEphemerisTime.getToeSeconds()); 249 250 // verify real time integrity model list 251 assertTrue( 252 verifyTestRealTimeIntegrityModelList(qzssAssistance.getRealTimeIntegrityModels())); 253 // verify satellite correction list 254 assertTrue(verifyTestGnssCorrectionList(qzssAssistance.getSatelliteCorrections())); 255 return true; 256 } 257 verifyTestGlonassAssistance(GlonassAssistance glonassAssistance)258 private boolean verifyTestGlonassAssistance(GlonassAssistance glonassAssistance) { 259 // verify almanac 260 GlonassAlmanac almanac = glonassAssistance.getAlmanac(); 261 assertEquals(1831066775042L, almanac.getIssueDateMillis()); 262 List<GlonassSatelliteAlmanac> satelliteAlmanacList = almanac.getSatelliteAlmanacs(); 263 GlonassSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0); 264 assertEquals(1, satelliteAlmanac.getSlotNumber()); 265 assertEquals(0, satelliteAlmanac.getSvHealth()); 266 assertEquals(1, satelliteAlmanac.getFreqChannel()); 267 assertEqualsWithDelta(-1.9e-5, satelliteAlmanac.getTau()); 268 assertEqualsWithDelta(0.299, satelliteAlmanac.getTLambda()); 269 assertEqualsWithDelta(0.0, satelliteAlmanac.getLambda()); 270 assertEqualsWithDelta(6.42e-3, satelliteAlmanac.getDeltaI()); 271 assertEqualsWithDelta(-2.65e3, satelliteAlmanac.getDeltaT()); 272 assertEqualsWithDelta(-6.10e-4, satelliteAlmanac.getDeltaTDot()); 273 assertEqualsWithDelta(4.21e-4, satelliteAlmanac.getEccentricity()); 274 assertEqualsWithDelta(0.16, satelliteAlmanac.getOmega()); 275 276 // verify utc model 277 assertTrue(verifyTestUtcModel(glonassAssistance.getUtcModel())); 278 // verify time model list 279 assertTrue(verifyTestTimeModelList(glonassAssistance.getTimeModels())); 280 281 // verify satellite ephemeris list 282 List<GlonassSatelliteEphemeris> satelliteEphemerisList = 283 glonassAssistance.getSatelliteEphemeris(); 284 assertEquals(1, satelliteEphemerisList.size()); 285 GlonassSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0); 286 assertEquals(1, satelliteEphemeris.getSlotNumber()); 287 assertEquals(0, satelliteEphemeris.getHealthState()); 288 assertEqualsWithDelta(459030.0, satelliteEphemeris.getFrameTimeSeconds()); 289 assertEquals(0, satelliteEphemeris.getAgeInDays()); 290 GlonassSatelliteClockModel satelliteClockModel = 291 satelliteEphemeris.getSatelliteClockModel(); 292 assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds())); 293 assertEqualsWithDelta(-2.11e-5, satelliteClockModel.getClockBias()); 294 assertEqualsWithDelta(0.0, satelliteClockModel.getFrequencyBias()); 295 assertEquals(-1, satelliteClockModel.getFrequencyNumber()); 296 GlonassSatelliteOrbitModel satelliteOrbitModel = 297 satelliteEphemeris.getSatelliteOrbitModel(); 298 assertEqualsWithDelta(-21248.51806641, satelliteOrbitModel.getX()); 299 assertEqualsWithDelta(-0.7282361984253, satelliteOrbitModel.getXDot()); 300 assertEqualsWithDelta(1.862645149231e-9, satelliteOrbitModel.getXAccel()); 301 assertEqualsWithDelta(-12851.89160156, satelliteOrbitModel.getY()); 302 assertEqualsWithDelta(-0.3476705551147, satelliteOrbitModel.getYDot()); 303 assertEqualsWithDelta(-9.313225746155e-10, satelliteOrbitModel.getYAccel()); 304 assertEqualsWithDelta(5766.135253906, satelliteOrbitModel.getZ()); 305 assertEqualsWithDelta(-3.464447021484, satelliteOrbitModel.getZDot()); 306 assertEqualsWithDelta(9.313225746155e-10, satelliteOrbitModel.getZAccel()); 307 308 // verify satellite correction list 309 assertEquals(0, glonassAssistance.getSatelliteCorrections().size()); 310 return true; 311 } 312 verifyTestGalileoAssistance(GalileoAssistance galileoAssistance)313 private boolean verifyTestGalileoAssistance(GalileoAssistance galileoAssistance) { 314 // verify almanac 315 GnssAlmanac almanac = galileoAssistance.getAlmanac(); 316 assertEquals(1831066775042L, almanac.getIssueDateMillis()); 317 assertEquals(2, almanac.getWeekNumber()); 318 assertEquals(463200, almanac.getToaSeconds()); 319 assertEquals(4, almanac.getIod()); 320 List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs(); 321 assertEquals(1, satelliteAlmanacList.size()); 322 GnssSatelliteAlmanac gnssSatelliteAlmanac = satelliteAlmanacList.get(0); 323 assertEquals(1, gnssSatelliteAlmanac.getSvid()); 324 assertEquals(0, gnssSatelliteAlmanac.getSvHealth()); 325 assertEqualsWithDelta(0.00035, gnssSatelliteAlmanac.getEccentricity()); 326 assertEqualsWithDelta(0.00726, gnssSatelliteAlmanac.getInclination()); 327 assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getOmega()); 328 assertEqualsWithDelta(0.21, gnssSatelliteAlmanac.getOmega0()); 329 assertEqualsWithDelta(-1.74e-9, gnssSatelliteAlmanac.getOmegaDot()); 330 assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getRootA()); 331 assertEqualsWithDelta(-0.8778, gnssSatelliteAlmanac.getM0()); 332 assertEqualsWithDelta(1.52e-5, gnssSatelliteAlmanac.getAf0()); 333 assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getAf1()); 334 335 // verify ionospheric model 336 assertTrue(verifyTestKlobucharIonosphericModel(galileoAssistance.getIonosphericModel())); 337 // verify utc model 338 assertTrue(verifyTestUtcModel(galileoAssistance.getUtcModel())); 339 // verify leap seconds model 340 assertTrue(verifyTestLeapSecondsModel(galileoAssistance.getLeapSecondsModel())); 341 // verify time model list 342 assertTrue(verifyTestTimeModelList(galileoAssistance.getTimeModels())); 343 344 // verify satellite ephemeris list 345 List<GalileoSatelliteEphemeris> satelliteEphemerisList = 346 galileoAssistance.getSatelliteEphemeris(); 347 assertEquals(1, satelliteEphemerisList.size()); 348 GalileoSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0); 349 assertEquals(1, satelliteEphemeris.getSatelliteCodeNumber()); 350 List<GalileoSatelliteClockModel> satelliteClockModelList = 351 satelliteEphemeris.getSatelliteClockModels(); 352 assertEquals(1, satelliteClockModelList.size()); 353 GalileoSatelliteClockModel satelliteClockModel = satelliteClockModelList.get(0); 354 assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds())); 355 assertEqualsWithDelta(0.0032, satelliteClockModel.getAf0()); 356 assertEqualsWithDelta(2.278e-11, satelliteClockModel.getAf1()); 357 assertEqualsWithDelta(-3.469e-18, satelliteClockModel.getAf2()); 358 assertEqualsWithDelta(-1.490e-8, satelliteClockModel.getBgdSeconds()); 359 assertEqualsWithDelta(3.119, satelliteClockModel.getSisaMeters()); 360 assertEquals( 361 GalileoSatelliteClockModel.TYPE_FNAV, satelliteClockModel.getSatelliteClockType()); 362 assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel())); 363 GalileoSvHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth(); 364 assertEquals(0, satelliteHealth.getDataValidityStatusE1b()); 365 assertEquals(0, satelliteHealth.getSignalHealthStatusE1b()); 366 assertEquals(0, satelliteHealth.getDataValidityStatusE5a()); 367 assertEquals(0, satelliteHealth.getSignalHealthStatusE5a()); 368 assertEquals(0, satelliteHealth.getDataValidityStatusE5b()); 369 assertEquals(0, satelliteHealth.getSignalHealthStatusE5b()); 370 371 // verify real time integrity model list 372 assertTrue( 373 verifyTestRealTimeIntegrityModelList( 374 galileoAssistance.getRealTimeIntegrityModels())); 375 // verify satellite correction list 376 assertTrue(verifyTestGnssCorrectionList(galileoAssistance.getSatelliteCorrections())); 377 return true; 378 } 379 verifyTestBeidouAssistance(BeidouAssistance beidouAssistance)380 private boolean verifyTestBeidouAssistance(BeidouAssistance beidouAssistance) { 381 // verify almanac 382 GnssAlmanac almanac = beidouAssistance.getAlmanac(); 383 assertEquals(782, almanac.getWeekNumber()); 384 assertEquals(345600, almanac.getToaSeconds()); 385 List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs(); 386 assertEquals(1, satelliteAlmanacList.size()); 387 GnssSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0); 388 assertEquals(1, satelliteAlmanac.getSvid()); 389 assertEquals(0, satelliteAlmanac.getSvHealth()); 390 assertEqualsWithDelta(7.82e-4, satelliteAlmanac.getEccentricity()); 391 assertEqualsWithDelta(0.0958150411 / Math.PI, satelliteAlmanac.getInclination()); 392 assertEqualsWithDelta(-0.986917360 / Math.PI, satelliteAlmanac.getOmega()); 393 assertEqualsWithDelta(-3.02e-1 / Math.PI, satelliteAlmanac.getOmega0()); 394 assertEqualsWithDelta(-5.014e-10 / Math.PI, satelliteAlmanac.getOmegaDot()); 395 assertEqualsWithDelta(6493.494226, satelliteAlmanac.getRootA()); 396 assertEqualsWithDelta(3.15e-1 / Math.PI, satelliteAlmanac.getM0()); 397 assertEqualsWithDelta(-7.22e-4, satelliteAlmanac.getAf0()); 398 assertEqualsWithDelta(3.45e-11, satelliteAlmanac.getAf1()); 399 400 // verify ionospheric model 401 assertTrue(verifyTestKlobucharIonosphericModel(beidouAssistance.getIonosphericModel())); 402 // verify utc model 403 assertTrue(verifyTestUtcModel(beidouAssistance.getUtcModel())); 404 // verify leap seconds model 405 assertTrue(verifyTestLeapSecondsModel(beidouAssistance.getLeapSecondsModel())); 406 // verify time model list 407 assertTrue(verifyTestTimeModelList(beidouAssistance.getTimeModels())); 408 409 // verify satellite ephemeris list 410 List<BeidouSatelliteEphemeris> satelliteEphemerisList = 411 beidouAssistance.getSatelliteEphemeris(); 412 assertEquals(1, satelliteEphemerisList.size()); 413 BeidouSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0); 414 assertEquals(1, satelliteEphemeris.getPrn()); 415 assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel())); 416 BeidouSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel(); 417 assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds())); 418 assertEqualsWithDelta(0.0006494125118479, satelliteClockModel.getAf0()); 419 assertEqualsWithDelta(3.720579400124e-11, satelliteClockModel.getAf1()); 420 assertEqualsWithDelta(0.0, satelliteClockModel.getAf2()); 421 assertEqualsWithDelta(3.8e-9, satelliteClockModel.getTgd1()); 422 assertEqualsWithDelta(3.8e-9, satelliteClockModel.getTgd2()); 423 assertEquals(0, satelliteClockModel.getAodc()); 424 BeidouSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth(); 425 assertEquals(0, satelliteHealth.getSatH1()); 426 assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur()); 427 BeidouSatelliteEphemerisTime satelliteEphemerisTime = 428 satelliteEphemeris.getSatelliteEphemerisTime(); 429 assertEquals(1, satelliteEphemerisTime.getIode()); 430 assertEquals(934, satelliteEphemerisTime.getBeidouWeekNumber()); 431 assertEquals(457200, satelliteEphemerisTime.getToeSeconds()); 432 433 // verify real time integrity model list 434 assertTrue( 435 verifyTestRealTimeIntegrityModelList( 436 beidouAssistance.getRealTimeIntegrityModels())); 437 // verify satellite correction list 438 assertTrue(verifyTestGnssCorrections(beidouAssistance.getSatelliteCorrections())); 439 return true; 440 } 441 verifyTestGnssCorrectionList( List<GnssSatelliteCorrections> satelliteCorrectionsList)442 private boolean verifyTestGnssCorrectionList( 443 List<GnssSatelliteCorrections> satelliteCorrectionsList) { 444 assertEquals(1, satelliteCorrectionsList.size()); 445 GnssSatelliteCorrections satelliteCorrections = satelliteCorrectionsList.get(0); 446 assertEquals(1, satelliteCorrections.getSvid()); 447 List<IonosphericCorrection> ionoCorrectionList = 448 satelliteCorrections.getIonosphericCorrections(); 449 assertEquals(1, ionoCorrectionList.size()); 450 IonosphericCorrection ionoCorrection = ionoCorrectionList.get(0); 451 assertEquals(1575420000, ionoCorrection.getCarrierFrequencyHz()); 452 GnssCorrectionComponent correctionComponent = ionoCorrection.getIonosphericCorrection(); 453 assertEquals("Klobuchar", correctionComponent.getSourceKey()); 454 GnssInterval validityInterval = correctionComponent.getValidityInterval(); 455 assertEquals(1731066775042L, validityInterval.getStartMillisSinceGpsEpoch()); 456 assertEquals(1731066811805L, validityInterval.getEndMillisSinceGpsEpoch()); 457 PseudorangeCorrection pseudorangeCorrection = 458 correctionComponent.getPseudorangeCorrection(); 459 assertEqualsWithDelta(100.0, pseudorangeCorrection.getCorrectionMeters()); 460 assertEqualsWithDelta(10.0, pseudorangeCorrection.getCorrectionUncertaintyMeters()); 461 assertEqualsWithDelta(1.0, pseudorangeCorrection.getCorrectionRateMetersPerSecond()); 462 return true; 463 } 464 verifyTestKlobucharIonosphericModel(KlobucharIonosphericModel model)465 private boolean verifyTestKlobucharIonosphericModel(KlobucharIonosphericModel model) { 466 assertEqualsWithDelta(2.794e-8, model.getAlpha0()); 467 assertEqualsWithDelta(7.4506e-9, model.getAlpha1()); 468 assertEqualsWithDelta(-1.1921e-7, model.getAlpha2()); 469 assertEqualsWithDelta(1.1921e-7, model.getAlpha3()); 470 assertEqualsWithDelta(145410, model.getBeta0()); 471 assertEqualsWithDelta(-180220, model.getBeta1()); 472 assertEqualsWithDelta(0.0, model.getBeta2()); 473 assertEqualsWithDelta(131070, model.getBeta3()); 474 return true; 475 } 476 verifyTestLeapSecondsModel(LeapSecondsModel model)477 private boolean verifyTestLeapSecondsModel(LeapSecondsModel model) { 478 assertEquals(18, model.getLeapSeconds()); 479 assertEquals(19, model.getLeapSecondsFuture()); 480 assertEquals(1025, model.getWeekNumberLeapSecondsFuture()); 481 assertEquals(1, model.getDayNumberLeapSecondsFuture()); 482 return true; 483 } 484 verifyTestKeplerianOrbitModel(KeplerianOrbitModel model)485 private boolean verifyTestKeplerianOrbitModel(KeplerianOrbitModel model) { 486 assertEqualsWithDelta(5153.63, model.getRootA()); 487 assertEqualsWithDelta(0.00129, model.getEccentricity()); 488 assertEqualsWithDelta(0.965, model.getI0()); 489 assertEqualsWithDelta(1.003e-10, model.getIDot()); 490 assertEqualsWithDelta(-2.54, model.getOmega()); 491 assertEqualsWithDelta(-0.95, model.getOmega0()); 492 assertEqualsWithDelta(-8.35e-9, model.getOmegaDot()); 493 assertEqualsWithDelta(-1.12, model.getM0()); 494 assertEqualsWithDelta(4.611e-9, model.getDeltaN()); 495 SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation = 496 model.getSecondOrderHarmonicPerturbation(); 497 assertEqualsWithDelta(-3.72e-9, secondOrderHarmonicPerturbation.getCic()); 498 assertEqualsWithDelta(-1.67e-8, secondOrderHarmonicPerturbation.getCis()); 499 assertEqualsWithDelta(364.03, secondOrderHarmonicPerturbation.getCrc()); 500 assertEqualsWithDelta(8.37, secondOrderHarmonicPerturbation.getCrs()); 501 assertEqualsWithDelta(5.36e-7, secondOrderHarmonicPerturbation.getCuc()); 502 assertEqualsWithDelta(9.48e-7, secondOrderHarmonicPerturbation.getCus()); 503 return true; 504 } 505 verifyTestGnssCorrections( List<GnssSatelliteCorrections> satelliteCorrectionsList)506 private boolean verifyTestGnssCorrections( 507 List<GnssSatelliteCorrections> satelliteCorrectionsList) { 508 assertEquals(1, satelliteCorrectionsList.size()); 509 GnssSatelliteCorrections satelliteCorrections = satelliteCorrectionsList.get(0); 510 assertEquals(1, satelliteCorrections.getSvid()); 511 List<IonosphericCorrection> ionoCorrectionList = 512 satelliteCorrections.getIonosphericCorrections(); 513 assertEquals(1, ionoCorrectionList.size()); 514 IonosphericCorrection ionoCorrection = ionoCorrectionList.get(0); 515 assertEquals(1575420000, ionoCorrection.getCarrierFrequencyHz()); 516 GnssCorrectionComponent correctionComponent = ionoCorrection.getIonosphericCorrection(); 517 assertEquals("Klobuchar", correctionComponent.getSourceKey()); 518 GnssInterval validityInterval = correctionComponent.getValidityInterval(); 519 assertEquals(1731066775042L, validityInterval.getStartMillisSinceGpsEpoch()); 520 assertEquals(1731066811805L, validityInterval.getEndMillisSinceGpsEpoch()); 521 PseudorangeCorrection pseudorangeCorrection = 522 correctionComponent.getPseudorangeCorrection(); 523 assertEqualsWithDelta(100.0, pseudorangeCorrection.getCorrectionMeters()); 524 assertEqualsWithDelta(10.0, pseudorangeCorrection.getCorrectionUncertaintyMeters()); 525 assertEqualsWithDelta(1.0, pseudorangeCorrection.getCorrectionRateMetersPerSecond()); 526 return true; 527 } 528 verifyTestTimeOfClockSeconds(long timeOfClockSeconds)529 private boolean verifyTestTimeOfClockSeconds(long timeOfClockSeconds) { 530 assertEquals(521330400L, timeOfClockSeconds); 531 return true; 532 } 533 verifyTestUtcModel(UtcModel model)534 private boolean verifyTestUtcModel(UtcModel model) { 535 assertEqualsWithDelta(1.33e-7, model.getA0()); 536 assertEqualsWithDelta(1.07e-13, model.getA1()); 537 assertEquals(552960, model.getTimeOfWeek()); 538 assertEquals(1025, model.getWeekNumber()); 539 return true; 540 } 541 verifyTestTimeModelList(List<TimeModel> timeModelList)542 private boolean verifyTestTimeModelList(List<TimeModel> timeModelList) { 543 assertEquals(1, timeModelList.size()); 544 TimeModel timeModel = timeModelList.get(0); 545 assertEquals(GnssStatus.CONSTELLATION_GPS, timeModelList.get(0).getToGnss()); 546 assertEqualsWithDelta(-2.1e-9, timeModel.getA0()); 547 assertEqualsWithDelta(-9.7e-15, timeModel.getA1()); 548 assertEquals(43200, timeModel.getTimeOfWeek()); 549 assertEquals(1849, timeModel.getWeekNumber()); 550 return true; 551 } 552 verifyTestRealTimeIntegrityModelList( List<RealTimeIntegrityModel> realTimeIntegrityModelList)553 private boolean verifyTestRealTimeIntegrityModelList( 554 List<RealTimeIntegrityModel> realTimeIntegrityModelList) { 555 assertEquals(1, realTimeIntegrityModelList.size()); 556 RealTimeIntegrityModel realTimeIntegrityModel = realTimeIntegrityModelList.get(0); 557 assertEquals(1, realTimeIntegrityModel.getSvid()); 558 assertEquals(true, realTimeIntegrityModel.isUsable()); 559 assertEquals(1731065504, realTimeIntegrityModel.getPublishDateSeconds()); 560 assertEquals(1731065504, realTimeIntegrityModel.getStartDateSeconds()); 561 assertEquals(1731066504, realTimeIntegrityModel.getEndDateSeconds()); 562 assertEquals("USABINIT", realTimeIntegrityModel.getAdvisoryType()); 563 assertEquals("2018001", realTimeIntegrityModel.getAdvisoryNumber()); 564 return true; 565 } 566 getTestGalileoAssistance()567 private GalileoAssistance getTestGalileoAssistance() { 568 return new GalileoAssistance.Builder() 569 .setAlmanac(getTestGalileoAlmanac()) 570 .setIonosphericModel(getTestKlobucharIonosphericModel()) 571 .setUtcModel(getTestUtcModel()) 572 .setLeapSecondsModel(getTestLeapSecondsModel()) 573 .setTimeModels(getTestTimeModelList()) 574 .setSatelliteEphemeris(getTestGalileoSatelliteEphemerisList()) 575 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList()) 576 .setSatelliteCorrections(getTestSatelliteCorrections()) 577 .build(); 578 } 579 getTestGalileoAlmanac()580 private GnssAlmanac getTestGalileoAlmanac() { 581 final List<GnssSatelliteAlmanac> gnssSatelliteAlmanacList = new ArrayList<>(); 582 final GnssSatelliteAlmanac gnssSatelliteAlmanac = 583 new GnssSatelliteAlmanac.Builder() 584 .setSvid(1) 585 .setSvHealth(0) 586 .setEccentricity(0.00035) 587 .setInclination(0.00726) 588 .setOmega(0.0) 589 .setOmega0(0.21) 590 .setOmegaDot(-1.74e-9) 591 .setRootA(0.0) 592 .setM0(-0.8778) 593 .setAf0(1.52e-5) 594 .setAf1(0.0) 595 .build(); 596 gnssSatelliteAlmanacList.add(gnssSatelliteAlmanac); 597 598 return new GnssAlmanac.Builder() 599 .setIssueDateMillis(1831066775042L) 600 .setIod(4) 601 .setWeekNumber(2) 602 .setToaSeconds(463200) 603 .setGnssSatelliteAlmanacs(gnssSatelliteAlmanacList) 604 .build(); 605 } 606 getTestGalileoSatelliteEphemerisList()607 private List<GalileoSatelliteEphemeris> getTestGalileoSatelliteEphemerisList() { 608 final List<GalileoSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>(); 609 final List<GalileoSatelliteClockModel> satelliteClockModelList = new ArrayList<>(); 610 final SatelliteEphemerisTime satelliteEphemerisTime = 611 new SatelliteEphemerisTime.Builder() 612 .setIode(125) 613 .setWeekNumber(2290) 614 .setToeSeconds(45900) 615 .build(); 616 final GalileoSvHealth satelliteHealth = 617 new GalileoSvHealth.Builder() 618 .setDataValidityStatusE1b(0) 619 .setSignalHealthStatusE1b(0) 620 .setDataValidityStatusE5a(0) 621 .setSignalHealthStatusE5a(0) 622 .setDataValidityStatusE5b(0) 623 .setSignalHealthStatusE5b(0) 624 .build(); 625 satelliteClockModelList.add( 626 new GalileoSatelliteClockModel.Builder() 627 .setTimeOfClockSeconds(getTestTimeOfClockSeconds()) 628 .setAf0(0.0032) 629 .setAf1(2.278e-11) 630 .setAf2(-3.469e-18) 631 .setBgdSeconds(-1.490e-8) 632 .setSisaMeters(3.119) 633 .setSatelliteClockType(GalileoSatelliteClockModel.TYPE_FNAV) 634 .build()); 635 satelliteEphemerisList.add( 636 new GalileoSatelliteEphemeris.Builder() 637 .setSatelliteCodeNumber(1) 638 .setSatelliteClockModels(satelliteClockModelList) 639 .setSatelliteOrbitModel(getTestKeplerianOrbitModel()) 640 .setSatelliteHealth(satelliteHealth) 641 .setSatelliteEphemerisTime(satelliteEphemerisTime) 642 .build()); 643 return satelliteEphemerisList; 644 } 645 getTestGlonassAssistance()646 private GlonassAssistance getTestGlonassAssistance() { 647 return new GlonassAssistance.Builder() 648 .setAlmanac(getTestGlonassAlmanac()) 649 .setUtcModel(getTestUtcModel()) 650 .setTimeModels(getTestTimeModelList()) 651 .setSatelliteEphemeris(getTestGlonassSatelliteEphemerisList()) 652 .build(); 653 } 654 getTestGlonassAlmanac()655 private GlonassAlmanac getTestGlonassAlmanac() { 656 List<GlonassSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>(); 657 satelliteAlmanacList.add( 658 new GlonassSatelliteAlmanac.Builder() 659 .setSlotNumber(1) 660 .setSvHealth(0) 661 .setFreqChannel(1) 662 .setTau(-1.9e-5) 663 .setTLambda(0.299) 664 .setLambda(0.0) 665 .setDeltaI(6.42e-3) 666 .setDeltaT(-2.65e3) 667 .setDeltaTDot(-6.10e-4) 668 .setEccentricity(4.21e-4) 669 .setOmega(0.16) 670 .build()); 671 return new GlonassAlmanac(1831066775042L, satelliteAlmanacList); 672 } 673 getTestGlonassSatelliteEphemerisList()674 private List<GlonassSatelliteEphemeris> getTestGlonassSatelliteEphemerisList() { 675 final List<GlonassSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>(); 676 final GlonassSatelliteClockModel satelliteClockModel = 677 new GlonassSatelliteClockModel.Builder() 678 .setTimeOfClockSeconds(getTestTimeOfClockSeconds()) 679 .setClockBias(-2.11e-5) 680 .setFrequencyBias(0.0) 681 .setFrequencyNumber(-1) 682 .build(); 683 final GlonassSatelliteOrbitModel satelliteOrbitModel = 684 new GlonassSatelliteOrbitModel.Builder() 685 .setX(-21248.51806641) 686 .setXDot(-0.7282361984253) 687 .setXAccel(1.862645149231e-9) 688 .setY(-12851.89160156) 689 .setYDot(-0.3476705551147) 690 .setYAccel(-9.313225746155e-10) 691 .setZ(5766.135253906) 692 .setZDot(-3.464447021484) 693 .setZAccel(9.313225746155e-10) 694 .build(); 695 final GlonassSatelliteEphemeris satelliteEphemeris = 696 new GlonassSatelliteEphemeris.Builder() 697 .setSlotNumber(1) 698 .setHealthState(0) 699 .setFrameTimeSeconds(459030.0) 700 .setAgeInDays(0) 701 .setSatelliteClockModel(satelliteClockModel) 702 .setSatelliteOrbitModel(satelliteOrbitModel) 703 .build(); 704 satelliteEphemerisList.add(satelliteEphemeris); 705 return satelliteEphemerisList; 706 } 707 getTestGpsAssistance()708 private GpsAssistance getTestGpsAssistance() { 709 return new GpsAssistance.Builder() 710 .setAlmanac(getTestGpsAlmance()) 711 .setIonosphericModel(getTestKlobucharIonosphericModel()) 712 .setUtcModel(getTestUtcModel()) 713 .setLeapSecondsModel(getTestLeapSecondsModel()) 714 .setTimeModels(getTestTimeModelList()) 715 .setSatelliteEphemeris(getTestGpsSatelliteEphemerisList()) 716 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList()) 717 .setSatelliteCorrections(getTestSatelliteCorrections()) 718 .build(); 719 } 720 getTestGpsSatelliteEphemerisList()721 private List<GpsSatelliteEphemeris> getTestGpsSatelliteEphemerisList() { 722 final List<GpsSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>(); 723 724 final GpsL2Params gpsL2Params = new GpsL2Params.Builder().setL2Code(0).setL2Flag(0).build(); 725 726 final GpsSatelliteClockModel satelliteClockModel = 727 new GpsSatelliteClockModel.Builder() 728 .setTimeOfClockSeconds(getTestTimeOfClockSeconds()) 729 .setAf0(-8.39e-4) 730 .setAf1(-1.65e-11) 731 .setAf2(0) 732 .setTgd(0) 733 .setIodc(91) 734 .build(); 735 736 final GpsSatelliteHealth satelliteHealth = 737 new GpsSatelliteHealth.Builder() 738 .setSvHealth(0) 739 .setSvAccur(2.0) 740 .setFitInt(0.0) 741 .build(); 742 743 final SatelliteEphemerisTime satelliteEphemerisTime = 744 new SatelliteEphemerisTime.Builder() 745 .setIode(59) 746 .setWeekNumber(2290) 747 .setToeSeconds(463472) 748 .build(); 749 750 satelliteEphemerisList.add( 751 new GpsSatelliteEphemeris.Builder() 752 .setPrn(1) 753 .setGpsL2Params(gpsL2Params) 754 .setSatelliteClockModel(satelliteClockModel) 755 .setSatelliteOrbitModel(getTestKeplerianOrbitModel()) 756 .setSatelliteHealth(satelliteHealth) 757 .setSatelliteEphemerisTime(satelliteEphemerisTime) 758 .build()); 759 return satelliteEphemerisList; 760 } 761 getTestGpsAlmance()762 private GnssAlmanac getTestGpsAlmance() { 763 List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>(); 764 satelliteAlmanacList.add( 765 new GnssSatelliteAlmanac.Builder() 766 .setSvid(1) 767 .setSvHealth(0) 768 .setEccentricity(7.23e-3) 769 .setInclination(8.79e-3) 770 .setOmega(1.97e-1) 771 .setOmega0(-3.79e-2) 772 .setOmegaDot(-2.55e-9) 773 .setRootA(5.15e3) 774 .setM0(6.14e-1) 775 .setAf0(-2.19e-5) 776 .setAf1(-3.63e-12) 777 .build()); 778 satelliteAlmanacList.add( 779 new GnssSatelliteAlmanac.Builder() 780 .setSvid(2) 781 .setSvHealth(0) 782 .setEccentricity(7.22e-3) 783 .setInclination(8.78e-3) 784 .setOmega(1.96e-1) 785 .setOmega0(-3.78e-2) 786 .setOmegaDot(-2.54e-9) 787 .setRootA(5.14e+3) 788 .setM0(6.13e-1) 789 .setAf0(-2.18e-5) 790 .setAf1(-3.62e-12) 791 .build()); 792 793 return new GnssAlmanac.Builder() 794 .setWeekNumber(958) 795 .setToaSeconds(503808) 796 .setGnssSatelliteAlmanacs(satelliteAlmanacList) 797 .build(); 798 } 799 getTestBeidouAssistance()800 private BeidouAssistance getTestBeidouAssistance() { 801 return new BeidouAssistance.Builder() 802 .setAlmanac(getTestBeidouAlmanac()) 803 .setIonosphericModel(getTestKlobucharIonosphericModel()) 804 .setUtcModel(getTestUtcModel()) 805 .setLeapSecondsModel(getTestLeapSecondsModel()) 806 .setTimeModels(getTestTimeModelList()) 807 .setSatelliteEphemeris(getTestBeidouSatelliteEphemerisList()) 808 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList()) 809 .setSatelliteCorrections(getTestSatelliteCorrections()) 810 .build(); 811 } 812 getTestBeidouAlmanac()813 private GnssAlmanac getTestBeidouAlmanac() { 814 List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>(); 815 satelliteAlmanacList.add( 816 new GnssSatelliteAlmanac.Builder() 817 .setSvid(1) 818 .setSvHealth(0) 819 .setEccentricity(7.82e-4) 820 .setInclination(0.0958150411 / Math.PI) 821 .setOmega(-0.986917360 / Math.PI) 822 .setOmega0(-3.02e-1 / Math.PI) 823 .setOmegaDot(-5.014e-10 / Math.PI) 824 .setRootA(6493.494226) 825 .setM0(3.15e-1 / Math.PI) 826 .setAf0(-7.22e-4) 827 .setAf1(3.45e-11) 828 .build()); 829 return new GnssAlmanac.Builder() 830 .setWeekNumber(782) 831 .setToaSeconds(345600) 832 .setGnssSatelliteAlmanacs(satelliteAlmanacList) 833 .build(); 834 } 835 getTestBeidouSatelliteEphemerisList()836 private List<BeidouSatelliteEphemeris> getTestBeidouSatelliteEphemerisList() { 837 final List<BeidouSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>(); 838 final BeidouSatelliteClockModel satelliteClockModel = 839 new BeidouSatelliteClockModel.Builder() 840 .setTimeOfClockSeconds(getTestTimeOfClockSeconds()) 841 .setAf0(0.0006494125118479) 842 .setAf1(3.720579400124e-11) 843 .setAf2(0.0) 844 .setTgd1(3.8e-9) 845 .setTgd2(3.8e-9) 846 .setAodc(0) 847 .build(); 848 final BeidouSatelliteHealth beidouSatelliteHealth = 849 new BeidouSatelliteHealth.Builder().setSatH1(0).setSvAccur(2.0).build(); 850 final BeidouSatelliteEphemerisTime beidouSatelliteEphemerisTime = 851 new BeidouSatelliteEphemerisTime.Builder() 852 .setIode(1) 853 .setBeidouWeekNumber(934) 854 .setToeSeconds(457200) 855 .build(); 856 satelliteEphemerisList.add( 857 new BeidouSatelliteEphemeris.Builder() 858 .setPrn(1) 859 .setSatelliteClockModel(satelliteClockModel) 860 .setSatelliteOrbitModel(getTestKeplerianOrbitModel()) 861 .setSatelliteHealth(beidouSatelliteHealth) 862 .setSatelliteEphemerisTime(beidouSatelliteEphemerisTime) 863 .build()); 864 return satelliteEphemerisList; 865 } 866 getTestQzssAssistance()867 private QzssAssistance getTestQzssAssistance() { 868 return new QzssAssistance.Builder() 869 .setAlmanac(getTestQzssAlmanac()) 870 .setIonosphericModel(getTestKlobucharIonosphericModel()) 871 .setUtcModel(getTestUtcModel()) 872 .setLeapSecondsModel(getTestLeapSecondsModel()) 873 .setTimeModels(getTestTimeModelList()) 874 .setSatelliteEphemeris(getTestQzssSatelliteEphemerisList()) 875 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList()) 876 .setSatelliteCorrections(getTestSatelliteCorrections()) 877 .build(); 878 } 879 getTestQzssAlmanac()880 private GnssAlmanac getTestQzssAlmanac() { 881 List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>(); 882 satelliteAlmanacList.add( 883 new GnssSatelliteAlmanac.Builder() 884 .setSvid(194) 885 .setSvHealth(0) 886 .setEccentricity(7.428e-2) 887 .setInclination(0.7101072704 / Math.PI) 888 .setOmega(-1.559158521 / Math.PI) 889 .setOmega0(1.029787968 / Math.PI) 890 .setOmegaDot(-3.120129966e-9 / Math.PI) 891 .setRootA(6493.731445) 892 .setM0(-3.041552089 / Math.PI) 893 .setAf0(-3.814697266e-6) 894 .setAf1(0.0) 895 .build()); 896 return new GnssAlmanac.Builder() 897 .setWeekNumber(261) 898 .setToaSeconds(176128) 899 .setGnssSatelliteAlmanacs(satelliteAlmanacList) 900 .build(); 901 } 902 getTestQzssSatelliteEphemerisList()903 private List<QzssSatelliteEphemeris> getTestQzssSatelliteEphemerisList() { 904 final List<QzssSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>(); 905 906 final GpsL2Params gpsL2Params = new GpsL2Params.Builder().setL2Code(0).setL2Flag(0).build(); 907 908 final GpsSatelliteClockModel satelliteClockModel = 909 new GpsSatelliteClockModel.Builder() 910 .setTimeOfClockSeconds(getTestTimeOfClockSeconds()) 911 .setAf0(-8.39e-4) 912 .setAf1(-1.65e-11) 913 .setAf2(0) 914 .setTgd(0) 915 .setIodc(91) 916 .build(); 917 918 final GpsSatelliteHealth satelliteHealth = 919 new GpsSatelliteHealth.Builder() 920 .setSvHealth(0) 921 .setSvAccur(2.0) 922 .setFitInt(0.0) 923 .build(); 924 925 final SatelliteEphemerisTime satelliteEphemerisTime = 926 new SatelliteEphemerisTime.Builder() 927 .setIode(59) 928 .setWeekNumber(2290) 929 .setToeSeconds(463472) 930 .build(); 931 932 satelliteEphemerisList.add( 933 new QzssSatelliteEphemeris.Builder() 934 .setPrn(194) 935 .setGpsL2Params(gpsL2Params) 936 .setSatelliteClockModel(satelliteClockModel) 937 .setSatelliteOrbitModel(getTestKeplerianOrbitModel()) 938 .setSatelliteHealth(satelliteHealth) 939 .setSatelliteEphemerisTime(satelliteEphemerisTime) 940 .build()); 941 return satelliteEphemerisList; 942 } 943 getTestRealTimeIntegrityModelList()944 private List<RealTimeIntegrityModel> getTestRealTimeIntegrityModelList() { 945 final List<RealTimeIntegrityModel> realTimeIntegrityModelList = new ArrayList<>(); 946 realTimeIntegrityModelList.add( 947 new RealTimeIntegrityModel.Builder() 948 .setSvid(1) 949 .setUsable(true) 950 .setPublishDateSeconds(1731065504) 951 .setStartDateSeconds(1731065504) 952 .setEndDateSeconds(1731066504) 953 .setAdvisoryType("USABINIT") 954 .setAdvisoryNumber("2018001") 955 .build()); 956 return realTimeIntegrityModelList; 957 } 958 getTestSatelliteCorrections()959 private List<GnssSatelliteCorrections> getTestSatelliteCorrections() { 960 final List<GnssSatelliteCorrections> satelliteCorrectionsList = new ArrayList<>(); 961 final List<IonosphericCorrection> ionoCorrectionList = new ArrayList<>(); 962 final GnssInterval validityInterval = new GnssInterval(1731066775042L, 1731066811805L); 963 final PseudorangeCorrection pseudorangeCorrection = new PseudorangeCorrection(100, 10, 1); 964 ionoCorrectionList.add( 965 new IonosphericCorrection( 966 1575420000, 967 new GnssCorrectionComponent( 968 "Klobuchar", validityInterval, pseudorangeCorrection))); 969 970 final GnssSatelliteCorrections satelliteCorrections = 971 new GnssSatelliteCorrections(1, ionoCorrectionList); 972 satelliteCorrectionsList.add(satelliteCorrections); 973 return satelliteCorrectionsList; 974 } 975 getTestKlobucharIonosphericModel()976 private KlobucharIonosphericModel getTestKlobucharIonosphericModel() { 977 return new KlobucharIonosphericModel.Builder() 978 .setAlpha0(2.794e-8) 979 .setAlpha1(7.4506e-9) 980 .setAlpha2(-1.1921e-7) 981 .setAlpha3(1.1921e-7) 982 .setBeta0(145410) 983 .setBeta1(-180220) 984 .setBeta2(0.0) 985 .setBeta3(131070) 986 .build(); 987 } 988 getTestUtcModel()989 private UtcModel getTestUtcModel() { 990 return new UtcModel.Builder() 991 .setA0(1.33e-7) 992 .setA1(1.07e-13) 993 .setTimeOfWeek(552960) 994 .setWeekNumber(1025) 995 .build(); 996 } 997 getTestLeapSecondsModel()998 private LeapSecondsModel getTestLeapSecondsModel() { 999 return new LeapSecondsModel.Builder() 1000 .setLeapSeconds(18) 1001 .setLeapSecondsFuture(19) 1002 .setWeekNumberLeapSecondsFuture(1025) 1003 .setDayNumberLeapSecondsFuture(1) 1004 .build(); 1005 } 1006 getTestTimeModelList()1007 private List<TimeModel> getTestTimeModelList() { 1008 final List<TimeModel> timeModelList = new ArrayList<>(); 1009 timeModelList.add( 1010 new TimeModel.Builder() 1011 .setToGnss(GnssStatus.CONSTELLATION_GPS) 1012 .setA0(-2.1e-9) 1013 .setA1(-9.7e-15) 1014 .setTimeOfWeek(43200) 1015 .setWeekNumber(1849) 1016 .build()); 1017 return timeModelList; 1018 } 1019 getTestTimeOfClockSeconds()1020 private long getTestTimeOfClockSeconds() { 1021 return 521330400L; 1022 } 1023 getTestKeplerianOrbitModel()1024 private KeplerianOrbitModel getTestKeplerianOrbitModel() { 1025 final SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation = 1026 new SecondOrderHarmonicPerturbation.Builder() 1027 .setCic(-3.72e-9) 1028 .setCis(-1.67e-8) 1029 .setCrc(364.03) 1030 .setCrs(8.37) 1031 .setCuc(5.36e-7) 1032 .setCus(9.48e-7) 1033 .build(); 1034 1035 return new KeplerianOrbitModel.Builder() 1036 .setRootA(5153.63) 1037 .setEccentricity(0.00129) 1038 .setI0(0.965) 1039 .setIDot(1.003e-10) 1040 .setOmega(-2.54) 1041 .setOmega0(-0.95) 1042 .setOmegaDot(-8.35e-9) 1043 .setM0(-1.12) 1044 .setDeltaN(4.611e-9) 1045 .setSecondOrderHarmonicPerturbation(secondOrderHarmonicPerturbation) 1046 .build(); 1047 } 1048 } 1049