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