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