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