1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** USBX Component                                                        */
16 /**                                                                       */
17 /**   Application Interface (API)                                         */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 
23 /**************************************************************************/
24 /*                                                                        */
25 /*  APPLICATION INTERFACE DEFINITION                       RELEASE        */
26 /*                                                                        */
27 /*    ux_api.h                                            PORTABLE C      */
28 /*                                                           6.4.1        */
29 /*  AUTHOR                                                                */
30 /*                                                                        */
31 /*    Chaoqiong Xiao, Microsoft Corporation                               */
32 /*                                                                        */
33 /*  DESCRIPTION                                                           */
34 /*                                                                        */
35 /*    This file defines the basic Application Interface (API) to the      */
36 /*    high-performance USBX real-time USB stack.  All service prototypes  */
37 /*    and data structure definitions are defined in this file.            */
38 /*    Please note that basic data type definitions and other architecture-*/
39 /*    specific information is contained in the file ux_port.h.            */
40 /*                                                                        */
41 /*  RELEASE HISTORY                                                       */
42 /*                                                                        */
43 /*    DATE              NAME                      DESCRIPTION             */
44 /*                                                                        */
45 /*  05-19-2020     Chaoqiong Xiao           Initial Version 6.0           */
46 /*  09-30-2020     Chaoqiong Xiao           Modified comment(s),          */
47 /*                                            added query usage of device */
48 /*                                            ClassSubclassProtocol,      */
49 /*                                            added option to disable FX  */
50 /*                                            media integration, prefixed */
51 /*                                            UX to MS_TO_TICK, added     */
52 /*                                            APIs and macros related to  */
53 /*                                            uninitialize, optimized     */
54 /*                                            based on compile            */
55 /*                                            definitions, updated        */
56 /*                                            product constants, used     */
57 /*                                            host class extension        */
58 /*                                            pointer for class specific  */
59 /*                                            structured data, used UX    */
60 /*                                            prefix to refer to TX       */
61 /*                                            symbols instead of using    */
62 /*                                            them directly,              */
63 /*                                            resulting in version 6.1    */
64 /*  11-09-2020     Chaoqiong Xiao           Modified comment(s),          */
65 /*                                            used unsigned defines,      */
66 /*                                            added HCD uninit command,   */
67 /*                                            modified HCD status code,   */
68 /*                                            fixed compile warnings,     */
69 /*                                            resulting in version 6.1.2  */
70 /*  12-31-2020     Chaoqiong Xiao           Modified comment(s),          */
71 /*                                            added BOS support,          */
72 /*                                            resulting in version 6.1.3  */
73 /*  02-02-2021     Chaoqiong Xiao           Modified comment(s),          */
74 /*                                            added configuration activate*/
75 /*                                            and deactivate support,     */
76 /*                                            added host printer get      */
77 /*                                            device ID support,          */
78 /*                                            added host device string    */
79 /*                                            descriptor get support,     */
80 /*                                            added events for device     */
81 /*                                            connection/disconnection,   */
82 /*                                            resulting in version 6.1.4  */
83 /*  03-02-2021     Chaoqiong Xiao           Modified comment(s),          */
84 /*                                            resulting in version 6.1.5  */
85 /*  04-02-2021     Chaoqiong Xiao           Modified comment(s),          */
86 /*                                            added macros for Word/DWord */
87 /*                                            to bytes extraction,        */
88 /*                                            resulting in version 6.1.6  */
89 /*  06-02-2021     Chaoqiong Xiao           Modified comment(s),          */
90 /*                                            added trace dependency test,*/
91 /*                                            changed transfer timeout    */
92 /*                                            value,                      */
93 /*                                            resulting in version 6.1.7  */
94 /*  08-02-2021     Chaoqiong Xiao           Modified comment(s),          */
95 /*                                            fixed spelling error,       */
96 /*                                            fixed trace ID order error, */
97 /*                                            resulting in version 6.1.8  */
98 /*  10-15-2021     Chaoqiong Xiao           Modified comment(s),          */
99 /*                                            improved assert macros,     */
100 /*                                            added transfer size field,  */
101 /*                                            improved traceX support,    */
102 /*                                            resulting in version 6.1.9  */
103 /*  01-31-2022     Chaoqiong Xiao           Modified comment(s),          */
104 /*                                            added too many ports error, */
105 /*                                            moved tx_api.h include and  */
106 /*                                            typedefs to ux_port.h,      */
107 /*                                            added standalone support,   */
108 /*                                            added device HID trace IDs, */
109 /*                                            added some general errors,  */
110 /*                                            added printer trace IDs,    */
111 /*                                            resulting in version 6.1.10 */
112 /*  04-25-2022     Chaoqiong Xiao           Modified comment(s),          */
113 /*                                            assumed OS types to avoid   */
114 /*                                            standalone compiling error, */
115 /*                                            added CCID trace IDs,       */
116 /*                                            resulting in version 6.1.11 */
117 /*  07-29-2022     Chaoqiong Xiao           Modified comment(s),          */
118 /*                                            fixed parameter/variable    */
119 /*                                            names conflict C++ keyword, */
120 /*                                            added feedback size defs,   */
121 /*                                            added shared device config  */
122 /*                                            descriptor for enum scan,   */
123 /*                                            resulting in version 6.1.12 */
124 /*  10-31-2022     Chaoqiong Xiao           Modified comment(s),          */
125 /*                                            added some ETH error codes, */
126 /*                                            allowed align minimal def,  */
127 /*                                            added interface instance    */
128 /*                                            creation strategy control,  */
129 /*                                            resulting in version 6.2.0  */
130 /*  03-08-2023     Chaoqiong Xiao           Modified comment(s),          */
131 /*                                            accepted UX_MAX_CLASSES as  */
132 /*                                            max class driver configure, */
133 /*                                            added a new error code,     */
134 /*                                            resulting in version 6.2.1  */
135 /*  10-31-2023     Chaoqiong Xiao           Modified comment(s),          */
136 /*                                            refined memory management,  */
137 /*                                            added a new mode to manage  */
138 /*                                            endpoint buffer in classes, */
139 /*                                            optimized USB descriptors,  */
140 /*                                            added error checks support, */
141 /*                                            resulting in version 6.3.0  */
142 /*  12-31-2023     Chaoqiong Xiao           Modified comment(s),          */
143 /*                                            resulting in version 6.4.0  */
144 /*  03-01-2024      Tiejun Zhou             Modified comment(s),          */
145 /*                                            update version number,      */
146 /*                                            resulting in version 6.4.1  */
147 /*                                                                        */
148 /**************************************************************************/
149 
150 #ifndef UX_API_H
151 #define UX_API_H
152 
153 /* Determine if a C++ compiler is being used.  If so, ensure that standard
154    C is used to process the API information.  */
155 
156 #ifdef   __cplusplus
157 
158 /* Yes, C++ compiler is present.  Use standard C.  */
159 extern   "C" {
160 
161 #endif
162 
163 /* Include USBX port specific file.  */
164 
165 #include "ux_port.h"
166 
167 /* Process compile options:
168  *
169  * - UX_HOST_SIDE_ONLY/UX_HOST_STANDALONE:
170  *   Must not be defined at the same time,
171  *   When defined, only host/device side APIs are available.
172  *
173  * - UX_STANDALONE:
174  *   Defined, whole RTOS dependencies are removed from USBX.
175  *
176  * - UX_DEVICE_STANDALONE/UX_HOST_STANDALONE
177  *   Internal definitions for different parts,
178  *   _DEVICE_STANDALONE removes RTOS dependencies of DCD, device stack and classes,
179  *   _HOST_STANDALONE removes RTOS dependencies of HCD, host stack and classes,
180  *   if UX_STANDALONE is not defined, RTOS is always enabled in system and utilities.
181  */
182 #if defined(UX_STANDALONE)
183 #if !defined(UX_DEVICE_STANDALONE)
184 #define UX_DEVICE_STANDALONE
185 #endif
186 #if !defined(UX_HOST_STANDALONE)
187 #define UX_HOST_STANDALONE
188 #endif
189 #if !defined(UX_OTG_STANDALONE)
190 #define UX_OTG_STANDALONE
191 #endif
192 #else
193 #if defined(UX_DEVICE_STANDALONE) && defined(UX_HOST_STANDALONE) && defined(UX_OTG_STANDALONE) ||\
194     defined(UX_DEVICE_STANDALONE) && defined(UX_DEVICE_SIDE_ONLY) ||\
195     defined(UX_HOST_STANDALONE) && defined(UX_HOST_SIDE_ONLY)
196 #define UX_STANDALONE
197 #endif
198 #endif
199 
200 /* Internal option: enable the basic USBX error checking. This define is typically used
201    while debugging application.  */
202 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_SYSTEM_ENABLE_ERROR_CHECKING)
203 #define UX_SYSTEM_ENABLE_ERROR_CHECKING
204 #endif
205 
206 /* Internal option: enable the basic USBX error checking. This define is typically used
207    while debugging application.  */
208 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_STACK_ENABLE_ERROR_CHECKING)
209 #define UX_DEVICE_STACK_ENABLE_ERROR_CHECKING
210 #endif
211 
212 /* Internal option: enable the basic USBX error checking. This define is typically used
213    while debugging application.  */
214 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_HOST_STACK_ENABLE_ERROR_CHECKING)
215 #define UX_HOST_STACK_ENABLE_ERROR_CHECKING
216 #endif
217 
218 /* Defined, this value represents the endpoint buffer owner.
219    0 - The default, endpoint buffer is managed by core stack. Each endpoint takes UX_SLAVE_REQUEST_DATA_MAX_LENGTH bytes.
220    1 - Endpoint buffer managed by classes. In this case not all endpoints consume UX_SLAVE_REQUEST_DATA_MAX_LENGTH bytes.
221 */
222 #ifndef UX_DEVICE_ENDPOINT_BUFFER_OWNER
223 #define UX_DEVICE_ENDPOINT_BUFFER_OWNER             0
224 #endif
225 #define UX_DEVICE_ENDPOINT_BUFFER_OWNER_CORE        0
226 #define UX_DEVICE_ENDPOINT_BUFFER_OWNER_CLASS       1
227 
228 /* Define the maximum length for class names (exclude string null-terminator).  */
229 #define UX_MAX_CLASS_NAME_LENGTH    63
230 
231 /* Define the maximum length for HCD names (exclude string null-terminator).  */
232 #define UX_MAX_HCD_NAME_LENGTH      63
233 
234 /* Disable warning of parameter not used. */
235 #ifndef UX_PARAMETER_NOT_USED
236 #define UX_PARAMETER_NOT_USED(p) ((VOID)(p))
237 #endif
238 
239 /* Define additional generic USBX types.  */
240 
241 #ifndef SCHAR
242 typedef signed char               SCHAR;
243 #endif
244 
245 /* If the port file did not define the memory barrier instruction, define it
246    to nothing since this is platform-specific.  */
247 #ifndef UX_DATA_MEMORY_BARRIER
248 #define UX_DATA_MEMORY_BARRIER
249 #endif
250 
251 
252 /* This defines the ASSERT and process on ASSERT fail. */
253 #ifdef UX_ENABLE_ASSERT
254 #ifndef UX_ASSERT_FAIL
255 #ifdef TX_API_H
256 #define UX_ASSERT_FAIL                                      for (;;) {tx_thread_sleep(UX_WAIT_FOREVER); }
257 #else
258 #define UX_ASSERT_FAIL                                      for (;;) {}
259 #endif
260 #endif
261 #define UX_ASSERT(s)                                        if (!(s)) {UX_ASSERT_FAIL}
262 #else
263 #define UX_ASSERT(s)
264 #endif /* UX_ENABLE_ASSERT */
265 
266 
267 /* Convert from millisecond to ThreadX Tick value. */
268 #define UX_MS_TO_TICK(ms)                                  ((ms) * (UX_PERIODIC_RATE) / 1000)
269 #define UX_MS_TO_TICK_NON_ZERO(ms)                         UX_MAX(1, UX_MS_TO_TICK(ms))
270 
271 /* Deprecated, left to be compatible with apps already using MS_TO_TICK.  */
272 #define MS_TO_TICK(ms)                                     UX_MS_TO_TICK(ms)
273 
274 
275 /* If UX_DEVICE_INITIALIZE_FRAMEWORK_SCAN_DISABLE is defined,
276    it define USBX device max number of endpoints (1~n).
277    else max number of endpoints are from scan result.
278    It must be equal to or larger than max number of endpoints
279    can be activated at the same time.  */
280 #ifndef UX_MAX_DEVICE_ENDPOINTS
281 #define UX_MAX_DEVICE_ENDPOINTS                             6
282 #endif
283 
284 /* If UX_DEVICE_INITIALIZE_FRAMEWORK_SCAN_DISABLE is defined,
285    it define USBX device max number of interfacess (1~n).
286    else max number of interfacess are from scan result.
287    It must be equal to or larger than max number of interfaces
288    in a activated configuration.  */
289 #ifndef UX_MAX_DEVICE_INTERFACES
290 #define UX_MAX_DEVICE_INTERFACES                            6
291 #endif
292 
293 
294 /* Define USBX device max bInterfaceNumber of interfaces (0 ~ n),
295    it must be larger than max bInterfaceNumber in USB
296    framework descriptors.  */
297 #ifndef UX_MAX_SLAVE_INTERFACES
298 #define UX_MAX_SLAVE_INTERFACES                             16
299 #endif
300 
301 /* Define USBX max number of classes (1 ~ n).  */
302 #ifndef UX_MAX_CLASSES
303 #define UX_MAX_CLASSES                                      2
304 #endif
305 #ifndef UX_MAX_CLASS_DRIVER
306 #define UX_MAX_CLASS_DRIVER                                 UX_MAX_CLASSES
307 #endif
308 
309 /* Define USBX max number of devices (1 ~ n).  */
310 #ifndef UX_MAX_DEVICES
311 #define UX_MAX_DEVICES                                      4
312 #endif
313 
314 /* Define USBX max number of HCDs (1 ~ n).  */
315 #ifndef UX_MAX_HCD
316 #define UX_MAX_HCD                                          2
317 #endif
318 
319 /* Define USBX max root hub port (1 ~ n).  */
320 #ifndef UX_MAX_ROOTHUB_PORT
321 #define UX_MAX_ROOTHUB_PORT                                 4
322 #endif
323 
324 /* Define USBX max TT.  */
325 #ifndef UX_MAX_TT
326 #define UX_MAX_TT                                           8
327 #endif
328 
329 /* Define USBX Host Enum Thread Stack Size. */
330 #ifndef UX_HOST_ENUM_THREAD_STACK_SIZE
331 #define UX_HOST_ENUM_THREAD_STACK_SIZE                      UX_THREAD_STACK_SIZE
332 #endif
333 
334 /* Define USBX Host Thread Stack Size. */
335 #ifndef UX_HOST_HCD_THREAD_STACK_SIZE
336 #define UX_HOST_HCD_THREAD_STACK_SIZE                       UX_THREAD_STACK_SIZE
337 #endif
338 
339 /* Define USBX Host HNP Polling Thread Stack Size */
340 #ifndef UX_HOST_HNP_POLLING_THREAD_STACK
341 #define UX_HOST_HNP_POLLING_THREAD_STACK                    UX_THREAD_STACK_SIZE
342 #endif
343 
344 /* Define basic constants for the USBX Stack.  */
345 #define AZURE_RTOS_USBX
346 #define USBX_MAJOR_VERSION            6
347 #define USBX_MINOR_VERSION            4
348 #define USBX_PATCH_VERSION            1
349 
350 /* Macros for concatenating tokens, where UX_CONCATn concatenates n tokens.  */
351 
352 #define UX_CONCAT_BASE(x,y)           x ## y
353 #define UX_CONCAT2(s0,s1)             UX_CONCAT_BASE(s0,s1)
354 
355 /* Static assert that can report an error at compile time.  */
356 #define UX_COMPILE_TIME_ASSERT(exp, meaningful_name_as_variable) \
357     typedef char UX_CONCAT2(meaningful_name_as_variable, __LINE__)[!(exp) ? -1 : 1];
358 
359 /* Arithmetic.  */
360 
361 #define UX_MIN(a, b)                  ((a) < (b) ? (a) : (b))
362 #define UX_MAX(a, b)                  ((a) > (b) ? (a) : (b))
363 
364 #define UX_W0(word)                   ( (word)         & 0xFF)
365 #define UX_W1(word)                   (((word)  >>  8) & 0xFF)
366 
367 #define UX_DW0(dword)                 ( (dword)        & 0xFF)
368 #define UX_DW1(dword)                 (((dword) >>  8) & 0xFF)
369 #define UX_DW2(dword)                 (((dword) >> 16) & 0xFF)
370 #define UX_DW3(dword)                 (((dword) >> 24) & 0xFF)
371 
372 /* Safe arithmetic check macros.  */
373 
374 #ifndef UX_DISABLE_ARITHMETIC_CHECK
375 
376 /* Calculate and check if result overflow/underflow.  */
377 
378 #define UX_OVERFLOW_CHECK_ADD_ULONG(a, b)        ((a) > 0xFFFFFFFFul - (b))
379 #define UX_OVERFLOW_CHECK_ADD_USHORT(a, b)       ((a) > 0xFFFFul - (b))
380 #define UX_OVERFLOW_CHECK_ADD_UCHAR(a, b)        ((a) > 0xFFul - (b))
381 
382 #define UX_UNDERFLOW_CHECK_MINUS(a, b)           ((a) < (b))
383 
384 /* Overflow check optimized in case multiplying a 2nd factor of const.  */
385 #define UX_OVERFLOW_CHECK_MULC_ULONG(v, c)       (((c) != 0) && ((v) > 0xFFFFFFFFul / (c)))
386 #define UX_OVERFLOW_CHECK_MULC_USHORT(v, c)      (((c) != 0) && ((v) > 0xFFFFul / (c)))
387 #define UX_OVERFLOW_CHECK_MULC_UCHAR(v, c)       (((c) != 0) && ((v) > 0xFFul / (c)))
388 
389 /* Overflow check optimized in case multiplying factors of variables and division instruction unavailable.  */
390 #define UX_OVERFLOW_CHECK_MULV_ULONG(v, v1)      ((v) * (v1) < UX_MIN(v, v1))
391 #define UX_OVERFLOW_CHECK_MULV_USHORT(v, v1)     ((USHORT)((v) * (v1)) < UX_MIN(v, v1))
392 #define UX_OVERFLOW_CHECK_MULV_UCHAR(v, v1)      ((UCHAR)((v) * (v1)) < UX_MIN(v, v1))
393 
394 #else
395 
396 /* There is no overflow/underflow, always 0 (false).  */
397 
398 #define UX_OVERFLOW_CHECK_ADD_ULONG(a, b)        (0)
399 #define UX_OVERFLOW_CHECK_ADD_USHORT(a, b)       (0)
400 #define UX_OVERFLOW_CHECK_ADD_UCHAR(a, b)        (0)
401 
402 #define UX_OVERFLOW_CHECK_MULC_ULONG(v, c)       (0)
403 #define UX_OVERFLOW_CHECK_MULC_USHORT(v, c)      (0)
404 #define UX_OVERFLOW_CHECK_MULC_UCHAR(v, c)       (0)
405 
406 #define UX_OVERFLOW_CHECK_MULV_ULONG(v, v1)      (0)
407 #define UX_OVERFLOW_CHECK_MULV_USHORT(v, v1)     (0)
408 #define UX_OVERFLOW_CHECK_MULV_UCHAR(v, v1)      (0)
409 #endif
410 
411 /* Define the default extension to hold the control block for 64-bit mode.  */
412 
413 #ifndef UX_THREAD_EXTENSION_PTR_SET
414 #define UX_THREAD_EXTENSION_PTR_SET(a, b)
415 #endif
416 
417 #ifndef UX_THREAD_EXTENSION_PTR_GET
418 #define UX_THREAD_EXTENSION_PTR_GET(a, b, c)            (a) = (b *)(c);
419 #endif
420 
421 #ifndef UX_TIMER_EXTENSION_PTR_SET
422 #define UX_TIMER_EXTENSION_PTR_SET(a, b)
423 #endif
424 
425 #ifndef UX_TIMER_EXTENSION_PTR_GET
426 #define UX_TIMER_EXTENSION_PTR_GET(a, b, c)             (a) = (b *)(c);
427 #endif
428 
429 /* Determine if error log is enabled.  */
430 
431 #ifdef UX_ENABLE_DEBUG_LOG
432 
433 #ifndef UX_DEBUG_LOG_SIZE
434 #define UX_DEBUG_LOG_SIZE                                   (1024 * 32)
435 #endif
436 
437 /* Map the error log macros to internal USBX function.  */
438 
439 #define UX_DEBUG_LOG(debug_location, debug_message, debug_code, debug_parameter_1, debug_parameter_2)  _ux_utility_debug_log((UCHAR *) debug_location, (UCHAR *) debug_message, (ULONG) debug_code, (ULONG) debug_parameter_1, (ULONG) debug_parameter_2);
440 
441 VOID _ux_utility_debug_log(UCHAR *debug_location, UCHAR *debug_message, ULONG debug_code, ULONG debug_parameter_1, ULONG debug_parameter_2);
442 
443 /* DEBUG LOG MESSAGES SHOULD BE WRITTEN LIKE THIS IN THE CODE :    */
444 /* If error log is enabled, insert this error message into the log buffer.  */
445 /* UX_DEBUG_LOG("_ux_host_stack_rh_device_insertion", "Device insertion", port_index, port_index, 0) */
446 
447 
448 #else
449 
450 /* If Log is not defined, map it to nothing so that debug messages can stay in the code.  */
451 #define UX_DEBUG_LOG(debug_location, debug_message, debug_code, debug_parameter_1, debug_parameter_2)
452 #endif
453 
454 /* Determine if tracing is enabled.  */
455 
456 #if defined(TX_ENABLE_EVENT_TRACE) && !defined(UX_STANDALONE)
457 #define UX_ENABLE_EVENT_TRACE
458 #endif
459 
460 #ifdef UX_ENABLE_EVENT_TRACE
461 
462 /* Trace is enabled. Remap calls so that interrupts can be disabled around the actual event logging.  */
463 
464 #include "tx_trace.h"
465 
466 
467 /* Map the trace macros to internal USBX versions so we can get interrupt protection.  */
468 
469 #define UX_TRACE_OBJECT_REGISTER(t,p,n,a,b)                 _ux_trace_object_register(t, (VOID *) p, (CHAR *) n, (ULONG) a, (ULONG) b);
470 #define UX_TRACE_OBJECT_UNREGISTER(o)                       _ux_trace_object_unregister((VOID *) o);
471 #define UX_TRACE_IN_LINE_INSERT(i,a,b,c,d,f,g,h)            _ux_trace_event_insert((ULONG) i, (ULONG) a, (ULONG) b, (ULONG) c, (ULONG) d, (ULONG) f, g, h);
472 #define UX_TRACE_EVENT_UPDATE(e,t,i,a,b,c,d)                _ux_trace_event_update((TX_TRACE_BUFFER_ENTRY *) e, (ULONG) t, (ULONG) i, (ULONG) a, (ULONG) b, (ULONG) c, (ULONG) d);
473 
474 
475 /* Define USBX trace prototypes.  */
476 
477 VOID    _ux_trace_object_register(UCHAR object_type, VOID *object_ptr, CHAR *object_name, ULONG parameter_1, ULONG parameter_2);
478 VOID    _ux_trace_object_unregister(VOID *object_ptr);
479 VOID    _ux_trace_event_insert(ULONG event_id, ULONG info_field_1, ULONG info_field_2, ULONG info_field_3, ULONG info_field_4, ULONG filter, TX_TRACE_BUFFER_ENTRY **current_event, ULONG *current_timestamp);
480 VOID    _ux_trace_event_update(TX_TRACE_BUFFER_ENTRY *event, ULONG timestamp, ULONG event_id, ULONG info_field_1, ULONG info_field_2, ULONG info_field_3, ULONG info_field_4);
481 
482 
483 /* Define USBX event trace constants.  */
484 
485 #define UX_TRACE_OBJECT_TYPE_BASE                                       20
486 #define UX_TRACE_HOST_OBJECT_TYPE_DEVICE                                (UX_TRACE_OBJECT_TYPE_BASE + 1)
487 #define UX_TRACE_HOST_OBJECT_TYPE_INTERFACE                             (UX_TRACE_OBJECT_TYPE_BASE + 2)
488 #define UX_TRACE_HOST_OBJECT_TYPE_ENDPOINT                              (UX_TRACE_OBJECT_TYPE_BASE + 3)
489 #define UX_TRACE_HOST_OBJECT_TYPE_CLASS_INSTANCE                        (UX_TRACE_OBJECT_TYPE_BASE + 4)
490 
491 #define UX_TRACE_DEVICE_OBJECT_TYPE_DEVICE                              (UX_TRACE_OBJECT_TYPE_BASE + 5)
492 #define UX_TRACE_DEVICE_OBJECT_TYPE_INTERFACE                           (UX_TRACE_OBJECT_TYPE_BASE + 6)
493 #define UX_TRACE_DEVICE_OBJECT_TYPE_ENDPOINT                            (UX_TRACE_OBJECT_TYPE_BASE + 7)
494 #define UX_TRACE_DEVICE_OBJECT_TYPE_CLASS_INSTANCE                      (UX_TRACE_OBJECT_TYPE_BASE + 8)
495 
496 /* Define event filters that can be used to selectively disable certain events or groups of events.  */
497 
498 #define UX_TRACE_ALL_EVENTS                                             0x7F000000  /* All USBX events                          */
499 #define UX_TRACE_ERRORS                                                 0x01000000  /* USBX Errors events                       */
500 #define UX_TRACE_HOST_STACK_EVENTS                                      0x02000000  /* USBX Host Class Events                   */
501 #define UX_TRACE_DEVICE_STACK_EVENTS                                    0x04000000  /* USBX Device Class Events                 */
502 #define UX_TRACE_HOST_CONTROLLER_EVENTS                                 0x08000000  /* USBX Host Controller Events              */
503 #define UX_TRACE_DEVICE_CONTROLLER_EVENTS                               0x10000000  /* USBX Device Controllers Events           */
504 #define UX_TRACE_HOST_CLASS_EVENTS                                      0x20000000  /* USBX Host Class Events                   */
505 #define UX_TRACE_DEVICE_CLASS_EVENTS                                    0x40000000  /* USBX Device Class Events                 */
506 
507 
508 /* Define the trace events in USBX, if not defined.  */
509 
510 /* Define the USBX host stack events.  */
511 
512 #define UX_TRACE_HOST_STACK_EVENTS_BASE                                 600
513 #define UX_TRACE_HOST_STACK_CLASS_INSTANCE_CREATE                       (UX_TRACE_HOST_STACK_EVENTS_BASE + 1)               /* I1 = class           , I2 = class instance                                                       */
514 #define UX_TRACE_HOST_STACK_CLASS_INSTANCE_DESTROY                      (UX_TRACE_HOST_STACK_EVENTS_BASE + 2)               /* I1 = class           , I2 = class instance                                                       */
515 #define UX_TRACE_HOST_STACK_CONFIGURATION_DELETE                        (UX_TRACE_HOST_STACK_EVENTS_BASE + 3)               /* I1 = configuration                                                                               */
516 #define UX_TRACE_HOST_STACK_CONFIGURATION_ENUMERATE                     (UX_TRACE_HOST_STACK_EVENTS_BASE + 4)               /* I1 = device                                                                                      */
517 #define UX_TRACE_HOST_STACK_CONFIGURATION_INSTANCE_CREATE               (UX_TRACE_HOST_STACK_EVENTS_BASE + 5)               /* I1 = configuration                                                                               */
518 #define UX_TRACE_HOST_STACK_CONFIGURATION_INSTANCE_DELETE               (UX_TRACE_HOST_STACK_EVENTS_BASE + 6)               /* I1 = configuration                                                                               */
519 #define UX_TRACE_HOST_STACK_CONFIGURATION_SET                           (UX_TRACE_HOST_STACK_EVENTS_BASE + 7)               /* I1 = configuration                                                                               */
520 #define UX_TRACE_HOST_STACK_DEVICE_ADDRESS_SET                          (UX_TRACE_HOST_STACK_EVENTS_BASE + 8)               /* I1 = device          , I2 = device address                                                       */
521 #define UX_TRACE_HOST_STACK_DEVICE_CONFIGURATION_GET                    (UX_TRACE_HOST_STACK_EVENTS_BASE + 9)               /* I1 = device          , I2 = configuration                                                        */
522 #define UX_TRACE_HOST_STACK_DEVICE_CONFIGURATION_SELECT                 (UX_TRACE_HOST_STACK_EVENTS_BASE + 10)              /* I1 = device          , I2 = configuration                                                        */
523 #define UX_TRACE_HOST_STACK_DEVICE_DESCRIPTOR_READ                      (UX_TRACE_HOST_STACK_EVENTS_BASE + 11)              /* I1 = device                                                                                      */
524 #define UX_TRACE_HOST_STACK_DEVICE_GET                                  (UX_TRACE_HOST_STACK_EVENTS_BASE + 12)              /* I1 = device index                                                                                */
525 #define UX_TRACE_HOST_STACK_DEVICE_REMOVE                               (UX_TRACE_HOST_STACK_EVENTS_BASE + 13)              /* I1 = hcd             , I2 = parent          , I3 = port index        , I4 = device               */
526 #define UX_TRACE_HOST_STACK_DEVICE_RESOURCE_FREE                        (UX_TRACE_HOST_STACK_EVENTS_BASE + 14)              /* I1 = device                                                                                      */
527 #define UX_TRACE_HOST_STACK_ENDPOINT_INSTANCE_CREATE                    (UX_TRACE_HOST_STACK_EVENTS_BASE + 15)              /* I1 = device          , I2 = endpoint                                                             */
528 #define UX_TRACE_HOST_STACK_ENDPOINT_INSTANCE_DELETE                    (UX_TRACE_HOST_STACK_EVENTS_BASE + 16)              /* I1 = device          , I2 = endpoint                                                             */
529 #define UX_TRACE_HOST_STACK_ENDPOINT_RESET                              (UX_TRACE_HOST_STACK_EVENTS_BASE + 17)              /* I1 = device          , I2 = endpoint                                                             */
530 #define UX_TRACE_HOST_STACK_ENDPOINT_TRANSFER_ABORT                     (UX_TRACE_HOST_STACK_EVENTS_BASE + 18)              /* I1 = endpoint                                                                                    */
531 #define UX_TRACE_HOST_STACK_HCD_REGISTER                                (UX_TRACE_HOST_STACK_EVENTS_BASE + 19)              /* I1 = hcd name        , I2 = parameter 1     , I3 = parameter 2                                   */
532 #define UX_TRACE_HOST_STACK_INITIALIZE                                  (UX_TRACE_HOST_STACK_EVENTS_BASE + 20)              /*                                                                                                  */
533 #define UX_TRACE_HOST_STACK_INTERFACE_ENDPOINT_GET                      (UX_TRACE_HOST_STACK_EVENTS_BASE + 21)              /* I1 = interface       , I2 = endpoint index                                                       */
534 #define UX_TRACE_HOST_STACK_INTERFACE_INSTANCE_CREATE                   (UX_TRACE_HOST_STACK_EVENTS_BASE + 22)              /* I1 = interface                                                                                   */
535 #define UX_TRACE_HOST_STACK_INTERFACE_INSTANCE_DELETE                   (UX_TRACE_HOST_STACK_EVENTS_BASE + 23)              /* I1 = interface                                                                                   */
536 #define UX_TRACE_HOST_STACK_INTERFACE_SET                               (UX_TRACE_HOST_STACK_EVENTS_BASE + 24)              /* I1 = interface                                                                                   */
537 #define UX_TRACE_HOST_STACK_INTERFACE_SETTING_SELECT                    (UX_TRACE_HOST_STACK_EVENTS_BASE + 25)              /* I1 = interface                                                                                   */
538 #define UX_TRACE_HOST_STACK_NEW_CONFIGURATION_CREATE                    (UX_TRACE_HOST_STACK_EVENTS_BASE + 26)              /* I1 = device          , I2 = configuration                                                        */
539 #define UX_TRACE_HOST_STACK_NEW_DEVICE_CREATE                           (UX_TRACE_HOST_STACK_EVENTS_BASE + 27)              /* I1 = hcd             , I2 = device owner    , I3 = port index        , I4 = device               */
540 #define UX_TRACE_HOST_STACK_NEW_ENDPOINT_CREATE                         (UX_TRACE_HOST_STACK_EVENTS_BASE + 28)              /* I1 = interface       , I2 = endpoint                                                             */
541 #define UX_TRACE_HOST_STACK_RH_CHANGE_PROCESS                           (UX_TRACE_HOST_STACK_EVENTS_BASE + 29)              /* I1 = port index                                                                                  */
542 #define UX_TRACE_HOST_STACK_RH_DEVICE_EXTRACTION                        (UX_TRACE_HOST_STACK_EVENTS_BASE + 30)              /* I1 = hcd             , I2 = port index                                                           */
543 #define UX_TRACE_HOST_STACK_RH_DEVICE_INSERTION                         (UX_TRACE_HOST_STACK_EVENTS_BASE + 31)              /* I1 = hcd             , I2 = port index                                                           */
544 #define UX_TRACE_HOST_STACK_TRANSFER_REQUEST                            (UX_TRACE_HOST_STACK_EVENTS_BASE + 32)              /* I1 = device          , I2 = endpoint        , I3 = transfer request                              */
545 #define UX_TRACE_HOST_STACK_TRANSFER_REQUEST_ABORT                      (UX_TRACE_HOST_STACK_EVENTS_BASE + 33)              /* I1 = device          , I2 = endpoint        , I3 = transfer request                              */
546 #define UX_TRACE_HOST_STACK_UNINITIALIZE                                (UX_TRACE_HOST_STACK_EVENTS_BASE + 34)              /*                                                                                                  */
547 #define UX_TRACE_HOST_STACK_HCD_UNREGISTER                              (UX_TRACE_HOST_STACK_EVENTS_BASE + 35)              /* I1 = hcd name        , I2 = parameter 1     , I3 = parameter 2                                   */
548 #define UX_TRACE_HOST_STACK_CLASS_REGISTER                              (UX_TRACE_HOST_STACK_EVENTS_BASE + 36)              /* I1 = class name      , I2 = entry function                                                       */
549 #define UX_TRACE_HOST_STACK_CLASS_UNREGISTER                            (UX_TRACE_HOST_STACK_EVENTS_BASE + 37)              /* I1 = class entry                                                                                 */
550 #define UX_TRACE_HOST_STACK_DEVICE_STRING_GET                           (UX_TRACE_HOST_STACK_EVENTS_BASE + 38)              /* I1 = device          , I2 = buffer          , I3 = length            , I4 = (langID<<16) | index */
551 #define UX_TRACE_HOST_STACK_DEVICE_CONFIGURATION_ACTIVATE               (UX_TRACE_HOST_STACK_EVENTS_BASE + 39)              /* I1 = device          , I2 = configuration                                                        */
552 #define UX_TRACE_HOST_STACK_DEVICE_CONFIGURATION_DEACTIVATE             (UX_TRACE_HOST_STACK_EVENTS_BASE + 40)              /* I1 = device          , I2 = configuration                                                        */
553 
554 /* Define the USBX host class events.  */
555 
556 #define UX_TRACE_HOST_CLASS_EVENTS_BASE                                 650
557 #define UX_TRACE_HOST_CLASS_ASIX_ACTIVATE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 1)               /* I1 = class instance                                                                              */
558 #define UX_TRACE_HOST_CLASS_ASIX_DEACTIVATE                             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 2)               /* I1 = class instance                                                                              */
559 #define UX_TRACE_HOST_CLASS_ASIX_INTERRUPT_NOTIFICATION                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 3)               /* I1 = class instance                                                                              */
560 #define UX_TRACE_HOST_CLASS_ASIX_READ                                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 4)               /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
561 #define UX_TRACE_HOST_CLASS_ASIX_WRITE                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 5)               /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
562 
563 #define UX_TRACE_HOST_CLASS_AUDIO_ACTIVATE                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 10)              /* I1 = class instance                                                                              */
564 #define UX_TRACE_HOST_CLASS_AUDIO_CONTROL_VALUE_GET                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 11)              /* I1 = class instance                                                                              */
565 #define UX_TRACE_HOST_CLASS_AUDIO_CONTROL_VALUE_SET                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 12)              /* I1 = class instance  , I2 = audio control                                                        */
566 #define UX_TRACE_HOST_CLASS_AUDIO_DEACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 13)              /* I1 = class instance                                                                              */
567 #define UX_TRACE_HOST_CLASS_AUDIO_READ                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 14)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
568 #define UX_TRACE_HOST_CLASS_AUDIO_STREAMING_SAMPLING_GET                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 15)              /* I1 = class instance                                                                              */
569 #define UX_TRACE_HOST_CLASS_AUDIO_STREAMING_SAMPLING_SET                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 16)              /* I1 = class instance  , I2 = audio sampling                                                       */
570 #define UX_TRACE_HOST_CLASS_AUDIO_WRITE                                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 17)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
571 
572 #define UX_TRACE_HOST_CLASS_CDC_ACM_ACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 20)              /* I1 = class instance                                                                              */
573 #define UX_TRACE_HOST_CLASS_CDC_ACM_DEACTIVATE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 21)              /* I1 = class instance                                                                              */
574 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_SET_LINE_CODING               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 22)              /* I1 = class instance  , I2 = parameter                                                            */
575 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_GET_LINE_CODING               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 23)              /* I1 = class instance  , I2 = parameter                                                            */
576 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_SET_LINE_STATE                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 24)              /* I1 = class instance  , I2 = parameter                                                            */
577 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK                    (UX_TRACE_HOST_CLASS_EVENTS_BASE + 25)              /* I1 = class instance  , I2 = parameter                                                            */
578 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_ABORT_IN_PIPE                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 26)              /* I1 = class instance  , I2 = endpoint                                                             */
579 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_ABORT_OUT_PIPE                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 27)              /* I1 = class instance  , I2 = endpointr                                                            */
580 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_NOTIFICATION_CALLBACK         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 28)              /* I1 = class instance  , I2 = parameter                                                            */
581 #define UX_TRACE_HOST_CLASS_CDC_ACM_IOCTL_GET_DEVICE_STATUS             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 29)              /* I1 = class instance  , I2 = device status                                                        */
582 #define UX_TRACE_HOST_CLASS_CDC_ACM_READ                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 30)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
583 #define UX_TRACE_HOST_CLASS_CDC_ACM_RECEPTION_START                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 31)              /* I1 = class instance                                                                              */
584 #define UX_TRACE_HOST_CLASS_CDC_ACM_RECEPTION_STOP                      (UX_TRACE_HOST_CLASS_EVENTS_BASE + 32)              /* I1 = class instance                                                                              */
585 #define UX_TRACE_HOST_CLASS_CDC_ACM_WRITE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 33)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
586 
587 #define UX_TRACE_HOST_CLASS_CDC_ECM_ACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 35)              /* I1 = class instance                                                                              */
588 #define UX_TRACE_HOST_CLASS_CDC_ECM_DEACTIVATE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 36)              /* I1 = class instance                                                                              */
589 #define UX_TRACE_HOST_CLASS_CDC_ECM_READ                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 37)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
590 #define UX_TRACE_HOST_CLASS_CDC_ECM_WRITE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 38)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
591 #define UX_TRACE_HOST_CLASS_CDC_ECM_INTERRUPT_NOTIFICATION              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 39)              /* I1 = class instance                                                                              */
592 
593 #define UX_TRACE_HOST_CLASS_HID_ACTIVATE                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 40)              /* I1 = class instance                                                                              */
594 #define UX_TRACE_HOST_CLASS_HID_CLIENT_REGISTER                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 41)              /* I1 = hid client name                                                                             */
595 #define UX_TRACE_HOST_CLASS_HID_DEACTIVATE                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 42)              /* I1 = class instance                                                                              */
596 #define UX_TRACE_HOST_CLASS_HID_IDLE_GET                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 43)              /* I1 = class instance                                                                              */
597 #define UX_TRACE_HOST_CLASS_HID_IDLE_SET                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 44)              /* I1 = class instance                                                                              */
598 #define UX_TRACE_HOST_CLASS_HID_KEYBOARD_ACTIVATE                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 45)              /* I1 = class instance  , I2 = hid client instance                                                  */
599 #define UX_TRACE_HOST_CLASS_HID_KEYBOARD_DEACTIVATE                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 46)              /* I1 = class instance  , I2 = hid client instance                                                  */
600 #define UX_TRACE_HOST_CLASS_HID_MOUSE_ACTIVATE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 47)              /* I1 = class instance  , I2 = hid client instance                                                  */
601 #define UX_TRACE_HOST_CLASS_HID_MOUSE_DEACTIVATE                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 48)              /* I1 = class instance  , I2 = hid client instance                                                  */
602 #define UX_TRACE_HOST_CLASS_HID_REMOTE_CONTROL_ACTIVATE                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 49)              /* I1 = class instance  , I2 = hid client instance                                                  */
603 #define UX_TRACE_HOST_CLASS_HID_REMOTE_CONTROL_DEACTIVATE               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 50)              /* I1 = class instance  , I2 = hid client instance                                                  */
604 #define UX_TRACE_HOST_CLASS_HID_REPORT_GET                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 51)              /* I1 = class instance  , I2 = client report                                                        */
605 #define UX_TRACE_HOST_CLASS_HID_REPORT_SET                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 52)              /* I1 = class instance  , I2 = client report                                                        */
606 #define UX_TRACE_HOST_CLASS_HID_REMOTE_CONTROL_CALLBACK                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 53)              /* I1 = client instance , I2 = remote control instance                                              */
607 
608 #define UX_TRACE_HOST_CLASS_HUB_ACTIVATE                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 60)              /* I1 = class instance                                                                              */
609 #define UX_TRACE_HOST_CLASS_HUB_CHANGE_DETECT                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 62)              /* I1 = class instance                                                                              */
610 #define UX_TRACE_HOST_CLASS_HUB_PORT_CHANGE_CONNECTION_PROCESS          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 63)              /* I1 = class instance  , I2 = port            , I3 = port status                                   */
611 #define UX_TRACE_HOST_CLASS_HUB_PORT_CHANGE_ENABLE_PROCESS              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 64)              /* I1 = class instance  , I2 = port            , I3 = port status                                   */
612 #define UX_TRACE_HOST_CLASS_HUB_PORT_CHANGE_OVER_CURRENT_PROCESS        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 65)              /* I1 = class instance  , I2 = port            , I3 = port status                                   */
613 #define UX_TRACE_HOST_CLASS_HUB_PORT_CHANGE_RESET_PROCESS               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 66)              /* I1 = class instance  , I2 = port            , I3 = port status                                   */
614 #define UX_TRACE_HOST_CLASS_HUB_PORT_CHANGE_SUSPEND_PROCESS             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 67)              /* I1 = class instance  , I2 = port            , I3 = port status                                   */
615 #define UX_TRACE_HOST_CLASS_HUB_DEACTIVATE                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 68)              /* I1 = class instance                                                                              */
616 
617 #define UX_TRACE_HOST_CLASS_PIMA_ACTIVATE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 70)              /* I1 = class instance                                                                              */
618 #define UX_TRACE_HOST_CLASS_PIMA_DEACTIVATE                             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 71)              /* I1 = class instance                                                                              */
619 #define UX_TRACE_HOST_CLASS_PIMA_DEVICE_INFO_GET                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 72)              /* I1 = class instance  , I2 = pima device                                                          */
620 #define UX_TRACE_HOST_CLASS_PIMA_DEVICE_RESET                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 73)              /* I1 = class instance                                                                              */
621 #define UX_TRACE_HOST_CLASS_PIMA_NOTIFICATION                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 74)              /* I1 = class instance  , I2 = event code      , I3 = transaction ID    , I4 = parameter1           */
622 #define UX_TRACE_HOST_CLASS_PIMA_NUM_OBJECTS_GET                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 75)              /* I1 = class instance                                                                              */
623 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_CLOSE                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 76)              /* I1 = class instance  , I2 = object                                                               */
624 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_COPY                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 77)              /* I1 = class instance  , I2 = object handle                                                        */
625 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_DELETE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 78)              /* I1 = class instance  , I2 = object handle                                                        */
626 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_GET                             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 79)              /* I1 = class instance  , I2 = object handle   , I3 = object                                        */
627 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_INFO_GET                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 80)              /* I1 = class instance  , I2 = object handle   , I3 = object                                        */
628 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_INFO_SEND                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 81)              /* I1 = class instance  , I2 = object                                                               */
629 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_MOVE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 82)              /* I1 = class instance  , I2 = object handle                                                        */
630 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_SEND                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 83)              /* I1 = class instance  , I2 = object          , I3 = object_buffer     , I4 = object length        */
631 #define UX_TRACE_HOST_CLASS_PIMA_OBJECT_TRANSFER_ABORT                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 84)              /* I1 = class instance  , I2 = object handle   , I3 = object                                        */
632 #define UX_TRACE_HOST_CLASS_PIMA_READ                                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 85)              /* I1 = class instance  , I2 = data pointer    , I3 = data length                                   */
633 #define UX_TRACE_HOST_CLASS_PIMA_REQUEST_CANCEL                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 86)              /* I1 = class instance                                                                              */
634 #define UX_TRACE_HOST_CLASS_PIMA_SESSION_CLOSE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 87)              /* I1 = class instance  , I2 = pima session                                                         */
635 #define UX_TRACE_HOST_CLASS_PIMA_SESSION_OPEN                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 88)              /* I1 = class instance  , I2 = pima session                                                         */
636 #define UX_TRACE_HOST_CLASS_PIMA_STORAGE_IDS_GET                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 89)              /* I1 = class instance  , I2 = storage ID array, I3 = storage ID length                             */
637 #define UX_TRACE_HOST_CLASS_PIMA_STORAGE_INFO_GET                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 90)              /* I1 = class instance  , I2 = storage ID      , I3 = storage                                       */
638 #define UX_TRACE_HOST_CLASS_PIMA_THUMB_GET                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 91)              /* I1 = class instance  , I2 = object handle                                                        */
639 #define UX_TRACE_HOST_CLASS_PIMA_WRITE                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 92)              /* I1 = class instance  , I2 = data pointer    , I3 = data length                                   */
640 
641 #define UX_TRACE_HOST_CLASS_PRINTER_ACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 100)             /* I1 = class instance                                                                              */
642 #define UX_TRACE_HOST_CLASS_PRINTER_DEACTIVATE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 101)             /* I1 = class instance                                                                              */
643 #define UX_TRACE_HOST_CLASS_PRINTER_NAME_GET                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 102)             /* I1 = class instance                                                                              */
644 #define UX_TRACE_HOST_CLASS_PRINTER_READ                                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 103)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
645 #define UX_TRACE_HOST_CLASS_PRINTER_WRITE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 104)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
646 #define UX_TRACE_HOST_CLASS_PRINTER_SOFT_RESET                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 105)             /* I1 = class instance                                                                              */
647 #define UX_TRACE_HOST_CLASS_PRINTER_STATUS_GET                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 106)             /* I1 = class instance  , I2 = printer status                                                       */
648 #define UX_TRACE_HOST_CLASS_PRINTER_DEVICE_ID_GET                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 107)             /* I1 = class instance  , I2 = printer         , I3 = data pointer      , I4 = buffer length        */
649 
650 #define UX_TRACE_HOST_CLASS_PROLIFIC_ACTIVATE                           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 110)             /* I1 = class instance                                                                              */
651 #define UX_TRACE_HOST_CLASS_PROLIFIC_DEACTIVATE                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 111)             /* I1 = class instance                                                                              */
652 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_SET_LINE_CODING              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 112)             /* I1 = class instance  , I2 = parameter                                                            */
653 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_GET_LINE_CODING              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 113)             /* I1 = class instance  , I2 = parameter                                                            */
654 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_SET_LINE_STATE               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 114)             /* I1 = class instance  , I2 = parameter                                                            */
655 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_PURGE                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 115)             /* I1 = class instance  , I2 = parameter                                                            */
656 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_SEND_BREAK                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 116)             /* I1 = class instance                                                                              */
657 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_ABORT_IN_PIPE                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 117)             /* I1 = class instance  , I2 = endpoint                                                             */
658 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_ABORT_OUT_PIPE               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 118)             /* I1 = class instance  , I2 = endpointr                                                            */
659 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_REPORT_DEVICE_STATUS_CHANGE  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 119)             /* I1 = class instance  , I2 = parameter                                                            */
660 #define UX_TRACE_HOST_CLASS_PROLIFIC_IOCTL_GET_DEVICE_STATUS            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 120)             /* I1 = class instance  , I2 = device status                                                        */
661 #define UX_TRACE_HOST_CLASS_PROLIFIC_READ                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 121)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
662 #define UX_TRACE_HOST_CLASS_PROLIFIC_RECEPTION_START                    (UX_TRACE_HOST_CLASS_EVENTS_BASE + 122)             /* I1 = class instance                                                                              */
663 #define UX_TRACE_HOST_CLASS_PROLIFIC_RECEPTION_STOP                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 123)             /* I1 = class instance                                                                              */
664 #define UX_TRACE_HOST_CLASS_PROLIFIC_WRITE                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 124)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
665 
666 #define UX_TRACE_HOST_CLASS_STORAGE_ACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 130)             /* I1 = class instance                                                                              */
667 #define UX_TRACE_HOST_CLASS_STORAGE_DEACTIVATE                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 131)             /* I1 = class instance                                                                              */
668 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_CAPACITY_GET                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 132)             /* I1 = class instance                                                                              */
669 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_FORMAT_CAPACITY_GET           (UX_TRACE_HOST_CLASS_EVENTS_BASE + 133)             /* I1 = class instance                                                                              */
670 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_MOUNT                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 134)             /* I1 = class instance  , I2 = sector                                                               */
671 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_OPEN                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 135)             /* I1 = class instance  , I2 = media                                                                */
672 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_READ                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 136)             /* I1 = class instance  , I2 = sector start    , I3 = sector count      , I4 = data pointer         */
673 #define UX_TRACE_HOST_CLASS_STORAGE_MEDIA_WRITE                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 137)             /* I1 = class instance  , I2 = sector start    , I3 = sector count      , I4 = data pointer         */
674 #define UX_TRACE_HOST_CLASS_STORAGE_REQUEST_SENSE                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 138)             /* I1 = class instance                                                                              */
675 #define UX_TRACE_HOST_CLASS_STORAGE_START_STOP                          (UX_TRACE_HOST_CLASS_EVENTS_BASE + 139)             /* I1 = class instance  , I2 = start stop signal                                                    */
676 #define UX_TRACE_HOST_CLASS_STORAGE_UNIT_READY_TEST                     (UX_TRACE_HOST_CLASS_EVENTS_BASE + 140)             /* I1 = class instance                                                                              */
677 
678 #define UX_TRACE_HOST_CLASS_DPUMP_ACTIVATE                              (UX_TRACE_HOST_CLASS_EVENTS_BASE + 150)             /* I1 = class instance                                                                              */
679 #define UX_TRACE_HOST_CLASS_DPUMP_DEACTIVATE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 151)             /* I1 = class instance                                                                              */
680 #define UX_TRACE_HOST_CLASS_DPUMP_READ                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 152)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
681 #define UX_TRACE_HOST_CLASS_DPUMP_WRITE                                 (UX_TRACE_HOST_CLASS_EVENTS_BASE + 153)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
682 
683 #define UX_TRACE_HOST_CLASS_SWAR_ACTIVATE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 160)              /* I1 = class instance                                                                              */
684 #define UX_TRACE_HOST_CLASS_SWAR_DEACTIVATE                             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 161)              /* I1 = class instance                                                                              */
685 #define UX_TRACE_HOST_CLASS_SWAR_IOCTL_ABORT_IN_PIPE                    (UX_TRACE_HOST_CLASS_EVENTS_BASE + 162)              /* I1 = class instance  , I2 = endpoint                                                             */
686 #define UX_TRACE_HOST_CLASS_SWAR_IOCTL_ABORT_OUT_PIPE                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 163)              /* I1 = class instance  , I2 = endpointr                                                            */
687 #define UX_TRACE_HOST_CLASS_SWAR_READ                                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 164)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
688 #define UX_TRACE_HOST_CLASS_SWAR_RECEPTION_START                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 165)              /* I1 = class instance                                                                              */
689 #define UX_TRACE_HOST_CLASS_SWAR_RECEPTION_STOP                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 166)              /* I1 = class instance                                                                              */
690 #define UX_TRACE_HOST_CLASS_SWAR_WRITE                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 167)              /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
691 
692 #define UX_TRACE_HOST_CLASS_GSER_ACTIVATE                               (UX_TRACE_HOST_CLASS_EVENTS_BASE + 170)             /* I1 = class instance                                                                              */
693 #define UX_TRACE_HOST_CLASS_GSER_DEACTIVATE                             (UX_TRACE_HOST_CLASS_EVENTS_BASE + 171)             /* I1 = class instance                                                                              */
694 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_SET_LINE_CODING                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 172)             /* I1 = class instance  , I2 = parameter                                                            */
695 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_GET_LINE_CODING                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 173)             /* I1 = class instance  , I2 = parameter                                                            */
696 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_SET_LINE_STATE                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 174)             /* I1 = class instance  , I2 = parameter                                                            */
697 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_PURGE                            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 175)             /* I1 = class instance  , I2 = parameter                                                            */
698 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_SEND_BREAK                       (UX_TRACE_HOST_CLASS_EVENTS_BASE + 176)             /* I1 = class instance                                                                              */
699 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_ABORT_IN_PIPE                    (UX_TRACE_HOST_CLASS_EVENTS_BASE + 177)             /* I1 = class instance  , I2 = endpoint                                                             */
700 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_ABORT_OUT_PIPE                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 178)             /* I1 = class instance  , I2 = endpointr                                                            */
701 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_REPORT_DEVICE_STATUS_CHANGE      (UX_TRACE_HOST_CLASS_EVENTS_BASE + 179)             /* I1 = class instance  , I2 = parameter                                                            */
702 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_GET_DEVICE_STATUS                (UX_TRACE_HOST_CLASS_EVENTS_BASE + 180)             /* I1 = class instance  , I2 = device status                                                        */
703 #define UX_TRACE_HOST_CLASS_GSER_IOCTL_NOTIFICATION_CALLBACK            (UX_TRACE_HOST_CLASS_EVENTS_BASE + 181)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
704 #define UX_TRACE_HOST_CLASS_GSER_READ                                   (UX_TRACE_HOST_CLASS_EVENTS_BASE + 182)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
705 #define UX_TRACE_HOST_CLASS_GSER_RECEPTION_START                        (UX_TRACE_HOST_CLASS_EVENTS_BASE + 183)             /* I1 = class instance                                                                              */
706 #define UX_TRACE_HOST_CLASS_GSER_RECEPTION_STOP                         (UX_TRACE_HOST_CLASS_EVENTS_BASE + 184)             /* I1 = class instance                                                                              */
707 #define UX_TRACE_HOST_CLASS_GSER_WRITE                                  (UX_TRACE_HOST_CLASS_EVENTS_BASE + 185)             /* I1 = class instance  , I2 = data pointer    , I3 = requested length                              */
708 
709 /* Define the USBX device stack events.  */
710 
711 #define UX_TRACE_DEVICE_STACK_EVENTS_BASE                               850
712 #define UX_TRACE_DEVICE_STACK_ALTERNATE_SETTING_GET                     (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 1)             /* I1 = interface value                                                                             */
713 #define UX_TRACE_DEVICE_STACK_ALTERNATE_SETTING_SET                     (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 2)             /* I1 = interface value , I2 = alternate setting value                                              */
714 #define UX_TRACE_DEVICE_STACK_CLASS_REGISTER                            (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 3)             /* I1 = class name      , I2 = interface number, I3 = parameter                                     */
715 #define UX_TRACE_DEVICE_STACK_CLEAR_FEATURE                             (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 4)             /* I1 = request type    , I2 = request value   , I3 = request index                                 */
716 #define UX_TRACE_DEVICE_STACK_CONFIGURATION_GET                         (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 5)             /* I1 = configuration value                                                                         */
717 #define UX_TRACE_DEVICE_STACK_CONFIGURATION_SET                         (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 6)             /* I1 = configuration value                                                                         */
718 #define UX_TRACE_DEVICE_STACK_CONNECT                                   (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 7)             /*                                                                                                  */
719 #define UX_TRACE_DEVICE_STACK_DESCRIPTOR_SEND                           (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 8)             /* I1 = descriptor type , I2 = request index                                                        */
720 #define UX_TRACE_DEVICE_STACK_DISCONNECT                                (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 9)             /* I1 = device                                                                                      */
721 #define UX_TRACE_DEVICE_STACK_ENDPOINT_STALL                            (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 10)            /* I1 = endpoint                                                                                    */
722 #define UX_TRACE_DEVICE_STACK_GET_STATUS                                (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 11)            /* I1 = request type    , I2 = request value   , I3 = request index                                 */
723 #define UX_TRACE_DEVICE_STACK_HOST_WAKEUP                               (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 12)            /*                                                                                                  */
724 #define UX_TRACE_DEVICE_STACK_INITIALIZE                                (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 13)            /*                                                                                                  */
725 #define UX_TRACE_DEVICE_STACK_INTERFACE_DELETE                          (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 14)            /* I1 = interface                                                                                   */
726 #define UX_TRACE_DEVICE_STACK_INTERFACE_GET                             (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 15)            /* I1 = interface value                                                                             */
727 #define UX_TRACE_DEVICE_STACK_INTERFACE_SET                             (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 16)            /* I1 = alternate setting value                                                                     */
728 #define UX_TRACE_DEVICE_STACK_SET_FEATURE                               (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 17)            /* I1 = request value   , I2 = request index                                                        */
729 #define UX_TRACE_DEVICE_STACK_TRANSFER_ABORT                            (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 18)            /* I1 = transfer request, I2 = completion code                                                      */
730 #define UX_TRACE_DEVICE_STACK_TRANSFER_ALL_REQUEST_ABORT                (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 19)            /* I1 = endpoint        , I2 = completion code                                                      */
731 #define UX_TRACE_DEVICE_STACK_TRANSFER_REQUEST                          (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 20)            /* I1 = transfer request                                                                            */
732 #define UX_TRACE_DEVICE_STACK_MICROSOFT_EXTENSION_REGISTER              (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 21)            /* I1 = transfer request                                                                            */
733 #define UX_TRACE_DEVICE_STACK_CLASS_UNREGISTER                          (UX_TRACE_DEVICE_STACK_EVENTS_BASE + 22)            /* I1 = class name                                                                                  */
734 
735 /* Define the USBX device stack events first.  */
736 
737 #define UX_TRACE_DEVICE_CLASS_EVENTS_BASE                               900
738 #define UX_TRACE_DEVICE_CLASS_DPUMP_ACTIVATE                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 1)             /* I1 = class instance                                                                              */
739 #define UX_TRACE_DEVICE_CLASS_DPUMP_DEACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 2)             /* I1 = class instance                                                                              */
740 #define UX_TRACE_DEVICE_CLASS_DPUMP_READ                                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 3)             /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
741 #define UX_TRACE_DEVICE_CLASS_DPUMP_WRITE                               (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 4)             /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
742 #define UX_TRACE_DEVICE_CLASS_DPUMP_CHANGE                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 5)             /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
743 
744 #define UX_TRACE_DEVICE_CLASS_CDC_ACM_ACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 10)            /* I1 = class instance                                                                              */
745 #define UX_TRACE_DEVICE_CLASS_CDC_ACM_DEACTIVATE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 11)            /* I1 = class instance                                                                              */
746 #define UX_TRACE_DEVICE_CLASS_CDC_ACM_READ                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 12)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
747 #define UX_TRACE_DEVICE_CLASS_CDC_ACM_WRITE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 13)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
748 
749 #define UX_TRACE_DEVICE_CLASS_HID_ACTIVATE                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 20)            /* I1 = class instance                                                                              */
750 #define UX_TRACE_DEVICE_CLASS_HID_DEACTIVATE                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 21)            /* I1 = class instance                                                                              */
751 #define UX_TRACE_DEVICE_CLASS_HID_EVENT_GET                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 22)            /* I1 = class instance  , I2 = hid event                                                            */
752 #define UX_TRACE_DEVICE_CLASS_HID_EVENT_SET                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 23)            /* I1 = class instance  , I2 = hid event                                                            */
753 #define UX_TRACE_DEVICE_CLASS_HID_REPORT_GET                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 24)            /* I1 = class instance  , I2 = descriptor type , I3 = request index                                 */
754 #define UX_TRACE_DEVICE_CLASS_HID_REPORT_SET                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 25)            /* I1 = class instance  , I2 = descriptor type , I3 = request index                                 */
755 #define UX_TRACE_DEVICE_CLASS_HID_DESCRIPTOR_SEND                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 26)            /* I1 = class instance  , I2 = descriptor type , I3 = request index                                 */
756 #define UX_TRACE_DEVICE_CLASS_HID_READ                                  (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 27)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
757 #define UX_TRACE_DEVICE_CLASS_HID_RECEIVER_EVENT_GET                    (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 28)            /* I1 = class instance  , I2 = receiver event  , I3 = wait_option                                   */
758 #define UX_TRACE_DEVICE_CLASS_HID_RECEIVER_EVENT_FREE                   (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 29)            /* I1 = class instance  , I2 = receiver event                                                       */
759 
760 #define UX_TRACE_DEVICE_CLASS_PIMA_ACTIVATE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 30)            /* I1 = class instance                                                                              */
761 #define UX_TRACE_DEVICE_CLASS_PIMA_DEACTIVATE                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 31)            /* I1 = class instance                                                                              */
762 #define UX_TRACE_DEVICE_CLASS_PIMA_DEVICE_INFO_SEND                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 32)            /* I1 = class instance                                                                              */
763 #define UX_TRACE_DEVICE_CLASS_PIMA_EVENT_GET                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 33)            /* I1 = class instance  , I2 = pima event                                                           */
764 #define UX_TRACE_DEVICE_CLASS_PIMA_EVENT_SET                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 34)            /* I1 = class instance  , I2 = pima event                                                           */
765 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_ADD                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 35)            /* I1 = class instance  , I2 = object handle                                                        */
766 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_DATA_GET                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 36)            /* I1 = class instance  , I2 = object handle                                                        */
767 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_DATA_SEND                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 37)            /* I1 = class instance  , I2 = object handle                                                        */
768 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_DELETE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 38)            /* I1 = class instance  , I2 = object handle                                                        */
769 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_HANDLES_SEND                  (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 39)            /* I1 = class instance  , I2 = storage id      , I3 = object format code, I4 = object association   */
770 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_INFO_GET                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 40)            /* I1 = class instance  , I2 = object handle                                                        */
771 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_INFO_SEND                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 41)            /* I1 = class instance                                                                              */
772 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECTS_NUMBER_SEND                  (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 42)            /* I1 = class instance  , I2 = storage id      , I3 = object format code, I4 = object association   */
773 #define UX_TRACE_DEVICE_CLASS_PIMA_PARTIAL_OBJECT_DATA_GET              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 43)            /* I1 = class instance  , I2 = object handle   , I3 = offset requested  , I4 = length requested     */
774 #define UX_TRACE_DEVICE_CLASS_PIMA_RESPONSE_SEND                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 44)            /* I1 = class instance  , I2 = response code   , I3 = number parameter  , I4 = pima parameter 1     */
775 #define UX_TRACE_DEVICE_CLASS_PIMA_STORAGE_ID_SEND                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 45)            /* I1 = class instance                                                                              */
776 #define UX_TRACE_DEVICE_CLASS_PIMA_STORAGE_INFO_SEND                    (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 46)            /* I1 = class instance                                                                              */
777 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_DEVICE_PROP_DESC_GET             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 47)            /* I1 = class instance                                                                              */
778 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_DEVICE_PROP_VALUE                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 48)            /* I1 = class instance                                                                              */
779 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_DEVICE_PROP_VALUE_SET            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 49)            /* I1 = class instance                                                                              */
780 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_OBJECT_PROP_DESC                 (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 50)            /* I1 = class instance                                                                              */
781 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_OBJECT_PROP_VALUE                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 51)            /* I1 = class instance                                                                              */
782 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECTS_PROPS_SUPPORTED_GET          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 52)            /* I1 = class instance                                                                              */
783 #define UX_TRACE_DEVICE_CLASS_PIMA_GET_OBJECT_REFERENCES                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 53)            /* I1 = class instance                                                                              */
784 #define UX_TRACE_DEVICE_CLASS_PIMA_OBJECTS_PROPS_SUPPORTED_SET          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 54)            /* I1 = class instance                                                                              */
785 #define UX_TRACE_DEVICE_CLASS_PIMA_SET_OBJECT_REFERENCES                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 55)            /* I1 = class instance                                                                              */
786 #define UX_TRACE_DEVICE_CLASS_PIMA_STORAGE_FORMAT                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 56)            /* I1 = class instance                                                                              */
787 #define UX_TRACE_DEVICE_CLASS_PIMA_DEVICE_RESET                         (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 57)            /* I1 = class instance                                                                              */
788 #define UX_TRACE_DEVICE_CLASS_PIMA_SET_OBJECT_PROP_VALUE                (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 58)            /* I1 = class instance                                                                              */
789 
790 #define UX_TRACE_DEVICE_CLASS_RNDIS_ACTIVATE                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 60)            /* I1 = class instance                                                                              */
791 #define UX_TRACE_DEVICE_CLASS_RNDIS_DEACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 61)            /* I1 = class instance                                                                              */
792 #define UX_TRACE_DEVICE_CLASS_RNDIS_PACKET_RECEIVE                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 62)            /* I1 = class instance                                                                              */
793 #define UX_TRACE_DEVICE_CLASS_RNDIS_PACKET_TRANSMIT                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 63)            /* I1 = class instance                                                                              */
794 #define UX_TRACE_DEVICE_CLASS_RNDIS_MSG_QUERY                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 64)            /* I1 = class instance  , I2 = rndis OID                                                            */
795 #define UX_TRACE_DEVICE_CLASS_RNDIS_MSG_KEEP_ALIVE                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 65)            /* I1 = class instance                                                                              */
796 #define UX_TRACE_DEVICE_CLASS_RNDIS_MSG_RESET                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 66)            /* I1 = class instance                                                                              */
797 #define UX_TRACE_DEVICE_CLASS_RNDIS_MSG_SET                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 67)            /* I1 = class instance  , I2 = rndis OID                                                            */
798 
799 #define UX_TRACE_DEVICE_CLASS_STORAGE_ACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 70)            /* I1 = class instance                                                                              */
800 #define UX_TRACE_DEVICE_CLASS_STORAGE_DEACTIVATE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 71)            /* I1 = class instance                                                                              */
801 #define UX_TRACE_DEVICE_CLASS_STORAGE_FORMAT                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 72)            /* I1 = class instance  , I2 = lun                                                                  */
802 #define UX_TRACE_DEVICE_CLASS_STORAGE_INQUIRY                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 73)            /* I1 = class instance  , I2 = lun                                                                  */
803 #define UX_TRACE_DEVICE_CLASS_STORAGE_MODE_SELECT                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 74)            /* I1 = class instance  , I2 = lun                                                                  */
804 #define UX_TRACE_DEVICE_CLASS_STORAGE_MODE_SENSE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 75)            /* I1 = class instance  , I2 = lun                                                                  */
805 #define UX_TRACE_DEVICE_CLASS_STORAGE_PREVENT_ALLOW_MEDIA_REMOVAL       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 76)            /* I1 = class instance  , I2 = lun                                                                  */
806 #define UX_TRACE_DEVICE_CLASS_STORAGE_READ                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 77)            /* I1 = class instance  , I2 = lun             , I3 = sector              , I4 = number sectors     */
807 #define UX_TRACE_DEVICE_CLASS_STORAGE_READ_CAPACITY                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 78)            /* I1 = class instance  , I2 = lun                                                                  */
808 #define UX_TRACE_DEVICE_CLASS_STORAGE_READ_FORMAT_CAPACITY              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 79)            /* I1 = class instance  , I2 = lun                                                                  */
809 #define UX_TRACE_DEVICE_CLASS_STORAGE_READ_TOC                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 80)            /* I1 = class instance  , I2 = lun                                                                  */
810 #define UX_TRACE_DEVICE_CLASS_STORAGE_REQUEST_SENSE                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 81)            /* I1 = class instance  , I2 = lun             , I3 = sense key           , I4 = code               */
811 #define UX_TRACE_DEVICE_CLASS_STORAGE_TEST_READY                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 82)            /* I1 = class instance  , I2 = lun                                                                  */
812 #define UX_TRACE_DEVICE_CLASS_STORAGE_START_STOP                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 83)            /* I1 = class instance  , I2 = lun                                                                  */
813 #define UX_TRACE_DEVICE_CLASS_STORAGE_VERIFY                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 84)            /* I1 = class instance  , I2 = lun                                                                  */
814 #define UX_TRACE_DEVICE_CLASS_STORAGE_WRITE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 85)            /* I1 = class instance  , I2 = lun             , I3 = sector              , I4 = number sectors     */
815 #define UX_TRACE_DEVICE_CLASS_STORAGE_GET_CONFIGURATION                 (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 86)            /* I1 = class instance  , I2 = lun                                                                  */
816 #define UX_TRACE_DEVICE_CLASS_STORAGE_SYNCHRONIZE_CACHE                 (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 87)            /* I1 = class instance  , I2 = lun             , I3 = sector              , I4 = number sectors     */
817 #define UX_TRACE_DEVICE_CLASS_STORAGE_OTHER                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 88)            /* I1 = class instance  , I2 = lun                                                                  */
818 
819 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_ACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 90)            /* I1 = class instance                                                                              */
820 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_DEACTIVATE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 91)            /* I1 = class instance                                                                              */
821 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_CHANGE                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 92)            /* I1 = class instance                                                                              */
822 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_READ                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 93)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
823 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_WRITE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 94)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
824 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_PACKET_TRANSMIT                   (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 95)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
825 #define UX_TRACE_DEVICE_CLASS_CDC_ECM_PACKET_RECEIVE                    (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 96)            /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
826 
827 #define UX_TRACE_DEVICE_CLASS_DFU_ACTIVATE                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 97)            /* I1 = class instance                                                                              */
828 #define UX_TRACE_DEVICE_CLASS_DFU_DEACTIVATE                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 98)            /* I1 = class instance                                                                              */
829 
830 #define UX_TRACE_DEVICE_CLASS_PRINTER_ACTIVATE                          (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 100)           /* I1 = class instance                                                                              */
831 #define UX_TRACE_DEVICE_CLASS_PRINTER_DEACTIVATE                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 101)           /* I1 = class instance                                                                              */
832 #define UX_TRACE_DEVICE_CLASS_PRINTER_READ                              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 102)           /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
833 #define UX_TRACE_DEVICE_CLASS_PRINTER_WRITE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 103)           /* I1 = class instance  , I2 = buffer          , I3 = requested_length                              */
834 
835 #define UX_TRACE_DEVICE_CLASS_CCID_ACTIVATE                             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 110)           /* I1 = class instance                                                                              */
836 #define UX_TRACE_DEVICE_CLASS_CCID_DEACTIVATE                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 111)           /* I1 = class instance                                                                              */
837 #define UX_TRACE_DEVICE_CLASS_CCID_REQ_ABORT                            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 112)           /* I1 = class instance  , I2 = slot                                                                 */
838 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_ICC_POWER_ON               (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 113)           /* I1 = class instance  , I2 = slot                                                                 */
839 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_ICC_POWER_OFF              (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 114)           /* I1 = class instance  , I2 = slot                                                                 */
840 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_GET_SLOT_STATUS            (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 115)           /* I1 = class instance  , I2 = slot                                                                 */
841 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_XFR_BLOCK                  (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 116)           /* I1 = class instance  , I2 = slot                                                                 */
842 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_GET_PARAMETERS             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 117)           /* I1 = class instance  , I2 = slot                                                                 */
843 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_RESET_PARAMETERS           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 118)           /* I1 = class instance  , I2 = slot                                                                 */
844 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_SET_PARAMETERS             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 119)           /* I1 = class instance  , I2 = slot                                                                 */
845 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_ESCAPE                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 120)           /* I1 = class instance  , I2 = slot                                                                 */
846 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_ICC_CLOCK                  (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 121)           /* I1 = class instance  , I2 = slot                                                                 */
847 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_T0_APDU                    (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 122)           /* I1 = class instance  , I2 = slot                                                                 */
848 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_SECURE                     (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 123)           /* I1 = class instance  , I2 = slot                                                                 */
849 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_MECHANICAL                 (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 124)           /* I1 = class instance  , I2 = slot                                                                 */
850 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_ABORT                      (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 125)           /* I1 = class instance  , I2 = slot                                                                 */
851 #define UX_TRACE_DEVICE_CLASS_CCID_PC_TO_RDR_SET_RATE_CLOCK             (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 126)           /* I1 = class instance  , I2 = slot                                                                 */
852 #define UX_TRACE_DEVICE_CLASS_CCID_RDR_TO_PC_RESPONSE                   (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 127)           /* I1 = class instance  , I2 = slot                                                                 */
853 #define UX_TRACE_DEVICE_CLASS_CCID_ICC_INSERT                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 128)           /* I1 = class instance  , I2 = slot                                                                 */
854 #define UX_TRACE_DEVICE_CLASS_CCID_ICC_REMOVE                           (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 129)           /* I1 = class instance  , I2 = slot                                                                 */
855 #define UX_TRACE_DEVICE_CLASS_CCID_AUTO_SEQ_START                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 130)           /* I1 = class instance  , I2 = slot                                                                 */
856 #define UX_TRACE_DEVICE_CLASS_CCID_AUTO_SEQ_STOP                        (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 131)           /* I1 = class instance  , I2 = slot                                                                 */
857 #define UX_TRACE_DEVICE_CLASS_CCID_TIME_EXTENSION                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 132)           /* I1 = class instance  , I2 = slot            , I3 = time                                          */
858 #define UX_TRACE_DEVICE_CLASS_CCID_HARDWARE_ERROR                       (UX_TRACE_DEVICE_CLASS_EVENTS_BASE + 133)           /* I1 = class instance  , I2 = slot                                                                 */
859 
860 
861 /* Define the USBX Error Event.  */
862 
863 #define UX_TRACE_ERROR                                                  999
864 
865 
866 #else
867 #define UX_TRACE_OBJECT_REGISTER(t,p,n,a,b)
868 #define UX_TRACE_OBJECT_UNREGISTER(o)
869 #define UX_TRACE_IN_LINE_INSERT(i,a,b,c,d,f,g,h)
870 #define UX_TRACE_EVENT_UPDATE(e,t,i,a,b,c,d)
871 #endif
872 
873 
874 /* Define the system level for error trapping. */
875 #define UX_SYSTEM_LEVEL_INTERRUPT                                       1
876 #define UX_SYSTEM_LEVEL_THREAD                                          2
877 
878 /* Define the system context for error trapping. */
879 #define UX_SYSTEM_CONTEXT_HCD                                           1
880 #define UX_SYSTEM_CONTEXT_DCD                                           2
881 #define UX_SYSTEM_CONTEXT_INIT                                          3
882 #define UX_SYSTEM_CONTEXT_ENUMERATOR                                    4
883 #define UX_SYSTEM_CONTEXT_ROOT_HUB                                      5
884 #define UX_SYSTEM_CONTEXT_HUB                                           6
885 #define UX_SYSTEM_CONTEXT_CLASS                                         7
886 #define UX_SYSTEM_CONTEXT_UTILITY                                       8
887 #define UX_SYSTEM_CONTEXT_DEVICE_STACK                                  9
888 #define UX_SYSTEM_CONTEXT_HOST_STACK                                    10
889 
890 
891 /* Defines the number of ThreadX timer ticks per seconds. By default, the ThreadX timer tick is 10ms,
892    so the default value for this constant is 100.  If TX_TIMER_TICKS_PER_SECOND is defined,
893    this value is derived from TX_TIMER_TICKS_PER_SECOND.  */
894 
895 #ifndef UX_PERIODIC_RATE
896 #ifdef TX_TIMER_TICKS_PER_SECOND
897 #define UX_PERIODIC_RATE                                                (TX_TIMER_TICKS_PER_SECOND)
898 #else
899 #define UX_PERIODIC_RATE                                                100
900 #endif
901 #endif
902 
903 
904 /* Define interrupts lockout constructs to protect the memory allocation/release which could happen
905    under ISR in the device stack.  */
906 
907 #ifndef UX_INTERRUPT_SAVE_AREA
908 #ifdef  TX_INTERRUPT_SAVE_AREA
909 #define UX_INTERRUPT_SAVE_AREA                                          TX_INTERRUPT_SAVE_AREA
910 #else
911 #define UX_INTERRUPT_SAVE_AREA                                          ALIGN_TYPE saved_flags;
912 #endif
913 #endif
914 
915 #ifndef UX_DISABLE
916 #ifdef  TX_DISABLE
917 #define UX_DISABLE                                                      TX_DISABLE
918 #else
919 #define UX_DISABLE                                                      saved_flags = _ux_utility_interrupt_disable();
920 #endif
921 #endif
922 
923 #ifndef UX_RESTORE
924 #ifdef  TX_RESTORE
925 #define UX_RESTORE                                                      TX_RESTORE
926 #else
927 #define UX_RESTORE                                                      _ux_utility_interrupt_restore(saved_flags);
928 #endif
929 #endif
930 
931 #ifndef UX_INT_SAVE_AREA    /* Backword compatible.  */
932 #define UX_INT_SAVE_AREA                                                UX_INTERRUPT_SAVE_AREA
933 #endif
934 #ifndef UX_DISABLE_INTS     /* Backword compatible.  */
935 #define UX_DISABLE_INTS                                                 UX_DISABLE
936 #endif
937 #ifndef UX_RESTORE_INTS     /* Backword compatible.  */
938 #define UX_RESTORE_INTS                                                 UX_RESTORE
939 #endif
940 
941 
942 /* Define thread/timer related things.  */
943 
944 #ifndef UX_EMPTY
945 #ifdef  TX_EMPTY
946 #define UX_EMPTY                                                        TX_EMPTY
947 #else
948 #define UX_EMPTY                                                        (0)
949 #endif
950 #endif
951 
952 #ifndef UX_TIMER
953 #ifdef  TX_API_H
954 #define UX_TIMER                                                        TX_TIMER
955 #else
956 #define UX_TIMER                                                        VOID* /* Dummy type for standalone compile.  */
957 #endif
958 #endif
959 
960 #ifndef UX_THREAD
961 #ifdef  TX_API_H
962 #define UX_THREAD                                                       TX_THREAD
963 #else
964 #define UX_THREAD                                                       VOID* /* Dummy type for standalone compile.  */
965 #endif
966 #endif
967 
968 #ifndef UX_AUTO_START
969 #ifdef  TX_AUTO_START
970 #define UX_AUTO_START                                                   TX_AUTO_START
971 #else
972 #define UX_AUTO_START                                                   (1ul)
973 #endif
974 #endif
975 
976 #ifndef UX_DONT_START
977 #ifdef  TX_DONT_START
978 #define UX_DONT_START                                                   TX_DONT_START
979 #else
980 #define UX_DONT_START                                                   (0ul)
981 #endif
982 #endif
983 
984 #ifndef UX_AUTO_ACTIVATE
985 #ifdef  TX_AUTO_ACTIVATE
986 #define UX_AUTO_ACTIVATE                                                TX_AUTO_ACTIVATE
987 #else
988 #define UX_AUTO_ACTIVATE                                                (1ul)
989 #endif
990 #endif
991 
992 #ifndef UX_NO_ACTIVATE
993 #ifdef  TX_NO_ACTIVATE
994 #define UX_NO_ACTIVATE                                                  TX_NO_ACTIVATE
995 #else
996 #define UX_NO_ACTIVATE                                                  (0ul)
997 #endif
998 #endif
999 
1000 #ifndef UX_THREAD_GET_SYSTEM_STATE
1001 #define UX_THREAD_GET_SYSTEM_STATE                                      TX_THREAD_GET_SYSTEM_STATE
1002 #endif
1003 
1004 #ifndef UX_WAIT_FOREVER
1005 #ifdef  TX_WAIT_FOREVER
1006 #define UX_WAIT_FOREVER                                                 TX_WAIT_FOREVER
1007 #else
1008 #define UX_WAIT_FOREVER                                                 (0xFFFFFFFFul)
1009 #endif
1010 #endif
1011 
1012 #ifndef UX_NO_WAIT
1013 #ifdef  TX_NO_WAIT
1014 #define UX_NO_WAIT                                                      TX_NO_WAIT
1015 #else
1016 #define UX_NO_WAIT                                                      (0ul)
1017 #endif
1018 #endif
1019 
1020 #ifndef UX_NO_TIME_SLICE
1021 #ifdef  TX_NO_TIME_SLICE
1022 #define UX_NO_TIME_SLICE                                                TX_NO_TIME_SLICE
1023 #else
1024 #define UX_NO_TIME_SLICE                                                (0ul)
1025 #endif
1026 #endif
1027 
1028 
1029 /* Define semaphore related things.  */
1030 
1031 #ifndef UX_SEMAPHORE
1032 #ifdef  TX_API_H
1033 #define UX_SEMAPHORE                                                    TX_SEMAPHORE
1034 #else
1035 #define UX_SEMAPHORE                                                    VOID* /* Dummy type for standalone compile.  */
1036 #endif
1037 #endif
1038 
1039 
1040 /* Define mutex related things.  */
1041 
1042 #ifndef UX_MUTEX
1043 #ifdef  TX_API_H
1044 #define UX_MUTEX                                                        TX_MUTEX
1045 #else
1046 #define UX_MUTEX                                                        VOID* /* Dummy type for standalone compile.  */
1047 #endif
1048 #endif
1049 
1050 
1051 /* Define event flags group related things.  */
1052 
1053 #ifndef UX_EVENT_FLAGS_GROUP
1054 #ifdef  TX_API_H
1055 #define UX_EVENT_FLAGS_GROUP                                            TX_EVENT_FLAGS_GROUP
1056 #else
1057 #define UX_EVENT_FLAGS_GROUP                                            VOID* /* Dummy type for standalone compile.  */
1058 #endif
1059 #endif
1060 
1061 #ifndef UX_OR_CLEAR
1062 #ifdef  TX_OR_CLEAR
1063 #define UX_OR_CLEAR                                                     TX_OR_CLEAR
1064 #else
1065 #define UX_OR_CLEAR                                                     (1u)
1066 #endif
1067 #endif
1068 
1069 #ifndef UX_OR
1070 #ifdef  TX_OR
1071 #define UX_OR                                                           TX_OR
1072 #else
1073 #define UX_OR                                                           (0u)
1074 #endif
1075 #endif
1076 
1077 #ifndef UX_AND_CLEAR
1078 #ifdef  TX_AND_CLEAR
1079 #define UX_AND_CLEAR                                                    TX_AND_CLEAR
1080 #else
1081 #define UX_AND_CLEAR                                                    (3u)
1082 #endif
1083 #endif
1084 
1085 #ifndef UX_AND
1086 #ifdef  TX_AND
1087 #define UX_AND                                                          TX_AND
1088 #else
1089 #define UX_AND                                                          (2u)
1090 #endif
1091 #endif
1092 
1093 #ifndef UX_NO_EVENTS
1094 #ifdef  TX_NO_EVENTS
1095 #define UX_NO_EVENTS                                                    TX_NO_EVENTS
1096 #else
1097 #define UX_NO_EVENTS                                                    (7u)
1098 #endif
1099 #endif
1100 
1101 
1102 /* Define basic USBX constants.  */
1103 
1104 #define UX_NULL                                                         ((void*)0)
1105 #define UX_INVALID_PTR                                                  ((void*)(~((ALIGN_TYPE)0)))
1106 #define UX_TRUE                                                         1u
1107 #define UX_FALSE                                                        0u
1108 #define UX_TT_MASK                                                      0x1FFu
1109 #define UX_TT_BANDWIDTH                                                 6000u
1110 #define UX_SLAVE_ENDPOINT_DEFAULT_BUFFER_SIZE                           256u
1111 
1112 #define UX_MAX_BYTES_PER_FRAME_FS                                       1157u
1113 #define UX_MAX_BYTES_PER_MICROFRAME_HS                                  5785u
1114 
1115 /* Define USBX command request constants.  */
1116 
1117 #define UX_SETUP_REQUEST_TYPE                                           0u
1118 #define UX_SETUP_REQUEST                                                1u
1119 #define UX_SETUP_VALUE                                                  2u
1120 #define UX_SETUP_INDEX                                                  4u
1121 #define UX_SETUP_LENGTH                                                 6u
1122 #define UX_SETUP_SIZE                                                   8u
1123 
1124 
1125 /* Define USBX standard commands.  */
1126 
1127 #define UX_GET_STATUS                                                   0u
1128 #define UX_CLEAR_FEATURE                                                1u
1129 #define UX_SET_FEATURE                                                  3u
1130 #define UX_SET_ADDRESS                                                  5u
1131 #define UX_GET_DESCRIPTOR                                               6u
1132 #define UX_SET_DESCRIPTOR                                               7u
1133 #define UX_GET_CONFIGURATION                                            8u
1134 #define UX_SET_CONFIGURATION                                            9u
1135 #define UX_GET_INTERFACE                                                10u
1136 #define UX_SET_INTERFACE                                                11u
1137 #define UX_SYNCH_FRAME                                                  12u
1138 
1139 
1140 /* Define USBX command sub constants.  */
1141 
1142 #define UX_ENDPOINT_HALT                                                0u
1143 
1144 /* Define USBX feature selector constants.  */
1145 #define UX_REQUEST_FEATURE_ENDPOINT_HALT                                0u
1146 #define UX_REQUEST_FEATURE_DEVICE_REMOTE_WAKEUP                         1u
1147 #define UX_REQUEST_FEATURE_TEST_MODE                                    2u
1148 
1149 /* Define Generic USBX constants.  */
1150 
1151 #define UX_UNUSED                                                       0
1152 #define UX_USED                                                         1
1153 
1154 #define UX_MEMORY_UNUSED                                                0x00000000u
1155 #define UX_MEMORY_USED                                                  0x80000000u
1156 #define UX_REGULAR_MEMORY                                               0
1157 #define UX_CACHE_SAFE_MEMORY                                            1
1158 
1159 #define UX_NO_ALIGN                                                     0u
1160 #define UX_ALIGN_8                                                      0x07u
1161 #define UX_ALIGN_16                                                     0x0fu
1162 #define UX_ALIGN_32                                                     0x1fu
1163 #define UX_ALIGN_64                                                     0x3fu
1164 #define UX_ALIGN_128                                                    0x7fu
1165 #define UX_ALIGN_256                                                    0xffu
1166 #define UX_ALIGN_512                                                    0x1ffu
1167 #define UX_ALIGN_1024                                                   0x3ffu
1168 #define UX_ALIGN_2048                                                   0x7ffu
1169 #define UX_ALIGN_4096                                                   0xfffu
1170 #define UX_SAFE_ALIGN                                                   0xffffffffu
1171 #define UX_MAX_SCATTER_GATHER_ALIGNMENT                                 4096
1172 #ifndef UX_ALIGN_MIN
1173 #define UX_ALIGN_MIN                                                    UX_ALIGN_8
1174 #endif
1175 
1176 #define UX_MAX_USB_DEVICES                                              127
1177 
1178 #define UX_ENDPOINT_DIRECTION                                           0x80u
1179 #define UX_ENDPOINT_IN                                                  0x80u
1180 #define UX_ENDPOINT_OUT                                                 0x00u
1181 
1182 #define UX_MASK_ENDPOINT_TYPE                                           3u
1183 #define UX_CONTROL_ENDPOINT                                             0u
1184 #define UX_ISOCHRONOUS_ENDPOINT                                         1u
1185 #define UX_BULK_ENDPOINT                                                2u
1186 #define UX_INTERRUPT_ENDPOINT                                           3u
1187 
1188 #define UX_ISOCHRONOUS_ENDPOINT_IN                                      0x81u
1189 #define UX_ISOCHRONOUS_ENDPOINT_OUT                                     0x01u
1190 #define UX_BULK_ENDPOINT_IN                                             0x82u
1191 #define UX_BULK_ENDPOINT_OUT                                            0x02u
1192 #define UX_INTERRUPT_ENDPOINT_IN                                        0x83u
1193 #define UX_INTERRUPT_ENDPOINT_OUT                                       0x03u
1194 
1195 #define UX_MAX_PACKET_SIZE_MASK                                         0x7ffu
1196 #define UX_MAX_NUMBER_OF_TRANSACTIONS_MASK                              0x1800u
1197 #define UX_MAX_NUMBER_OF_TRANSACTIONS_SHIFT                             11
1198 
1199 #define UX_FEEDBACK_SIZE_FULL_SPEED                                     3   /* 10.10 format fits into 3 bytes.  */
1200 #define UX_FEEDBACK_SIZE_HIGH_SPEED                                     4   /* 12.13 format fits into 4 bytes.  */
1201 
1202 #define UX_REQUEST_DIRECTION                                            0x80u
1203 #define UX_REQUEST_IN                                                   0x80u
1204 #define UX_REQUEST_OUT                                                  0x00u
1205 
1206 #define UX_REQUEST_TYPE                                                 0x60u
1207 #define UX_REQUEST_TYPE_STANDARD                                        0x00u
1208 #define UX_REQUEST_TYPE_CLASS                                           0x20u
1209 #define UX_REQUEST_TYPE_VENDOR                                          0x40u
1210 
1211 #define UX_REQUEST_TARGET                                               0x03u
1212 #define UX_REQUEST_TARGET_DEVICE                                        0x00u
1213 #define UX_REQUEST_TARGET_INTERFACE                                     0x01u
1214 #define UX_REQUEST_TARGET_ENDPOINT                                      0x02u
1215 #define UX_REQUEST_TARGET_OTHER                                         0x03u
1216 
1217 #define UX_DEVICE_RESET                                                 0
1218 #define UX_DEVICE_ATTACHED                                              1
1219 #define UX_DEVICE_ADDRESSED                                             2
1220 #define UX_DEVICE_CONFIGURED                                            3
1221 #define UX_DEVICE_SUSPENDED                                             4
1222 #define UX_DEVICE_RESUMED                                               5
1223 #define UX_DEVICE_SELF_POWERED_STATE                                    6
1224 #define UX_DEVICE_BUS_POWERED_STATE                                     7
1225 #define UX_DEVICE_REMOTE_WAKEUP                                         8
1226 #define UX_DEVICE_BUS_RESET_COMPLETED                                   9
1227 #define UX_DEVICE_REMOVED                                               10
1228 #define UX_DEVICE_FORCE_DISCONNECT                                      11
1229 
1230 #define UX_ENDPOINT_RESET                                               0
1231 #define UX_ENDPOINT_RUNNING                                             1
1232 #define UX_ENDPOINT_HALTED                                              2
1233 
1234 #define UX_DEVICE_DESCRIPTOR_ITEM                                       1u
1235 #define UX_CONFIGURATION_DESCRIPTOR_ITEM                                2u
1236 #define UX_STRING_DESCRIPTOR_ITEM                                       3u
1237 #define UX_INTERFACE_DESCRIPTOR_ITEM                                    4u
1238 #define UX_ENDPOINT_DESCRIPTOR_ITEM                                     5u
1239 #define UX_DEVICE_QUALIFIER_DESCRIPTOR_ITEM                             6u
1240 #define UX_OTHER_SPEED_DESCRIPTOR_ITEM                                  7u
1241 #define UX_OTG_DESCRIPTOR_ITEM                                          9u
1242 #define UX_INTERFACE_ASSOCIATION_DESCRIPTOR_ITEM                        11u
1243 #define UX_BOS_DESCRIPTOR_ITEM                                          15u
1244 #define UX_DEVICE_CAPABILITY_DESCRIPTOR_ITEM                            16u
1245 #define UX_DFU_FUNCTIONAL_DESCRIPTOR_ITEM                               0x21u
1246 #define UX_HUB_DESCRIPTOR_ITEM                                          0x29u
1247 
1248 #define UX_CAPABILITY_WIRELESS_USB                                      0x01u
1249 #define UX_CAPABILITY_USB_2_0_EXTENSION                                 0x02u
1250 #define UX_CAPABILITY_SUPERSPEED_USB                                    0x03u
1251 #define UX_CAPABILITY_CONTAINER_ID                                      0x04u
1252 #define UX_CAPABILITY_PLATFORM                                          0x05u
1253 #define UX_CAPABILITY_POWER_DELIVERY                                    0x06u
1254 #define UX_CAPABILITY_BATTERY_INFO                                      0x07u
1255 #define UX_CAPABILITY_PD_CONSUMER_PORT                                  0x08u
1256 #define UX_CAPABILITY_PD_PROVIDER_PORT                                  0x09u
1257 #define UX_CAPABILITY_SUPERSPEED_PLUS                                   0x0Au
1258 #define UX_CAPABILITY_PRECISION_TIME_MEASUREMENT                        0x0Bu
1259 #define UX_CAPABILITY_WIRELESS_USB_EXT                                  0x0Cu
1260 #define UX_CAPABILITY_BILLBOARD                                         0x0Du
1261 #define UX_CAPABILITY_AUTHENTICATION                                    0x0Eu
1262 #define UX_CAPABILITY_BILLBOARD_EX                                      0x0Fu
1263 #define UX_CAPABILITY_CONFIGURATION_SUMMARY                             0x10u
1264 
1265 
1266 #ifndef UX_CONTROL_TRANSFER_TIMEOUT
1267 #define UX_CONTROL_TRANSFER_TIMEOUT                                     10000
1268 #endif
1269 
1270 #ifndef UX_NON_CONTROL_TRANSFER_TIMEOUT
1271 #define UX_NON_CONTROL_TRANSFER_TIMEOUT                                 50000
1272 #endif
1273 #define UX_PORT_ENABLE_WAIT                                             50
1274 #define UX_DEVICE_ADDRESS_SET_WAIT                                      50
1275 #define UX_HIGH_SPEED_DETECTION_HANDSHAKE_SUSPEND_WAIT                  200
1276 #define UX_ENUMERATION_THREAD_WAIT                                      200
1277 
1278 
1279 /* USB Billboard constants.  */
1280 
1281 #define UX_CLASS_BILLBOARD_CLASS                                        0x11
1282 #define UX_CLASS_BILLBOARD_SUBCLASS                                     0x00
1283 #define UX_CLASS_BILLBOARD_PROTOCOL                                     0x00
1284 #define UX_CLASS_BILLBOARD_DESCRIPTOR_BILLBOARD                         0x0D
1285 #define UX_CLASS_BILLBOARD_DESCRIPTOR_ALTERNATE_MODE                    0x0F
1286 #define UX_CLASS_BILLBOARD_MAX_NUM_ALT_MODE                             0x34
1287 
1288 /* USBX 5.8 BACKWARD COMPATIBILITY DEFINITIONS. THESE DEFINITIONS ARE NOW OBSOLETE
1289    BUT DEFINED HERE FOR COMPATIBILITY REASONS.  */
1290 
1291 #ifndef UX_CONTROL_TRANSFER_TIMEOUT_IN_MS
1292 #define UX_CONTROL_TRANSFER_TIMEOUT_IN_MS                               10000
1293 #endif
1294 
1295 #ifndef UX_NON_CONTROL_TRANSFER_TIMEOUT_IN_MS
1296 #define UX_NON_CONTROL_TRANSFER_TIMEOUT_IN_MS                           50000
1297 #endif
1298 
1299 #ifndef UX_PORT_ENABLE_WAIT_IN_MS
1300 #define UX_PORT_ENABLE_WAIT_IN_MS                                       500
1301 #endif
1302 
1303 #ifndef UX_DEVICE_ADDRESS_SET_WAIT_IN_MS
1304 #define UX_DEVICE_ADDRESS_SET_WAIT_IN_MS                                500
1305 #endif
1306 
1307 #ifndef UX_HIGH_SPEED_DETECTION_HANDSHAKE_SUSPEND_WAIT_IN_MS
1308 #define UX_HIGH_SPEED_DETECTION_HANDSHAKE_SUSPEND_WAIT_IN_MS            2000
1309 #endif
1310 
1311 /* END OF 5.8 BACKWARD COMPATIBILITY DEFINITIONS. */
1312 
1313 #define UX_TRANSFER_PHASE_SETUP                                         1
1314 #define UX_TRANSFER_PHASE_DATA_IN                                       2
1315 #define UX_TRANSFER_PHASE_DATA_OUT                                      3
1316 #define UX_TRANSFER_PHASE_STATUS_IN                                     4
1317 #define UX_TRANSFER_PHASE_STATUS_OUT                                    5
1318 
1319 
1320 /* Host change callback events : _callback(event, *class, *instance)  */
1321 
1322 #define UX_DEVICE_INSERTION                                             0x01u
1323 #define UX_DEVICE_REMOVAL                                               0x02u
1324 #define UX_HID_CLIENT_INSERTION                                         0x03u
1325 #define UX_HID_CLIENT_REMOVAL                                           0x04u
1326 #define UX_STORAGE_MEDIA_INSERTION                                      0x05u
1327 #define UX_STORAGE_MEDIA_REMOVAL                                        0x06u
1328 
1329 /* Host change callback events : _callback(event, NULL, *device_instance)  */
1330 
1331 #define UX_DEVICE_CONNECTION                                            0x81u
1332 #define UX_DEVICE_DISCONNECTION                                         0x82u
1333 
1334 /* Host change callback events : _callback(event, NULL, NULL)  */
1335 
1336 #define UX_STANDALONE_WAIT_BACKGROUND_TASK                              0x00u
1337 
1338 
1339 /* Define USBX transfer request status constants.  */
1340 
1341 #define UX_TRANSFER_STATUS_NOT_PENDING                                  0
1342 #define UX_TRANSFER_STATUS_PENDING                                      1
1343 #define UX_TRANSFER_STATUS_COMPLETED                                    2
1344 #define UX_TRANSFER_STATUS_ABORT                                        4
1345 
1346 /* Define USBX device power constants.  */
1347 
1348 #define UX_DEVICE_BUS_POWERED                                           1u
1349 #define UX_DEVICE_SELF_POWERED                                          2u
1350 #define UX_MAX_SELF_POWER                                               (500u/2)
1351 #define UX_MAX_BUS_POWER                                                (100u/2)
1352 #define UX_CONFIGURATION_DEVICE_BUS_POWERED                             0x80u
1353 #define UX_CONFIGURATION_DEVICE_SELF_POWERED                            0x40u
1354 #define UX_STATUS_DEVICE_SELF_POWERED                                   1u
1355 
1356 /* Define USBX OTG constants.  */
1357 
1358 #define UX_OTG_BM_ATTRIBUTES                                            2u
1359 #define UX_OTG_SRP_SUPPORT                                              1u
1360 #define UX_OTG_HNP_SUPPORT                                              2u
1361 #define UX_HCD_OTG_CAPABLE                                              1u
1362 #define UX_DCD_OTG_CAPABLE                                              1u
1363 
1364 #define UX_OTG_FEATURE_B_HNP_ENABLE                                     3u
1365 #define UX_OTG_FEATURE_A_HNP_SUPPORT                                    4u
1366 #define UX_OTG_FEATURE_A_ALT_HNP_SUPPORT                                5u
1367 #define UX_OTG_STATUS_SELECTOR                                          0xF000u
1368 #define UX_OTG_HOST_REQUEST_FLAG                                        0x01u
1369 
1370 #define UX_OTG_IDLE                                                     0u
1371 #define UX_OTG_IDLE_TO_HOST                                             1u
1372 #define UX_OTG_IDLE_TO_SLAVE                                            2u
1373 #define UX_OTG_HOST_TO_IDLE                                             3u
1374 #define UX_OTG_HOST_TO_SLAVE                                            4u
1375 #define UX_OTG_SLAVE_TO_IDLE                                            5u
1376 #define UX_OTG_SLAVE_TO_HOST                                            6u
1377 #define UX_OTG_SLAVE_SRP                                                7u
1378 
1379 #define UX_OTG_MODE_IDLE                                                0u
1380 #define UX_OTG_MODE_SLAVE                                               1u
1381 #define UX_OTG_MODE_HOST                                                2u
1382 
1383 #define UX_OTG_DEVICE_IDLE                                              0u
1384 #define UX_OTG_DEVICE_A                                                 1u
1385 #define UX_OTG_DEVICE_B                                                 2u
1386 
1387 #define UX_OTG_VBUS_IDLE                                                0u
1388 #define UX_OTG_VBUS_ON                                                  1u
1389 #define UX_OTG_VBUS_OFF                                                 2u
1390 
1391 
1392 #define UX_OTG_HNP_THREAD_SLEEP_TIME                                    (2 * UX_PERIODIC_RATE)
1393 
1394 /* Define USBX device speed constants.  */
1395 
1396 #define UX_DEFAULT_HS_MPS                                               64
1397 #define UX_DEFAULT_MPS                                                  8
1398 
1399 #define UX_LOW_SPEED_DEVICE                                             0
1400 #define UX_FULL_SPEED_DEVICE                                            1
1401 #define UX_HIGH_SPEED_DEVICE                                            2
1402 
1403 
1404 /* Define USBX generic port status constants.  */
1405 
1406 #define UX_PS_CCS                                                       0x01u
1407 #define UX_PS_CPE                                                       0x01u
1408 #define UX_PS_PES                                                       0x02u
1409 #define UX_PS_PSS                                                       0x04u
1410 #define UX_PS_POCI                                                      0x08u
1411 #define UX_PS_PRS                                                       0x10u
1412 #define UX_PS_PPS                                                       0x20u
1413 #define UX_PS_DS_LS                                                     0x00u
1414 #define UX_PS_DS_FS                                                     0x40u
1415 #define UX_PS_DS_HS                                                     0x80u
1416 
1417 #define UX_PS_DS                                                        6u
1418 
1419 
1420 /* Define USBX generic state machine constants.  */
1421 
1422 #define UX_STATE_RESET                                                  0u
1423 #define UX_STATE_EXIT                                                   1u
1424 #define UX_STATE_IDLE                                                   2u
1425 #define UX_STATE_ERROR                                                  3u
1426 #define UX_STATE_NEXT                                                   4u
1427 #define UX_STATE_WAIT                                                   5u
1428 #define UX_STATE_LOCK                                                   6u
1429 #define UX_STATE_BUSY                                                   6u
1430 #define UX_STATE_STEP                                                   0x20u
1431 #define UX_STATE_STACK_STEP                                             0x20u
1432 #define UX_STATE_DRIVER_STEP                                            0x40u
1433 #define UX_STATE_CLASS_STEP                                             0x60u
1434 #define UX_STATE_APP_STEP                                               0x80u
1435 
1436 #define UX_STATE_IS_RESET(s)                            (!(s))                          /* Reset state  */
1437 #define UX_STATE_IS_FATAL(s)                            ((s) && (s) < UX_STATE_ERROR)   /* Fatal, break all pending loops.  */
1438 #define UX_STATE_IS_ERROR(s)                            ((s) == UX_STATE_ERROR)         /* General error  */
1439 #define UX_STATE_IS_BUSY(s)                             ((s) >= UX_STATE_WAIT)          /* Locked or pending  */
1440 #define UX_STATE_IS_LOCKED(s)                           ((s) >= UX_STATE_LOCK)          /* Locked but not pendint  */
1441 
1442 
1443 /* Define USBX Error Code constants. The following format describes
1444    their meaning:
1445 
1446         0x00    : Success
1447         0x0x    : State machine return codes
1448         0x1x    : Configuration errors
1449         0x2x    : USB transport errors
1450         0x3x    : USB controller errors
1451         0x4x    : USB topology errors
1452         0x5x    : USB API errors
1453         0x6x    : USB Generic Class errors
1454         0x7x    : USB HID Class errors
1455         0x8x    : USB Audio Class errors
1456         0x9x    : USB CDC-ECM Class errors
1457         ...
1458         0xfx    : General errors
1459 */
1460 
1461 #define UX_SUCCESS                                                      0
1462 
1463 #define UX_ERROR                                                        0xff
1464 #define UX_BUSY                                                         0xfe
1465 #define UX_TIMEOUT                                                      0xfd
1466 #define UX_REENTRY                                                      0xfc
1467 #define UX_INVALID_STATE                                                0xfb
1468 #define UX_INVALID_PARAMETER                                            0xfa
1469 #define UX_ABORTED                                                      0xf9
1470 #define UX_MATH_OVERFLOW                                                0xf8
1471 #define UX_INVALID_BUILD_OPTION                                         0xf7
1472 
1473 #define UX_TOO_MANY_DEVICES                                             0x11
1474 #define UX_MEMORY_INSUFFICIENT                                          0x12
1475 #define UX_NO_TD_AVAILABLE                                              0x13
1476 #define UX_NO_ED_AVAILABLE                                              0x14
1477 #define UX_SEMAPHORE_ERROR                                              0x15
1478 #define UX_THREAD_ERROR                                                 0x16
1479 #define UX_MUTEX_ERROR                                                  0x17
1480 #define UX_EVENT_ERROR                                                  0x18
1481 #define UX_MEMORY_CORRUPTED                                             0x19
1482 #define UX_MEMORY_ARRAY_FULL                                            0x1a
1483 #define UX_FATAL_ERROR                                                  0x1b
1484 #define UX_ALREADY_ACTIVATED                                            0x1c
1485 
1486 #define UX_TRANSFER_STALLED                                             0x21
1487 #define UX_TRANSFER_NO_ANSWER                                           0x22
1488 #define UX_TRANSFER_ERROR                                               0x23
1489 #define UX_TRANSFER_MISSED_FRAME                                        0x24
1490 #define UX_TRANSFER_NOT_READY                                           0x25
1491 #define UX_TRANSFER_BUS_RESET                                           0x26
1492 #define UX_TRANSFER_BUFFER_OVERFLOW                                     0x27
1493 #define UX_TRANSFER_APPLICATION_RESET                                   0x28
1494 #define UX_TRANSFER_DATA_LESS_THAN_EXPECTED                             0x29
1495 
1496 #define UX_PORT_RESET_FAILED                                            0x31
1497 #define UX_CONTROLLER_INIT_FAILED                                       0x32
1498 #define UX_CONTROLLER_DEAD                                              0x33
1499 
1500 #define UX_NO_BANDWIDTH_AVAILABLE                                       0x41
1501 #define UX_DESCRIPTOR_CORRUPTED                                         0x42
1502 #define UX_OVER_CURRENT_CONDITION                                       0x43
1503 #define UX_DEVICE_ENUMERATION_FAILURE                                   0x44
1504 #define UX_TOO_MANY_HUB_PORTS                                           0x45
1505 
1506 #define UX_DEVICE_HANDLE_UNKNOWN                                        0x50
1507 #define UX_CONFIGURATION_HANDLE_UNKNOWN                                 0x51
1508 #define UX_INTERFACE_HANDLE_UNKNOWN                                     0x52
1509 #define UX_ENDPOINT_HANDLE_UNKNOWN                                      0x53
1510 #define UX_FUNCTION_NOT_SUPPORTED                                       0x54
1511 #define UX_CONTROLLER_UNKNOWN                                           0x55
1512 #define UX_PORT_INDEX_UNKNOWN                                           0x56
1513 #define UX_NO_CLASS_MATCH                                               0x57
1514 #define UX_HOST_CLASS_ALREADY_INSTALLED                                 0x58
1515 #define UX_HOST_CLASS_UNKNOWN                                           0x59
1516 #define UX_CONNECTION_INCOMPATIBLE                                      0x5a
1517 #define UX_HOST_CLASS_INSTANCE_UNKNOWN                                  0x5b
1518 #define UX_TRANSFER_TIMEOUT                                             0x5c
1519 #define UX_BUFFER_OVERFLOW                                              0x5d
1520 #define UX_NO_ALTERNATE_SETTING                                         0x5e
1521 #define UX_NO_DEVICE_CONNECTED                                          0x5f
1522 
1523 #define UX_HOST_CLASS_PROTOCOL_ERROR                                    0x60
1524 #define UX_HOST_CLASS_MEMORY_ERROR                                      0x61
1525 #define UX_HOST_CLASS_MEDIA_NOT_SUPPORTED                               0x62
1526 #define UX_CLASS_MALFORMED_PACKET_RECEIVED_ERROR                        0x63
1527 
1528 #define UX_HOST_CLASS_HID_REPORT_OVERFLOW                               0x70
1529 #define UX_HOST_CLASS_HID_USAGE_OVERFLOW                                0x71
1530 #define UX_HOST_CLASS_HID_TAG_UNSUPPORTED                               0x72
1531 #define UX_HOST_CLASS_HID_PUSH_OVERFLOW                                 0x73
1532 #define UX_HOST_CLASS_HID_POP_UNDERFLOW                                 0x74
1533 #define UX_HOST_CLASS_HID_COLLECTION_OVERFLOW                           0x75
1534 #define UX_HOST_CLASS_HID_COLLECTION_UNDERFLOW                          0x76
1535 #define UX_HOST_CLASS_HID_MIN_MAX_ERROR                                 0x77
1536 #define UX_HOST_CLASS_HID_DELIMITER_ERROR                               0x78
1537 #define UX_HOST_CLASS_HID_REPORT_ERROR                                  0x79
1538 #define UX_HOST_CLASS_HID_PERIODIC_REPORT_ERROR                         0x7A
1539 #define UX_HOST_CLASS_HID_UNKNOWN                                       0x7B
1540 
1541 #define UX_HOST_CLASS_AUDIO_WRONG_TYPE                                  0x80
1542 #define UX_HOST_CLASS_AUDIO_WRONG_INTERFACE                             0x81
1543 #define UX_HOST_CLASS_AUDIO_WRONG_FREQUENCY                             0x82
1544 
1545 #define UX_CLASS_CDC_ECM_LINK_STATE_DOWN_ERROR                          0x90
1546 #define UX_CLASS_ETH_LINK_STATE_DOWN_ERROR                              0x90
1547 #define UX_CLASS_ETH_PACKET_POOL_ERROR                                  0x91
1548 #define UX_CLASS_ETH_PACKET_ERROR                                       0x92
1549 #define UX_CLASS_ETH_SIZE_ERROR                                         0x93
1550 
1551 
1552 /* Define USBX HCD API function constants.  */
1553 
1554 #define UX_HCD_DISABLE_CONTROLLER                                       1
1555 #define UX_HCD_GET_PORT_STATUS                                          2
1556 #define UX_HCD_ENABLE_PORT                                              3
1557 #define UX_HCD_DISABLE_PORT                                             4
1558 #define UX_HCD_POWER_ON_PORT                                            5
1559 #define UX_HCD_POWER_DOWN_PORT                                          6
1560 #define UX_HCD_SUSPEND_PORT                                             7
1561 #define UX_HCD_RESUME_PORT                                              8
1562 #define UX_HCD_RESET_PORT                                               9
1563 #define UX_HCD_GET_FRAME_NUMBER                                         10
1564 #define UX_HCD_SET_FRAME_NUMBER                                         11
1565 #define UX_HCD_TRANSFER_REQUEST                                         12
1566 #define UX_HCD_TRANSFER_RUN                                             12
1567 #define UX_HCD_TRANSFER_ABORT                                           13
1568 #define UX_HCD_CREATE_ENDPOINT                                          14
1569 #define UX_HCD_DESTROY_ENDPOINT                                         15
1570 #define UX_HCD_RESET_ENDPOINT                                           16
1571 #define UX_HCD_PROCESS_DONE_QUEUE                                       17
1572 #define UX_HCD_TASKS_RUN                                                17
1573 #define UX_HCD_UNINITIALIZE                                             18
1574 
1575 /* Define USBX DCD API function constants.  */
1576 
1577 #define UX_DCD_DISABLE_CONTROLLER                                       1
1578 #define UX_DCD_GET_PORT_STATUS                                          2
1579 #define UX_DCD_ENABLE_PORT                                              3
1580 #define UX_DCD_DISABLE_PORT                                             4
1581 #define UX_DCD_POWER_ON_PORT                                            5
1582 #define UX_DCD_POWER_DOWN_PORT                                          6
1583 #define UX_DCD_SUSPEND_PORT                                             7
1584 #define UX_DCD_RESUME_PORT                                              8
1585 #define UX_DCD_RESET_PORT                                               9
1586 #define UX_DCD_GET_FRAME_NUMBER                                         10
1587 #define UX_DCD_SET_FRAME_NUMBER                                         11
1588 #define UX_DCD_TRANSFER_REQUEST                                         12
1589 #define UX_DCD_TRANSFER_RUN                                             12
1590 #define UX_DCD_TRANSFER_ABORT                                           13
1591 #define UX_DCD_CREATE_ENDPOINT                                          14
1592 #define UX_DCD_DESTROY_ENDPOINT                                         15
1593 #define UX_DCD_RESET_ENDPOINT                                           16
1594 #define UX_DCD_SET_DEVICE_ADDRESS                                       17
1595 #define UX_DCD_ISR_PENDING                                              18
1596 #define UX_DCD_TASKS_RUN                                                18
1597 #define UX_DCD_CHANGE_STATE                                             19
1598 #define UX_DCD_STALL_ENDPOINT                                           20
1599 #define UX_DCD_ENDPOINT_STATUS                                          21
1600 
1601 
1602 /* Define USBX generic host controller constants.  */
1603 
1604 #define UX_HCD_STATUS_UNUSED                                            0
1605 #define UX_HCD_STATUS_HALTED                                            1
1606 #define UX_HCD_STATUS_OPERATIONAL                                       2
1607 #define UX_HCD_STATUS_DEAD                                              3
1608 
1609 /* Define USBX generic SLAVE controller constants.  */
1610 
1611 #define UX_DCD_STATUS_HALTED                                            0
1612 #define UX_DCD_STATUS_OPERATIONAL                                       1
1613 #define UX_DCD_STATUS_DEAD                                              2
1614 
1615 /* Define USBX  SLAVE controller VBUS constants.  */
1616 
1617 #define UX_DCD_VBUS_RESET                                               0
1618 #define UX_DCD_VBUS_SET                                                 1
1619 
1620 /* Define USBX class interface constants.  */
1621 
1622 #define UX_HOST_CLASS_COMMAND_QUERY                                     1
1623 #define UX_HOST_CLASS_COMMAND_ACTIVATE                                  2
1624 #define UX_HOST_CLASS_COMMAND_DEACTIVATE                                3
1625 #define UX_HOST_CLASS_COMMAND_DESTROY                                   4
1626 #define UX_HOST_CLASS_COMMAND_ACTIVATE_START                            UX_HOST_CLASS_COMMAND_ACTIVATE
1627 #define UX_HOST_CLASS_COMMAND_ACTIVATE_WAIT                             5
1628 
1629 #define UX_SLAVE_CLASS_COMMAND_QUERY                                    1
1630 #define UX_SLAVE_CLASS_COMMAND_ACTIVATE                                 2
1631 #define UX_SLAVE_CLASS_COMMAND_DEACTIVATE                               3
1632 #define UX_SLAVE_CLASS_COMMAND_REQUEST                                  4
1633 #define UX_SLAVE_CLASS_COMMAND_INITIALIZE                               5
1634 #define UX_SLAVE_CLASS_COMMAND_CHANGE                                   6
1635 #define UX_SLAVE_CLASS_COMMAND_UNINITIALIZE                             7
1636 
1637 #define UX_HOST_CLASS_COMMAND_USAGE_PIDVID                              1
1638 #define UX_HOST_CLASS_COMMAND_USAGE_CSP                                 2
1639 #define UX_HOST_CLASS_COMMAND_USAGE_DCSP                                3
1640 
1641 #define UX_HOST_CLASS_INSTANCE_FREE                                     0
1642 #define UX_HOST_CLASS_INSTANCE_LIVE                                     1
1643 #define UX_HOST_CLASS_INSTANCE_SHUTDOWN                                 2
1644 #define UX_HOST_CLASS_INSTANCE_MOUNTING                                 3
1645 
1646 
1647 /* Define USBX root HUB constants.  */
1648 
1649 #define UX_RH_ENUMERATION_RETRY                                         3
1650 #define UX_RH_ENUMERATION_RETRY_DELAY                                   100
1651 
1652 
1653 /* Define USBX PCI driver constants.  */
1654 
1655 #define UX_PCI_NB_FUNCTIONS                                             7
1656 #define UX_PCI_NB_DEVICE                                                32
1657 #define UX_PCI_NB_BUS                                                   0xff
1658 
1659 #define UX_PCI_CMD_IO_ENABLE                                            0x0001u
1660 #define UX_PCI_CMD_MEM_ENABLE                                           0x0002u
1661 #define UX_PCI_CMD_MASTER_ENABLE                                        0x0004u
1662 #define UX_PCI_CMD_MONITOR_ENABLE                                       0x0008u
1663 #define UX_PCI_CMD_MEM_WRITE_INV_ENABLE                                 0x0010u
1664 #define UX_PCI_CMD_SNOOP_PALETTE_ENABLE                                 0x0020u
1665 #define UX_PCI_CMD_PARITY_ERROR_ENABLE                                  0x0040u
1666 #define UX_PCI_CMD_WAIT_CYCLE_CTRL_ENABLE                               0x0080u
1667 #define UX_PCI_CMD_SERR_ENABLE                                          0x0100u
1668 #define UX_PCI_CMD_FBB_ENABLE                                           0x0200u
1669 
1670 #define UX_PCI_CFG_CTRL_ADDRESS                                         0x0cf8u
1671 #define UX_PCI_CFG_DATA_ADDRESS                                         0x0cfcu
1672 
1673 #define UX_PCI_CFG_VENDOR_ID                                            0x00
1674 #define UX_PCI_CFG_DEVICE_ID                                            0x02
1675 #define UX_PCI_CFG_COMMAND                                              0x04
1676 #define UX_PCI_CFG_STATUS                                               0x06
1677 #define UX_PCI_CFG_REVISION                                             0x08
1678 #define UX_PCI_CFG_PROGRAMMING_IF                                       0x09
1679 #define UX_PCI_CFG_SUBCLASS                                             0x0a
1680 #define UX_PCI_CFG_CLASS                                                0x0b
1681 #define UX_PCI_CFG_CACHE_LINE_SIZE                                      0x0c
1682 #define UX_PCI_CFG_LATENCY_TIMER                                        0x0d
1683 #define UX_PCI_CFG_HEADER_TYPE                                          0x0e
1684 #define UX_PCI_CFG_BIST                                                 0x0f
1685 #define UX_PCI_CFG_BASE_ADDRESS_0                                       0x10
1686 #define UX_PCI_CFG_BASE_ADDRESS_1                                       0x14
1687 #define UX_PCI_CFG_BASE_ADDRESS_2                                       0x18
1688 #define UX_PCI_CFG_BASE_ADDRESS_3                                       0x1c
1689 #define UX_PCI_CFG_BASE_ADDRESS_4                                       0x20
1690 #define UX_PCI_CFG_BASE_ADDRESS_5                                       0x24
1691 #define UX_PCI_CFG_CARDBUS_CIS                                          0x28
1692 #define UX_PCI_CFG_SUB_VENDOR_ID                                        0x2c
1693 #define UX_PCI_CFG_SUB_SYSTEM_ID                                        0x2e
1694 #define UX_PCI_CFG_EXPANSION_ROM_ADDRESS                                0x30
1695 #define UX_PCI_CFG_RESERVED_0                                           0x34
1696 #define UX_PCI_CFG_RESERVED_1                                           0x38
1697 #define UX_PCI_CFG_INT_LINE                                             0x3c
1698 #define UX_PCI_CFG_INT_PIN                                              0x3d
1699 #define UX_PCI_CFG_MIN_GNT                                              0x3e
1700 #define UX_PCI_CFG_MAX_LATENCY                                          0x3f
1701 
1702 #define UX_PCI_CFG_SBRN                                                 0x60
1703 #define UX_PCI_CFG_FLADJ                                                0x61
1704 
1705 /* Define DFU constants.  */
1706 #define UX_SYSTEM_DFU_STATE_APP_IDLE                                    0
1707 #define UX_SYSTEM_DFU_STATE_APP_DETACH                                  1
1708 #define UX_SYSTEM_DFU_STATE_DFU_IDLE                                    2
1709 #define UX_SYSTEM_DFU_STATE_DFU_DNLOAD_SYNC                             3
1710 #define UX_SYSTEM_DFU_STATE_DFU_DNBUSY                                  4
1711 #define UX_SYSTEM_DFU_STATE_DFU_DNLOAD_IDLE                             5
1712 #define UX_SYSTEM_DFU_STATE_DFU_MANIFEST_SYNC                           6
1713 #define UX_SYSTEM_DFU_STATE_DFU_MANIFEST                                7
1714 #define UX_SYSTEM_DFU_STATE_DFU_MANIFEST_WAIT_RESET                     8
1715 #define UX_SYSTEM_DFU_STATE_DFU_UPLOAD_IDLE                             9
1716 #define UX_SYSTEM_DFU_STATE_DFU_ERROR                                   10
1717 
1718 /* Define basic class constants.  */
1719 
1720 #define UX_HOST_CLASS_PRINTER_NAME_LENGTH                               64
1721 
1722 
1723 /* Define USBX 2.0 TT Instance structure.  */
1724 
1725 typedef struct UX_HUB_TT_STRUCT
1726 {
1727 
1728     ULONG           ux_hub_tt_port_mapping;
1729     ULONG           ux_hub_tt_max_bandwidth;
1730 } UX_HUB_TT;
1731 
1732 
1733 /* Define USBX Class calling command structure.  */
1734 
1735 typedef struct UX_HOST_CLASS_COMMAND_STRUCT
1736 {
1737 
1738     UINT            ux_host_class_command_request;
1739     VOID            *ux_host_class_command_container;
1740     VOID            *ux_host_class_command_instance;
1741     UINT            ux_host_class_command_usage;
1742     UINT            ux_host_class_command_pid;
1743     UINT            ux_host_class_command_vid;
1744     UINT            ux_host_class_command_class;
1745     UINT            ux_host_class_command_subclass;
1746     UINT            ux_host_class_command_protocol;
1747     UINT            ux_host_class_command_iad_class;
1748     UINT            ux_host_class_command_iad_subclass;
1749     UINT            ux_host_class_command_iad_protocol;
1750 
1751     struct UX_HOST_CLASS_STRUCT
1752                     *ux_host_class_command_class_ptr;
1753 } UX_HOST_CLASS_COMMAND;
1754 
1755 
1756 /* Define USBX Class container structure.  */
1757 
1758 typedef struct UX_HOST_CLASS_STRUCT
1759 {
1760 
1761 #if defined(UX_NAME_REFERENCED_BY_POINTER)
1762     const UCHAR     *ux_host_class_name;
1763 #else
1764     UCHAR           ux_host_class_name[UX_MAX_CLASS_NAME_LENGTH + 1]; /* "+1" for string null-terminator */
1765 #endif
1766 
1767 #if defined(UX_HOST_STANDALONE)
1768     UINT            (*ux_host_class_task_function)(struct UX_HOST_CLASS_STRUCT *);
1769 #endif
1770 
1771     UINT            ux_host_class_status;
1772     UINT            (*ux_host_class_entry_function) (struct UX_HOST_CLASS_COMMAND_STRUCT *);
1773     VOID            *ux_host_class_first_instance;
1774     VOID            *ux_host_class_client;
1775     VOID            *ux_host_class_media;
1776     VOID            *ux_host_class_ext;
1777 
1778 } UX_HOST_CLASS;
1779 
1780 
1781 /* Define USBX transfer request structure.  */
1782 
1783 typedef struct UX_TRANSFER_STRUCT
1784 {
1785 
1786     ULONG           ux_transfer_request_status;
1787     struct UX_ENDPOINT_STRUCT
1788                     *ux_transfer_request_endpoint;
1789     UCHAR *         ux_transfer_request_data_pointer;
1790     ULONG           ux_transfer_request_requested_length;
1791     ULONG           ux_transfer_request_actual_length;
1792     UINT            ux_transfer_request_type;
1793     UINT            ux_transfer_request_function;
1794     UINT            ux_transfer_request_value;
1795     UINT            ux_transfer_request_index;
1796     VOID            (*ux_transfer_request_completion_function) (struct UX_TRANSFER_STRUCT *);
1797     VOID            *ux_transfer_request_class_instance;
1798     ULONG           ux_transfer_request_maximum_length;
1799     ULONG           ux_transfer_request_timeout_value;
1800     UINT            ux_transfer_request_completion_code;
1801     ULONG           ux_transfer_request_packet_length;
1802     struct UX_TRANSFER_STRUCT
1803                     *ux_transfer_request_next_transfer_request;
1804     VOID            *ux_transfer_request_user_specific;
1805 #if !defined(UX_HOST_STANDALONE)
1806     UX_SEMAPHORE    ux_transfer_request_semaphore;
1807     UX_THREAD       *ux_transfer_request_thread_pending;
1808 #else
1809     UINT            ux_transfer_request_state;
1810     ULONG           ux_transfer_request_time_start;
1811     ULONG           ux_transfer_request_flags;
1812     struct UX_TRANSFER_STRUCT
1813                     *ux_transfer_request_next_pending;
1814 #endif
1815 } UX_TRANSFER;
1816 
1817 #if defined(UX_HOST_STANDALONE)
1818 #define UX_TRANSFER_STATE_RESET(tr)             ((tr)->ux_transfer_request_state = UX_STATE_RESET)
1819 #define UX_TRANSFER_STATE_IDLE(tr)              ((tr)->ux_transfer_request_state = UX_STATE_IDLE)
1820 #define UX_TRANSFER_STATE_IS_BUSY(tr)           UX_STATE_IS_BUSY((tr)->ux_transfer_request_state)
1821 #define UX_TRANSFER_STATE_IS_IDLE(tr)           ((tr)->ux_transfer_request_state == UX_STATE_IDLE)
1822 
1823 #define UX_TRANSFER_FLAGS_RESET(tr)             ((tr)->ux_transfer_request_flags = 0)
1824 #define UX_TRANSFER_FLAG_LOCK                   (0x1u << 0)
1825 #define UX_TRANSFER_FLAG_AUTO_WAIT              (0x1u << 1) /* Wait until transfer done.  */
1826 #define UX_TRANSFER_FLAG_AUTO_DEVICE_UNLOCK     (0x1u << 2) /* In wait case, unlock device after transfer done.  */
1827 #endif
1828 
1829 
1830 /* Define USBX Endpoint Descriptor structure.  */
1831 
1832 typedef struct UX_ENDPOINT_DESCRIPTOR_STRUCT
1833 {
1834 
1835     UCHAR           bLength;
1836     UCHAR           bDescriptorType;
1837     UCHAR           bEndpointAddress;
1838     UCHAR           bmAttributes;
1839     USHORT          wMaxPacketSize;
1840     UCHAR           bInterval;
1841     UCHAR           _align_size[1];
1842 } UX_ENDPOINT_DESCRIPTOR;
1843 
1844 #define UX_ENDPOINT_DESCRIPTOR_ENTRIES                                  6
1845 #define UX_ENDPOINT_DESCRIPTOR_LENGTH                                   7
1846 
1847 
1848 /* Define USBX Endpoint Container structure.  */
1849 
1850 typedef struct UX_ENDPOINT_STRUCT
1851 {
1852 
1853     ULONG           ux_endpoint;
1854     ULONG           ux_endpoint_state;
1855     void            *ux_endpoint_ed;
1856     struct UX_ENDPOINT_DESCRIPTOR_STRUCT
1857                     ux_endpoint_descriptor;
1858     struct UX_ENDPOINT_STRUCT
1859                     *ux_endpoint_next_endpoint;
1860     struct UX_INTERFACE_STRUCT
1861                     *ux_endpoint_interface;
1862     struct UX_DEVICE_STRUCT
1863                     *ux_endpoint_device;
1864     struct UX_TRANSFER_STRUCT
1865                     ux_endpoint_transfer_request;
1866 } UX_ENDPOINT;
1867 
1868 
1869 /* Define USBX Device Descriptor structure.  */
1870 
1871 typedef struct UX_DEVICE_DESCRIPTOR_STRUCT
1872 {
1873 
1874     UCHAR           bLength;
1875     UCHAR           bDescriptorType;
1876     USHORT          bcdUSB;
1877     UCHAR           bDeviceClass;
1878     UCHAR           bDeviceSubClass;
1879     UCHAR           bDeviceProtocol;
1880     UCHAR           bMaxPacketSize0;
1881     USHORT          idVendor;
1882     USHORT          idProduct;
1883     USHORT          bcdDevice;
1884     UCHAR           iManufacturer;
1885     UCHAR           iProduct;
1886     UCHAR           iSerialNumber;
1887     UCHAR           bNumConfigurations;
1888     UCHAR           _align_size[2];
1889 } UX_DEVICE_DESCRIPTOR;
1890 
1891 #define UX_DEVICE_DESCRIPTOR_ENTRIES                                    14
1892 #define UX_DEVICE_DESCRIPTOR_LENGTH                                     18
1893 
1894 
1895 /* Define USBX Device Qualifier Descriptor structure.  */
1896 
1897 typedef struct UX_DEVICE_QUALIFIER_DESCRIPTOR_STRUCT
1898 {
1899 
1900     UCHAR           bLength;
1901     UCHAR           bDescriptorType;
1902     USHORT          bcdUSB;
1903     UCHAR           bDeviceClass;
1904     UCHAR           bDeviceSubClass;
1905     UCHAR           bDeviceProtocol;
1906     UCHAR           bMaxPacketSize0;
1907     UCHAR           bNumConfigurations;
1908     UCHAR           bReserved;
1909     UCHAR           _align_size[2];
1910 } UX_DEVICE_QUALIFIER_DESCRIPTOR;
1911 
1912 #define UX_DEVICE_QUALIFIER_DESCRIPTOR_ENTRIES                          9
1913 #define UX_DEVICE_QUALIFIER_DESCRIPTOR_LENGTH                           10
1914 
1915 
1916 /* Define USBX Other Speed Descriptor structure.  */
1917 
1918 typedef struct UX_OTHER_SPEED_DESCRIPTOR_STRUCT
1919 {
1920 
1921     UCHAR           bLength;
1922     UCHAR           bDescriptorType;
1923     USHORT          wTotalLength;
1924     UCHAR           bNumInterfaces;
1925     UCHAR           bConfigurationValue;
1926     UCHAR           iConfiguration;
1927     UCHAR           bmAttributes;
1928     ULONG           MaxPower;
1929 } UX_OTHER_SPEED_DESCRIPTOR;
1930 
1931 #define UX_OTHER_SPEED_DESCRIPTOR_ENTRIES                               8
1932 #define UX_OTHER_SPEED_DESCRIPTOR_LENGTH                                9
1933 
1934 
1935 /* Define USBX OTG Descriptor structure.  */
1936 
1937 typedef struct UX_OTG_DESCRIPTOR_STRUCT
1938 {
1939 
1940     UCHAR           bLength;
1941     UCHAR           bDescriptorType;
1942     UCHAR           bmAttributes;
1943     UCHAR           _align_bcdOTG[1];
1944     USHORT          bcdOTG;
1945     UCHAR           _algin_size[2];
1946 } UX_OTG_DESCRIPTOR;
1947 
1948 #define UX_OTG_DESCRIPTOR_ENTRIES                          4
1949 #define UX_OTG_DESCRIPTOR_LENGTH                           5
1950 
1951 
1952 /* Define USBX Interface Association Descriptor structure.  */
1953 
1954 typedef struct UX_INTERFACE_ASSOCIATION_DESCRIPTOR_STRUCT
1955 {
1956 
1957     UCHAR           bLength;
1958     UCHAR           bDescriptorType;
1959     UCHAR           bFirstInterface;
1960     UCHAR           bInterfaceCount;
1961     UCHAR           bFunctionClass;
1962     UCHAR           bFunctionSubClass;
1963     UCHAR           bFunctionProtocol;
1964     UCHAR           iFunction;
1965 } UX_INTERFACE_ASSOCIATION_DESCRIPTOR;
1966 
1967 #define UX_INTERFACE_ASSOCIATION_DESCRIPTOR_ENTRIES         8
1968 #define UX_INTERFACE_ASSOCIATION_DESCRIPTOR_LENGTH          8
1969 
1970 
1971 /* Define USBX Device Container structure.  */
1972 
1973 typedef struct UX_DEVICE_STRUCT
1974 {
1975 
1976     ULONG           ux_device_handle;
1977     ULONG           ux_device_type;
1978     ULONG           ux_device_state;
1979     ULONG           ux_device_address;
1980     ULONG           ux_device_speed;
1981     ULONG           ux_device_power_source;
1982     struct UX_CONFIGURATION_STRUCT
1983                     *ux_device_current_configuration;
1984     UCHAR           *ux_device_packed_configuration;
1985     ULONG           ux_device_packed_configuration_keep_count;
1986 #if !defined(UX_HOST_STANDALONE)
1987     UX_SEMAPHORE    ux_device_protection_semaphore;
1988 #endif
1989     struct UX_HOST_CLASS_STRUCT
1990                     *ux_device_class;
1991     VOID            *ux_device_class_instance;
1992     struct UX_CONFIGURATION_STRUCT
1993                     *ux_device_first_configuration;
1994     struct UX_DEVICE_DESCRIPTOR_STRUCT
1995                     ux_device_descriptor;
1996     struct UX_ENDPOINT_STRUCT
1997                     ux_device_control_endpoint;
1998     ULONG           ux_device_port_location;
1999 #if UX_MAX_HCD > 1
2000     struct UX_HCD_STRUCT
2001                     *ux_device_hcd;
2002 #endif
2003 #if UX_MAX_DEVICES > 1
2004     struct UX_DEVICE_STRUCT
2005                     *ux_device_parent;
2006     ULONG           ux_device_max_power;
2007     struct UX_HUB_TT_STRUCT
2008                     ux_device_hub_tt[UX_MAX_TT];
2009 #endif
2010 
2011 #if defined(UX_HOST_STANDALONE)
2012     ULONG           ux_device_flags;
2013 
2014     struct UX_DEVICE_STRUCT
2015                     *ux_device_enum_next;
2016     struct UX_TRANSFER_STRUCT
2017                     *ux_device_enum_trans;
2018     union {
2019         struct UX_DEVICE_STRUCT
2020                     *device;
2021         struct UX_CONFIGURATION_STRUCT
2022                     *configuration;
2023         struct UX_INTERFACE_STRUCT
2024                     *interface;
2025         VOID        *ptr;
2026     }               ux_device_enum_inst;
2027 
2028     ULONG           ux_device_enum_wait_start;
2029     ULONG           ux_device_enum_wait_ms;
2030 
2031     UCHAR           ux_device_enum_state;
2032     UCHAR           ux_device_dbg_state;
2033     UCHAR           ux_device_enum_next_state;
2034     UCHAR           ux_device_enum_retry;
2035     UCHAR           ux_device_enum_port_status;
2036     UCHAR           ux_device_enum_index;
2037     UCHAR           reserved[2];
2038     ULONG           ux_device_dbg_state_count;
2039 #endif
2040 
2041 } UX_DEVICE;
2042 
2043 #if defined(UX_HOST_STANDALONE)
2044 #define UX_DEVICE_FLAG_LOCK                     0x01u
2045 #define UX_DEVICE_FLAG_RESET                    0x02u
2046 #define UX_DEVICE_FLAG_ENUM                     0x04u
2047 #define UX_DEVICE_FLAG_PROTECT                  0x08u
2048 #endif
2049 
2050 #if UX_MAX_HCD > 1
2051 #define UX_DEVICE_HCD_GET(d)                    ((d)->ux_device_hcd)
2052 #define UX_DEVICE_HCD_SET(d,h)                  do { (d)->ux_device_hcd = (h); } while(0)
2053 #define UX_DEVICE_HCD_MATCH(d,h)                ((d)->ux_device_hcd == (h))
2054 #else
2055 #define UX_DEVICE_HCD_GET(d)                    (_ux_system_host->ux_system_host_hcd_array)
2056 #define UX_DEVICE_HCD_SET(d,h)
2057 #define UX_DEVICE_HCD_MATCH(d,h)                (_ux_system_host->ux_system_host_hcd_array == (h))
2058 #endif
2059 
2060 
2061 #if UX_MAX_DEVICES > 1
2062 #define UX_DEVICE_PARENT_GET(d)                 ((d)->ux_device_parent)
2063 #define UX_DEVICE_PARENT_SET(d,p)               do { (d)->ux_device_parent = (p); } while(0)
2064 #define UX_DEVICE_PARENT_MATCH(d,p)             ((d)->ux_device_parent == (p))
2065 #define UX_DEVICE_PARENT_IS_HUB(d)              ((d)->ux_device_parent != UX_NULL)
2066 #define UX_DEVICE_PARENT_IS_ROOTHUB(d)          ((d)->ux_device_parent == UX_NULL)
2067 #define UX_DEVICE_MAX_POWER_GET(d)              ((d)->ux_device_max_power)
2068 #define UX_DEVICE_MAX_POWER_SET(d,p)            do {(d)->ux_device_max_power = (p); } while(0)
2069 #else
2070 #define UX_DEVICE_PARENT_GET(d)                 (UX_NULL)
2071 #define UX_DEVICE_PARENT_SET(d,p)               UX_PARAMETER_NOT_USED(p)
2072 #define UX_DEVICE_PARENT_MATCH(d,p)             ((p) == UX_NULL)
2073 #define UX_DEVICE_PARENT_IS_HUB(d)              (UX_FALSE)
2074 #define UX_DEVICE_PARENT_IS_ROOTHUB(d)          (UX_TRUE)
2075 #define UX_DEVICE_MAX_POWER_GET(d)              (UX_MAX_SELF_POWER)
2076 #define UX_DEVICE_MAX_POWER_SET(d,p)            UX_PARAMETER_NOT_USED(p)
2077 #endif
2078 #define UX_DEVICE_PORT_LOCATION_GET(d)          ((d)->ux_device_port_location)
2079 #define UX_DEVICE_PORT_LOCATION_SET(d,l)        do { (d)->ux_device_port_location = (l); } while(0)
2080 #define UX_DEVICE_PORT_LOCATION_MATCH(d,l)      ((d)->ux_device_port_location == (l))
2081 
2082 
2083 /* Define USBX Configuration Descriptor structure.  */
2084 
2085 typedef struct UX_CONFIGURATION_DESCRIPTOR_STRUCT
2086 {
2087 
2088     UCHAR           bLength;
2089     UCHAR           bDescriptorType;
2090     USHORT          wTotalLength;
2091     UCHAR           bNumInterfaces;
2092     UCHAR           bConfigurationValue;
2093     UCHAR           iConfiguration;
2094     UCHAR           bmAttributes;
2095     ULONG           MaxPower;
2096 } UX_CONFIGURATION_DESCRIPTOR;
2097 
2098 
2099 #define UX_CONFIGURATION_DESCRIPTOR_ENTRIES                             8
2100 #define UX_CONFIGURATION_DESCRIPTOR_LENGTH                              9
2101 
2102 
2103 /* Define USBX Configuration Container structure.  */
2104 
2105 typedef struct UX_CONFIGURATION_STRUCT
2106 {
2107 
2108     ULONG           ux_configuration_handle;
2109     ULONG           ux_configuration_state;
2110     ULONG           ux_configuration_otg_capabilities;
2111     struct UX_CONFIGURATION_DESCRIPTOR_STRUCT
2112                     ux_configuration_descriptor;
2113     struct UX_INTERFACE_STRUCT
2114                     *ux_configuration_first_interface;
2115     struct UX_CONFIGURATION_STRUCT
2116                     *ux_configuration_next_configuration;
2117     struct UX_DEVICE_STRUCT
2118                     *ux_configuration_device;
2119     ULONG           ux_configuration_iad_class;
2120     ULONG           ux_configuration_iad_subclass;
2121     ULONG           ux_configuration_iad_protocol;
2122 } UX_CONFIGURATION;
2123 
2124 #define UX_HOST_STACK_CONFIGURATION_INSTANCE_CREATE_ALL     0 /* Default: all things created.  */
2125 #define UX_HOST_STACK_CONFIGURATION_INSTANCE_CREATE_OWNED   1 /* Owned: class owned things created.  */
2126 #ifndef UX_HOST_STACK_CONFIGURATION_INSTANCE_CREATE_CONTROL
2127 #define UX_HOST_STACK_CONFIGURATION_INSTANCE_CREATE_CONTROL UX_HOST_STACK_CONFIGURATION_INSTANCE_CREATE_ALL
2128 #endif
2129 
2130 
2131 /* Define USBX Interface Descriptor structure.  */
2132 
2133 typedef struct UX_INTERFACE_DESCRIPTOR_STRUCT
2134 {
2135 
2136     UCHAR           bLength;
2137     UCHAR           bDescriptorType;
2138     UCHAR           bInterfaceNumber;
2139     UCHAR           bAlternateSetting;
2140     UCHAR           bNumEndpoints;
2141     UCHAR           bInterfaceClass;
2142     UCHAR           bInterfaceSubClass;
2143     UCHAR           bInterfaceProtocol;
2144     UCHAR           iInterface;
2145     UCHAR           _align_size[3];
2146 } UX_INTERFACE_DESCRIPTOR;
2147 
2148 #define UX_INTERFACE_DESCRIPTOR_ENTRIES                                 9
2149 #define UX_INTERFACE_DESCRIPTOR_LENGTH                                  9
2150 
2151 
2152 /* Define USBX Interface Container structure.  */
2153 
2154 typedef struct UX_INTERFACE_STRUCT
2155 {
2156 
2157     ULONG           ux_interface_handle;
2158     ULONG           ux_interface_state;
2159     UINT            ux_interface_current_alternate_setting;
2160     struct UX_INTERFACE_DESCRIPTOR_STRUCT
2161                     ux_interface_descriptor;
2162     struct UX_HOST_CLASS_STRUCT
2163                     *ux_interface_class;
2164     VOID            *ux_interface_class_instance;
2165     struct UX_ENDPOINT_STRUCT
2166                     *ux_interface_first_endpoint;
2167     struct UX_INTERFACE_STRUCT
2168                     *ux_interface_next_interface;
2169     struct UX_CONFIGURATION_STRUCT
2170                     *ux_interface_configuration;
2171     ULONG           ux_interface_iad_class;
2172     ULONG           ux_interface_iad_subclass;
2173     ULONG           ux_interface_iad_protocol;
2174 
2175 } UX_INTERFACE;
2176 
2177 
2178 /* Define USBX String Descriptor structure.  */
2179 
2180 typedef struct UX_STRING_DESCRIPTOR_STRUCT
2181 {
2182 
2183     UCHAR           bLength;
2184     UCHAR           bDescriptorType;
2185     UCHAR           bString[2];
2186 } UX_STRING_DESCRIPTOR;
2187 
2188 #define UX_STRING_DESCRIPTOR_ENTRIES                                    3
2189 #define UX_STRING_DESCRIPTOR_LENGTH                                     4
2190 
2191 
2192 /* Define USBX BOS Descriptor structure.  */
2193 
2194 typedef struct UX_BOS_DESCRIPTOR_STRUCT
2195 {
2196     UCHAR           bLength;
2197     UCHAR           bDescriptorType;
2198     USHORT          wTotalLength;
2199     UCHAR           bNumDeviceCaps;
2200     UCHAR           _align_size[3];
2201 } UX_BOS_DESCRIPTOR;
2202 
2203 #define UX_BOS_DESCRIPTOR_ENTRIES                                       4
2204 #define UX_BOS_DESCRIPTOR_LENGTH                                        5
2205 
2206 
2207 /* Define USBX USB 2.0 Descriptor structure.  */
2208 
2209 typedef struct UX_USB_2_0_EXTENSION_DESCRIPTOR_STRUCT
2210 {
2211     UCHAR           bLength;
2212     UCHAR           bDescriptorType;
2213     UCHAR           bDevCapabilityType;
2214     UCHAR           _align_bmAttributes[1];
2215     ULONG           bmAttributes;
2216 } UX_USB_2_0_EXTENSION_DESCRIPTOR;
2217 
2218 #define UX_USB_2_0_EXTENSION_DESCRIPTOR_ENTRIES                         4
2219 #define UX_USB_2_0_EXTENSION_DESCRIPTOR_LENGTH                          7
2220 
2221 
2222 /* Define USBX Container ID Descriptor structure.  */
2223 
2224 typedef struct UX_CONTAINER_ID_DESCRIPTOR_STRUCT
2225 {
2226     UCHAR           bLength;
2227     UCHAR           bDescriptorType;
2228     UCHAR           bDevCapabilityType;
2229     UCHAR           bReserved;
2230     ULONG           ContainerID[4];
2231 } UX_CONTAINER_ID_DESCRIPTOR;
2232 
2233 #define UX_CONTAINER_ID_DESCRIPTOR_ENTRIES                              8
2234 #define UX_CONTAINER_ID_DESCRIPTOR_LENGTH                               20
2235 
2236 
2237 /* Define USBX DFU functional descriptor.  */
2238 
2239 typedef struct UX_DFU_FUNCTIONAL_DESCRIPTOR_STRUCT
2240 {
2241 
2242     UCHAR           bLength;
2243     UCHAR           bDescriptorType;
2244     UCHAR           bmAttributes;
2245     UCHAR           _align_wDetachTimeOut[1];
2246     USHORT          wDetachTimeOut;
2247     USHORT          wTransferSize;
2248     USHORT          bcdDFUVersion;
2249     UCHAR           _align_size[2];
2250 } UX_DFU_FUNCTIONAL_DESCRIPTOR;
2251 
2252 #define UX_DFU_FUNCTIONAL_DESCRIPTOR_ENTRIES                            6
2253 #define UX_DFU_FUNCTIONAL_DESCRIPTOR_LENGTH                             9
2254 
2255 
2256 /* Define USBX Host Controller structure.  */
2257 
2258 typedef struct UX_HCD_STRUCT
2259 {
2260 
2261 #if defined(UX_NAME_REFERENCED_BY_POINTER)
2262     const UCHAR     *ux_hcd_name;
2263 #else
2264     UCHAR           ux_hcd_name[UX_MAX_HCD_NAME_LENGTH + 1]; /* "+1" for string null-terminator */
2265 #endif
2266 
2267     UINT            ux_hcd_status;
2268     UINT            ux_hcd_controller_type;
2269     UINT            ux_hcd_irq;
2270     UINT            ux_hcd_nb_root_hubs;
2271     UINT            ux_hcd_root_hub_signal[UX_MAX_ROOTHUB_PORT];
2272     UINT            ux_hcd_nb_devices;
2273     UINT            ux_hcd_thread_signal;
2274     ULONG           ux_hcd_rh_device_connection;
2275     ULONG           ux_hcd_io;
2276     UINT            (*ux_hcd_entry_function) (struct UX_HCD_STRUCT *, UINT, VOID *);
2277     void            *ux_hcd_controller_hardware;
2278 
2279 #if defined(UX_OTG_SUPPORT)
2280     UINT            ux_hcd_otg_capabilities;
2281 #endif
2282 
2283 #if UX_MAX_DEVICES > 1
2284     UCHAR           ux_hcd_address[16];
2285     UINT            ux_hcd_power_switch;
2286     ULONG           ux_hcd_available_bandwidth;
2287     ULONG           ux_hcd_version;
2288 #endif
2289 
2290 #if defined(UX_HOST_STANDALONE)
2291     ULONG           ux_hcd_flags;
2292 #endif
2293 } UX_HCD;
2294 
2295 
2296 /* Define USBX Device Transfer Request structure.  */
2297 
2298 typedef struct UX_SLAVE_TRANSFER_STRUCT
2299 {
2300 
2301     ULONG           ux_slave_transfer_request_status;
2302     ULONG           ux_slave_transfer_request_type;
2303     struct UX_SLAVE_ENDPOINT_STRUCT
2304                     *ux_slave_transfer_request_endpoint;
2305     UCHAR           *ux_slave_transfer_request_data_pointer;
2306     UCHAR           *ux_slave_transfer_request_current_data_pointer;
2307     ULONG           ux_slave_transfer_request_requested_length;
2308     ULONG           ux_slave_transfer_request_actual_length;
2309     ULONG           ux_slave_transfer_request_in_transfer_length;
2310     ULONG           ux_slave_transfer_request_transfer_length;
2311     ULONG           ux_slave_transfer_request_completion_code;
2312     ULONG           ux_slave_transfer_request_phase;
2313     VOID            (*ux_slave_transfer_request_completion_function) (struct UX_SLAVE_TRANSFER_STRUCT *);
2314 #if defined(UX_DEVICE_STANDALONE)
2315     ULONG           ux_slave_transfer_request_state;
2316 #else
2317     UX_SEMAPHORE    ux_slave_transfer_request_semaphore;
2318 #endif
2319     ULONG           ux_slave_transfer_request_timeout;
2320     ULONG           ux_slave_transfer_request_force_zlp;
2321     UCHAR           ux_slave_transfer_request_setup[UX_SETUP_SIZE];
2322     ULONG           ux_slave_transfer_request_status_phase_ignore;
2323 } UX_SLAVE_TRANSFER;
2324 
2325 #if defined(UX_DEVICE_STANDALONE)
2326 #define UX_SLAVE_TRANSFER_STATE_RESET(tr) ((tr)->ux_slave_transfer_request_state = UX_STATE_RESET)
2327 #endif
2328 
2329 
2330 /* Define USBX Device Controller Endpoint structure.  */
2331 
2332 typedef struct UX_SLAVE_ENDPOINT_STRUCT
2333 {
2334 
2335     ULONG           ux_slave_endpoint_status;
2336     ULONG           ux_slave_endpoint_state;
2337     void            *ux_slave_endpoint_ed;
2338     struct UX_ENDPOINT_DESCRIPTOR_STRUCT
2339                     ux_slave_endpoint_descriptor;
2340     struct UX_SLAVE_ENDPOINT_STRUCT
2341                     *ux_slave_endpoint_next_endpoint;
2342     struct UX_SLAVE_INTERFACE_STRUCT
2343                     *ux_slave_endpoint_interface;
2344     struct UX_SLAVE_DEVICE_STRUCT
2345                     *ux_slave_endpoint_device;
2346     struct UX_SLAVE_TRANSFER_STRUCT
2347                     ux_slave_endpoint_transfer_request;
2348 } UX_SLAVE_ENDPOINT;
2349 
2350 
2351 /* Define USBX Device Controller Interface structure.  */
2352 
2353 typedef struct UX_SLAVE_INTERFACE_STRUCT
2354 {
2355     ULONG           ux_slave_interface_status;
2356     struct UX_SLAVE_CLASS_STRUCT
2357                     *ux_slave_interface_class;
2358     VOID            *ux_slave_interface_class_instance;
2359 
2360     struct UX_INTERFACE_DESCRIPTOR_STRUCT
2361                     ux_slave_interface_descriptor;
2362     struct UX_SLAVE_INTERFACE_STRUCT
2363                     *ux_slave_interface_next_interface;
2364     struct UX_SLAVE_ENDPOINT_STRUCT
2365                     *ux_slave_interface_first_endpoint;
2366 } UX_SLAVE_INTERFACE;
2367 
2368 
2369 /* Define USBX Device Controller structure.  */
2370 
2371 typedef struct UX_SLAVE_DEVICE_STRUCT
2372 {
2373 
2374     ULONG           ux_slave_device_state;
2375     struct UX_DEVICE_DESCRIPTOR_STRUCT
2376                     ux_slave_device_descriptor;
2377     struct UX_SLAVE_ENDPOINT_STRUCT
2378                     ux_slave_device_control_endpoint;
2379     ULONG           ux_slave_device_configuration_selected;
2380     struct UX_CONFIGURATION_DESCRIPTOR_STRUCT
2381                     ux_slave_device_configuration_descriptor;
2382     struct UX_SLAVE_INTERFACE_STRUCT
2383                     *ux_slave_device_first_interface;
2384     struct UX_SLAVE_INTERFACE_STRUCT
2385                     *ux_slave_device_interfaces_pool;
2386     ULONG           ux_slave_device_interfaces_pool_number;
2387     struct UX_SLAVE_ENDPOINT_STRUCT
2388                     *ux_slave_device_endpoints_pool;
2389     ULONG           ux_slave_device_endpoints_pool_number;
2390     ULONG           ux_slave_device_power_state;
2391 
2392 } UX_SLAVE_DEVICE;
2393 
2394 
2395 /* Define USBX Device Controller structure.  */
2396 
2397 typedef struct UX_SLAVE_DCD_STRUCT
2398 {
2399 
2400     UINT            ux_slave_dcd_status;
2401     UINT            ux_slave_dcd_controller_type;
2402     UINT            ux_slave_dcd_otg_capabilities;
2403     UINT            ux_slave_dcd_irq;
2404     ULONG           ux_slave_dcd_io;
2405     ULONG           ux_slave_dcd_device_address;
2406     UINT            (*ux_slave_dcd_function) (struct UX_SLAVE_DCD_STRUCT *,UINT, VOID *);
2407     void            *ux_slave_dcd_controller_hardware;
2408 
2409 #if defined(UX_DEVICE_STANDALONE)
2410     UINT            (*ux_device_dcd_task_function)(struct UX_SLAVE_DCD_STRUCT *);
2411 #endif
2412 
2413 } UX_SLAVE_DCD;
2414 
2415 /* Define USBX Device Class Command container structure.  */
2416 
2417 typedef struct UX_SLAVE_CLASS_COMMAND_STRUCT
2418 {
2419 
2420     UINT            ux_slave_class_command_request;
2421     VOID            *ux_slave_class_command_container;
2422     VOID            *ux_slave_class_command_interface;
2423     UINT            ux_slave_class_command_pid;
2424     UINT            ux_slave_class_command_vid;
2425     UINT            ux_slave_class_command_class;
2426     UINT            ux_slave_class_command_subclass;
2427     UINT            ux_slave_class_command_protocol;
2428     struct UX_SLAVE_CLASS_STRUCT
2429                     *ux_slave_class_command_class_ptr;
2430     VOID            *ux_slave_class_command_parameter;
2431     VOID            *ux_slave_class_command_interface_number;
2432 
2433 } UX_SLAVE_CLASS_COMMAND;
2434 
2435 
2436 /* Define USBX Device Class container structure.  */
2437 
2438 typedef struct UX_SLAVE_CLASS_STRUCT
2439 {
2440 
2441 #if defined(UX_NAME_REFERENCED_BY_POINTER)
2442     const UCHAR     *ux_slave_class_name;
2443 #else
2444     UCHAR           ux_slave_class_name[UX_MAX_CLASS_NAME_LENGTH + 1]; /* "+1" for string null-terminator */
2445 #endif
2446 
2447     UINT            ux_slave_class_status;
2448     UINT            (*ux_slave_class_entry_function) (struct UX_SLAVE_CLASS_COMMAND_STRUCT *);
2449     VOID            *ux_slave_class_instance;
2450     VOID            *ux_slave_class_client;
2451 #if !defined(UX_DEVICE_STANDALONE)
2452     UX_THREAD       ux_slave_class_thread;
2453     VOID            *ux_slave_class_thread_stack;
2454 #else
2455     UINT            (*ux_slave_class_task_function)(VOID *class_instance);
2456 #endif
2457     VOID            *ux_slave_class_interface_parameter;
2458     ULONG           ux_slave_class_interface_number;
2459     ULONG           ux_slave_class_configuration_number;
2460     struct UX_SLAVE_INTERFACE_STRUCT
2461                     *ux_slave_class_interface;
2462 
2463 } UX_SLAVE_CLASS;
2464 
2465 #define UX_UCHAR_POINTER_ADD(a,b)                       (((UCHAR *) (a)) + ((UINT) (b)))
2466 #define UX_UCHAR_POINTER_SUB(a,b)                       (((UCHAR *) (a)) - ((UINT) (b)))
2467 #define UX_UCHAR_POINTER_DIF(a,b)                       ((ULONG)(((UCHAR *) (a)) - ((UCHAR *) (b))))
2468 #define UX_ULONG_POINTER_ADD(a,b)                       (((ULONG *) (a)) + ((UINT) (b)))
2469 #define UX_ULONG_POINTER_SUB(a,b)                       (((ULONG *) (a)) - ((UINT) (b)))
2470 #define UX_ULONG_POINTER_DIF(a,b)                       ((ULONG)(((ULONG *) (a)) - ((ULONG *) (b))))
2471 #define UX_POINTER_TO_ULONG_CONVERT(a)                  ((ULONG) ((VOID *) (a)))
2472 #define UX_ULONG_TO_POINTER_CONVERT(a)                  ((VOID *) ((ULONG) (a)))
2473 #define UX_POINTER_TO_ALIGN_TYPE_CONVERT(a)             ((ALIGN_TYPE) ((VOID *) (a)))
2474 #define UX_ALIGN_TYPE_TO_POINTER_CONVERT(a)             ((VOID *) ((ALIGN_TYPE) (a)))
2475 #define UX_LOOP_FOREVER                                 ((UINT) 1)
2476 #define UX_INDIRECT_VOID_TO_UCHAR_POINTER_CONVERT(a)    ((UCHAR **) ((VOID *) (a)))
2477 #define UX_UCHAR_TO_INDIRECT_UCHAR_POINTER_CONVERT(a)   ((UCHAR **) ((VOID *) (a)))
2478 #define UX_VOID_TO_UCHAR_POINTER_CONVERT(a)             ((UCHAR *) ((VOID *) (a)))
2479 #define UX_VOID_TO_INDIRECT_UCHAR_POINTER_CONVERT(a)    ((UCHAR **) ((VOID *) (a)))
2480 #define UX_VOID_TO_BYTE_POOL_POINTER_CONVERT(a)         ((UX_MEMORY_BYTE_POOL *) ((VOID *) (a)))
2481 #define UX_BYTE_POOL_TO_UCHAR_POINTER_CONVERT(a)        ((UCHAR *) ((VOID *) (a)))
2482 #ifndef UX_UCHAR_TO_ALIGN_TYPE_POINTER_CONVERT
2483 #define UX_UCHAR_TO_ALIGN_TYPE_POINTER_CONVERT(a)       ((ALIGN_TYPE *) ((VOID *) (a)))
2484 #endif
2485 #define UX_UCHAR_TO_INDIRECT_BYTE_POOL_POINTER(a)       ((UX_MEMORY_BYTE_POOL **) ((VOID *) (a)))
2486 #define UX_MEMORY_BLOCK_HEADER_SIZE                     (sizeof(UCHAR *) + sizeof(ALIGN_TYPE))
2487 
2488 #ifndef UX_BYTE_BLOCK_FREE
2489 #define UX_BYTE_BLOCK_FREE                              ((ULONG) 0xFFFFEEEEUL)
2490 #endif
2491 
2492 #ifndef UX_BYTE_BLOCK_MIN
2493 #define UX_BYTE_BLOCK_MIN                               ((ULONG) 20)
2494 #endif
2495 
2496 /* Define USBX Memory Management structure.  */
2497 
2498 typedef struct UX_MEMORY_BYTE_POOL_STRUCT
2499 {
2500 
2501     /* Define the number of available bytes in the pool.  */
2502     ULONG           ux_byte_pool_available;
2503 
2504     /* Define the number of fragments in the pool.  */
2505     UINT            ux_byte_pool_fragments;
2506 
2507     /* Define the search pointer used for initial searching for memory in a byte pool.  */
2508     UCHAR           *ux_byte_pool_search;
2509 
2510     /* Save the start address of the byte pool's memory area.  */
2511     UCHAR           *ux_byte_pool_start;
2512 
2513     /* Save the byte pool's size in bytes.  */
2514     ULONG           ux_byte_pool_size;
2515 
2516 #ifdef UX_ENABLE_MEMORY_STATISTICS
2517     ALIGN_TYPE      ux_byte_pool_min_free;
2518     ULONG           ux_byte_pool_alloc_count;
2519     ULONG           ux_byte_pool_alloc_total;
2520     ULONG           ux_byte_pool_alloc_max_count;
2521     ULONG           ux_byte_pool_alloc_max_total;
2522 #endif
2523 } UX_MEMORY_BYTE_POOL;
2524 
2525 #define UX_MEMORY_BYTE_POOL_REGULAR 0
2526 #define UX_MEMORY_BYTE_POOL_CACHE_SAFE 1
2527 #define UX_MEMORY_BYTE_POOL_NUM 2
2528 
2529 typedef struct UX_SYSTEM_STRUCT
2530 {
2531     UX_MEMORY_BYTE_POOL *ux_system_memory_byte_pool[UX_MEMORY_BYTE_POOL_NUM];
2532 
2533     UINT            ux_system_thread_lowest_priority;
2534 #if !defined(UX_STANDALONE)
2535     UX_MUTEX        ux_system_mutex;
2536 #endif
2537 
2538 #ifndef UX_DISABLE_ERROR_HANDLER
2539     UINT            ux_system_last_error;
2540     UINT            ux_system_error_count;
2541     VOID            (*ux_system_error_callback_function) (UINT system_level, UINT system_context, UINT error_code);
2542 #endif
2543 
2544 #ifdef UX_ENABLE_DEBUG_LOG
2545     ULONG           ux_system_debug_code;
2546     ULONG           ux_system_debug_count;
2547     UCHAR           *ux_system_debug_log_buffer;
2548     UCHAR           *ux_system_debug_log_head;
2549     UCHAR           *ux_system_debug_log_tail;
2550     ULONG           ux_system_debug_log_size;
2551     VOID            (*ux_system_debug_callback_function) (UCHAR *debug_message, ULONG debug_value);
2552 #endif
2553 } UX_SYSTEM;
2554 
2555 
2556 /* Define USBX System Host Data structure.  */
2557 
2558 typedef struct UX_SYSTEM_HOST_STRUCT
2559 {
2560 
2561 #if UX_MAX_CLASS_DRIVER > 1
2562     UINT            ux_system_host_max_class;
2563 #endif
2564     UX_HOST_CLASS   *ux_system_host_class_array;
2565 
2566 #if UX_MAX_HCD > 1
2567     UINT            ux_system_host_max_hcd;
2568 #endif
2569     UINT            ux_system_host_registered_hcd;
2570     UX_HCD          *ux_system_host_hcd_array;
2571 
2572 #if UX_MAX_DEVICES > 1
2573     ULONG           ux_system_host_max_devices;
2574 #endif
2575     UX_DEVICE       *ux_system_host_device_array;
2576 
2577     ULONG           ux_system_host_max_ed;
2578     ULONG           ux_system_host_max_td;
2579     ULONG           ux_system_host_max_iso_td;
2580 
2581 #if !defined(UX_HOST_STANDALONE)
2582     UCHAR           *ux_system_host_enum_thread_stack;
2583     UX_THREAD       ux_system_host_enum_thread;
2584     UX_SEMAPHORE    ux_system_host_enum_semaphore;
2585 #endif
2586 
2587 #if UX_MAX_DEVICES > 1
2588     VOID            (*ux_system_host_enum_hub_function) (VOID);
2589 #endif
2590 
2591 #if !defined(UX_HOST_STANDALONE)
2592     UCHAR           *ux_system_host_hcd_thread_stack;
2593     UX_THREAD       ux_system_host_hcd_thread;
2594     UX_SEMAPHORE    ux_system_host_hcd_semaphore;
2595 #endif
2596 
2597 #if defined(UX_OTG_SUPPORT) && !defined(UX_OTG_STANDALONE)
2598     UCHAR           *ux_system_host_hnp_polling_thread_stack;
2599     UX_THREAD       ux_system_host_hnp_polling_thread;
2600 #endif
2601 
2602 #if defined(UX_HOST_STANDALONE)
2603     struct UX_DEVICE_STRUCT
2604                     *ux_system_host_enum_device;
2605     struct UX_DEVICE_STRUCT
2606                     *ux_system_host_enum_lock;
2607     struct UX_TRANSFER_STRUCT
2608                     *ux_system_host_pending_transfers;
2609 #if UX_MAX_DEVICES > 1
2610     struct UX_HOST_CLASS_HUB_STRUCT
2611                     *ux_system_host_hub_list;
2612 #endif
2613 #endif
2614 
2615     UINT            (*ux_system_host_change_function) (ULONG, UX_HOST_CLASS *, VOID *);
2616 } UX_SYSTEM_HOST;
2617 
2618 #if UX_MAX_CLASS_DRIVER > 1
2619 #define UX_SYSTEM_HOST_MAX_CLASS_GET()          (_ux_system_host->ux_system_host_max_class)
2620 #define UX_SYSTEM_HOST_MAX_CLASS_SET(n)         do { _ux_system_host->ux_system_host_max_class = (n); } while(0)
2621 #else
2622 #define UX_SYSTEM_HOST_MAX_CLASS_GET()          (1)
2623 #define UX_SYSTEM_HOST_MAX_CLASS_SET(n)         UX_PARAMETER_NOT_USED(n)
2624 #endif
2625 
2626 #if UX_MAX_HCD > 1
2627 #define UX_SYSTEM_HOST_MAX_HCD_GET()            (_ux_system_host->ux_system_host_max_hcd)
2628 #define UX_SYSTEM_HOST_MAX_HCD_SET(n)           do { _ux_system_host->ux_system_host_max_hcd = (n); } while(0)
2629 #else
2630 #define UX_SYSTEM_HOST_MAX_HCD_GET()            (1)
2631 #define UX_SYSTEM_HOST_MAX_HCD_SET(n)           UX_PARAMETER_NOT_USED(n)
2632 #endif
2633 
2634 #if UX_MAX_DEVICES > 1
2635 #define UX_SYSTEM_HOST_MAX_DEVICES_SET(n)       do { _ux_system_host->ux_system_host_max_devices = (n); } while(0)
2636 #define UX_SYSTEM_HOST_MAX_DEVICES_GET()        (_ux_system_host->ux_system_host_max_devices)
2637 #else
2638 #define UX_SYSTEM_HOST_MAX_DEVICES_SET(n)       UX_PARAMETER_NOT_USED(n)
2639 #define UX_SYSTEM_HOST_MAX_DEVICES_GET()        (1)
2640 #endif
2641 
2642 
2643 typedef struct UX_SYSTEM_SLAVE_STRUCT
2644 {
2645 
2646     UX_SLAVE_DCD    ux_system_slave_dcd;
2647     UX_SLAVE_DEVICE ux_system_slave_device;
2648     UCHAR           *ux_system_slave_device_framework;
2649     ULONG           ux_system_slave_device_framework_length;
2650     UCHAR           *ux_system_slave_device_framework_full_speed;
2651     ULONG           ux_system_slave_device_framework_length_full_speed;
2652     UCHAR           *ux_system_slave_device_framework_high_speed;
2653     ULONG           ux_system_slave_device_framework_length_high_speed;
2654     UCHAR           *ux_system_slave_string_framework;
2655     ULONG           ux_system_slave_string_framework_length;
2656     UCHAR           *ux_system_slave_language_id_framework;
2657     ULONG           ux_system_slave_language_id_framework_length;
2658     UCHAR           *ux_system_slave_dfu_framework;
2659     ULONG           ux_system_slave_dfu_framework_length;
2660 #if UX_MAX_SLAVE_CLASS_DRIVER > 1
2661     UINT            ux_system_slave_max_class;
2662 #endif
2663     UX_SLAVE_CLASS  *ux_system_slave_class_array;
2664     UX_SLAVE_CLASS  *ux_system_slave_interface_class_array[UX_MAX_SLAVE_INTERFACES];
2665     ULONG           ux_system_slave_speed;
2666     ULONG           ux_system_slave_power_state;
2667     ULONG           ux_system_slave_remote_wakeup_capability;
2668     ULONG           ux_system_slave_remote_wakeup_enabled;
2669     ULONG           ux_system_slave_device_dfu_capabilities;
2670     ULONG           ux_system_slave_device_dfu_detach_timeout;
2671     ULONG           ux_system_slave_device_dfu_transfer_size;
2672     ULONG           ux_system_slave_device_dfu_state_machine;
2673     ULONG           ux_system_slave_device_dfu_mode;
2674     UINT            (*ux_system_slave_change_function) (ULONG);
2675     ULONG           ux_system_slave_device_vendor_request;
2676     UINT            (*ux_system_slave_device_vendor_request_function) (ULONG, ULONG, ULONG, ULONG, UCHAR *, ULONG *);
2677 
2678 } UX_SYSTEM_SLAVE;
2679 
2680 #if UX_MAX_SLAVE_CLASS_DRIVER > 1
2681 #define UX_SYSTEM_DEVICE_MAX_CLASS_SET(n)       do { _ux_system_slave->ux_system_slave_max_class = (n); } while(0)
2682 #define UX_SYSTEM_DEVICE_MAX_CLASS_GET()        (_ux_system_slave->ux_system_slave_max_class)
2683 #else
2684 #define UX_SYSTEM_DEVICE_MAX_CLASS_SET(n)       do { UX_PARAMETER_NOT_USED(n); } while(0)
2685 #define UX_SYSTEM_DEVICE_MAX_CLASS_GET()        (1)
2686 #endif
2687 
2688 typedef struct UX_SYSTEM_OTG_STRUCT
2689 {
2690 
2691 #if !defined(UX_OTG_STANDALONE)
2692     UX_THREAD       ux_system_otg_thread;
2693     UCHAR           *ux_system_otg_thread_stack;
2694     UX_SEMAPHORE    ux_system_otg_semaphore;
2695 #endif
2696     UINT            (*ux_system_otg_function) (ULONG);
2697     ULONG           ux_system_otg_mode;
2698     ULONG           ux_system_otg_io;
2699     ULONG           ux_system_otg_vbus_state;
2700     ULONG           ux_system_otg_change_mode_event;
2701     ULONG           ux_system_otg_change_vbus_event;
2702     ULONG           ux_system_otg_slave_role_swap_flag;
2703     ULONG           ux_system_otg_slave_set_feature_flag;
2704     ULONG           ux_system_otg_device_type;
2705     VOID            (*ux_system_otg_vbus_function) (ULONG);
2706     VOID            (*ux_system_otg_change_mode_callback) (ULONG);
2707 } UX_SYSTEM_OTG;
2708 
2709 /* Define Data Pump Class instance structure.  */
2710 
2711 
2712 typedef struct UX_HOST_CLASS_DPUMP_STRUCT
2713 {
2714 
2715     struct UX_HOST_CLASS_DPUMP_STRUCT
2716                     *ux_host_class_dpump_next_instance;
2717     UX_HOST_CLASS   *ux_host_class_dpump_class;
2718     UX_DEVICE       *ux_host_class_dpump_device;
2719     UX_INTERFACE    *ux_host_class_dpump_interface;
2720     UX_ENDPOINT     *ux_host_class_dpump_bulk_out_endpoint;
2721     UX_ENDPOINT     *ux_host_class_dpump_bulk_in_endpoint;
2722     UX_ENDPOINT     *ux_host_class_dpump_interrupt_endpoint;
2723     UINT            ux_host_class_dpump_state;
2724 #if !defined(UX_HOST_STANDALONE)
2725     UX_SEMAPHORE    ux_host_class_dpump_semaphore;
2726 #else
2727     ULONG           ux_host_class_dpump_flags;
2728 #endif
2729 } UX_HOST_CLASS_DPUMP;
2730 
2731 
2732 /* Define the system API mappings based on the error checking
2733    selected by the user.  Note: this section is only applicable to
2734    application source code, hence the conditional that turns off this
2735    stuff when the include file is processed by the ThreadX source. */
2736 
2737 #ifndef  UX_SOURCE_CODE
2738 
2739 
2740 /* Define USBX Services.  */
2741 
2742 #if defined(UX_SYSTEM_ENABLE_ERROR_CHECKING)
2743 #define ux_system_initialize                                    _ux_system_initialize
2744 #else
2745 #define ux_system_initialize                                    _uxe_system_initialize
2746 #endif
2747 
2748 #define ux_system_uninitialize                                  _ux_system_uninitialize
2749 #define ux_system_tasks_run                                     _ux_system_tasks_run
2750 
2751 #define ux_host_class_hub_entry                                 _ux_host_class_hub_entry
2752 
2753 #define ux_host_class_storage_entry                             _ux_host_class_storage_entry
2754 
2755 #if defined(UX_HOST_STACK_ENABLE_ERROR_CHECKING)
2756 
2757 #define ux_host_stack_class_get                                 _uxe_host_stack_class_get
2758 #define ux_host_stack_class_instance_get                        _uxe_host_stack_class_instance_get
2759 #define ux_host_stack_class_register                            _uxe_host_stack_class_register
2760 #define ux_host_stack_device_configuration_activate             _uxe_host_stack_device_configuration_activate
2761 #define ux_host_stack_device_configuration_deactivate           _uxe_host_stack_device_configuration_deactivate
2762 #define ux_host_stack_device_configuration_get                  _uxe_host_stack_device_configuration_get
2763 #define ux_host_stack_device_get                                _uxe_host_stack_device_get
2764 #define ux_host_stack_device_string_get                         _uxe_host_stack_device_string_get
2765 #define ux_host_stack_endpoint_transfer_abort                   _uxe_host_stack_endpoint_transfer_abort
2766 #define ux_host_stack_hcd_register                              _uxe_host_stack_hcd_register
2767 #define ux_host_stack_hcd_unregister                            _uxe_host_stack_hcd_unregister
2768 #define ux_host_stack_interface_endpoint_get                    _uxe_host_stack_interface_endpoint_get
2769 #define ux_host_stack_interface_setting_select                  _uxe_host_stack_interface_setting_select
2770 #define ux_host_stack_transfer_request                          _uxe_host_stack_transfer_request
2771 #define ux_host_stack_transfer_request_abort                    _uxe_host_stack_transfer_request_abort
2772 
2773 #else
2774 
2775 #define ux_host_stack_class_get                                 _ux_host_stack_class_get
2776 #define ux_host_stack_class_instance_get                        _ux_host_stack_class_instance_get
2777 #define ux_host_stack_class_register                            _ux_host_stack_class_register
2778 #define ux_host_stack_device_configuration_activate             _ux_host_stack_device_configuration_activate
2779 #define ux_host_stack_device_configuration_deactivate           _ux_host_stack_device_configuration_deactivate
2780 #define ux_host_stack_device_configuration_get                  _ux_host_stack_device_configuration_get
2781 #define ux_host_stack_device_get                                _ux_host_stack_device_get
2782 #define ux_host_stack_device_string_get                         _ux_host_stack_device_string_get
2783 #define ux_host_stack_endpoint_transfer_abort                   _ux_host_stack_endpoint_transfer_abort
2784 #define ux_host_stack_hcd_register                              _ux_host_stack_hcd_register
2785 #define ux_host_stack_hcd_unregister                            _ux_host_stack_hcd_unregister
2786 #define ux_host_stack_interface_endpoint_get                    _ux_host_stack_interface_endpoint_get
2787 #define ux_host_stack_interface_setting_select                  _ux_host_stack_interface_setting_select
2788 #define ux_host_stack_transfer_request                          _ux_host_stack_transfer_request
2789 #define ux_host_stack_transfer_request_abort                    _ux_host_stack_transfer_request_abort
2790 
2791 #endif
2792 
2793 #define ux_host_stack_class_instance_create                     _ux_host_stack_class_instance_create
2794 #define ux_host_stack_class_instance_destroy                    _ux_host_stack_class_instance_destroy
2795 #define ux_host_stack_class_unregister                          _ux_host_stack_class_unregister
2796 #define ux_host_stack_configuration_interface_get               _ux_host_stack_configuration_interface_get
2797 #define ux_host_stack_device_configuration_reset                _ux_host_stack_device_configuration_reset
2798 #define ux_host_stack_device_configuration_select               _ux_host_stack_device_configuration_select
2799 #define ux_host_stack_initialize                                _ux_host_stack_initialize
2800 #define ux_host_stack_uninitialize                              _ux_host_stack_uninitialize
2801 #define ux_host_stack_hnp_polling_thread_entry                  _ux_host_stack_hnp_polling_thread_entry
2802 #define ux_host_stack_role_swap                                 _ux_host_stack_role_swap
2803 
2804 #define ux_host_stack_tasks_run                                 _ux_host_stack_tasks_run
2805 #define ux_host_stack_transfer_run                              _ux_host_stack_transfer_run
2806 
2807 #define ux_utility_pci_class_scan                               _ux_utility_pci_class_scan
2808 #define ux_utility_pci_read                                     _ux_utility_pci_read
2809 #define ux_utility_pci_write                                    _ux_utility_pci_write
2810 
2811 #if defined(UX_DEVICE_STACK_ENABLE_ERROR_CHECKING)
2812 
2813 #define ux_device_stack_class_register                          _uxe_device_stack_class_register
2814 #define ux_device_stack_class_unregister                        _uxe_device_stack_class_unregister
2815 #define ux_device_stack_initialize                              _uxe_device_stack_initialize
2816 
2817 #else
2818 
2819 #define ux_device_stack_class_register                          _ux_device_stack_class_register
2820 #define ux_device_stack_class_unregister                        _ux_device_stack_class_unregister
2821 #define ux_device_stack_initialize                              _ux_device_stack_initialize
2822 
2823 #endif
2824 #define ux_device_stack_uninitialize                            _ux_device_stack_uninitialize
2825 
2826 #define ux_device_stack_alternate_setting_get                   _ux_device_stack_alternate_setting_get
2827 #define ux_device_stack_alternate_setting_set                   _ux_device_stack_alternate_setting_set
2828 #define ux_device_stack_configuration_get                       _ux_device_stack_configuration_get
2829 #define ux_device_stack_configuration_set                       _ux_device_stack_configuration_set
2830 #define ux_device_stack_descriptor_send                         _ux_device_stack_descriptor_send
2831 #define ux_device_stack_connect                                 _ux_device_stack_connect
2832 #define ux_device_stack_disconnect                              _ux_device_stack_disconnect
2833 #define ux_device_stack_endpoint_stall                          _ux_device_stack_endpoint_stall
2834 #define ux_device_stack_host_wakeup                             _ux_device_stack_host_wakeup
2835 #define ux_device_stack_interface_delete                        _ux_device_stack_interface_delete
2836 #define ux_device_stack_interface_get                           _ux_device_stack_interface_get
2837 #define ux_device_stack_interface_set                           _ux_device_stack_interface_set
2838 #define ux_device_stack_interface_start                         _ux_device_stack_interface_start
2839 #define ux_device_stack_transfer_request                        _ux_device_stack_transfer_request
2840 #define ux_device_stack_transfer_abort                          _ux_device_stack_transfer_abort
2841 
2842 #define ux_device_stack_tasks_run                               _ux_device_stack_tasks_run
2843 #define ux_device_stack_transfer_run                            _ux_device_stack_transfer_run
2844 
2845 #define ux_hcd_ehci_initialize                                  _ux_hcd_ehci_initialize
2846 #define ux_hcd_isp1161_initialize                               _ux_hcd_isp1161_initialize
2847 #define ux_hcd_ohci_initialize                                  _ux_hcd_ohci_initialize
2848 #define ux_hcd_sim_host_initialize                              _ux_hcd_sim_host_initialize
2849 #define ux_dcd_sim_slave_initialize                             _ux_dcd_sim_slave_initialize
2850 
2851 #define ux_network_driver_init                                  _ux_network_driver_init
2852 
2853 #endif
2854 
2855 
2856 /* Define USBX API prototypes.  */
2857 
2858 UINT    ux_system_initialize(VOID *non_cached_memory_pool_start, ULONG non_cached_memory_size,
2859                                 VOID *cached_memory_pool_start, ULONG cached_memory_size);
2860 UINT    ux_system_uninitialize(VOID);
2861 UINT    ux_system_tasks_run(VOID);
2862 
2863 UINT    uxe_system_initialize(VOID *non_cached_memory_pool_start, ULONG non_cached_memory_size,
2864                                 VOID *cached_memory_pool_start, ULONG cached_memory_size);
2865 
2866 
2867 /* Define USBX Host API prototypes.  */
2868 
2869 UINT    ux_hcd_ehci_initialize(UX_HCD *hcd);
2870 UINT    ux_hcd_isp1161_initialize(UX_HCD *hcd);
2871 UINT    ux_hcd_ohci_initialize(UX_HCD *hcd);
2872 UINT    ux_hcd_sim_host_initialize(UX_HCD *hcd);
2873 
2874 UINT    ux_host_stack_class_get(UCHAR *class_name, UX_HOST_CLASS **host_class);
2875 UINT    ux_host_stack_class_instance_create(UX_HOST_CLASS *host_class, VOID *class_instance);
2876 UINT    ux_host_stack_class_instance_destroy(UX_HOST_CLASS *host_class, VOID *class_instance);
2877 UINT    ux_host_stack_class_instance_get(UX_HOST_CLASS *host_class, UINT class_index, VOID **class_instance);
2878 UINT    ux_host_stack_class_register(UCHAR *class_name, UINT (*class_entry_function)(struct UX_HOST_CLASS_COMMAND_STRUCT *));
2879 UINT    ux_host_stack_class_unregister(UINT (*class_entry_function)(struct UX_HOST_CLASS_COMMAND_STRUCT *));
2880 UINT    ux_host_stack_configuration_interface_get(UX_CONFIGURATION *configuration, UINT interface_index,
2881                                     UINT alternate_setting_index, UX_INTERFACE **ux_interface);
2882 UINT    ux_host_stack_device_configuration_activate(UX_CONFIGURATION *configuration);
2883 UINT    ux_host_stack_device_configuration_deactivate(UX_DEVICE *device);
2884 UINT    ux_host_stack_device_configuration_get(UX_DEVICE *device, UINT configuration_index, UX_CONFIGURATION **configuration);
2885 UINT    ux_host_stack_device_configuration_select(UX_CONFIGURATION *configuration);
2886 UINT    ux_host_stack_device_get(ULONG device_index, UX_DEVICE **device);
2887 UINT    ux_host_stack_device_string_get(UX_DEVICE *device, UCHAR *descriptor_buffer, ULONG length, ULONG language_id, ULONG string_index);
2888 UINT    ux_host_stack_endpoint_transfer_abort(UX_ENDPOINT *endpoint);
2889 UINT    ux_host_stack_hcd_register(UCHAR *hcd_name, UINT (*hcd_initialize_function)(struct UX_HCD_STRUCT *), ULONG hcd_param1, ULONG hcd_param2);
2890 UINT    ux_host_stack_hcd_unregister(UCHAR *hcd_name, ULONG hcd_param1, ULONG hcd_param2);
2891 UINT    ux_host_stack_initialize(UINT (*ux_system_host_change_function)(ULONG, UX_HOST_CLASS *, VOID *));
2892 UINT    ux_host_stack_uninitialize(VOID);
2893 UINT    ux_host_stack_interface_endpoint_get(UX_INTERFACE *ux_interface, UINT endpoint_index, UX_ENDPOINT **endpoint);
2894 UINT    ux_host_stack_interface_setting_select(UX_INTERFACE *ux_interface);
2895 UINT    ux_host_stack_transfer_request(UX_TRANSFER *transfer_request);
2896 UINT    ux_host_stack_transfer_request_abort(UX_TRANSFER *transfer_request);
2897 VOID    ux_host_stack_hnp_polling_thread_entry(ULONG id);
2898 UINT    ux_host_stack_role_swap(UX_DEVICE *device);
2899 UINT    ux_host_stack_device_configuration_reset(UX_DEVICE *device);
2900 
2901 UINT    ux_host_stack_tasks_run(VOID);
2902 UINT    ux_host_stack_transfer_run(UX_TRANSFER *transfer_request);
2903 
2904 /* Define USBX Device API prototypes.  */
2905 
2906 UINT    ux_dcd_at91_initialize(ULONG dcd_io);
2907 UINT    ux_dcd_isp1181_initialize(ULONG dcd_io, ULONG dcd_irq, ULONG dcd_vbus_address);
2908 UINT    ux_dcd_ml6965_initialize(ULONG dcd_io, ULONG dcd_irq, ULONG dcd_vbus_address);
2909 UINT    ux_dcd_sim_slave_initialize(VOID);
2910 
2911 UINT    ux_device_class_storage_entry(UX_SLAVE_CLASS_COMMAND *command);
2912 VOID    ux_device_class_storage_thread(ULONG);
2913 UINT    ux_device_stack_alternate_setting_get(ULONG interface_value);
2914 UINT    ux_device_stack_alternate_setting_set(ULONG interface_value, ULONG alternate_setting_value);
2915 UINT    ux_device_stack_class_register(UCHAR *class_name,
2916                                     UINT (*class_entry_function)(struct UX_SLAVE_CLASS_COMMAND_STRUCT *),
2917                                     ULONG configuration_number,
2918                                     ULONG interface_number,
2919                                     VOID *parameter);
2920 UINT    ux_device_stack_class_unregister(UCHAR *class_name,
2921                                     UINT (*class_entry_function)(struct UX_SLAVE_CLASS_COMMAND_STRUCT *));
2922 UINT    ux_device_stack_configuration_get(VOID);
2923 UINT    ux_device_stack_configuration_set(ULONG configuration_value);
2924 UINT    ux_device_stack_descriptor_send(ULONG descriptor_type, ULONG request_index, ULONG host_length);
2925 UINT    ux_device_stack_disconnect(VOID);
2926 UINT    ux_device_stack_endpoint_stall(UX_SLAVE_ENDPOINT *endpoint);
2927 UINT    ux_device_stack_host_wakeup(VOID);
2928 UINT    ux_device_stack_initialize(UCHAR * device_framework_high_speed, ULONG device_framework_length_high_speed,
2929                                     UCHAR * device_framework_full_speed, ULONG device_framework_length_full_speed,
2930                                     UCHAR * string_framework, ULONG string_framework_length,
2931                                     UCHAR * language_id_framework, ULONG language_id_framework_length,
2932                                     UINT (*ux_system_slave_change_function)(ULONG));
2933 UINT    ux_device_stack_uninitialize(VOID);
2934 UINT    ux_device_stack_interface_delete(UX_SLAVE_INTERFACE *ux_interface);
2935 UINT    ux_device_stack_interface_get(UINT interface_value);
2936 UINT    ux_device_stack_interface_set(UCHAR * device_framework, ULONG device_framework_length,
2937                                     ULONG alternate_setting_value);
2938 UINT    ux_device_stack_interface_start(UX_SLAVE_INTERFACE *ux_interface);
2939 UINT    ux_device_stack_transfer_request(UX_SLAVE_TRANSFER *transfer_request, ULONG slave_length, ULONG host_length);
2940 UINT    ux_device_stack_transfer_request_abort(UX_SLAVE_TRANSFER *transfer_request, ULONG completion_code);
2941 
2942 UINT    ux_device_stack_tasks_run(VOID);
2943 UINT    ux_device_stack_transfer_run(UX_SLAVE_TRANSFER *transfer_request, ULONG slave_length, ULONG host_length);
2944 
2945 /* Include USBX utility and system file.  */
2946 
2947 #include "ux_utility.h"
2948 #include "ux_system.h"
2949 
2950 
2951 
2952 
2953 /* Determine if a C++ compiler is being used.  If so, complete the standard
2954    C conditional started above.  */
2955 #ifdef   __cplusplus
2956         }
2957 #endif
2958 
2959 
2960 #endif
2961 
2962 
2963