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 com.google.uwb.support.rftest; 18 19 import static com.google.uwb.support.fira.FiraParams.MAC_FCS_TYPE_CRC_16; 20 import static com.google.uwb.support.fira.FiraParams.MAX_NUMBER_OF_MEASUREMENTS_DEFAULT; 21 import static com.google.uwb.support.fira.FiraParams.PREAMBLE_DURATION_T64_SYMBOLS; 22 import static com.google.uwb.support.fira.FiraParams.PRF_MODE_BPRF; 23 import static com.google.uwb.support.fira.FiraParams.PSDU_DATA_RATE_6M81; 24 import static com.google.uwb.support.fira.FiraParams.RFRAME_CONFIG_SP3; 25 import static com.google.uwb.support.fira.FiraParams.SFD_ID_VALUE_2; 26 import static com.google.uwb.support.fira.FiraParams.STS_SEGMENT_COUNT_VALUE_1; 27 import static com.google.uwb.support.fira.FiraParams.UWB_CHANNEL_9; 28 import static com.google.uwb.support.fira.FiraParams.longToUwbAddress; 29 import static com.google.uwb.support.fira.FiraParams.uwbAddressToLong; 30 31 import android.os.PersistableBundle; 32 import android.uwb.UwbAddress; 33 import android.uwb.UwbManager; 34 35 import androidx.annotation.NonNull; 36 37 import com.google.uwb.support.base.RequiredParam; 38 import com.google.uwb.support.fira.FiraParams.MacFcsType; 39 import com.google.uwb.support.fira.FiraParams.PreambleDuration; 40 import com.google.uwb.support.fira.FiraParams.PrfMode; 41 import com.google.uwb.support.fira.FiraParams.PsduDataRate; 42 import com.google.uwb.support.fira.FiraParams.RangingDeviceRole; 43 import com.google.uwb.support.fira.FiraParams.RframeConfig; 44 import com.google.uwb.support.fira.FiraParams.SfdIdValue; 45 import com.google.uwb.support.fira.FiraParams.StsSegmentCountValue; 46 import com.google.uwb.support.fira.FiraParams.UwbChannel; 47 import com.google.uwb.support.fira.FiraParams.UwbPreambleCodeIndex; 48 49 import java.util.ArrayList; 50 import java.util.Collections; 51 import java.util.List; 52 53 /** 54 * Defines parameters to open a Rftest session. 55 * 56 * <p>This is passed as a bundle to the service API {@link UwbManager#openRangingSession}. 57 */ 58 public class RfTestOpenSessionParams extends RfTestParams { 59 private static final int BUNDLE_VERSION_1 = 1; 60 private static final int BUNDLE_VERSION_CURRENT = BUNDLE_VERSION_1; 61 private static final String KEY_SESSION_ID = "session_id"; 62 private static final String KEY_SESSION_TYPE = "session_type"; 63 private static final String KEY_CHANNEL_NUMBER = "channel_number"; 64 private static final String KEY_NUMBER_OF_CONTROLEES = "number_of_controlees"; 65 private static final String KEY_DEVICE_ADDRESS = "device_address"; 66 private static final String KEY_DEST_ADDRESS_LIST = "dest_address_list"; 67 private static final String KEY_SLOT_DURATION_RSTU = "slot_duration"; 68 private static final String KEY_STS_INDEX = "sts_index"; 69 private static final String KEY_FCS_TYPE = "fcs_type"; 70 private static final String KEY_DEVICE_ROLE = "device_role"; 71 private static final String KEY_RFRAME_CONFIG = "rframe_config"; 72 private static final String KEY_PREAMBLE_CODE_INDEX = "preamble_code_index"; 73 private static final String KEY_SFD_ID = "sfd_id"; 74 private static final String KEY_PSDU_DATA_RATE = "psdu_data_rate"; 75 private static final String KEY_PREAMBLE_DURATION = "preamble_duration"; 76 private static final String KEY_PRF_MODE = "prf_mode"; 77 private static final String KEY_STS_SEGMENT_COUNT = "sts_segment_count"; 78 79 // RF test specific params 80 private static final String KEY_NUMBER_OF_PACKETS = "number_of_packets"; 81 private static final String KEY_T_GAP = "t_gap"; 82 private static final String KEY_T_START = "t_start"; 83 private static final String KEY_T_WIN = "t_win"; 84 private static final String KEY_RANDOMIZE_PSDU = "randomize_psdu"; 85 private static final String KEY_PHR_RANGING_BIT = "phr_ranging_bit"; 86 private static final String KEY_RMARKER_TX_START = "rmarker_tx_start"; 87 private static final String KEY_RMARKER_RX_START = "rmarker_rx_start"; 88 private static final String KEY_STS_INDEX_AUTO_INCR = "sts_index_auto_incr"; 89 private static final String KEY_STS_DETECT_BITMAP_EN = "sts_detect_bitmap_en"; 90 91 @SessionId 92 private final int mSessionId; 93 @SessionType 94 private final int mSessionType; 95 @UwbChannel 96 private final int mUwbChannel; 97 private final int mNoOfControlee; 98 private final UwbAddress mDeviceAddress; 99 private final List<UwbAddress> mDestAddressList; 100 private final int mSlotDurationRstu; 101 private final int mStsIndex; 102 @MacFcsType 103 private final int mFcsType; 104 @RangingDeviceRole 105 private final int mDeviceRole; 106 @RframeConfig 107 private final int mRframeConfig; 108 private final int mPreambleCodeIndex; 109 @SfdIdValue 110 private final int mSfdId; 111 @PsduDataRate 112 private final int mPsduDataRate; 113 @PreambleDuration 114 private final int mPreambleDuration; 115 @PrfMode 116 private final int mPrfMode; 117 @StsSegmentCountValue 118 private final int mStsSegmentCount; 119 120 private final int mNoOfPackets; 121 private final int mTgap; 122 private final int mTstart; 123 private final int mTwin; 124 @RandomizePsdu 125 private final int mRandomizePsdu; 126 @PhrRangingBit 127 private final int mPhrRangingBit; 128 private final int mRmarkerTxStart; 129 private final int mRmarkerRxStart; 130 @StsIndexAutoIncr 131 private final int mStsIndexAutoIncr; 132 @StsDetectBitmap 133 private final int mStsDetectBitmap; 134 RfTestOpenSessionParams( int sessionId, @SessionType int sessionType, @UwbChannel int uwbChannel, int noOfControlee, UwbAddress deviceAddress, List<UwbAddress> destAddressList, int slotDurationRstu, int stsIndex, @MacFcsType int fcsType, @RangingDeviceRole int deviceRole, @RframeConfig int rframeConfig, int preambleCodeIndex, @SfdIdValue int sfdId, @PsduDataRate int psduDataRate, @PreambleDuration int preambleDuration, @PrfMode int prfMode, @StsSegmentCountValue int stsSegmentCount, int noOfPackets, int tGap, int tStart, int tWin, @RandomizePsdu int randomizePsdu, @PhrRangingBit int phrRangingBit, int rmarketTxStart, int rmakrkerRxStart, @StsIndexAutoIncr int stsIndexAutoIncr, @StsDetectBitmap int stsDetectBitmap)135 private RfTestOpenSessionParams( 136 int sessionId, 137 @SessionType int sessionType, 138 @UwbChannel int uwbChannel, 139 int noOfControlee, 140 UwbAddress deviceAddress, 141 List<UwbAddress> destAddressList, 142 int slotDurationRstu, 143 int stsIndex, 144 @MacFcsType int fcsType, 145 @RangingDeviceRole int deviceRole, 146 @RframeConfig int rframeConfig, 147 int preambleCodeIndex, 148 @SfdIdValue int sfdId, 149 @PsduDataRate int psduDataRate, 150 @PreambleDuration int preambleDuration, 151 @PrfMode int prfMode, 152 @StsSegmentCountValue int stsSegmentCount, 153 int noOfPackets, 154 int tGap, 155 int tStart, 156 int tWin, 157 @RandomizePsdu int randomizePsdu, 158 @PhrRangingBit int phrRangingBit, 159 int rmarketTxStart, 160 int rmakrkerRxStart, 161 @StsIndexAutoIncr int stsIndexAutoIncr, 162 @StsDetectBitmap int stsDetectBitmap) { 163 mSessionId = sessionId; 164 mSessionType = sessionType; 165 mUwbChannel = uwbChannel; 166 mNoOfControlee = noOfControlee; 167 mDeviceAddress = deviceAddress; 168 mDestAddressList = destAddressList; 169 mSlotDurationRstu = slotDurationRstu; 170 mStsIndex = stsIndex; 171 mFcsType = fcsType; 172 mDeviceRole = deviceRole; 173 mRframeConfig = rframeConfig; 174 mPreambleCodeIndex = preambleCodeIndex; 175 mSfdId = sfdId; 176 mPsduDataRate = psduDataRate; 177 mPreambleDuration = preambleDuration; 178 mPrfMode = prfMode; 179 mStsSegmentCount = stsSegmentCount; 180 mNoOfPackets = noOfPackets; 181 mTgap = tGap; 182 mTstart = tStart; 183 mTwin = tWin; 184 mRandomizePsdu = randomizePsdu; 185 mPhrRangingBit = phrRangingBit; 186 mRmarkerTxStart = rmarketTxStart; 187 mRmarkerRxStart = rmakrkerRxStart; 188 mStsIndexAutoIncr = stsIndexAutoIncr; 189 mStsDetectBitmap = stsDetectBitmap; 190 } 191 192 @Override getBundleVersion()193 protected int getBundleVersion() { 194 return BUNDLE_VERSION_CURRENT; 195 } 196 197 @Override toBundle()198 public PersistableBundle toBundle() { 199 PersistableBundle bundle = super.toBundle(); 200 bundle.putInt(KEY_SESSION_ID, mSessionId); 201 bundle.putInt(KEY_SESSION_TYPE, mSessionType); 202 bundle.putInt(KEY_CHANNEL_NUMBER, mUwbChannel); 203 bundle.putInt(KEY_NUMBER_OF_CONTROLEES, mNoOfControlee); 204 bundle.putLong(KEY_DEVICE_ADDRESS, uwbAddressToLong(mDeviceAddress)); 205 if (mDestAddressList != null) { 206 long[] destAddressList = new long[mDestAddressList.size()]; 207 int i = 0; 208 for (UwbAddress destAddress : mDestAddressList) { 209 destAddressList[i++] = uwbAddressToLong(destAddress); 210 } 211 bundle.putLongArray(KEY_DEST_ADDRESS_LIST, destAddressList); 212 } 213 bundle.putInt(KEY_SLOT_DURATION_RSTU, mSlotDurationRstu); 214 bundle.putInt(KEY_STS_INDEX, mStsIndex); 215 bundle.putInt(KEY_FCS_TYPE, mFcsType); 216 bundle.putInt(KEY_DEVICE_ROLE, mDeviceRole); 217 bundle.putInt(KEY_RFRAME_CONFIG, mRframeConfig); 218 bundle.putInt(KEY_PREAMBLE_CODE_INDEX, mPreambleCodeIndex); 219 bundle.putInt(KEY_SFD_ID, mSfdId); 220 bundle.putInt(KEY_PSDU_DATA_RATE, mPsduDataRate); 221 bundle.putInt(KEY_PREAMBLE_DURATION, mPreambleDuration); 222 bundle.putInt(KEY_PRF_MODE, mPrfMode); 223 bundle.putInt(KEY_STS_SEGMENT_COUNT, mStsSegmentCount); 224 bundle.putInt(KEY_NUMBER_OF_PACKETS, mNoOfPackets); 225 bundle.putInt(KEY_T_GAP, mTgap); 226 bundle.putInt(KEY_T_START, mTstart); 227 bundle.putInt(KEY_T_WIN, mTwin); 228 bundle.putInt(KEY_RANDOMIZE_PSDU, mRandomizePsdu); 229 bundle.putInt(KEY_PHR_RANGING_BIT, mPhrRangingBit); 230 bundle.putInt(KEY_RMARKER_TX_START, mRmarkerTxStart); 231 bundle.putInt(KEY_RMARKER_RX_START, mRmarkerRxStart); 232 bundle.putInt(KEY_STS_INDEX_AUTO_INCR, mStsIndexAutoIncr); 233 bundle.putInt(KEY_STS_DETECT_BITMAP_EN, mStsDetectBitmap); 234 return bundle; 235 } 236 237 /** Unpack the {@link PersistableBundle} to a {@link RfTestOpenSessionParams} */ fromBundle(PersistableBundle bundle)238 public static RfTestOpenSessionParams fromBundle(PersistableBundle bundle) { 239 if (!isCorrectProtocol(bundle)) { 240 throw new IllegalArgumentException("Invalid protocol"); 241 } 242 243 switch (getBundleVersion(bundle)) { 244 case BUNDLE_VERSION_1: 245 return parseBundleVersion1(bundle); 246 247 default: 248 throw new IllegalArgumentException("unknown bundle version"); 249 } 250 } 251 parseBundleVersion1(PersistableBundle bundle)252 private static RfTestOpenSessionParams parseBundleVersion1(PersistableBundle bundle) { 253 254 UwbAddress deviceAddress = 255 longToUwbAddress(bundle.getLong(KEY_DEVICE_ADDRESS), 2); 256 long[] destAddresses = bundle.getLongArray(KEY_DEST_ADDRESS_LIST); 257 List<UwbAddress> destAddressList = new ArrayList<>(); 258 if (destAddresses != null) { 259 for (long address : destAddresses) { 260 destAddressList.add(longToUwbAddress(address, 2)); 261 } 262 } 263 return new Builder() 264 .setChannelNumber(bundle.getInt(KEY_CHANNEL_NUMBER)) 265 .setNumberOfControlee(bundle.getInt(KEY_NUMBER_OF_CONTROLEES)) 266 .setDeviceAddress(deviceAddress) 267 .setDestAddressList(destAddressList) 268 .setSlotDurationRstu(bundle.getInt(KEY_SLOT_DURATION_RSTU)) 269 .setStsIndex(bundle.getInt(KEY_STS_INDEX)) 270 .setFcsType(bundle.getInt(KEY_FCS_TYPE)) 271 .setDeviceRole(bundle.getInt(KEY_DEVICE_ROLE)) 272 .setRframeConfig(bundle.getInt(KEY_RFRAME_CONFIG)) 273 .setPreambleCodeIndex(bundle.getInt(KEY_PREAMBLE_CODE_INDEX)) 274 .setSfdId(bundle.getInt(KEY_SFD_ID)) 275 .setPsduDataRate(bundle.getInt(KEY_PSDU_DATA_RATE)) 276 .setPreambleDuration(bundle.getInt(KEY_PREAMBLE_DURATION)) 277 .setPrfMode(bundle.getInt(KEY_PRF_MODE)) 278 .setStsSegmentCount(bundle.getInt(KEY_STS_SEGMENT_COUNT)) 279 .setNumberOfPackets(bundle.getInt(KEY_NUMBER_OF_PACKETS)) 280 .setTgap(bundle.getInt(KEY_T_GAP)) 281 .setTstart(bundle.getInt(KEY_T_START)) 282 .setTwin(bundle.getInt(KEY_T_WIN)) 283 .setRandomizePsdu(bundle.getInt(KEY_RANDOMIZE_PSDU)) 284 .setPhrRangingBit(bundle.getInt(KEY_PHR_RANGING_BIT)) 285 .setRmarkerTxStart(bundle.getInt(KEY_RMARKER_TX_START)) 286 .setRmarkerRxStart(bundle.getInt(KEY_RMARKER_RX_START)) 287 .setStsIndexAutoIncr(bundle.getInt(KEY_STS_INDEX_AUTO_INCR)) 288 .setStsDetectBitmap(bundle.getInt(KEY_STS_DETECT_BITMAP_EN)) 289 .build(); 290 } 291 getSessionId()292 public int getSessionId() { 293 return mSessionId; 294 } 295 296 @SessionType getSessionType()297 public int getSessionType() { 298 return mSessionType; 299 } 300 301 @UwbChannel getChannelNumber()302 public int getChannelNumber() { 303 return mUwbChannel; 304 } 305 getNoOfControlee()306 public int getNoOfControlee() { 307 return mNoOfControlee; 308 } 309 getDeviceAddress()310 public UwbAddress getDeviceAddress() { 311 return mDeviceAddress; 312 } 313 getDestAddressList()314 public List<UwbAddress> getDestAddressList() { 315 return mDestAddressList != null ? Collections.unmodifiableList(mDestAddressList) : null; 316 } 317 getSlotDurationRstu()318 public int getSlotDurationRstu() { 319 return mSlotDurationRstu; 320 } 321 getStsIndex()322 public int getStsIndex() { 323 return mStsIndex; 324 } 325 326 @MacFcsType getFcsType()327 public int getFcsType() { 328 return mFcsType; 329 } 330 331 @RangingDeviceRole getDeviceRole()332 public int getDeviceRole() { 333 return mDeviceRole; 334 } 335 336 @RframeConfig getRframeConfig()337 public int getRframeConfig() { 338 return mRframeConfig; 339 } 340 341 @UwbPreambleCodeIndex getPreambleCodeIndex()342 public int getPreambleCodeIndex() { 343 return mPreambleCodeIndex; 344 } 345 346 @SfdIdValue getSfdId()347 public int getSfdId() { 348 return mSfdId; 349 } 350 351 @PsduDataRate getPsduDataRate()352 public int getPsduDataRate() { 353 return mPsduDataRate; 354 } 355 356 @PreambleDuration getPreambleDuration()357 public int getPreambleDuration() { 358 return mPreambleDuration; 359 } 360 361 @PrfMode getPrfMode()362 public int getPrfMode() { 363 return mPrfMode; 364 } 365 366 @StsSegmentCountValue getStsSegmentCount()367 public int getStsSegmentCount() { 368 return mStsSegmentCount; 369 } 370 getNumberOfPackets()371 public int getNumberOfPackets() { 372 return mNoOfPackets; 373 } 374 getTgap()375 public int getTgap() { 376 return mTgap; 377 } 378 getTstart()379 public int getTstart() { 380 return mTstart; 381 } 382 getTwin()383 public int getTwin() { 384 return mTwin; 385 } 386 387 @RandomizePsdu getRandomizePsdu()388 public int getRandomizePsdu() { 389 return mRandomizePsdu; 390 } 391 392 @PhrRangingBit getPhrRangingBit()393 public int getPhrRangingBit() { 394 return mPhrRangingBit; 395 } 396 getRmarkerTxStart()397 public int getRmarkerTxStart() { 398 return mRmarkerTxStart; 399 } 400 getRmarkerRxStart()401 public int getRmarkerRxStart() { 402 return mRmarkerRxStart; 403 } 404 405 @StsIndexAutoIncr getStsIndexAutoIncr()406 public int getStsIndexAutoIncr() { 407 return mStsIndexAutoIncr; 408 } 409 410 @StsDetectBitmap getStsDetectBitmap()411 public int getStsDetectBitmap() { 412 return mStsDetectBitmap; 413 } 414 415 /** Builder */ 416 public static final class Builder { 417 private int mSessionId = 0x00000000; 418 419 @SessionType 420 private int mSessionType = RfTestParams.SESSION_TYPE_RFTEST; 421 422 /** UCI spec default: Channel 9, which is the only mandatory channel. */ 423 @UwbChannel 424 private int mUwbChannel = UWB_CHANNEL_9; 425 426 private int mNoOfControlee = MAX_NUMBER_OF_MEASUREMENTS_DEFAULT; 427 428 private RequiredParam<UwbAddress> mDeviceAddress = new RequiredParam<UwbAddress>(); 429 430 private List<UwbAddress> mDestAddressList = null; 431 432 /** UCI spec default: 2400 RSTU (2 ms). */ 433 private int mSlotDurationRstu = 2400; 434 435 private int mStsIndex = 0; 436 437 /** UCI spec default: CRC-16 */ 438 private @MacFcsType int mFcsType = MAC_FCS_TYPE_CRC_16; 439 440 private @RangingDeviceRole int mDeviceRole; 441 442 private @RframeConfig int mRframeConfig = RFRAME_CONFIG_SP3; 443 444 /** UCI spec default 10 */ 445 private int mPreambleCodeIndex = 10; 446 447 /** UCI spec default 2, BPRF */ 448 private @SfdIdValue int mSfdId = SFD_ID_VALUE_2; 449 450 /** UCI spec default 6.81 Mbps */ 451 private @PsduDataRate int mPsduDataRate = PSDU_DATA_RATE_6M81; 452 453 /** UCI spec default 64 symbols */ 454 private @PreambleDuration int mPreambleDuration = PREAMBLE_DURATION_T64_SYMBOLS; 455 456 /** UCI spec default BPRF */ 457 private @PrfMode int mPrfMode = PRF_MODE_BPRF; 458 459 /** UCI spec default 1 STS segment */ 460 private @StsSegmentCountValue int mStsSegmentCount = STS_SEGMENT_COUNT_VALUE_1; 461 462 /** UCI spec default 1000 */ 463 private int mNoOfPackets = 1000; 464 465 /** UCI spec default 2000 */ 466 private int mTgap = 2000; 467 468 /** UCI spec default 450 */ 469 private int mTstart = 450; 470 471 /** UCI spec default 750 */ 472 private int mTwin = 750; 473 474 /** UCI spec default no randomization */ 475 private @RandomizePsdu int mRandomizePsdu = NO_RANDOMIZATION; 476 477 /** UCI spec default disable */ 478 private @PhrRangingBit int mPhrRangingBit = DISABLE_PHR; 479 480 private RequiredParam<Integer> mRmarkerTxStart = new RequiredParam<Integer>(); 481 482 private RequiredParam<Integer> mRmarkerRxStart = new RequiredParam<Integer>(); 483 484 /** UCI spec default no increment */ 485 private @StsIndexAutoIncr int mStsIndexAutoIncr = NO_AUTO_INCR; 486 487 /** UCI spec default don't report bitmap */ 488 private @StsDetectBitmap int mStsDetectBitmap = NO_STS_DETECT_BITMAP; 489 Builder()490 public Builder() { 491 } 492 Builder(@onNull Builder builder)493 public Builder(@NonNull Builder builder) { 494 mSessionId = builder.mSessionId; 495 mSessionType = builder.mSessionType; 496 mUwbChannel = builder.mUwbChannel; 497 mNoOfControlee = builder.mNoOfControlee; 498 mDeviceAddress.set(builder.mDeviceAddress.get()); 499 mDestAddressList = builder.mDestAddressList; 500 mSlotDurationRstu = builder.mSlotDurationRstu; 501 mStsIndex = builder.mStsIndex; 502 mFcsType = builder.mFcsType; 503 mDeviceRole = builder.mDeviceRole; 504 mRframeConfig = builder.mRframeConfig; 505 mPreambleCodeIndex = builder.mPreambleCodeIndex; 506 mSfdId = builder.mSfdId; 507 mPsduDataRate = builder.mPsduDataRate; 508 mPreambleDuration = builder.mPreambleDuration; 509 mPrfMode = builder.mPrfMode; 510 mStsSegmentCount = builder.mStsSegmentCount; 511 mNoOfPackets = builder.mNoOfPackets; 512 mTgap = builder.mTgap; 513 mTstart = builder.mTstart; 514 mTwin = builder.mTwin; 515 mRandomizePsdu = builder.mRandomizePsdu; 516 mPhrRangingBit = builder.mPhrRangingBit; 517 mRmarkerTxStart.set(builder.mRmarkerTxStart.get()); 518 mRmarkerRxStart.set(builder.mRmarkerRxStart.get()); 519 mStsIndexAutoIncr = builder.mStsIndexAutoIncr; 520 mStsDetectBitmap = builder.mStsDetectBitmap; 521 } 522 Builder(@onNull RfTestOpenSessionParams params)523 public Builder(@NonNull RfTestOpenSessionParams params) { 524 mSessionId = params.mSessionId; 525 mSessionType = params.mSessionType; 526 mUwbChannel = params.mUwbChannel; 527 mNoOfControlee = params.mNoOfControlee; 528 mDeviceAddress.set(params.mDeviceAddress); 529 mDestAddressList = params.mDestAddressList; 530 mSlotDurationRstu = params.mSlotDurationRstu; 531 mStsIndex = params.mStsIndex; 532 mFcsType = params.mFcsType; 533 mDeviceRole = params.mDeviceRole; 534 mRframeConfig = params.mRframeConfig; 535 mPreambleCodeIndex = params.mPreambleCodeIndex; 536 mSfdId = params.mSfdId; 537 mPsduDataRate = params.mPsduDataRate; 538 mPreambleDuration = params.mPreambleDuration; 539 mPrfMode = params.mPrfMode; 540 mStsSegmentCount = params.mStsSegmentCount; 541 mNoOfPackets = params.mNoOfPackets; 542 mTgap = params.mTgap; 543 mTstart = params.mTstart; 544 mTwin = params.mTwin; 545 mRandomizePsdu = params.mRandomizePsdu; 546 mPhrRangingBit = params.mPhrRangingBit; 547 mRmarkerTxStart.set(params.mRmarkerTxStart); 548 mRmarkerRxStart.set(params.mRmarkerRxStart); 549 mStsIndexAutoIncr = params.mStsIndexAutoIncr; 550 mStsDetectBitmap = params.mStsDetectBitmap; 551 } 552 setChannelNumber(@wbChannel int channelNumber)553 public Builder setChannelNumber(@UwbChannel int channelNumber) { 554 mUwbChannel = channelNumber; 555 return this; 556 } 557 setNumberOfControlee(int noOfControlee)558 public Builder setNumberOfControlee(int noOfControlee) { 559 mNoOfControlee = noOfControlee; 560 return this; 561 } 562 setDeviceAddress(UwbAddress deviceAddress)563 public Builder setDeviceAddress(UwbAddress deviceAddress) { 564 mDeviceAddress.set(deviceAddress); 565 return this; 566 } 567 setDestAddressList(List<UwbAddress> destAddressList)568 public Builder setDestAddressList(List<UwbAddress> destAddressList) { 569 mDestAddressList = destAddressList; 570 return this; 571 } 572 setSlotDurationRstu(int slotDurationRstu)573 public Builder setSlotDurationRstu(int slotDurationRstu) { 574 mSlotDurationRstu = slotDurationRstu; 575 return this; 576 } 577 setStsIndex(int stsIndex)578 public Builder setStsIndex(int stsIndex) { 579 mStsIndex = stsIndex; 580 return this; 581 } 582 setFcsType(@acFcsType int fcsType)583 public Builder setFcsType(@MacFcsType int fcsType) { 584 mFcsType = fcsType; 585 return this; 586 } 587 setDeviceRole(@angingDeviceRole int deviceRole)588 public Builder setDeviceRole(@RangingDeviceRole int deviceRole) { 589 mDeviceRole = deviceRole; 590 return this; 591 } 592 setRframeConfig(@frameConfig int rframeConfig)593 public Builder setRframeConfig(@RframeConfig int rframeConfig) { 594 mRframeConfig = rframeConfig; 595 return this; 596 } 597 setPreambleCodeIndex(@wbPreambleCodeIndex int preambleCodeIndex)598 public Builder setPreambleCodeIndex(@UwbPreambleCodeIndex int preambleCodeIndex) { 599 mPreambleCodeIndex = preambleCodeIndex; 600 return this; 601 } 602 setSfdId(@fdIdValue int sfdId)603 public Builder setSfdId(@SfdIdValue int sfdId) { 604 mSfdId = sfdId; 605 return this; 606 } 607 setPsduDataRate(@sduDataRate int psduDataRate)608 public Builder setPsduDataRate(@PsduDataRate int psduDataRate) { 609 mPsduDataRate = psduDataRate; 610 return this; 611 } 612 setPreambleDuration(@reambleDuration int preambleDuration)613 public Builder setPreambleDuration(@PreambleDuration int preambleDuration) { 614 mPreambleDuration = preambleDuration; 615 return this; 616 } 617 setPrfMode(@rfMode int prfMode)618 public Builder setPrfMode(@PrfMode int prfMode) { 619 mPrfMode = prfMode; 620 return this; 621 } 622 setStsSegmentCount( @tsSegmentCountValue int stsSegmentCount)623 public Builder setStsSegmentCount( 624 @StsSegmentCountValue int stsSegmentCount) { 625 mStsSegmentCount = stsSegmentCount; 626 return this; 627 } 628 setNumberOfPackets(int noOfPackets)629 public Builder setNumberOfPackets(int noOfPackets) { 630 mNoOfPackets = noOfPackets; 631 return this; 632 } 633 setTgap(int tGap)634 public Builder setTgap(int tGap) { 635 mTgap = tGap; 636 return this; 637 } 638 setTstart(int tStart)639 public Builder setTstart(int tStart) { 640 mTstart = tStart; 641 return this; 642 } 643 setTwin(int tWin)644 public Builder setTwin(int tWin) { 645 mTwin = tWin; 646 return this; 647 } 648 setRandomizePsdu(@andomizePsdu int randomizePsdu)649 public Builder setRandomizePsdu(@RandomizePsdu int randomizePsdu) { 650 mRandomizePsdu = randomizePsdu; 651 return this; 652 } 653 setPhrRangingBit(@hrRangingBit int phrRangingBit)654 public Builder setPhrRangingBit(@PhrRangingBit int phrRangingBit) { 655 mPhrRangingBit = phrRangingBit; 656 return this; 657 } 658 setRmarkerTxStart(int rmarkerTxStart)659 public Builder setRmarkerTxStart(int rmarkerTxStart) { 660 mRmarkerTxStart.set(rmarkerTxStart); 661 return this; 662 } 663 setRmarkerRxStart(int rmarkerRxStart)664 public Builder setRmarkerRxStart(int rmarkerRxStart) { 665 mRmarkerRxStart.set(rmarkerRxStart); 666 return this; 667 } 668 setStsIndexAutoIncr(@tsIndexAutoIncr int stsIndexAutoIncr)669 public Builder setStsIndexAutoIncr(@StsIndexAutoIncr int stsIndexAutoIncr) { 670 mStsIndexAutoIncr = stsIndexAutoIncr; 671 return this; 672 } 673 setStsDetectBitmap(@tsDetectBitmap int stsDetectBitmap)674 public Builder setStsDetectBitmap(@StsDetectBitmap int stsDetectBitmap) { 675 mStsDetectBitmap = stsDetectBitmap; 676 return this; 677 } 678 679 /** Build {@link RfTestOpenSessionParams} */ build()680 public RfTestOpenSessionParams build() { 681 return new RfTestOpenSessionParams( 682 mSessionId, 683 mSessionType, 684 mUwbChannel, 685 mNoOfControlee, 686 mDeviceAddress.get(), 687 mDestAddressList, 688 mSlotDurationRstu, 689 mStsIndex, 690 mFcsType, 691 mDeviceRole, 692 mRframeConfig, 693 mPreambleCodeIndex, 694 mSfdId, 695 mPsduDataRate, 696 mPreambleDuration, 697 mPrfMode, 698 mStsSegmentCount, 699 mNoOfPackets, 700 mTgap, 701 mTstart, 702 mTwin, 703 mRandomizePsdu, 704 mPhrRangingBit, 705 mRmarkerTxStart.get(), 706 mRmarkerRxStart.get(), 707 mStsIndexAutoIncr, 708 mStsDetectBitmap 709 ); 710 } 711 } 712 } 713