blob: 3c572c1b2d5e6c4ef1fb8f25e9f52443f7a798f6 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.uwb.support.fira;
import android.os.Build.VERSION_CODES;
import android.os.PersistableBundle;
import android.uwb.UwbAddress;
import androidx.annotation.IntDef;
import androidx.annotation.RequiresApi;
import com.google.uwb.support.base.FlagEnum;
import com.google.uwb.support.base.Params;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.ByteBuffer;
import java.util.Arrays;
/** Defines parameters for FiRa operation */
@RequiresApi(VERSION_CODES.LOLLIPOP)
public abstract class FiraParams extends Params {
public static final String PROTOCOL_NAME = "fira";
@Override
public final String getProtocolName() {
return PROTOCOL_NAME;
}
public static boolean isCorrectProtocol(PersistableBundle bundle) {
return isProtocol(bundle, PROTOCOL_NAME);
}
public static final FiraProtocolVersion PROTOCOL_VERSION_1_1 = new FiraProtocolVersion(1, 1);
/** Service ID for FiRa profile */
@IntDef(
value = {
PACS_PROFILE_SERVICE_ID,
})
public @interface ServiceID {}
public static final int PACS_PROFILE_SERVICE_ID = 1;
/** UWB Channel selections */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
value = {
UWB_CHANNEL_5,
UWB_CHANNEL_6,
UWB_CHANNEL_8,
UWB_CHANNEL_9,
UWB_CHANNEL_10,
UWB_CHANNEL_12,
UWB_CHANNEL_13,
UWB_CHANNEL_14,
})
public @interface UwbChannel {}
public static final int UWB_CHANNEL_5 = 5;
public static final int UWB_CHANNEL_6 = 6;
public static final int UWB_CHANNEL_8 = 8;
public static final int UWB_CHANNEL_9 = 9;
public static final int UWB_CHANNEL_10 = 10;
public static final int UWB_CHANNEL_12 = 12;
public static final int UWB_CHANNEL_13 = 13;
public static final int UWB_CHANNEL_14 = 14;
/** UWB Channel selections */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
value = {
UWB_PREAMBLE_CODE_INDEX_9,
UWB_PREAMBLE_CODE_INDEX_10,
UWB_PREAMBLE_CODE_INDEX_11,
UWB_PREAMBLE_CODE_INDEX_12,
UWB_PREAMBLE_CODE_INDEX_25,
UWB_PREAMBLE_CODE_INDEX_26,
UWB_PREAMBLE_CODE_INDEX_27,
UWB_PREAMBLE_CODE_INDEX_28,
UWB_PREAMBLE_CODE_INDEX_29,
UWB_PREAMBLE_CODE_INDEX_30,
UWB_PREAMBLE_CODE_INDEX_31,
UWB_PREAMBLE_CODE_INDEX_32,
})
public @interface UwbPreambleCodeIndex {}
public static final int UWB_PREAMBLE_CODE_INDEX_9 = 9;
public static final int UWB_PREAMBLE_CODE_INDEX_10 = 10;
public static final int UWB_PREAMBLE_CODE_INDEX_11 = 11;
public static final int UWB_PREAMBLE_CODE_INDEX_12 = 12;
public static final int UWB_PREAMBLE_CODE_INDEX_25 = 25;
public static final int UWB_PREAMBLE_CODE_INDEX_26 = 26;
public static final int UWB_PREAMBLE_CODE_INDEX_27 = 27;
public static final int UWB_PREAMBLE_CODE_INDEX_28 = 28;
public static final int UWB_PREAMBLE_CODE_INDEX_29 = 29;
public static final int UWB_PREAMBLE_CODE_INDEX_30 = 30;
public static final int UWB_PREAMBLE_CODE_INDEX_31 = 31;
public static final int UWB_PREAMBLE_CODE_INDEX_32 = 32;
/** Ranging frame type */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
value = {
RFRAME_CONFIG_SP0,
RFRAME_CONFIG_SP1,
RFRAME_CONFIG_SP3,
})
public @interface RframeConfig {}
/** Ranging frame without STS */
public static final int RFRAME_CONFIG_SP0 = 0;
/** Ranging frame with STS following SFD */
public static final int RFRAME_CONFIG_SP1 = 1;
/** Ranging frame with STS following SFD, no data */
public static final int RFRAME_CONFIG_SP3 = 3;
/** Device type defined in FiRa */
@IntDef(
value = {
RANGING_DEVICE_TYPE_CONTROLEE,
RANGING_DEVICE_TYPE_CONTROLLER,
})
public @interface RangingDeviceType {}
public static final int RANGING_DEVICE_TYPE_CONTROLEE = 0;
public static final int RANGING_DEVICE_TYPE_CONTROLLER = 1;
/** Device role defined in FiRa */
@IntDef(
value = {
RANGING_DEVICE_ROLE_RESPONDER,
RANGING_DEVICE_ROLE_INITIATOR,
})
public @interface RangingDeviceRole {}
public static final int RANGING_DEVICE_ROLE_RESPONDER = 0;
public static final int RANGING_DEVICE_ROLE_INITIATOR = 1;
/** Ranging Round Usage */
@IntDef(
value = {
RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE,
RANGING_ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE,
RANGING_ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE,
})
public @interface RangingRoundUsage {}
/** Single-sided two-way ranging, deferred */
public static final int RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE = 1;
/** Double-sided two-way ranging, deferred */
public static final int RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE = 2;
/** Single-sided two-way ranging, non-deferred */
public static final int RANGING_ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE = 3;
/** Double-sided two-way ranging, non-deferred */
public static final int RANGING_ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE = 4;
/** Multi-Node mode */
@IntDef(
value = {
MULTI_NODE_MODE_UNICAST,
MULTI_NODE_MODE_ONE_TO_MANY,
MULTI_NODE_MODE_MANY_TO_MANY,
})
public @interface MultiNodeMode {}
public static final int MULTI_NODE_MODE_UNICAST = 0;
public static final int MULTI_NODE_MODE_ONE_TO_MANY = 1;
/** Unuported in Fira 1.1 */
public static final int MULTI_NODE_MODE_MANY_TO_MANY = 2;
/** Measurement Report */
@IntDef(
value = {
MEASUREMENT_REPORT_TYPE_INITIATOR_TO_RESPONDER,
MEASUREMENT_REPORT_TYPE_RESPONDER_TO_INITIATOR,
})
public @interface MeasurementReportType {}
public static final int MEASUREMENT_REPORT_TYPE_INITIATOR_TO_RESPONDER = 0;
public static final int MEASUREMENT_REPORT_TYPE_RESPONDER_TO_INITIATOR = 1;
/** PRF Mode */
@IntDef(
value = {
PRF_MODE_BPRF,
PRF_MODE_HPRF,
})
public @interface PrfMode {}
public static final int PRF_MODE_BPRF = 0;
public static final int PRF_MODE_HPRF = 1;
/** Preamble duration: BPRF always uses 64 symbols */
@IntDef(
value = {
PREAMBLE_DURATION_T32_SYMBOLS,
PREAMBLE_DURATION_T64_SYMBOLS,
})
public @interface PreambleDuration {}
/** HPRF only */
public static final int PREAMBLE_DURATION_T32_SYMBOLS = 0;
public static final int PREAMBLE_DURATION_T64_SYMBOLS = 1;
/** PSDU data Rate */
@IntDef(
value = {
PSDU_DATA_RATE_6M81,
PSDU_DATA_RATE_7M80,
PSDU_DATA_RATE_27M2,
PSDU_DATA_RATE_31M2,
})
public @interface PsduDataRate {}
/** 6.81 Mbps, default BPRF rate */
public static final int PSDU_DATA_RATE_6M81 = 0;
/** 7.80 Mbps, BPRF rate with convolutional encoding K = 7 */
public static final int PSDU_DATA_RATE_7M80 = 1;
/** 27.2 Mbps, default HPRF rate */
public static final int PSDU_DATA_RATE_27M2 = 2;
/** 31.2 Mbps, HPRF rate with convolutional encoding K = 7 */
public static final int PSDU_DATA_RATE_31M2 = 3;
/** BPRF PHY Header data rate */
@IntDef(
value = {
BPRF_PHR_DATA_RATE_850K,
BPRF_PHR_DATA_RATE_6M81,
})
public @interface BprfPhrDataRate {}
/** 850 kbps */
public static final int BPRF_PHR_DATA_RATE_850K = 0;
/** 6.81 Mbps */
public static final int BPRF_PHR_DATA_RATE_6M81 = 1;
/** MAC FCS type */
@IntDef(
value = {
MAC_FCS_TYPE_CRC_16,
MAC_FCS_TYPE_CRC_32,
})
public @interface MacFcsType {}
public static final int MAC_FCS_TYPE_CRC_16 = 0;
/** HPRF only */
public static final int MAC_FCS_TYPE_CRC_32 = 1;
/** STS Config */
@IntDef(
value = {
STS_CONFIG_STATIC,
STS_CONFIG_DYNAMIC,
STS_CONFIG_DYNAMIC_FOR_CONTROLEE_INDIVIDUAL_KEY,
STS_CONFIG_PROVISIONED,
STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY,
})
public @interface StsConfig {}
public static final int STS_CONFIG_STATIC = 0;
public static final int STS_CONFIG_DYNAMIC = 1;
public static final int STS_CONFIG_DYNAMIC_FOR_CONTROLEE_INDIVIDUAL_KEY = 2;
public static final int STS_CONFIG_PROVISIONED = 3;
public static final int STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY = 4;
/** AoA request */
@IntDef(
value = {
AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT,
AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS,
AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_AZIMUTH_ONLY,
AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_ELEVATION_ONLY,
AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED,
})
public @interface AoaResultRequestMode {}
public static final int AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT = 0;
public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS = 1;
public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_AZIMUTH_ONLY = 2;
public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_ELEVATION_ONLY = 3;
public static final int AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED = 0xF0;
/** STS Segment count */
@IntDef(
value = {
STS_SEGMENT_COUNT_VALUE_0,
STS_SEGMENT_COUNT_VALUE_1,
STS_SEGMENT_COUNT_VALUE_2,
})
public @interface StsSegmentCountValue {}
public static final int STS_SEGMENT_COUNT_VALUE_0 = 0;
public static final int STS_SEGMENT_COUNT_VALUE_1 = 1;
public static final int STS_SEGMENT_COUNT_VALUE_2 = 2;
/** SFD ID */
@IntDef(
value = {
SFD_ID_VALUE_1,
SFD_ID_VALUE_2,
SFD_ID_VALUE_3,
SFD_ID_VALUE_4,
})
public @interface SfdIdValue {}
public static final int SFD_ID_VALUE_1 = 1;
public static final int SFD_ID_VALUE_2 = 2;
public static final int SFD_ID_VALUE_3 = 3;
public static final int SFD_ID_VALUE_4 = 4;
/**
* Hopping mode (Since FiRa supports vendor-specific values. This annotation is not enforced.)
*/
@IntDef(
value = {
HOPPING_MODE_DISABLE,
HOPPING_MODE_FIRA_HOPPING_ENABLE,
})
public @interface HoppingMode {}
public static final int HOPPING_MODE_DISABLE = 0;
public static final int HOPPING_MODE_FIRA_HOPPING_ENABLE = 1;
/** STS Length */
@IntDef(
value = {
STS_LENGTH_32_SYMBOLS,
STS_LENGTH_64_SYMBOLS,
STS_LENGTH_128_SYMBOLS,
})
public @interface StsLength {}
public static final int STS_LENGTH_32_SYMBOLS = 0;
public static final int STS_LENGTH_64_SYMBOLS = 1;
public static final int STS_LENGTH_128_SYMBOLS = 2;
/** Range Data Notification Config */
@IntDef(
value = {
RANGE_DATA_NTF_CONFIG_DISABLE,
RANGE_DATA_NTF_CONFIG_ENABLE,
RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG,
RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG,
RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG,
RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG,
RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG,
RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG,
})
public @interface RangeDataNtfConfig {}
public static final int RANGE_DATA_NTF_CONFIG_DISABLE = 0;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE = 1;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG = 2;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG = 3;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG = 4;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG = 5;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG = 6;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG = 7;
/** MAC address mode: short (2 bytes) or extended (8 bytes) */
@IntDef(
value = {
MAC_ADDRESS_MODE_2_BYTES,
MAC_ADDRESS_MODE_8_BYTES_2_BYTES_HEADER,
MAC_ADDRESS_MODE_8_BYTES,
})
public @interface MacAddressMode {}
public static final int MAC_ADDRESS_MODE_2_BYTES = 0;
/** Not supported by UCI 1.0 */
public static final int MAC_ADDRESS_MODE_8_BYTES_2_BYTES_HEADER = 1;
public static final int MAC_ADDRESS_MODE_8_BYTES = 2;
/** AoA type is not defined in UCI. This decides what AoA result we want to get */
@IntDef(
value = {
AOA_TYPE_AZIMUTH,
AOA_TYPE_ELEVATION,
AOA_TYPE_AZIMUTH_AND_ELEVATION,
})
public @interface AoaType {}
public static final int AOA_TYPE_AZIMUTH = 0;
public static final int AOA_TYPE_ELEVATION = 1;
/**
* How to get both angles is hardware dependent. Some hardware can get both angle in one round,
* some needs two rounds.
*/
public static final int AOA_TYPE_AZIMUTH_AND_ELEVATION = 2;
/** Status codes defined in UCI */
@IntDef(
value = {
STATUS_CODE_OK,
STATUS_CODE_REJECTED,
STATUS_CODE_FAILED,
STATUS_CODE_SYNTAX_ERROR,
STATUS_CODE_INVALID_PARAM,
STATUS_CODE_INVALID_RANGE,
STATUS_CODE_INVALID_MESSAGE_SIZE,
STATUS_CODE_UNKNOWN_GID,
STATUS_CODE_UNKNOWN_OID,
STATUS_CODE_READ_ONLY,
STATUS_CODE_COMMAND_RETRY,
STATUS_CODE_ERROR_SESSION_NOT_EXIST,
STATUS_CODE_ERROR_SESSION_DUPLICATE,
STATUS_CODE_ERROR_SESSION_ACTIVE,
STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED,
STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED,
STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING,
STATUS_CODE_ERROR_MULTICAST_LIST_FULL,
STATUS_CODE_ERROR_ADDRESS_NOT_FOUND,
STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT,
STATUS_CODE_RANGING_TX_FAILED,
STATUS_CODE_RANGING_RX_TIMEOUT,
STATUS_CODE_RANGING_RX_PHY_DEC_FAILED,
STATUS_CODE_RANGING_RX_PHY_TOA_FAILED,
STATUS_CODE_RANGING_RX_PHY_STS_FAILED,
STATUS_CODE_RANGING_RX_MAC_DEC_FAILED,
STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED,
STATUS_CODE_RANGING_RX_MAC_IE_MISSING,
})
public @interface StatusCode {}
public static final int STATUS_CODE_OK = 0x00;
public static final int STATUS_CODE_REJECTED = 0x01;
public static final int STATUS_CODE_FAILED = 0x02;
public static final int STATUS_CODE_SYNTAX_ERROR = 0x03;
public static final int STATUS_CODE_INVALID_PARAM = 0x04;
public static final int STATUS_CODE_INVALID_RANGE = 0x05;
public static final int STATUS_CODE_INVALID_MESSAGE_SIZE = 0x06;
public static final int STATUS_CODE_UNKNOWN_GID = 0x07;
public static final int STATUS_CODE_UNKNOWN_OID = 0x08;
public static final int STATUS_CODE_READ_ONLY = 0x09;
public static final int STATUS_CODE_COMMAND_RETRY = 0x0A;
public static final int STATUS_CODE_ERROR_SESSION_NOT_EXIST = 0x11;
public static final int STATUS_CODE_ERROR_SESSION_DUPLICATE = 0x12;
public static final int STATUS_CODE_ERROR_SESSION_ACTIVE = 0x13;
public static final int STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED = 0x14;
public static final int STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED = 0x15;
public static final int STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING = 0x16;
public static final int STATUS_CODE_ERROR_MULTICAST_LIST_FULL = 0x17;
public static final int STATUS_CODE_ERROR_ADDRESS_NOT_FOUND = 0x18;
public static final int STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT = 0x19;
public static final int STATUS_CODE_RANGING_TX_FAILED = 0x20;
public static final int STATUS_CODE_RANGING_RX_TIMEOUT = 0x21;
public static final int STATUS_CODE_RANGING_RX_PHY_DEC_FAILED = 0x22;
public static final int STATUS_CODE_RANGING_RX_PHY_TOA_FAILED = 0x23;
public static final int STATUS_CODE_RANGING_RX_PHY_STS_FAILED = 0x24;
public static final int STATUS_CODE_RANGING_RX_MAC_DEC_FAILED = 0x25;
public static final int STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED = 0x26;
public static final int STATUS_CODE_RANGING_RX_MAC_IE_MISSING = 0x27;
/** State change reason codes defined in UCI table-15 */
@IntDef(
value = {
STATE_CHANGE_REASON_CODE_BY_COMMANDS,
STATE_CHANGE_REASON_CODE_MAX_RR_RETRY_REACHED,
STATE_CHANGE_REASON_CODE_ERROR_SLOT_LENGTH_NOT_SUPPORTED,
STATE_CHANGE_REASON_CODE_ERROR_INSUFFICIENT_SLOTS_PER_RR,
STATE_CHANGE_REASON_CODE_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED,
STATE_CHANGE_REASON_CODE_ERROR_INVALID_RANGING_INTERVAL,
STATE_CHANGE_REASON_CODE_ERROR_INVALID_STS_CONFIG,
STATE_CHANGE_REASON_CODE_ERROR_INVALID_RFRAME_CONFIG,
})
public @interface StateChangeReasonCode {}
public static final int STATE_CHANGE_REASON_CODE_BY_COMMANDS = 0;
public static final int STATE_CHANGE_REASON_CODE_MAX_RR_RETRY_REACHED = 1;
public static final int STATE_CHANGE_REASON_CODE_ERROR_SLOT_LENGTH_NOT_SUPPORTED = 0x20;
public static final int STATE_CHANGE_REASON_CODE_ERROR_INSUFFICIENT_SLOTS_PER_RR = 0x21;
public static final int STATE_CHANGE_REASON_CODE_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED = 0x22;
public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_RANGING_INTERVAL = 0x23;
public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_STS_CONFIG = 0x24;
public static final int STATE_CHANGE_REASON_CODE_ERROR_INVALID_RFRAME_CONFIG = 0x25;
/** Multicast controlee add/delete actions defined in UCI */
@IntDef(
value = {
MULTICAST_LIST_UPDATE_ACTION_ADD,
MULTICAST_LIST_UPDATE_ACTION_DELETE,
})
public @interface MulticastListUpdateAction {}
public static final int MULTICAST_LIST_UPDATE_ACTION_ADD = 0;
public static final int MULTICAST_LIST_UPDATE_ACTION_DELETE = 1;
@IntDef(
value = {
MULTICAST_LIST_UPDATE_STATUS_OK,
MULTICAST_LIST_UPDATE_STATUS_ERROR_MULTICAST_LIST_FULL,
MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL,
MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND,
})
public @interface MulticastListUpdateStatus {}
public static final int MULTICAST_LIST_UPDATE_STATUS_OK = 0;
public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_MULTICAST_LIST_FULL = 1;
public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL = 2;
public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND = 3;
/** Capability related definitions starts from here */
@IntDef(
value = {
DEVICE_CLASS_1,
DEVICE_CLASS_2,
DEVICE_CLASS_3,
})
public @interface DeviceClass {}
public static final int DEVICE_CLASS_1 = 1; // Controller & controlee
public static final int DEVICE_CLASS_2 = 2; // Controller
public static final int DEVICE_CLASS_3 = 3; // Controlee
public static final int RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT = 0;
public static final int RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT = 20000;
public static final double RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT = -Math.PI;
public static final double RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT = Math.PI;
public static final double RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT = -Math.PI;
public static final double RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT = Math.PI;
public enum AoaCapabilityFlag implements FlagEnum {
HAS_AZIMUTH_SUPPORT(1),
HAS_ELEVATION_SUPPORT(1 << 1),
HAS_FOM_SUPPORT(1 << 2),
HAS_FULL_AZIMUTH_SUPPORT(1 << 3),
HAS_INTERLEAVING_SUPPORT(1 << 4);
private final long mValue;
private AoaCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum DeviceRoleCapabilityFlag implements FlagEnum {
HAS_CONTROLEE_INITIATOR_SUPPORT(1),
HAS_CONTROLEE_RESPONDER_SUPPORT(1 << 1),
HAS_CONTROLLER_INITIATOR_SUPPORT(1 << 2),
HAS_CONTROLLER_RESPONDER_SUPPORT(1 << 3);
private final long mValue;
private DeviceRoleCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum MultiNodeCapabilityFlag implements FlagEnum {
HAS_UNICAST_SUPPORT(1),
HAS_ONE_TO_MANY_SUPPORT(1 << 1),
HAS_MANY_TO_MANY_SUPPORT(1 << 2);
private final long mValue;
private MultiNodeCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum PrfCapabilityFlag implements FlagEnum {
HAS_BPRF_SUPPORT(1),
HAS_HPRF_SUPPORT(1 << 1);
private final long mValue;
private PrfCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum RangingRoundCapabilityFlag implements FlagEnum {
HAS_DS_TWR_SUPPORT(1),
HAS_SS_TWR_SUPPORT(1 << 1);
private final long mValue;
private RangingRoundCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum RframeCapabilityFlag implements FlagEnum {
HAS_SP0_RFRAME_SUPPORT(1),
HAS_SP1_RFRAME_SUPPORT(1 << 1),
HAS_SP3_RFRAME_SUPPORT(1 << 3);
private final long mValue;
private RframeCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum StsCapabilityFlag implements FlagEnum {
HAS_STATIC_STS_SUPPORT(1),
HAS_DYNAMIC_STS_SUPPORT(1 << 1),
HAS_DYNAMIC_STS_INDIVIDUAL_CONTROLEE_KEY_SUPPORT(1 << 2),
HAS_PROVISIONED_STS_SUPPORT(1 << 3),
HAS_PROVISIONED_STS_INDIVIDUAL_CONTROLEE_KEY_SUPPORT(1 << 4);
private final long mValue;
private StsCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum PsduDataRateCapabilityFlag implements FlagEnum {
HAS_6M81_SUPPORT(1),
HAS_7M80_SUPPORT(1 << 1),
HAS_27M2_SUPPORT(1 << 2),
HAS_31M2_SUPPORT(1 << 3);
private final long mValue;
private PsduDataRateCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum BprfParameterSetCapabilityFlag implements FlagEnum {
HAS_SET_1_SUPPORT(1),
HAS_SET_2_SUPPORT(1 << 1),
HAS_SET_3_SUPPORT(1 << 2),
HAS_SET_4_SUPPORT(1 << 3),
HAS_SET_5_SUPPORT(1 << 4),
HAS_SET_6_SUPPORT(1 << 5);
private final long mValue;
private BprfParameterSetCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum HprfParameterSetCapabilityFlag implements FlagEnum {
HAS_SET_1_SUPPORT(1L),
HAS_SET_2_SUPPORT(1L << 1),
HAS_SET_3_SUPPORT(1L << 2),
HAS_SET_4_SUPPORT(1L << 3),
HAS_SET_5_SUPPORT(1L << 4),
HAS_SET_6_SUPPORT(1L << 5),
HAS_SET_7_SUPPORT(1L << 6),
HAS_SET_8_SUPPORT(1L << 7),
HAS_SET_9_SUPPORT(1L << 8),
HAS_SET_10_SUPPORT(1L << 9),
HAS_SET_11_SUPPORT(1L << 10),
HAS_SET_12_SUPPORT(1L << 11),
HAS_SET_13_SUPPORT(1L << 12),
HAS_SET_14_SUPPORT(1L << 13),
HAS_SET_15_SUPPORT(1L << 14),
HAS_SET_16_SUPPORT(1L << 15),
HAS_SET_17_SUPPORT(1L << 16),
HAS_SET_18_SUPPORT(1L << 17),
HAS_SET_19_SUPPORT(1L << 18),
HAS_SET_20_SUPPORT(1L << 19),
HAS_SET_21_SUPPORT(1L << 20),
HAS_SET_22_SUPPORT(1L << 21),
HAS_SET_23_SUPPORT(1L << 22),
HAS_SET_24_SUPPORT(1L << 23),
HAS_SET_25_SUPPORT(1L << 24),
HAS_SET_26_SUPPORT(1L << 25),
HAS_SET_27_SUPPORT(1L << 26),
HAS_SET_28_SUPPORT(1L << 27),
HAS_SET_29_SUPPORT(1L << 28),
HAS_SET_30_SUPPORT(1L << 29),
HAS_SET_31_SUPPORT(1L << 30),
HAS_SET_32_SUPPORT(1L << 31),
HAS_SET_33_SUPPORT(1L << 32),
HAS_SET_34_SUPPORT(1L << 33),
HAS_SET_35_SUPPORT(1L << 34);
private final long mValue;
private HprfParameterSetCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
public enum RangeDataNtfConfigCapabilityFlag implements FlagEnum {
HAS_RANGE_DATA_NTF_CONFIG_DISABLE(1 << RANGE_DATA_NTF_CONFIG_DISABLE),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE(1 << RANGE_DATA_NTF_CONFIG_ENABLE),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG(
1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG);
private final long mValue;
private RangeDataNtfConfigCapabilityFlag(long value) {
mValue = value;
}
@Override
public long getValue() {
return mValue;
}
}
// Helper functions
protected static UwbAddress longToUwbAddress(long value, int length) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(value);
return UwbAddress.fromBytes(Arrays.copyOf(buffer.array(), length));
}
protected static long uwbAddressToLong(UwbAddress address) {
ByteBuffer buffer = ByteBuffer.wrap(Arrays.copyOf(address.toBytes(), Long.BYTES));
return buffer.getLong();
}
}