• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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.fira;
18 
19 import android.os.Build.VERSION_CODES;
20 import android.os.PersistableBundle;
21 import android.uwb.UwbAddress;
22 
23 import androidx.annotation.IntDef;
24 import androidx.annotation.RequiresApi;
25 
26 import com.google.uwb.support.base.FlagEnum;
27 import com.google.uwb.support.base.Params;
28 
29 import java.lang.annotation.Retention;
30 import java.lang.annotation.RetentionPolicy;
31 import java.nio.ByteBuffer;
32 import java.util.Arrays;
33 
34 /** Defines parameters for FiRa operation */
35 @RequiresApi(VERSION_CODES.LOLLIPOP)
36 public abstract class FiraParams extends Params {
37     public static final String PROTOCOL_NAME = "fira";
38 
39     @Override
getProtocolName()40     public final String getProtocolName() {
41         return PROTOCOL_NAME;
42     }
43 
isCorrectProtocol(PersistableBundle bundle)44     public static boolean isCorrectProtocol(PersistableBundle bundle) {
45         return isProtocol(bundle, PROTOCOL_NAME);
46     }
47 
48     public static final FiraProtocolVersion PROTOCOL_VERSION_1_1 = new FiraProtocolVersion(1, 1);
49 
50     /** Service ID for FiRa profile */
51     @IntDef(
52             value = {
53                     PACS_PROFILE_SERVICE_ID,
54             })
55     public @interface ServiceID {}
56 
57     public static final int PACS_PROFILE_SERVICE_ID = 1;
58 
59     /** UWB Channel selections */
60     @Retention(RetentionPolicy.SOURCE)
61     @IntDef(
62             value = {
63                 UWB_CHANNEL_5,
64                 UWB_CHANNEL_6,
65                 UWB_CHANNEL_8,
66                 UWB_CHANNEL_9,
67                 UWB_CHANNEL_10,
68                 UWB_CHANNEL_12,
69                 UWB_CHANNEL_13,
70                 UWB_CHANNEL_14,
71             })
72     public @interface UwbChannel {}
73 
74     public static final int UWB_CHANNEL_5 = 5;
75     public static final int UWB_CHANNEL_6 = 6;
76     public static final int UWB_CHANNEL_8 = 8;
77     public static final int UWB_CHANNEL_9 = 9;
78     public static final int UWB_CHANNEL_10 = 10;
79     public static final int UWB_CHANNEL_12 = 12;
80     public static final int UWB_CHANNEL_13 = 13;
81     public static final int UWB_CHANNEL_14 = 14;
82 
83     /** UWB Channel selections */
84     @Retention(RetentionPolicy.SOURCE)
85     @IntDef(
86             value = {
87                 UWB_PREAMBLE_CODE_INDEX_9,
88                 UWB_PREAMBLE_CODE_INDEX_10,
89                 UWB_PREAMBLE_CODE_INDEX_11,
90                 UWB_PREAMBLE_CODE_INDEX_12,
91                 UWB_PREAMBLE_CODE_INDEX_25,
92                 UWB_PREAMBLE_CODE_INDEX_26,
93                 UWB_PREAMBLE_CODE_INDEX_27,
94                 UWB_PREAMBLE_CODE_INDEX_28,
95                 UWB_PREAMBLE_CODE_INDEX_29,
96                 UWB_PREAMBLE_CODE_INDEX_30,
97                 UWB_PREAMBLE_CODE_INDEX_31,
98                 UWB_PREAMBLE_CODE_INDEX_32,
99             })
100     public @interface UwbPreambleCodeIndex {}
101 
102     public static final int UWB_PREAMBLE_CODE_INDEX_9 = 9;
103     public static final int UWB_PREAMBLE_CODE_INDEX_10 = 10;
104     public static final int UWB_PREAMBLE_CODE_INDEX_11 = 11;
105     public static final int UWB_PREAMBLE_CODE_INDEX_12 = 12;
106     public static final int UWB_PREAMBLE_CODE_INDEX_25 = 25;
107     public static final int UWB_PREAMBLE_CODE_INDEX_26 = 26;
108     public static final int UWB_PREAMBLE_CODE_INDEX_27 = 27;
109     public static final int UWB_PREAMBLE_CODE_INDEX_28 = 28;
110     public static final int UWB_PREAMBLE_CODE_INDEX_29 = 29;
111     public static final int UWB_PREAMBLE_CODE_INDEX_30 = 30;
112     public static final int UWB_PREAMBLE_CODE_INDEX_31 = 31;
113     public static final int UWB_PREAMBLE_CODE_INDEX_32 = 32;
114 
115     /** Ranging frame type */
116     @Retention(RetentionPolicy.SOURCE)
117     @IntDef(
118             value = {
119                 RFRAME_CONFIG_SP0,
120                 RFRAME_CONFIG_SP1,
121                 RFRAME_CONFIG_SP3,
122             })
123     public @interface RframeConfig {}
124 
125     /** Ranging frame without STS */
126     public static final int RFRAME_CONFIG_SP0 = 0;
127 
128     /** Ranging frame with STS following SFD */
129     public static final int RFRAME_CONFIG_SP1 = 1;
130 
131     /** Ranging frame with STS following SFD, no data */
132     public static final int RFRAME_CONFIG_SP3 = 3;
133 
134     /** Device type defined in FiRa */
135     @IntDef(
136             value = {
137                 RANGING_DEVICE_TYPE_CONTROLEE,
138                 RANGING_DEVICE_TYPE_CONTROLLER,
139                 RANGING_DEVICE_TYPE_DT_TAG,
140             })
141     public @interface RangingDeviceType {}
142 
143     public static final int RANGING_DEVICE_TYPE_CONTROLEE = 0;
144 
145     public static final int RANGING_DEVICE_TYPE_CONTROLLER = 1;
146 
147     public static final int RANGING_DEVICE_TYPE_DT_TAG = 2;
148 
149     /** Device role defined in FiRa */
150     @IntDef(
151             value = {
152                 RANGING_DEVICE_ROLE_RESPONDER,
153                 RANGING_DEVICE_ROLE_INITIATOR,
154                 RANGING_DEVICE_UT_TAG,
155                 RANGING_DEVICE_ROLE_ADVERTISER,
156                 RANGING_DEVICE_ROLE_OBSERVER,
157                 RANGING_DEVICE_DT_ANCHOR,
158                 RANGING_DEVICE_DT_TAG,
159             })
160     public @interface RangingDeviceRole {}
161 
162     public static final int RANGING_DEVICE_ROLE_RESPONDER = 0;
163 
164     public static final int RANGING_DEVICE_ROLE_INITIATOR = 1;
165 
166     public static final int RANGING_DEVICE_UT_TAG = 4;
167 
168     public static final int RANGING_DEVICE_ROLE_ADVERTISER = 5;
169 
170     public static final int RANGING_DEVICE_ROLE_OBSERVER = 6;
171 
172     public static final int RANGING_DEVICE_DT_ANCHOR = 7;
173 
174     public static final int RANGING_DEVICE_DT_TAG = 8;
175 
176     /** Ranging Round Usage */
177     @IntDef(
178             value = {
179                 RANGING_ROUND_USAGE_UL_TDOA,
180                 RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
181                 RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE,
182                 RANGING_ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE,
183                 RANGING_ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE,
184                 RANGING_ROUND_USAGE_OWR_AOA_MEASUREMENT,
185                 RANGING_ROUND_USAGE_DL_TDOA,
186                 RANGING_ROUND_USAGE_DATA_TRANSFER_MODE,
187             })
188     public @interface RangingRoundUsage {}
189 
190     /** Uplink Time Difference of Arrival (OWR) */
191     public static final int RANGING_ROUND_USAGE_UL_TDOA = 0;
192 
193     /** Single-sided two-way ranging, deferred */
194     public static final int RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE = 1;
195 
196     /** Double-sided two-way ranging, deferred */
197     public static final int RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE = 2;
198 
199     /** Single-sided two-way ranging, non-deferred */
200     public static final int RANGING_ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE = 3;
201 
202     /** Double-sided two-way ranging, non-deferred */
203     public static final int RANGING_ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE = 4;
204 
205     /** Downlink Time Difference of Arrival */
206     public static final int RANGING_ROUND_USAGE_DL_TDOA = 5;
207 
208     /** OWR for AoA measurement */
209     public static final int RANGING_ROUND_USAGE_OWR_AOA_MEASUREMENT = 6;
210 
211     /** Data transfer mode */
212     public static final int RANGING_ROUND_USAGE_DATA_TRANSFER_MODE = 9;
213 
214     /** Multi-Node mode */
215     @IntDef(
216             value = {
217                 MULTI_NODE_MODE_UNICAST,
218                 MULTI_NODE_MODE_ONE_TO_MANY,
219                 MULTI_NODE_MODE_MANY_TO_MANY,
220             })
221     public @interface MultiNodeMode {}
222 
223     public static final int MULTI_NODE_MODE_UNICAST = 0;
224 
225     public static final int MULTI_NODE_MODE_ONE_TO_MANY = 1;
226 
227     /** Unuported in Fira 1.1 */
228     public static final int MULTI_NODE_MODE_MANY_TO_MANY = 2;
229 
230     /** Scheduling Mode */
231     @IntDef(
232             value = {
233                 CONTENTION_BASED_RANGING,
234                 TIME_SCHEDULED_RANGING,
235             })
236     public @interface SchedulingMode {}
237 
238     public static final int CONTENTION_BASED_RANGING = 0;
239 
240     public static final int TIME_SCHEDULED_RANGING = 1;
241 
242     /** Ranging Time Struct */
243     @IntDef(
244             value = {
245                 INTERVAL_BASED_SCHEDULING,
246                 BLOCK_BASED_SCHEDULING,
247             })
248     public @interface RangingTimeStruct {}
249 
250     public static final int INTERVAL_BASED_SCHEDULING = 0;
251 
252     public static final int BLOCK_BASED_SCHEDULING = 1;
253 
254     /** Cc Constraint Length */
255     @IntDef(
256             value = {
257                 CONSTRAINT_LENGTH_3,
258                 CONSTRAINT_LENGTH_7,
259             })
260     public @interface CcConstraintLength {}
261 
262     public static final int CONSTRAINT_LENGTH_3 = 3;
263 
264     public static final int CONSTRAINT_LENGTH_7 = 7;
265 
266     /** Measurement Report */
267     @IntDef(
268             value = {
269                 MEASUREMENT_REPORT_TYPE_INITIATOR_TO_RESPONDER,
270                 MEASUREMENT_REPORT_TYPE_RESPONDER_TO_INITIATOR,
271             })
272     public @interface MeasurementReportType {}
273 
274     public static final int MEASUREMENT_REPORT_TYPE_INITIATOR_TO_RESPONDER = 0;
275 
276     public static final int MEASUREMENT_REPORT_TYPE_RESPONDER_TO_INITIATOR = 1;
277 
278     /** PRF Mode */
279     @IntDef(
280             value = {
281                 PRF_MODE_BPRF,
282                 PRF_MODE_HPRF,
283             })
284     public @interface PrfMode {}
285 
286     public static final int PRF_MODE_BPRF = 0;
287 
288     public static final int PRF_MODE_HPRF = 1;
289 
290     /** Preamble duration: BPRF always uses 64 symbols */
291     @IntDef(
292             value = {
293                 PREAMBLE_DURATION_T32_SYMBOLS,
294                 PREAMBLE_DURATION_T64_SYMBOLS,
295             })
296     public @interface PreambleDuration {}
297 
298     /** HPRF only */
299     public static final int PREAMBLE_DURATION_T32_SYMBOLS = 0;
300 
301     public static final int PREAMBLE_DURATION_T64_SYMBOLS = 1;
302 
303     /** PSDU data Rate */
304     @IntDef(
305             value = {
306                 PSDU_DATA_RATE_6M81,
307                 PSDU_DATA_RATE_7M80,
308                 PSDU_DATA_RATE_27M2,
309                 PSDU_DATA_RATE_31M2,
310             })
311     public @interface PsduDataRate {}
312 
313     /** 6.81 Mbps, default BPRF rate */
314     public static final int PSDU_DATA_RATE_6M81 = 0;
315 
316     /** 7.80 Mbps, BPRF rate with convolutional encoding K = 7 */
317     public static final int PSDU_DATA_RATE_7M80 = 1;
318 
319     /** 27.2 Mbps, default HPRF rate */
320     public static final int PSDU_DATA_RATE_27M2 = 2;
321 
322     /** 31.2 Mbps, HPRF rate with convolutional encoding K = 7 */
323     public static final int PSDU_DATA_RATE_31M2 = 3;
324 
325     /** BPRF PHY Header data rate */
326     @IntDef(
327             value = {
328                 BPRF_PHR_DATA_RATE_850K,
329                 BPRF_PHR_DATA_RATE_6M81,
330             })
331     public @interface BprfPhrDataRate {}
332 
333     /** 850 kbps */
334     public static final int BPRF_PHR_DATA_RATE_850K = 0;
335 
336     /** 6.81 Mbps */
337     public static final int BPRF_PHR_DATA_RATE_6M81 = 1;
338 
339     /** MAC FCS type */
340     @IntDef(
341             value = {
342                 MAC_FCS_TYPE_CRC_16,
343                 MAC_FCS_TYPE_CRC_32,
344             })
345     public @interface MacFcsType {}
346 
347     public static final int MAC_FCS_TYPE_CRC_16 = 0;
348     /** HPRF only */
349     public static final int MAC_FCS_TYPE_CRC_32 = 1;
350 
351     /** STS Config */
352     @IntDef(
353             value = {
354                 STS_CONFIG_STATIC,
355                 STS_CONFIG_DYNAMIC,
356                 STS_CONFIG_DYNAMIC_FOR_CONTROLEE_INDIVIDUAL_KEY,
357                 STS_CONFIG_PROVISIONED,
358                 STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY,
359             })
360     public @interface StsConfig {}
361 
362     public static final int STS_CONFIG_STATIC = 0;
363 
364     public static final int STS_CONFIG_DYNAMIC = 1;
365 
366     public static final int STS_CONFIG_DYNAMIC_FOR_CONTROLEE_INDIVIDUAL_KEY = 2;
367 
368     public static final int STS_CONFIG_PROVISIONED = 3;
369 
370     public static final int STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY = 4;
371 
372     /** AoA request */
373     @IntDef(
374             value = {
375                 AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT,
376                 AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS,
377                 AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_AZIMUTH_ONLY,
378                 AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_ELEVATION_ONLY,
379                 AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED,
380             })
381     public @interface AoaResultRequestMode {}
382 
383     public static final int AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT = 0;
384 
385     public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS = 1;
386 
387     public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_AZIMUTH_ONLY = 2;
388 
389     public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_ELEVATION_ONLY = 3;
390 
391     public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED = 0xF0;
392 
393     /** STS Segment count */
394     @IntDef(
395             value = {
396                 STS_SEGMENT_COUNT_VALUE_0,
397                 STS_SEGMENT_COUNT_VALUE_1,
398                 STS_SEGMENT_COUNT_VALUE_2,
399             })
400     public @interface StsSegmentCountValue {}
401 
402     public static final int STS_SEGMENT_COUNT_VALUE_0 = 0;
403 
404     public static final int STS_SEGMENT_COUNT_VALUE_1 = 1;
405 
406     public static final int STS_SEGMENT_COUNT_VALUE_2 = 2;
407 
408     /** SFD ID */
409     @IntDef(
410             value = {
411                 SFD_ID_VALUE_1,
412                 SFD_ID_VALUE_2,
413                 SFD_ID_VALUE_3,
414                 SFD_ID_VALUE_4,
415             })
416     public @interface SfdIdValue {}
417 
418     public static final int SFD_ID_VALUE_1 = 1;
419     public static final int SFD_ID_VALUE_2 = 2;
420     public static final int SFD_ID_VALUE_3 = 3;
421     public static final int SFD_ID_VALUE_4 = 4;
422 
423     /**
424      * Hopping mode (Since FiRa supports vendor-specific values. This annotation is not enforced.)
425      */
426     @IntDef(
427             value = {
428                 HOPPING_MODE_DISABLE,
429                 HOPPING_MODE_FIRA_HOPPING_ENABLE,
430             })
431     public @interface HoppingMode {}
432 
433       /** UCI spec default: 25 slots per ranging round. */
434     public static final int SLOTS_PER_RR = 25;
435     public static final int MIN_CAP_SIZE = 5;
436     public static final int HOPPING_MODE_DISABLE = 0;
437     public static final int HOPPING_MODE_FIRA_HOPPING_ENABLE = 1;
438 
439     /** STS Length */
440     @IntDef(
441             value = {
442                 STS_LENGTH_32_SYMBOLS,
443                 STS_LENGTH_64_SYMBOLS,
444                 STS_LENGTH_128_SYMBOLS,
445             })
446     public @interface StsLength {}
447 
448     public static final int STS_LENGTH_32_SYMBOLS = 0;
449     public static final int STS_LENGTH_64_SYMBOLS = 1;
450     public static final int STS_LENGTH_128_SYMBOLS = 2;
451 
452     /** Range Data Notification Config */
453     @IntDef(
454             value = {
455                 RANGE_DATA_NTF_CONFIG_DISABLE,
456                 RANGE_DATA_NTF_CONFIG_ENABLE,
457                 RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG,
458                 RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG,
459                 RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG,
460                 RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG,
461                 RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG,
462                 RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG,
463             })
464     public @interface RangeDataNtfConfig {}
465 
466     public static final int RANGE_DATA_NTF_CONFIG_DISABLE = 0;
467     public static final int RANGE_DATA_NTF_CONFIG_ENABLE = 1;
468     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG = 2;
469     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG = 3;
470     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG = 4;
471     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG = 5;
472     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG = 6;
473     public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG = 7;
474 
475     /** MAC address mode: short (2 bytes) or extended (8 bytes) */
476     @IntDef(
477             value = {
478                 MAC_ADDRESS_MODE_2_BYTES,
479                 MAC_ADDRESS_MODE_8_BYTES_2_BYTES_HEADER,
480                 MAC_ADDRESS_MODE_8_BYTES,
481             })
482     public @interface MacAddressMode {}
483 
484     public static final int MAC_ADDRESS_MODE_2_BYTES = 0;
485 
486     /** Not supported by UCI 1.0 */
487     public static final int MAC_ADDRESS_MODE_8_BYTES_2_BYTES_HEADER = 1;
488 
489     public static final int MAC_ADDRESS_MODE_8_BYTES = 2;
490 
491     /** AoA type is not defined in UCI. This decides what AoA result we want to get */
492     @IntDef(
493             value = {
494                 AOA_TYPE_AZIMUTH,
495                 AOA_TYPE_ELEVATION,
496                 AOA_TYPE_AZIMUTH_AND_ELEVATION,
497             })
498     public @interface AoaType {}
499 
500     public static final int AOA_TYPE_AZIMUTH = 0;
501     public static final int AOA_TYPE_ELEVATION = 1;
502 
503     /**
504      * How to get both angles is hardware dependent. Some hardware can get both angle in one round,
505      * some needs two rounds.
506      */
507     public static final int AOA_TYPE_AZIMUTH_AND_ELEVATION = 2;
508 
509     /** Status codes defined in UCI */
510     @IntDef(
511             value = {
512                 STATUS_CODE_OK,
513                 STATUS_CODE_REJECTED,
514                 STATUS_CODE_FAILED,
515                 STATUS_CODE_SYNTAX_ERROR,
516                 STATUS_CODE_INVALID_PARAM,
517                 STATUS_CODE_INVALID_RANGE,
518                 STATUS_CODE_INVALID_MESSAGE_SIZE,
519                 STATUS_CODE_UNKNOWN_GID,
520                 STATUS_CODE_UNKNOWN_OID,
521                 STATUS_CODE_READ_ONLY,
522                 STATUS_CODE_COMMAND_RETRY,
523                 STATUS_CODE_ERROR_SESSION_NOT_EXIST,
524                 STATUS_CODE_ERROR_SESSION_DUPLICATE,
525                 STATUS_CODE_ERROR_SESSION_ACTIVE,
526                 STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED,
527                 STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED,
528                 STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING,
529                 STATUS_CODE_ERROR_MULTICAST_LIST_FULL,
530                 STATUS_CODE_ERROR_ADDRESS_NOT_FOUND,
531                 STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT,
532                 STATUS_CODE_OK_NEGATIVE_DISTANCE_REPORT,
533                 STATUS_CODE_RANGING_TX_FAILED,
534                 STATUS_CODE_RANGING_RX_TIMEOUT,
535                 STATUS_CODE_RANGING_RX_PHY_DEC_FAILED,
536                 STATUS_CODE_RANGING_RX_PHY_TOA_FAILED,
537                 STATUS_CODE_RANGING_RX_PHY_STS_FAILED,
538                 STATUS_CODE_RANGING_RX_MAC_DEC_FAILED,
539                 STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED,
540                 STATUS_CODE_RANGING_RX_MAC_IE_MISSING,
541                 STATUS_CODE_ERROR_ROUND_INDEX_NOT_ACTIVATED,
542                 STATUS_CODE_ERROR_NUMBER_OF_ACTIVE_RANGING_ROUNDS_EXCEEDED,
543                 STATUS_CODE_ERROR_ROUND_INDEX_NOT_SET_AS_INITIATOR,
544                 STATUS_CODE_ERROR_DL_TDOA_DEVICE_ADDRESS_NOT_MATCHING_IN_REPLY_TIME_LIST,
545             })
546     public @interface StatusCode {}
547 
548     public static final int STATUS_CODE_OK = 0x00;
549     public static final int STATUS_CODE_REJECTED = 0x01;
550     public static final int STATUS_CODE_FAILED = 0x02;
551     public static final int STATUS_CODE_SYNTAX_ERROR = 0x03;
552     public static final int STATUS_CODE_INVALID_PARAM = 0x04;
553     public static final int STATUS_CODE_INVALID_RANGE = 0x05;
554     public static final int STATUS_CODE_INVALID_MESSAGE_SIZE = 0x06;
555     public static final int STATUS_CODE_UNKNOWN_GID = 0x07;
556     public static final int STATUS_CODE_UNKNOWN_OID = 0x08;
557     public static final int STATUS_CODE_READ_ONLY = 0x09;
558     public static final int STATUS_CODE_COMMAND_RETRY = 0x0A;
559     public static final int STATUS_CODE_ERROR_SESSION_NOT_EXIST = 0x11;
560     public static final int STATUS_CODE_ERROR_SESSION_DUPLICATE = 0x12;
561     public static final int STATUS_CODE_ERROR_SESSION_ACTIVE = 0x13;
562     public static final int STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED = 0x14;
563     public static final int STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED = 0x15;
564     public static final int STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING = 0x16;
565     public static final int STATUS_CODE_ERROR_MULTICAST_LIST_FULL = 0x17;
566     public static final int STATUS_CODE_ERROR_ADDRESS_NOT_FOUND = 0x18;
567     public static final int STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT = 0x19;
568     public static final int STATUS_CODE_OK_NEGATIVE_DISTANCE_REPORT = 0x1B;
569     public static final int STATUS_CODE_RANGING_TX_FAILED = 0x20;
570     public static final int STATUS_CODE_RANGING_RX_TIMEOUT = 0x21;
571     public static final int STATUS_CODE_RANGING_RX_PHY_DEC_FAILED = 0x22;
572     public static final int STATUS_CODE_RANGING_RX_PHY_TOA_FAILED = 0x23;
573     public static final int STATUS_CODE_RANGING_RX_PHY_STS_FAILED = 0x24;
574     public static final int STATUS_CODE_RANGING_RX_MAC_DEC_FAILED = 0x25;
575     public static final int STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED = 0x26;
576     public static final int STATUS_CODE_RANGING_RX_MAC_IE_MISSING = 0x27;
577     public static final int STATUS_CODE_ERROR_ROUND_INDEX_NOT_ACTIVATED = 0X28;
578     public static final int STATUS_CODE_ERROR_NUMBER_OF_ACTIVE_RANGING_ROUNDS_EXCEEDED = 0X29;
579     public static final int STATUS_CODE_ERROR_ROUND_INDEX_NOT_SET_AS_INITIATOR = 0X2A;
580     public static final int
581             STATUS_CODE_ERROR_DL_TDOA_DEVICE_ADDRESS_NOT_MATCHING_IN_REPLY_TIME_LIST = 0X2B;
582 
583     /**
584      * Table 28: Status codes in the DATA_TRANSFER_STATUS_NTF.
585      */
586     @IntDef(
587             value = {
588                     STATUS_CODE_DATA_TRANSFER_NTF_REPETITION_OK,
589                     STATUS_CODE_DATA_TRANSFER_NTF_OK,
590                     STATUS_CODE_DATA_TRANSFER_NTF_ERROR_DATA_TRANSFER,
591                     STATUS_CODE_DATA_TRANSFER_NTF_ERROR_NO_CREDIT_AVAILABLE,
592                     STATUS_CODE_DATA_TRANSFER_NTF_ERROR_REJECTED,
593                     STATUS_CODE_DATA_TRANSFER_NTF_SESSION_TYPE_NOT_SUPPORTED,
594                     STATUS_CODE_DATA_TRANSFER_NTF_ERROR_DATA_TRANSFER_IS_ONGOING
595             })
596     public @interface DataTransferStatusNtfCode {}
597 
598     public static final int STATUS_CODE_DATA_TRANSFER_NTF_REPETITION_OK = 0;
599     public static final int STATUS_CODE_DATA_TRANSFER_NTF_OK = 1;
600     public static final int STATUS_CODE_DATA_TRANSFER_NTF_ERROR_DATA_TRANSFER = 2;
601     public static final int STATUS_CODE_DATA_TRANSFER_NTF_ERROR_NO_CREDIT_AVAILABLE = 3;
602     public static final int STATUS_CODE_DATA_TRANSFER_NTF_ERROR_REJECTED = 4;
603     public static final int STATUS_CODE_DATA_TRANSFER_NTF_SESSION_TYPE_NOT_SUPPORTED = 5;
604     public static final int STATUS_CODE_DATA_TRANSFER_NTF_ERROR_DATA_TRANSFER_IS_ONGOING = 6;
605 
606     /** State change reason codes defined in UCI table-15 */
607     @IntDef(
608             value = {
609                 STATE_CHANGE_REASON_CODE_BY_COMMANDS,
610                 STATE_CHANGE_REASON_CODE_MAX_RR_RETRY_REACHED,
611                 STATE_CHANGE_REASON_CODE_ERROR_SLOT_LENGTH_NOT_SUPPORTED,
612                 STATE_CHANGE_REASON_CODE_ERROR_INSUFFICIENT_SLOTS_PER_RR,
613                 STATE_CHANGE_REASON_CODE_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED,
614                 STATE_CHANGE_REASON_CODE_ERROR_INVALID_RANGING_INTERVAL,
615                 STATE_CHANGE_REASON_CODE_ERROR_INVALID_STS_CONFIG,
616                 STATE_CHANGE_REASON_CODE_ERROR_INVALID_RFRAME_CONFIG,
617             })
618     public @interface StateChangeReasonCode {}
619 
620     public static final int STATE_CHANGE_REASON_CODE_BY_COMMANDS = 0;
621     public static final int STATE_CHANGE_REASON_CODE_MAX_RR_RETRY_REACHED = 1;
622     public static final int STATE_CHANGE_REASON_CODE_ERROR_SLOT_LENGTH_NOT_SUPPORTED = 0x20;
623     public static final int STATE_CHANGE_REASON_CODE_ERROR_INSUFFICIENT_SLOTS_PER_RR = 0x21;
624     public static final int STATE_CHANGE_REASON_CODE_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED = 0x22;
625     public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_RANGING_INTERVAL = 0x23;
626     public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_STS_CONFIG = 0x24;
627     public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_RFRAME_CONFIG = 0x25;
628 
629     /** Multicast controlee add/delete actions defined in UCI */
630     @IntDef(
631             value = {
632                 MULTICAST_LIST_UPDATE_ACTION_ADD,
633                 MULTICAST_LIST_UPDATE_ACTION_DELETE,
634                 P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_16_BYTE,
635                 P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_32_BYTE,
636             })
637     public @interface MulticastListUpdateAction {}
638 
639     public static final int MULTICAST_LIST_UPDATE_ACTION_ADD = 0x0;
640     public static final int MULTICAST_LIST_UPDATE_ACTION_DELETE = 0x1;
641     public static final int P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_16_BYTE = 0x2;
642     public static final int P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_32_BYTE = 0x3;
643 
644     @IntDef(
645             value = {
646                 MULTICAST_LIST_UPDATE_STATUS_OK,
647                 MULTICAST_LIST_UPDATE_STATUS_ERROR_MULTICAST_LIST_FULL,
648                 MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL,
649                 MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND,
650             })
651     public @interface MulticastListUpdateStatus {}
652 
653     public static final int MULTICAST_LIST_UPDATE_STATUS_OK = 0;
654     public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_MULTICAST_LIST_FULL = 1;
655     public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL = 2;
656     public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND = 3;
657 
658     /** Capability related definitions starts from here */
659     @IntDef(
660             value = {
661                 DEVICE_CLASS_1,
662                 DEVICE_CLASS_2,
663                 DEVICE_CLASS_3,
664             })
665     public @interface DeviceClass {}
666 
667     public static final int DEVICE_CLASS_1 = 1; // Controller & controlee
668     public static final int DEVICE_CLASS_2 = 2; // Controller
669     public static final int DEVICE_CLASS_3 = 3; // Controlee
670 
671     /** Length of UL-TDoA Device ID */
672     @IntDef(
673             value = {
674                     UL_TDOA_DEVICE_ID_NONE,
675                     UL_TDOA_DEVICE_ID_16_BIT,
676                     UL_TDOA_DEVICE_ID_32_BIT,
677                     UL_TDOA_DEVICE_ID_64_BIT,
678             })
679     public @interface UlTdoaDeviceIdType {}
680 
681     public static final int UL_TDOA_DEVICE_ID_NONE = 0;
682     public static final int UL_TDOA_DEVICE_ID_16_BIT = 1;
683     public static final int UL_TDOA_DEVICE_ID_32_BIT = 2;
684     public static final int UL_TDOA_DEVICE_ID_64_BIT = 3;
685 
686     /** TX Timestamp of UL-TDoA */
687     @IntDef(
688             value = {
689                     TX_TIMESTAMP_NONE,
690                     TX_TIMESTAMP_40_BIT,
691                     TX_TIMESTAMP_64_BIT,
692             })
693     public @interface UlTdoaTxTimestampType {}
694 
695     public static final int TX_TIMESTAMP_NONE = 0;
696     public static final int TX_TIMESTAMP_40_BIT = 1;
697     public static final int TX_TIMESTAMP_64_BIT = 2;
698 
699     public static final int RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT = 0;
700     public static final int RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT = 20000;
701     public static final double RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT = -Math.PI;
702     public static final double RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT = Math.PI;
703     public static final double RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT = -Math.PI / 2;
704     public static final double RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT = Math.PI / 2;
705 
706     public enum AoaCapabilityFlag implements FlagEnum {
707         HAS_AZIMUTH_SUPPORT(1),
708         HAS_ELEVATION_SUPPORT(1 << 1),
709         HAS_FOM_SUPPORT(1 << 2),
710         HAS_FULL_AZIMUTH_SUPPORT(1 << 3),
711         HAS_INTERLEAVING_SUPPORT(1 << 4);
712 
713         private final long mValue;
714 
AoaCapabilityFlag(long value)715         private AoaCapabilityFlag(long value) {
716             mValue = value;
717         }
718 
719         @Override
getValue()720         public long getValue() {
721             return mValue;
722         }
723     }
724 
725     public enum DeviceRoleCapabilityFlag implements FlagEnum {
726         HAS_CONTROLEE_INITIATOR_SUPPORT(1),
727         HAS_CONTROLEE_RESPONDER_SUPPORT(1 << 1),
728         HAS_CONTROLLER_INITIATOR_SUPPORT(1 << 2),
729         HAS_CONTROLLER_RESPONDER_SUPPORT(1 << 3),
730         HAS_UT_SYNCHRONIZATION_SUPPORT(1 << 4),
731         HAS_UT_ANCHOR_SUPPORT(1 << 5),
732         HAS_UT_TAG_SUPPORT(1 << 6),
733         HAS_ADVERTISER_SUPPORT(1 << 7),
734         HAS_OBSERVER_SUPPORT(1 << 8),
735         HAS_DT_ANCHOR_SUPPORT(1 << 9),
736         HAS_DT_TAG_SUPPORT(1 << 10);
737 
738         private final long mValue;
739 
DeviceRoleCapabilityFlag(long value)740         private DeviceRoleCapabilityFlag(long value) {
741             mValue = value;
742         }
743 
744         @Override
getValue()745         public long getValue() {
746             return mValue;
747         }
748     }
749 
750     public enum MultiNodeCapabilityFlag implements FlagEnum {
751         HAS_UNICAST_SUPPORT(1),
752         HAS_ONE_TO_MANY_SUPPORT(1 << 1),
753         HAS_MANY_TO_MANY_SUPPORT(1 << 2);
754 
755         private final long mValue;
756 
MultiNodeCapabilityFlag(long value)757         private MultiNodeCapabilityFlag(long value) {
758             mValue = value;
759         }
760 
761         @Override
getValue()762         public long getValue() {
763             return mValue;
764         }
765     }
766 
767     public enum RangingTimeStructCapabilitiesFlag implements FlagEnum {
768         HAS_INTERVAL_BASED_SCHEDULING_SUPPORT(1),
769         HAS_BLOCK_BASED_SCHEDULING_SUPPORT(1 << 1);
770 
771         private final long mValue;
772 
RangingTimeStructCapabilitiesFlag(long value)773         private RangingTimeStructCapabilitiesFlag(long value) {
774             mValue = value;
775         }
776 
777         @Override
getValue()778         public long getValue() {
779             return mValue;
780         }
781     }
782 
783     public enum SchedulingModeCapabilitiesFlag implements FlagEnum {
784         HAS_CONTENTION_BASED_RANGING_SUPPORT(1),
785         HAS_TIME_SCHEDULED_RANGING_SUPPORT(1 << 1);
786 
787         private final long mValue;
788 
SchedulingModeCapabilitiesFlag(long value)789         private SchedulingModeCapabilitiesFlag(long value) {
790             mValue = value;
791         }
792 
793         @Override
getValue()794         public long getValue() {
795             return mValue;
796         }
797     }
798 
799     public enum CcConstraintLengthCapabilitiesFlag implements FlagEnum {
800         HAS_CONSTRAINT_LENGTH_3_SUPPORT(1),
801         HAS_CONSTRAINT_LENGTH_7_SUPPORT(1 << 1);
802 
803         private final long mValue;
804 
CcConstraintLengthCapabilitiesFlag(long value)805         private CcConstraintLengthCapabilitiesFlag(long value) {
806             mValue = value;
807         }
808 
809         @Override
getValue()810         public long getValue() {
811             return mValue;
812         }
813     }
814 
815     public enum PrfCapabilityFlag implements FlagEnum {
816         HAS_BPRF_SUPPORT(1),
817         HAS_HPRF_SUPPORT(1 << 1);
818 
819         private final long mValue;
820 
PrfCapabilityFlag(long value)821         private PrfCapabilityFlag(long value) {
822             mValue = value;
823         }
824 
825         @Override
getValue()826         public long getValue() {
827             return mValue;
828         }
829     }
830 
831     public enum RangingRoundCapabilityFlag implements FlagEnum {
832         HAS_DS_TWR_SUPPORT(1),
833         HAS_SS_TWR_SUPPORT(1 << 1),
834         // TODO(b/265047064) : Check if addition of non-deferred mode is needed.
835         HAS_OWR_UL_TDOA_SUPPORT(1 << 2),
836         HAS_OWR_DL_TDOA_SUPPORT(1 << 3),
837         HAS_OWR_AOA_SUPPORT(1 << 4),
838         HAS_ESS_TWR_SUPPORT(1 << 5),
839         HAS_ADS_TWR_SUPPORT(1 << 6);
840 
841         private final long mValue;
842 
RangingRoundCapabilityFlag(long value)843         private RangingRoundCapabilityFlag(long value) {
844             mValue = value;
845         }
846 
847         @Override
getValue()848         public long getValue() {
849             return mValue;
850         }
851     }
852 
853     public enum RframeCapabilityFlag implements FlagEnum {
854         HAS_SP0_RFRAME_SUPPORT(1),
855         HAS_SP1_RFRAME_SUPPORT(1 << 1),
856         HAS_SP3_RFRAME_SUPPORT(1 << 3);
857 
858         private final long mValue;
859 
RframeCapabilityFlag(long value)860         private RframeCapabilityFlag(long value) {
861             mValue = value;
862         }
863 
864         @Override
getValue()865         public long getValue() {
866             return mValue;
867         }
868     }
869 
870     public enum StsCapabilityFlag implements FlagEnum {
871         HAS_STATIC_STS_SUPPORT(1),
872         HAS_DYNAMIC_STS_SUPPORT(1 << 1),
873         HAS_DYNAMIC_STS_INDIVIDUAL_CONTROLEE_KEY_SUPPORT(1 << 2),
874         HAS_PROVISIONED_STS_SUPPORT(1 << 3),
875         HAS_PROVISIONED_STS_INDIVIDUAL_CONTROLEE_KEY_SUPPORT(1 << 4);
876 
877         private final long mValue;
878 
StsCapabilityFlag(long value)879         private StsCapabilityFlag(long value) {
880             mValue = value;
881         }
882 
883         @Override
getValue()884         public long getValue() {
885             return mValue;
886         }
887     }
888 
889     public enum PsduDataRateCapabilityFlag implements FlagEnum {
890         HAS_6M81_SUPPORT(1),
891         HAS_7M80_SUPPORT(1 << 1),
892         HAS_27M2_SUPPORT(1 << 2),
893         HAS_31M2_SUPPORT(1 << 3);
894 
895         private final long mValue;
896 
PsduDataRateCapabilityFlag(long value)897         private PsduDataRateCapabilityFlag(long value) {
898             mValue = value;
899         }
900 
901         @Override
getValue()902         public long getValue() {
903             return mValue;
904         }
905     }
906 
907     public enum BprfParameterSetCapabilityFlag implements FlagEnum {
908         HAS_SET_1_SUPPORT(1),
909         HAS_SET_2_SUPPORT(1 << 1),
910         HAS_SET_3_SUPPORT(1 << 2),
911         HAS_SET_4_SUPPORT(1 << 3),
912         HAS_SET_5_SUPPORT(1 << 4),
913         HAS_SET_6_SUPPORT(1 << 5);
914 
915         private final long mValue;
916 
BprfParameterSetCapabilityFlag(long value)917         private BprfParameterSetCapabilityFlag(long value) {
918             mValue = value;
919         }
920 
921         @Override
getValue()922         public long getValue() {
923             return mValue;
924         }
925     }
926 
927     public enum HprfParameterSetCapabilityFlag implements FlagEnum {
928         HAS_SET_1_SUPPORT(1L),
929         HAS_SET_2_SUPPORT(1L << 1),
930         HAS_SET_3_SUPPORT(1L << 2),
931         HAS_SET_4_SUPPORT(1L << 3),
932         HAS_SET_5_SUPPORT(1L << 4),
933         HAS_SET_6_SUPPORT(1L << 5),
934         HAS_SET_7_SUPPORT(1L << 6),
935         HAS_SET_8_SUPPORT(1L << 7),
936         HAS_SET_9_SUPPORT(1L << 8),
937         HAS_SET_10_SUPPORT(1L << 9),
938         HAS_SET_11_SUPPORT(1L << 10),
939         HAS_SET_12_SUPPORT(1L << 11),
940         HAS_SET_13_SUPPORT(1L << 12),
941         HAS_SET_14_SUPPORT(1L << 13),
942         HAS_SET_15_SUPPORT(1L << 14),
943         HAS_SET_16_SUPPORT(1L << 15),
944         HAS_SET_17_SUPPORT(1L << 16),
945         HAS_SET_18_SUPPORT(1L << 17),
946         HAS_SET_19_SUPPORT(1L << 18),
947         HAS_SET_20_SUPPORT(1L << 19),
948         HAS_SET_21_SUPPORT(1L << 20),
949         HAS_SET_22_SUPPORT(1L << 21),
950         HAS_SET_23_SUPPORT(1L << 22),
951         HAS_SET_24_SUPPORT(1L << 23),
952         HAS_SET_25_SUPPORT(1L << 24),
953         HAS_SET_26_SUPPORT(1L << 25),
954         HAS_SET_27_SUPPORT(1L << 26),
955         HAS_SET_28_SUPPORT(1L << 27),
956         HAS_SET_29_SUPPORT(1L << 28),
957         HAS_SET_30_SUPPORT(1L << 29),
958         HAS_SET_31_SUPPORT(1L << 30),
959         HAS_SET_32_SUPPORT(1L << 31),
960         HAS_SET_33_SUPPORT(1L << 32),
961         HAS_SET_34_SUPPORT(1L << 33),
962         HAS_SET_35_SUPPORT(1L << 34);
963 
964         private final long mValue;
965 
HprfParameterSetCapabilityFlag(long value)966         private HprfParameterSetCapabilityFlag(long value) {
967             mValue = value;
968         }
969 
970         @Override
getValue()971         public long getValue() {
972             return mValue;
973         }
974     }
975 
976     public enum RangeDataNtfConfigCapabilityFlag implements FlagEnum {
977         HAS_RANGE_DATA_NTF_CONFIG_DISABLE(1 << RANGE_DATA_NTF_CONFIG_DISABLE),
978         HAS_RANGE_DATA_NTF_CONFIG_ENABLE(1 << RANGE_DATA_NTF_CONFIG_ENABLE),
979         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG(
980                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG),
981         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG(
982                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG),
983         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG(
984                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG),
985         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG(
986                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG),
987         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG(
988                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG),
989         HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG(
990                 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG);
991 
992 
993 
994         private final long mValue;
995 
RangeDataNtfConfigCapabilityFlag(long value)996         private RangeDataNtfConfigCapabilityFlag(long value) {
997             mValue = value;
998         }
999 
1000         @Override
getValue()1001         public long getValue() {
1002             return mValue;
1003         }
1004     }
1005 
1006     /**
1007      * Suspend Ranging Support (FiRa 2.0)
1008      */
1009     @IntDef(
1010             value = {
1011                     SUSPEND_RANGING_DISABLED,
1012                     SUSPEND_RANGING_ENABLED,
1013             })
1014     public @interface SuspendRanging {}
1015 
1016     public static final int SUSPEND_RANGING_DISABLED = 0;
1017     public static final int SUSPEND_RANGING_ENABLED = 1;
1018 
1019     /**
1020      * Session Key length supported (FiRa 2.0)
1021      */
1022     @IntDef(
1023             value = {
1024                     KEY_LENGTH_256_BITS_NOT_SUPPORTED,
1025                     KEY_LENGTH_256_BITS_SUPPORTED,
1026             })
1027     public @interface SessionKeyLength {}
1028 
1029     public static final int KEY_LENGTH_256_BITS_NOT_SUPPORTED = 0;
1030     public static final int KEY_LENGTH_256_BITS_SUPPORTED = 1;
1031 
1032     /**
1033      * Session Type (for SESSION_INIT_CMD)
1034      */
1035     @IntDef(
1036             value = {
1037                     SESSION_TYPE_RANGING,
1038                     SESSION_TYPE_RANGING_AND_IN_BAND_DATA,
1039                     SESSION_TYPE_DATA_TRANSFER,
1040                     SESSION_TYPE_RANGING_ONLY_PHASE,
1041                     SESSION_TYPE_IN_BAND_DATA_PHASE,
1042                     SESSION_TYPE_RANGING_WITH_DATA_PHASE,
1043                     SESSION_TYPE_DEVICE_TEST_MODE,
1044             })
1045     public @interface SessionType{}
1046 
1047     public static final int SESSION_TYPE_RANGING = 0;
1048     public static final int SESSION_TYPE_RANGING_AND_IN_BAND_DATA = 1;
1049     public static final int SESSION_TYPE_DATA_TRANSFER = 2;
1050     public static final int SESSION_TYPE_RANGING_ONLY_PHASE = 3;
1051     public static final int SESSION_TYPE_IN_BAND_DATA_PHASE = 4;
1052     public static final int SESSION_TYPE_RANGING_WITH_DATA_PHASE = 5;
1053     public static final int SESSION_TYPE_DEVICE_TEST_MODE = 0xD0;
1054 
1055     /** Which type of filter to use for filtering AoA/distance readings. */
1056     @IntDef(
1057             value = {
1058                     FILTER_TYPE_NONE,
1059                     FILTER_TYPE_DEFAULT,
1060                     FILTER_TYPE_APPLICATION,
1061             })
1062     public @interface FilterType {}
1063     public static final int FILTER_TYPE_NONE = 0;
1064     public static final int FILTER_TYPE_DEFAULT = 1;
1065     public static final int FILTER_TYPE_APPLICATION = 2;
1066 
1067     // Default value (Unlimited)
1068     public static final int MAX_NUMBER_OF_MEASUREMENTS_DEFAULT = 0;
1069 
1070     // Helper functions
longToUwbAddress(long value, int length)1071     protected static UwbAddress longToUwbAddress(long value, int length) {
1072         ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
1073         buffer.putLong(value);
1074         return UwbAddress.fromBytes(Arrays.copyOf(buffer.array(), length));
1075     }
1076 
uwbAddressToLong(UwbAddress address)1077     protected static long uwbAddressToLong(UwbAddress address) {
1078         ByteBuffer buffer = ByteBuffer.wrap(Arrays.copyOf(address.toBytes(), Long.BYTES));
1079         return buffer.getLong();
1080     }
1081 }
1082