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 package com.android.server.uwb.data; 17 18 import static android.hardware.uwb.fira_android.UwbVendorStatusCodes.STATUS_ERROR_CCC_LIFECYCLE; 19 import static android.hardware.uwb.fira_android.UwbVendorStatusCodes.STATUS_ERROR_CCC_SE_BUSY; 20 import static android.hardware.uwb.fira_android.UwbVendorStatusCodes.STATUS_REGULATION_UWB_OFF; 21 22 import android.hardware.uwb.fira_android.UwbVendorReasonCodes; 23 24 import com.google.uwb.support.aliro.AliroParams; 25 import com.google.uwb.support.ccc.CccParams; 26 import com.google.uwb.support.fira.FiraParams; 27 28 public class UwbUciConstants { 29 /** 30 * Table 10:Device State Values 31 */ 32 public static final byte DEVICE_STATE_OFF = 0x00; //NOT defined in the UCI spec 33 public static final byte DEVICE_STATE_READY = 0x01; 34 public static final byte DEVICE_STATE_ACTIVE = 0x02; 35 /** 36 * This is NOT defined in the UCI spec. It exists so that OEMs can trace initialization 37 * failures from IUwbOemExtensionCallback#onDeviceStatusNotificationReceived. 38 */ 39 public static final byte DEVICE_STATE_INIT_ERROR = (byte) 0xFE; 40 public static final byte DEVICE_STATE_ERROR = (byte) 0xFF; 41 42 public static final byte UWBS_RESET = 0x00; 43 44 /** 45 * Table 13: Control Messages to Initialize UWB session 46 */ 47 public static final byte SESSION_TYPE_RANGING = FiraParams.SESSION_TYPE_RANGING; 48 public static final byte SESSION_TYPE_DATA_TRANSFER = 49 FiraParams.SESSION_TYPE_RANGING_AND_IN_BAND_DATA; 50 public static final byte SESSION_TYPE_ALIRO = (byte) AliroParams.SESSION_TYPE_ALIRO; 51 public static final byte SESSION_TYPE_CCC = (byte) CccParams.SESSION_TYPE_CCC; 52 public static final byte SESSION_TYPE_HUS_PRIMARY_SESSION = 53 (byte) FiraParams.SESSION_TYPE_HUS_PRIMARY_SESSION; 54 public static final byte SESSION_TYPE_DEVICE_TEST_MODE = 55 (byte) FiraParams.SESSION_TYPE_DEVICE_TEST_MODE; 56 57 /** 58 * Table 14: Control Messages to De-Initialize UWB session - SESSION_STATUS_NTF 59 * RangingSession.State 60 */ 61 public static final int UWB_SESSION_STATE_INIT = 0x00; 62 public static final int UWB_SESSION_STATE_DEINIT = 0x01; 63 public static final int UWB_SESSION_STATE_ACTIVE = 0x02; 64 public static final int UWB_SESSION_STATE_IDLE = 0x03; 65 public static final int UWB_SESSION_STATE_ERROR = 0xFF; 66 67 /** 68 * Table 16: state change with reason codes 69 */ 70 public static final int REASON_STATE_CHANGE_WITH_SESSION_MANAGEMENT_COMMANDS = 0x00; 71 /* Below reason codes shall be reported with SESSION_STATE_IDLE state only. */ 72 public static final int REASON_MAX_RANGING_ROUND_RETRY_COUNT_REACHED = 0x01; 73 public static final int REASON_MAX_NUMBER_OF_MEASUREMENTS_REACHED = 0x02; 74 public static final int REASON_SESSION_SUSPENDED_DUE_TO_INBAND_SIGNAL = 0x03; 75 public static final int REASON_SESSION_RESUMED_DUE_TO_INBAND_SIGNAL = 0x04; 76 public static final int REASON_SESSION_STOPPED_DUE_TO_INBAND_SIGNAL = 0X05; 77 public static final int REASON_ERROR_INVALID_UL_TDOA_RANDOM_WINDOW = 0x1D; 78 public static final int REASON_ERROR_SLOT_LENGTH_NOT_SUPPORTED = 0x20; 79 public static final int REASON_ERROR_INSUFFICIENT_SLOTS_PER_RR = 0x21; 80 public static final int REASON_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED = 0x22; 81 public static final int REASON_ERROR_INVALID_RANGING_INTERVAL = 0x23; 82 public static final int REASON_ERROR_INVALID_STS_CONFIG = 0x24; 83 public static final int REASON_ERROR_INVALID_RFRAME_CONFIG = 0x25; 84 public static final int REASON_ERROR_HUS_NOT_ENOUGH_SLOTS = 0x26; 85 public static final int REASON_ERROR_HUS_CFP_PHASE_TOO_SHORT = 0x27; 86 public static final int REASON_ERROR_HUS_CAP_PHASE_TOO_SHORT = 0x28; 87 public static final int REASON_ERROR_HUS_OTHERS = 0x29; 88 public static final int REASON_ERROR_SESSION_KEY_NOT_FOUND = 0x2A; 89 public static final int REASON_ERROR_SUB_SESSION_KEY_NOT_FOUND = 0x2B; 90 public static final int REASON_SESSION_STOPPED_DUE_TO_MAX_STS_INDEX_VALUE = 0xA2; 91 /* Vendor Specific reason codes */ 92 public static final int REASON_REGULATION_UWB_OFF = 93 UwbVendorReasonCodes.REASON_REGULATION_UWB_OFF; 94 95 /** 96 * Table 27: Multicast list update status codes 97 */ 98 /* Multicast update status codes */ 99 public static final int MULTICAST_LIST_UPDATE_STATUS_OK = 100 FiraParams.MULTICAST_LIST_UPDATE_STATUS_OK; 101 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_FULL = 102 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_MULTICAST_LIST_FULL; 103 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL = 104 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_KEY_FETCH_FAIL; 105 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND = 106 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_ID_NOT_FOUND; 107 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_KEY_NOT_FOUND = 108 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_KEY_NOT_FOUND; 109 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_KEY_NOT_APPLICABLE = 110 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_SUB_SESSION_KEY_NOT_APPLICABLE; 111 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_SESSION_KEY_NOT_FOUND = 112 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_SESSION_KEY_NOT_FOUND; 113 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_ADDRESS_NOT_FOUND = 114 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_ADDRESS_NOT_FOUND; 115 public static final int MULTICAST_LIST_UPDATE_STATUS_ERROR_ADDRESS_ALREADY_PRESENT = 116 FiraParams.MULTICAST_LIST_UPDATE_STATUS_ERROR_ADDRESS_ALREADY_PRESENT; 117 /** 118 * Table 29:APP Configuration Parameters IDs 119 */ 120 public static final int DEVICE_TYPE_CONTROLEE = FiraParams.RANGING_DEVICE_TYPE_CONTROLEE; 121 public static final int DEVICE_TYPE_CONTROLLER = FiraParams.RANGING_DEVICE_TYPE_CONTROLLER; 122 123 public static final int CCC_DEVICE_TYPE_CONTROLLER = CccParams.CCC_DEVICE_TYPE_CONTROLLER; 124 125 public static final int ROUND_USAGE_SS_TWR_DEFERRED_MODE = 126 FiraParams.RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE; 127 public static final int ROUND_USAGE_DS_TWR_DEFERRED_MODE = 128 FiraParams.RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE; 129 public static final int ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE = 130 FiraParams.RANGING_ROUND_USAGE_SS_TWR_NON_DEFERRED_MODE; 131 public static final int ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE = 132 FiraParams.RANGING_ROUND_USAGE_DS_TWR_NON_DEFERRED_MODE; 133 public static final int ROUND_USAGE_OWR_AOA_MEASUREMENT = 134 FiraParams.RANGING_ROUND_USAGE_OWR_AOA_MEASUREMENT; 135 136 public static final int MULTI_NODE_MODE_UNICAST = FiraParams.MULTI_NODE_MODE_UNICAST; 137 public static final int MULTI_NODE_MODE_ONE_TO_MANY = FiraParams.MULTI_NODE_MODE_ONE_TO_MANY; 138 public static final int MULTI_NODE_MODE_MANY_TO_MANY = FiraParams.MULTI_NODE_MODE_MANY_TO_MANY; 139 140 public static final int INTERVAL_BASED_SCHEDULING = FiraParams.INTERVAL_BASED_SCHEDULING; 141 public static final int BLOCK_BASED_SCHEDULING = FiraParams.BLOCK_BASED_SCHEDULING; 142 143 public static final int CONTENTION_BASED_RANGING = FiraParams.CONTENTION_BASED_RANGING; 144 public static final int TIME_SCHEDULED_RANGING = FiraParams.TIME_SCHEDULED_RANGING; 145 public static final int HYBRID_SCHEDULED_RANGING = FiraParams.HYBRID_SCHEDULED_RANGING; 146 147 public static final int CONSTRAINT_LENGTH_3 = FiraParams.CONSTRAINT_LENGTH_3; 148 public static final int CONSTRAINT_LENGTH_7 = FiraParams.CONSTRAINT_LENGTH_7; 149 150 public static final int CHANNEL_5 = FiraParams.UWB_CHANNEL_5; 151 public static final int CHANNEL_6 = FiraParams.UWB_CHANNEL_6; 152 public static final int CHANNEL_8 = FiraParams.UWB_CHANNEL_8; 153 public static final int CHANNEL_9 = FiraParams.UWB_CHANNEL_9; 154 public static final int CHANNEL_10 = FiraParams.UWB_CHANNEL_10; 155 public static final int CHANNEL_12 = FiraParams.UWB_CHANNEL_12; 156 public static final int CHANNEL_13 = FiraParams.UWB_CHANNEL_13; 157 public static final int CHANNEL_14 = FiraParams.UWB_CHANNEL_14; 158 159 public static final int MAC_FCS_TYPE_CRC_16 = FiraParams.MAC_FCS_TYPE_CRC_16; 160 public static final int MAC_FCS_TYPE_CRC_32 = FiraParams.MAC_FCS_TYPE_CRC_32; 161 162 public static final int AOA_RESULT_REQ_DISABLE = 0x00; 163 public static final int AOA_RESULT_REQ_ENABLE = 0x01; 164 165 public static final int RANGE_DATA_NTF_CONFIG_DISABLE = 166 FiraParams.RANGE_DATA_NTF_CONFIG_DISABLE; 167 public static final int RANGE_DATA_NTF_CONFIG_ENABLE = FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE; 168 public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY = 169 FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG; 170 171 /** 172 * Table 54: APP Configuration Parameter IDs 173 */ 174 public static final int RANGING_DEVICE_ROLE_RESPONDER = 175 FiraParams.RANGING_DEVICE_ROLE_RESPONDER; 176 public static final int RANGING_DEVICE_ROLE_INITIATOR = 177 FiraParams.RANGING_DEVICE_ROLE_INITIATOR; 178 public static final int RANGING_DEVICE_ROLE_ADVERTISER = 179 FiraParams.RANGING_DEVICE_ROLE_ADVERTISER; 180 public static final int RANGING_DEVICE_ROLE_OBSERVER = 181 FiraParams.RANGING_DEVICE_ROLE_OBSERVER; 182 183 /** 184 * Table 37: Ranging Data Notification 185 */ 186 public static final byte RANGING_MEASUREMENT_TYPE_TWO_WAY = 0X01; 187 public static final byte RANGING_MEASUREMENT_TYPE_DL_TDOA = 0x02; 188 public static final byte RANGING_MEASUREMENT_TYPE_OWR_AOA = 0x03; 189 190 public static final byte MAC_ADDRESSING_MODE_SHORT = 0x00; 191 public static final byte MAC_ADDRESSING_MODE_EXTENDED = 0x01; 192 193 /** 194 * Table 32: Status Codes 195 */ 196 /* Generic Status Codes */ 197 public static final int STATUS_CODE_OK = FiraParams.STATUS_CODE_OK; 198 public static final int STATUS_CODE_REJECTED = FiraParams.STATUS_CODE_REJECTED; 199 public static final int STATUS_CODE_FAILED = FiraParams.STATUS_CODE_FAILED; 200 public static final int STATUS_CODE_SYNTAX_ERROR = FiraParams.STATUS_CODE_SYNTAX_ERROR; 201 public static final int STATUS_CODE_INVALID_PARAM = FiraParams.STATUS_CODE_INVALID_PARAM; 202 public static final int STATUS_CODE_INVALID_RANGE = FiraParams.STATUS_CODE_INVALID_RANGE; 203 public static final int STATUS_CODE_INVALID_MESSAGE_SIZE = 204 FiraParams.STATUS_CODE_INVALID_MESSAGE_SIZE; 205 public static final int STATUS_CODE_UNKNOWN_GID = FiraParams.STATUS_CODE_UNKNOWN_GID; 206 public static final int STATUS_CODE_UNKNOWN_OID = FiraParams.STATUS_CODE_UNKNOWN_OID; 207 public static final int STATUS_CODE_READ_ONLY = FiraParams.STATUS_CODE_READ_ONLY; 208 public static final int STATUS_CODE_COMMAND_RETRY = FiraParams.STATUS_CODE_COMMAND_RETRY; 209 public static final int STATUS_CODE_UNKNOWN = FiraParams.STATUS_CODE_UNKNOWN; 210 /* UWB Session Specific Status Codes */ 211 public static final int STATUS_CODE_ERROR_SESSION_NOT_EXIST = 212 FiraParams.STATUS_CODE_ERROR_SESSION_NOT_EXIST; 213 public static final int STATUS_CODE_ERROR_SESSION_DUPLICATE = 214 FiraParams.STATUS_CODE_ERROR_SESSION_DUPLICATE; 215 public static final int STATUS_CODE_ERROR_SESSION_ACTIVE = 216 FiraParams.STATUS_CODE_ERROR_SESSION_ACTIVE; 217 public static final int STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED = 218 FiraParams.STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED; 219 public static final int STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED = 220 FiraParams.STATUS_CODE_ERROR_SESSION_NOT_CONFIGURED; 221 public static final int STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING = 222 FiraParams.STATUS_CODE_ERROR_ACTIVE_SESSIONS_ONGOING; 223 public static final int STATUS_CODE_ERROR_MULTICAST_LIST_FULL = 224 FiraParams.STATUS_CODE_ERROR_MULTICAST_LIST_FULL; 225 public static final int STATUS_CODE_ERROR_ADDRESS_NOT_FOUND = 226 FiraParams.STATUS_CODE_ERROR_ADDRESS_NOT_FOUND; 227 public static final int STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT = 228 FiraParams.STATUS_CODE_ERROR_ADDRESS_ALREADY_PRESENT; 229 public static final int STATUS_CODE_OK_NEGATIVE_DISTANCE_REPORT = 230 FiraParams.STATUS_CODE_OK_NEGATIVE_DISTANCE_REPORT; 231 /* UWB Ranging Session Specific Status Codes */ 232 public static final int STATUS_CODE_RANGING_TX_FAILED = 233 FiraParams.STATUS_CODE_RANGING_TX_FAILED; 234 public static final int STATUS_CODE_RANGING_RX_TIMEOUT = 235 FiraParams.STATUS_CODE_RANGING_RX_TIMEOUT; 236 public static final int STATUS_CODE_RANGING_RX_PHY_DEC_FAILED = 237 FiraParams.STATUS_CODE_RANGING_RX_PHY_DEC_FAILED; 238 public static final int STATUS_CODE_RANGING_RX_PHY_TOA_FAILED = 239 FiraParams.STATUS_CODE_RANGING_RX_PHY_TOA_FAILED; 240 public static final int STATUS_CODE_RANGING_RX_PHY_STS_FAILED = 241 FiraParams.STATUS_CODE_RANGING_RX_PHY_STS_FAILED; 242 public static final int STATUS_CODE_RANGING_RX_MAC_DEC_FAILED = 243 FiraParams.STATUS_CODE_RANGING_RX_MAC_DEC_FAILED; 244 public static final int STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED = 245 FiraParams.STATUS_CODE_RANGING_RX_MAC_IE_DEC_FAILED; 246 public static final int STATUS_CODE_RANGING_RX_MAC_IE_MISSING = 247 FiraParams.STATUS_CODE_RANGING_RX_MAC_IE_MISSING; 248 public static final int STATUS_CODE_ERROR_ROUND_INDEX_NOT_ACTIVATED = 249 FiraParams.STATUS_CODE_ERROR_ROUND_INDEX_NOT_ACTIVATED; 250 public static final int STATUS_CODE_ERROR_NUMBER_OF_ACTIVE_RANGING_ROUNDS_EXCEEDED = 251 FiraParams.STATUS_CODE_ERROR_NUMBER_OF_ACTIVE_RANGING_ROUNDS_EXCEEDED; 252 public static final int STATUS_CODE_ERROR_ROUND_INDEX_NOT_SET_AS_INITIATOR = 253 FiraParams.STATUS_CODE_ERROR_ROUND_INDEX_NOT_SET_AS_INITIATOR; 254 public static final int 255 STATUS_CODE_ERROR_DL_TDOA_DEVICE_ADDRESS_NOT_MATCHING_IN_REPLY_TIME_LIST = 256 FiraParams.STATUS_CODE_ERROR_DL_TDOA_DEVICE_ADDRESS_NOT_MATCHING_IN_REPLY_TIME_LIST; 257 258 /* Vendor-dependent UCI status codes */ 259 public static final int STATUS_CODE_CCC_SE_BUSY = STATUS_ERROR_CCC_SE_BUSY; 260 public static final int STATUS_CODE_CCC_LIFECYCLE = STATUS_ERROR_CCC_LIFECYCLE; 261 public static final int STATUS_CODE_ANDROID_REGULATION_UWB_OFF = STATUS_REGULATION_UWB_OFF; 262 263 /** 264 * Table 28: Status codes in the DATA_TRANSFER_STATUS_NTF. 265 */ 266 public static final int STATUS_CODE_DATA_TRANSFER_REPETITION_OK = 267 FiraParams.STATUS_CODE_DATA_TRANSFER_NTF_REPETITION_OK; 268 public static final int STATUS_CODE_DATA_TRANSFER_OK = 269 FiraParams.STATUS_CODE_DATA_TRANSFER_NTF_OK; 270 public static final int STATUS_CODE_DATA_TRANSFER_ERROR_DATA_TRANSFER = 271 FiraParams.STATUS_CODE_DATA_TRANSFER_NTF_ERROR_DATA_TRANSFER; 272 273 /** 274 * Table TBD: Status codes in the DATA_TRANSFER_PHASE_CONFIGURATION_NTF 275 */ 276 public static final int STATUS_CODE_DATA_TRANSFER_PHASE_CONFIG_DTPCM_CONFIG_SUCCESS = 277 FiraParams.STATUS_CODE_DATA_TRANSFER_PHASE_CONFIG_DTPCM_CONFIG_SUCCESS; 278 public static final int STATUS_CODE_DATA_TRANSFER_PHASE_CONFIG_ERROR_DUPLICATE_SLOT_ASSIGNMENT = 279 FiraParams.STATUS_CODE_DATA_TRANSFER_PHASE_CONFIG_ERROR_DUPLICATE_SLOT_ASSIGNMENT; 280 281 /* UWB Device Extended Mac address length */ 282 public static final int UWB_DEVICE_SHORT_MAC_ADDRESS_LEN = 2; 283 public static final int UWB_DEVICE_EXT_MAC_ADDRESS_LEN = 8; 284 285 /* UWB Data Session Specific Status Codes */ 286 public static final int STATUS_CODE_DATA_MAX_TX_APDU_SIZE_EXCEEDED = 0x30; 287 public static final int STATUS_CODE_DATA_RX_CRC_ERROR = 0x31; 288 289 /* UWB STS Mode Codes */ 290 public static final int STS_MODE_STATIC = 0x00; 291 public static final int STS_MODE_DYNAMIC = 0x01; 292 293 /** 294 * FiRa Major versions 295 */ 296 public static final int FIRA_VERSION_MAJOR_1 = 1; 297 public static final int FIRA_VERSION_MAJOR_2 = 2; 298 299 /* Used by DATA_TRANSFER_PHASE_CONFIG and Hybrid config updates */ 300 public static final int SHORT_MAC_ADDRESS = 0; 301 } 302