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; 18 19 import android.annotation.FlaggedApi; 20 import android.annotation.FloatRange; 21 import android.annotation.IntRange; 22 import android.annotation.NonNull; 23 import android.annotation.SystemApi; 24 import android.location.flags.Flags; 25 import android.os.Parcel; 26 import android.os.Parcelable; 27 28 import com.android.internal.util.Preconditions; 29 30 /** 31 * A class contains ephemeris parameters specific to Beidou satellites. 32 * 33 * @hide 34 */ 35 @FlaggedApi(Flags.FLAG_GNSS_ASSISTANCE_INTERFACE) 36 @SystemApi 37 public final class BeidouSatelliteEphemeris implements Parcelable { 38 /** The PRN or satellite ID number for the Beidou satellite. */ 39 private final int mSvid; 40 41 /** Satellite clock model. */ 42 private final BeidouSatelliteClockModel mSatelliteClockModel; 43 44 /** Satellite orbit model. */ 45 private final KeplerianOrbitModel mSatelliteOrbitModel; 46 47 /** Satellite health. */ 48 private final BeidouSatelliteHealth mSatelliteHealth; 49 50 /** Satellite ephemeris time. */ 51 private final BeidouSatelliteEphemerisTime mSatelliteEphemerisTime; 52 BeidouSatelliteEphemeris(Builder builder)53 private BeidouSatelliteEphemeris(Builder builder) { 54 // Allow Svid beyond the range to support potential future extensibility. 55 Preconditions.checkArgument(builder.mSvid >= 1); 56 Preconditions.checkNotNull(builder.mSatelliteClockModel, 57 "SatelliteClockModel cannot be null"); 58 Preconditions.checkNotNull(builder.mSatelliteOrbitModel, 59 "SatelliteOrbitModel cannot be null"); 60 Preconditions.checkNotNull(builder.mSatelliteHealth, 61 "SatelliteHealth cannot be null"); 62 Preconditions.checkNotNull(builder.mSatelliteEphemerisTime, 63 "SatelliteEphemerisTime cannot be null"); 64 mSvid = builder.mSvid; 65 mSatelliteClockModel = builder.mSatelliteClockModel; 66 mSatelliteOrbitModel = builder.mSatelliteOrbitModel; 67 mSatelliteHealth = builder.mSatelliteHealth; 68 mSatelliteEphemerisTime = builder.mSatelliteEphemerisTime; 69 } 70 71 /** Returns the PRN or satellite ID number for the Beidou satellite. */ 72 @IntRange(from = 1, to = 63) getSvid()73 public int getSvid() { 74 return mSvid; 75 } 76 77 /** Returns the satellite clock model. */ 78 @NonNull getSatelliteClockModel()79 public BeidouSatelliteClockModel getSatelliteClockModel() { 80 return mSatelliteClockModel; 81 } 82 83 /** Returns the satellite orbit model. */ 84 @NonNull getSatelliteOrbitModel()85 public KeplerianOrbitModel getSatelliteOrbitModel() { 86 return mSatelliteOrbitModel; 87 } 88 89 /** Returns the satellite health. */ 90 @NonNull getSatelliteHealth()91 public BeidouSatelliteHealth getSatelliteHealth() { 92 return mSatelliteHealth; 93 } 94 95 /** Returns the satellite ephemeris time. */ 96 @NonNull getSatelliteEphemerisTime()97 public BeidouSatelliteEphemerisTime getSatelliteEphemerisTime() { 98 return mSatelliteEphemerisTime; 99 } 100 101 public static final @NonNull Creator<BeidouSatelliteEphemeris> CREATOR = 102 new Creator<BeidouSatelliteEphemeris>() { 103 @Override 104 @NonNull 105 public BeidouSatelliteEphemeris createFromParcel(Parcel in) { 106 final BeidouSatelliteEphemeris.Builder beidouSatelliteEphemeris = 107 new Builder() 108 .setSvid(in.readInt()) 109 .setSatelliteClockModel( 110 in.readTypedObject(BeidouSatelliteClockModel.CREATOR)) 111 .setSatelliteOrbitModel( 112 in.readTypedObject(KeplerianOrbitModel.CREATOR)) 113 .setSatelliteHealth( 114 in.readTypedObject(BeidouSatelliteHealth.CREATOR)) 115 .setSatelliteEphemerisTime( 116 in.readTypedObject( 117 BeidouSatelliteEphemerisTime.CREATOR)); 118 return beidouSatelliteEphemeris.build(); 119 } 120 121 @Override 122 public BeidouSatelliteEphemeris[] newArray(int size) { 123 return new BeidouSatelliteEphemeris[size]; 124 } 125 }; 126 127 @Override describeContents()128 public int describeContents() { 129 return 0; 130 } 131 132 @Override writeToParcel(@onNull Parcel parcel, int flags)133 public void writeToParcel(@NonNull Parcel parcel, int flags) { 134 parcel.writeInt(mSvid); 135 parcel.writeTypedObject(mSatelliteClockModel, flags); 136 parcel.writeTypedObject(mSatelliteOrbitModel, flags); 137 parcel.writeTypedObject(mSatelliteHealth, flags); 138 parcel.writeTypedObject(mSatelliteEphemerisTime, flags); 139 } 140 141 @Override 142 @NonNull toString()143 public String toString() { 144 StringBuilder builder = new StringBuilder("BeidouSatelliteEphemeris["); 145 builder.append("svid = ").append(mSvid); 146 builder.append(", satelliteClockModel = ").append(mSatelliteClockModel); 147 builder.append(", satelliteOrbitModel = ").append(mSatelliteOrbitModel); 148 builder.append(", satelliteHealth = ").append(mSatelliteHealth); 149 builder.append(", satelliteEphemerisTime = ").append(mSatelliteEphemerisTime); 150 builder.append("]"); 151 return builder.toString(); 152 } 153 154 /** Builder for {@link BeidouSatelliteEphemeris} */ 155 public static final class Builder { 156 private int mSvid; 157 private BeidouSatelliteClockModel mSatelliteClockModel; 158 private KeplerianOrbitModel mSatelliteOrbitModel; 159 private BeidouSatelliteHealth mSatelliteHealth; 160 private BeidouSatelliteEphemerisTime mSatelliteEphemerisTime; 161 162 /** Sets the PRN or satellite ID number for the Beidou satellite. */ 163 @NonNull setSvid(int svid)164 public Builder setSvid(int svid) { 165 mSvid = svid; 166 return this; 167 } 168 169 /** Sets the satellite clock model. */ 170 @NonNull setSatelliteClockModel( @onNull BeidouSatelliteClockModel satelliteClockModel)171 public Builder setSatelliteClockModel( 172 @NonNull BeidouSatelliteClockModel satelliteClockModel) { 173 mSatelliteClockModel = satelliteClockModel; 174 return this; 175 } 176 177 /** Sets the satellite orbit model. */ 178 @NonNull setSatelliteOrbitModel(@onNull KeplerianOrbitModel satelliteOrbitModel)179 public Builder setSatelliteOrbitModel(@NonNull KeplerianOrbitModel satelliteOrbitModel) { 180 mSatelliteOrbitModel = satelliteOrbitModel; 181 return this; 182 } 183 184 /** Sets the satellite health. */ 185 @NonNull setSatelliteHealth(@onNull BeidouSatelliteHealth satelliteHealth)186 public Builder setSatelliteHealth(@NonNull BeidouSatelliteHealth satelliteHealth) { 187 mSatelliteHealth = satelliteHealth; 188 return this; 189 } 190 191 /** Sets the satellite ephemeris time. */ 192 @NonNull setSatelliteEphemerisTime( @onNull BeidouSatelliteEphemerisTime satelliteEphemerisTime)193 public Builder setSatelliteEphemerisTime( 194 @NonNull BeidouSatelliteEphemerisTime satelliteEphemerisTime) { 195 mSatelliteEphemerisTime = satelliteEphemerisTime; 196 return this; 197 } 198 199 /** Builds a {@link BeidouSatelliteEphemeris} instance as specified by this builder. */ 200 @NonNull build()201 public BeidouSatelliteEphemeris build() { 202 return new BeidouSatelliteEphemeris(this); 203 } 204 } 205 206 /** 207 * A class contains the set of parameters needed for Beidou satellite clock correction. 208 * 209 * <p>This is defined in BDS-SIS-ICD-B1I-3.0, section 5.2.4.9, 5.2.4.10. 210 */ 211 public static final class BeidouSatelliteClockModel implements Parcelable { 212 /** 213 * Time of the clock in seconds since Beidou epoch. 214 * 215 * <p>Corresponds to the 'Epoch' field within the 'SV/EPOCH/SV CLK' record of Beidou 216 * navigation message in RINEX 3.05 Table A14. 217 */ 218 private final long mTimeOfClockSeconds; 219 220 /** SV clock bias in seconds. */ 221 private final double mAf0; 222 223 /** SV clock drift in seconds per second. */ 224 private final double mAf1; 225 226 /** SV clock drift in seconds per second squared. */ 227 private final double mAf2; 228 229 /** Group delay differential 1 B1/B3 in seconds. */ 230 private final double mTgd1; 231 232 /** Group delay differential 2 B2/B3 in seconds. */ 233 private final double mTgd2; 234 235 /** 236 * Age of Data Clock. 237 * <p>This is defined in BDS-SIS-ICD-B1I-3.0 Section 5.2.4.8 Table 5-6. 238 */ 239 private final int mAodc; 240 BeidouSatelliteClockModel(Builder builder)241 private BeidouSatelliteClockModel(Builder builder) { 242 Preconditions.checkArgument(builder.mTimeOfClockSeconds >= 0); 243 Preconditions.checkArgumentInRange(builder.mAf0, -9.77e-3f, 9.77e-3f, "Af0"); 244 Preconditions.checkArgumentInRange(builder.mAf1, -1.87e-9f, 1.87e-9f, "Af1"); 245 Preconditions.checkArgumentInRange(builder.mAf2, -1.39e-17f, 1.39e-17f, "Af2"); 246 Preconditions.checkArgumentInRange(builder.mTgd1, -5.12e-8f, 5.12e-8f, "Tgd1"); 247 Preconditions.checkArgumentInRange(builder.mTgd2, -5.12e-8f, 5.12e-8f, "Tgd2"); 248 Preconditions.checkArgumentInRange(builder.mAodc, 0, 31, "Aodc"); 249 mTimeOfClockSeconds = builder.mTimeOfClockSeconds; 250 mAf0 = builder.mAf0; 251 mAf1 = builder.mAf1; 252 mAf2 = builder.mAf2; 253 mTgd1 = builder.mTgd1; 254 mTgd2 = builder.mTgd2; 255 mAodc = builder.mAodc; 256 } 257 258 /** Returns the time of the clock in seconds since Beidou epoch. */ 259 @IntRange(from = 0) getTimeOfClockSeconds()260 public long getTimeOfClockSeconds() { 261 return mTimeOfClockSeconds; 262 } 263 264 /** Returns the SV clock bias in seconds. */ 265 @FloatRange(from = -9.77e-3f, to = 9.77e-3f) getAf0()266 public double getAf0() { 267 return mAf0; 268 } 269 270 /** Returns the SV clock drift in seconds per second. */ 271 @FloatRange(from = -1.87e-9f, to = 1.87e-9f) getAf1()272 public double getAf1() { 273 return mAf1; 274 } 275 276 /** Returns the SV clock drift in seconds per second squared. */ 277 @FloatRange(from = -1.39e-17f, to = 1.39e-17f) getAf2()278 public double getAf2() { 279 return mAf2; 280 } 281 282 /** Returns the group delay differential 1 B1/B3 in seconds. */ 283 @FloatRange(from = -5.12e-8f, to = 5.12e-8f) getTgd1()284 public double getTgd1() { 285 return mTgd1; 286 } 287 288 /** Returns the group delay differential 2 B2/B3 in seconds. */ 289 @FloatRange(from = -5.12e-8f, to = 5.12e-8f) getTgd2()290 public double getTgd2() { 291 return mTgd2; 292 } 293 294 /** Returns the age of data clock. */ 295 @IntRange(from = 0, to = 31) getAodc()296 public int getAodc() { 297 return mAodc; 298 } 299 300 public static final @NonNull Creator<BeidouSatelliteClockModel> CREATOR = 301 new Creator<BeidouSatelliteClockModel>() { 302 @Override 303 @NonNull 304 public BeidouSatelliteClockModel createFromParcel(Parcel in) { 305 final BeidouSatelliteClockModel.Builder beidouSatelliteClockModel = 306 new Builder() 307 .setTimeOfClockSeconds(in.readLong()) 308 .setAf0(in.readDouble()) 309 .setAf1(in.readDouble()) 310 .setAf2(in.readDouble()) 311 .setTgd1(in.readDouble()) 312 .setTgd2(in.readDouble()) 313 .setAodc(in.readInt()); 314 return beidouSatelliteClockModel.build(); 315 } 316 317 @Override 318 public BeidouSatelliteClockModel[] newArray(int size) { 319 return new BeidouSatelliteClockModel[size]; 320 } 321 }; 322 323 @Override describeContents()324 public int describeContents() { 325 return 0; 326 } 327 328 @Override writeToParcel(@onNull Parcel parcel, int flags)329 public void writeToParcel(@NonNull Parcel parcel, int flags) { 330 parcel.writeLong(mTimeOfClockSeconds); 331 parcel.writeDouble(mAf0); 332 parcel.writeDouble(mAf1); 333 parcel.writeDouble(mAf2); 334 parcel.writeDouble(mTgd1); 335 parcel.writeDouble(mTgd2); 336 parcel.writeInt(mAodc); 337 } 338 339 @Override 340 @NonNull toString()341 public String toString() { 342 StringBuilder builder = new StringBuilder("BeidouSatelliteClockModel["); 343 builder.append("timeOfClockSeonds = ").append(mTimeOfClockSeconds); 344 builder.append(", af0 = ").append(mAf0); 345 builder.append(", af1 = ").append(mAf1); 346 builder.append(", af2 = ").append(mAf2); 347 builder.append(", tgd1 = ").append(mTgd1); 348 builder.append(", tgd2 = ").append(mTgd2); 349 builder.append(", aodc = ").append(mAodc); 350 return builder.toString(); 351 } 352 353 /** Builder for {@link BeidouSatelliteClockModel} */ 354 public static final class Builder { 355 private long mTimeOfClockSeconds; 356 private double mAf0; 357 private double mAf1; 358 private double mAf2; 359 private double mTgd1; 360 private double mTgd2; 361 private int mAodc; 362 363 /** Sets the time of the clock in seconds since Beidou epoch. */ 364 @NonNull setTimeOfClockSeconds(@ntRangefrom = 0) long timeOfClockSeconds)365 public Builder setTimeOfClockSeconds(@IntRange(from = 0) long timeOfClockSeconds) { 366 mTimeOfClockSeconds = timeOfClockSeconds; 367 return this; 368 } 369 370 /** Sets the SV clock bias in seconds. */ 371 @NonNull setAf0(@loatRangefrom = -9.77e-3f, to = 9.77e-3f)double af0)372 public Builder setAf0(@FloatRange(from = -9.77e-3f, to = 9.77e-3f)double af0) { 373 mAf0 = af0; 374 return this; 375 } 376 377 /** Sets the SV clock drift in seconds per second. */ 378 @NonNull setAf1(@loatRangefrom = -1.87e-9f, to = 1.87e-9f) double af1)379 public Builder setAf1(@FloatRange(from = -1.87e-9f, to = 1.87e-9f) double af1) { 380 mAf1 = af1; 381 return this; 382 } 383 384 /** Sets the SV clock drift in seconds per second squared. */ 385 @NonNull setAf2(@loatRangefrom = -1.39e-17f, to = 1.39e-17f) double af2)386 public Builder setAf2(@FloatRange(from = -1.39e-17f, to = 1.39e-17f) double af2) { 387 mAf2 = af2; 388 return this; 389 } 390 391 /** Sets the group delay differential 1 B1/B3 in seconds. */ 392 @NonNull setTgd1(@loatRangefrom = -5.12e-8f, to = 5.12e-8f) double tgd1)393 public Builder setTgd1(@FloatRange(from = -5.12e-8f, to = 5.12e-8f) double tgd1) { 394 mTgd1 = tgd1; 395 return this; 396 } 397 398 /** Sets the group delay differential 2 B2/B3 in seconds. */ 399 @NonNull setTgd2(@loatRangefrom = -5.12e-8f, to = 5.12e-8f) double tgd2)400 public Builder setTgd2(@FloatRange(from = -5.12e-8f, to = 5.12e-8f) double tgd2) { 401 mTgd2 = tgd2; 402 return this; 403 } 404 405 /** Sets the age of data clock. */ 406 @NonNull setAodc(@ntRangefrom = 0, to = 31) int aodc)407 public Builder setAodc(@IntRange(from = 0, to = 31) int aodc) { 408 mAodc = aodc; 409 return this; 410 } 411 412 /** Builds a {@link BeidouSatelliteClockModel} instance as specified by this builder. */ 413 @NonNull build()414 public BeidouSatelliteClockModel build() { 415 return new BeidouSatelliteClockModel(this); 416 } 417 } 418 } 419 420 /** A class contains Beidou satellite health. */ 421 public static final class BeidouSatelliteHealth implements Parcelable { 422 /** 423 * The autonomous satellite health flag (SatH1) occupies 1 bit. 424 * 425 * <p>“0” means broadcasting satellite is good and “1” means not. 426 * 427 * <p>This is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.6. 428 */ 429 private final int mSatH1; 430 431 /** 432 * SV accuracy in meters. 433 * 434 * <p>This is defined in the "BROADCAST ORBIT - 6" record of RINEX 3.05 435 * Table A14, pp.78. 436 */ 437 private final double mSvAccur; 438 BeidouSatelliteHealth(Builder builder)439 private BeidouSatelliteHealth(Builder builder) { 440 // Allow SatH1 beyond the range to support potential future extensibility. 441 Preconditions.checkArgument(builder.mSatH1 >= 0); 442 Preconditions.checkArgumentInRange(builder.mSvAccur, 0.0f, 8192.0f, "SvAccur"); 443 mSatH1 = builder.mSatH1; 444 mSvAccur = builder.mSvAccur; 445 } 446 447 /** Returns the autonomous satellite health flag (SatH1) */ 448 @IntRange(from = 0, to = 1) getSatH1()449 public int getSatH1() { 450 return mSatH1; 451 } 452 453 /** Returns the SV accuracy in meters. */ 454 @FloatRange(from = 0.0f, to = 8192.0f) getSvAccur()455 public double getSvAccur() { 456 return mSvAccur; 457 } 458 459 public static final @NonNull Creator<BeidouSatelliteHealth> CREATOR = 460 new Creator<BeidouSatelliteHealth>() { 461 @Override 462 @NonNull 463 public BeidouSatelliteHealth createFromParcel(Parcel in) { 464 final BeidouSatelliteHealth.Builder beidouSatelliteHealth = 465 new Builder().setSatH1(in.readInt()).setSvAccur(in.readDouble()); 466 return beidouSatelliteHealth.build(); 467 } 468 469 @Override 470 public BeidouSatelliteHealth[] newArray(int size) { 471 return new BeidouSatelliteHealth[size]; 472 } 473 }; 474 475 @Override describeContents()476 public int describeContents() { 477 return 0; 478 } 479 480 @Override writeToParcel(@onNull Parcel parcel, int flags)481 public void writeToParcel(@NonNull Parcel parcel, int flags) { 482 parcel.writeInt(mSatH1); 483 parcel.writeDouble(mSvAccur); 484 } 485 486 @Override 487 @NonNull toString()488 public String toString() { 489 StringBuilder builder = new StringBuilder("BeidouSatelliteHealth["); 490 builder.append("satH1 = ").append(mSatH1); 491 builder.append(", svAccur = ").append(mSvAccur); 492 builder.append("]"); 493 return builder.toString(); 494 } 495 496 /** Builder for {@link BeidouSatelliteHealth} */ 497 public static final class Builder { 498 private int mSatH1; 499 private double mSvAccur; 500 501 /** Sets the autonomous satellite health flag (SatH1) */ 502 @NonNull setSatH1(int satH1)503 public Builder setSatH1(int satH1) { 504 mSatH1 = satH1; 505 return this; 506 } 507 508 /** Sets the SV accuracy in meters. */ 509 @NonNull setSvAccur(double svAccur)510 public Builder setSvAccur(double svAccur) { 511 mSvAccur = svAccur; 512 return this; 513 } 514 515 /** Builds a {@link BeidouSatelliteHealth} instance as specified by this builder. */ 516 @NonNull build()517 public BeidouSatelliteHealth build() { 518 return new BeidouSatelliteHealth(this); 519 } 520 } 521 } 522 523 /** A class contains Beidou satellite ephemeris time. */ 524 public static final class BeidouSatelliteEphemerisTime implements Parcelable { 525 /** 526 * AODE Age of Data, Ephemeris. 527 * 528 * <p>This is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.11 Table 5-8. 529 */ 530 private final int mAode; 531 532 /** Beidou week number without rollover */ 533 private final int mBeidouWeekNumber; 534 535 /** 536 * Time of ephemeris in seconds. 537 * 538 * <p>This is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.12. 539 */ 540 private final int mToeSeconds; 541 BeidouSatelliteEphemerisTime(Builder builder)542 private BeidouSatelliteEphemerisTime(Builder builder) { 543 Preconditions.checkArgumentInRange(builder.mAode, 0, 31, "Aode"); 544 Preconditions.checkArgument(builder.mBeidouWeekNumber >= 0); 545 Preconditions.checkArgumentInRange(builder.mToeSeconds, 0, 604792, "ToeSeconds"); 546 mAode = builder.mAode; 547 mBeidouWeekNumber = builder.mBeidouWeekNumber; 548 mToeSeconds = builder.mToeSeconds; 549 } 550 551 /** Returns the AODE Age of Data, Ephemeris. */ 552 @IntRange(from = 0, to = 31) getAode()553 public int getAode() { 554 return mAode; 555 } 556 557 /** Returns the Beidou week number without rollover . */ 558 @IntRange(from = 0) getBeidouWeekNumber()559 public int getBeidouWeekNumber() { 560 return mBeidouWeekNumber; 561 } 562 563 /** Returns the time of ephemeris in seconds. */ 564 @IntRange(from = 0, to = 604792) getToeSeconds()565 public int getToeSeconds() { 566 return mToeSeconds; 567 } 568 569 public static final @NonNull Creator<BeidouSatelliteEphemerisTime> CREATOR = 570 new Creator<BeidouSatelliteEphemerisTime>() { 571 @Override 572 @NonNull 573 public BeidouSatelliteEphemerisTime createFromParcel(Parcel in) { 574 final BeidouSatelliteEphemerisTime.Builder beidouSatelliteEphemerisTime = 575 new Builder() 576 .setAode(in.readInt()) 577 .setBeidouWeekNumber(in.readInt()) 578 .setToeSeconds(in.readInt()); 579 return beidouSatelliteEphemerisTime.build(); 580 } 581 582 @Override 583 public BeidouSatelliteEphemerisTime[] newArray(int size) { 584 return new BeidouSatelliteEphemerisTime[size]; 585 } 586 }; 587 588 @Override describeContents()589 public int describeContents() { 590 return 0; 591 } 592 593 @Override writeToParcel(@onNull Parcel parcel, int flags)594 public void writeToParcel(@NonNull Parcel parcel, int flags) { 595 parcel.writeInt(mAode); 596 parcel.writeInt(mBeidouWeekNumber); 597 parcel.writeInt(mToeSeconds); 598 } 599 600 @Override toString()601 public String toString() { 602 StringBuilder builder = new StringBuilder("BeidouSatelliteEphemerisTime["); 603 builder.append("aode = ").append(mAode); 604 builder.append(", beidouWeekNumber = ").append(mBeidouWeekNumber); 605 builder.append(", toeSeconds = ").append(mToeSeconds); 606 builder.append("]"); 607 return builder.toString(); 608 } 609 610 /** Builder for {@link BeidouSatelliteEphemerisTime} */ 611 public static final class Builder { 612 private int mAode; 613 private int mBeidouWeekNumber; 614 private int mToeSeconds; 615 616 /** Sets the AODE Age of Data, Ephemeris. */ 617 @NonNull setAode(int iode)618 public Builder setAode(int iode) { 619 mAode = iode; 620 return this; 621 } 622 623 /** Sets the Beidou week number without rollover */ 624 @NonNull setBeidouWeekNumber( @ntRangefrom = 0) int beidouWeekNumber)625 public Builder setBeidouWeekNumber( 626 @IntRange(from = 0) int beidouWeekNumber) { 627 mBeidouWeekNumber = beidouWeekNumber; 628 return this; 629 } 630 631 /** Sets the time of ephemeris in seconds. */ 632 @NonNull setToeSeconds(@ntRangefrom = 0, to = 604792) int toeSeconds)633 public Builder setToeSeconds(@IntRange(from = 0, to = 604792) int toeSeconds) { 634 mToeSeconds = toeSeconds; 635 return this; 636 } 637 638 /** 639 * Builds a {@link BeidouSatelliteEphemerisTime} instance as specified by this builder. 640 */ 641 @NonNull build()642 public BeidouSatelliteEphemerisTime build() { 643 return new BeidouSatelliteEphemerisTime(this); 644 } 645 } 646 } 647 } 648