• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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