• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 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