Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
usb.h
00001 /* 00002 * usb.h 00003 * 00004 * USB support. 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __USB_H 00024 #define __USB_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __USBDI_H 00031 #error usbdi.h cannot be included with usb.h 00032 #else 00033 00034 #ifdef __cplusplus 00035 extern "C" { 00036 #endif 00037 00038 #include "ntddk.h" 00039 #include "usb100.h" 00040 00041 typedef LONG USBD_STATUS; 00042 typedef PVOID USBD_PIPE_HANDLE; 00043 typedef PVOID USBD_CONFIGURATION_HANDLE; 00044 typedef PVOID USBD_INTERFACE_HANDLE; 00045 00046 #define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L) 00047 #define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L) 00048 #define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L) 00049 #define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L) 00050 #define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L) 00051 #define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L) 00052 #define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L) 00053 #define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L) 00054 #define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L) 00055 #define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L) 00056 #define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L) 00057 #define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL) 00058 #define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL) 00059 #define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL) 00060 #define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL) 00061 #define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL) 00062 #define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L) 00063 #define USBD_STATUS_XACT_ERROR ((USBD_STATUS)0xC0000011L) 00064 #define USBD_STATUS_BABBLE_DETECTED ((USBD_STATUS)0xC0000012L) 00065 #define USBD_STATUS_DATA_BUFFER_ERROR ((USBD_STATUS)0xC0000013L) 00066 #define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L) 00067 #define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L) 00068 #define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L) 00069 #define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L) 00070 #define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L) 00071 #define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L) 00072 #define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L) 00073 #define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L) 00074 #define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L) 00075 #define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L) 00076 #define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L) 00077 #define USBD_STATUS_FRAME_CONTROL_NOT_OWNED \ 00078 ((USBD_STATUS)0xC0000D00L) 00079 #define USBD_STATUS_NOT_SUPPORTED ((USBD_STATUS)0xC0000E00L) 00080 #define USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR \ 00081 ((USBD_STATUS)0xC0000F00L) 00082 #define USBD_STATUS_INSUFFICIENT_RESOURCES \ 00083 ((USBD_STATUS)0xC0001000L) 00084 #define USBD_STATUS_SET_CONFIG_FAILED ((USBD_STATUS)0xC0002000L) 00085 #define USBD_STATUS_BUFFER_TOO_SMALL ((USBD_STATUS)0xC0003000L) 00086 #define USBD_STATUS_INTERFACE_NOT_FOUND ((USBD_STATUS)0xC0004000L) 00087 #define USBD_STATUS_INAVLID_PIPE_FLAGS ((USBD_STATUS)0xC0005000L) 00088 #define USBD_STATUS_TIMEOUT ((USBD_STATUS)0xC0006000L) 00089 #define USBD_STATUS_DEVICE_GONE ((USBD_STATUS)0xC0007000L) 00090 #define USBD_STATUS_STATUS_NOT_MAPPED ((USBD_STATUS)0xC0008000L) 00091 #define USBD_STATUS_CANCELED ((USBD_STATUS)0xC0010000L) 00092 #define USBD_STATUS_ISO_NOT_ACCESSED_BY_HW \ 00093 ((USBD_STATUS)0xC0020000L) 00094 #define USBD_STATUS_ISO_TD_ERROR ((USBD_STATUS)0xC0030000L) 00095 #define USBD_STATUS_ISO_NA_LATE_USBPORT ((USBD_STATUS)0xC0040000L) 00096 #define USBD_STATUS_ISO_NOT_ACCESSED_LATE ((USBD_STATUS)0xC0050000L) 00097 00098 #define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0) 00099 #define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1) 00100 #define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0) 00101 00102 /* URB TransferFlags constants */ 00103 #define USBD_TRANSFER_DIRECTION(x) ((x) & USBD_TRANSFER_DIRECTION_IN) 00104 #define USBD_TRANSFER_DIRECTION_OUT 0 00105 #define USBD_TRANSFER_DIRECTION_BIT 0 00106 #define USBD_TRANSFER_DIRECTION_IN (1 << USBD_TRANSFER_DIRECTION_BIT) 00107 #define USBD_SHORT_TRANSFER_OK_BIT 1 00108 #define USBD_SHORT_TRANSFER_OK (1 << USBD_SHORT_TRANSFER_OK_BIT) 00109 #define USBD_START_ISO_TRANSFER_ASAP_BIT 2 00110 #define USBD_START_ISO_TRANSFER_ASAP (1 << USBD_START_ISO_TRANSFER_ASAP_BIT) 00111 #define USBD_DEFAULT_PIPE_TRANSFER_BIT 3 00112 #define USBD_DEFAULT_PIPE_TRANSFER (1 << USBD_DEFAULT_PIPE_TRANSFER_BIT) 00113 00114 #define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags) & USBD_TRANSFER_DIRECTION) 00115 00116 #define VALID_TRANSFER_FLAGS_MASK \ 00117 (USBD_SHORT_TRANSFER_OK | \ 00118 USBD_TRANSFER_DIRECTION | \ 00119 USBD_START_ISO_TRANSFER_ASAP | \ 00120 USBD_DEFAULT_PIPE_TRANSFER) 00121 00122 #define USB_DEFAULT_DEVICE_ADDRESS 0 00123 #define USB_DEFAULT_ENDPOINT_ADDRESS 0 00124 #define USB_DEFAULT_MAX_PACKET 64 00125 #define USBD_ISO_START_FRAME_RANGE 1024 00126 #define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE 0xFFFFFFFF 00127 00128 typedef enum _USB_CONTROLLER_FLAVOR { 00129 USB_HcGeneric = 0, 00130 OHCI_Generic = 100, 00131 OHCI_Hydra, 00132 OHCI_NEC, 00133 UHCI_Generic = 200, 00134 UHCI_Piix4, 00135 UHCI_Piix3, 00136 UHCI_Ich2_1, 00137 UHCI_Ich2_2, 00138 UHCI_Ich1, 00139 UHCI_VIA = 250, 00140 EHCI_Generic = 1000, 00141 EHCI_NEC = 2000, 00142 EHCI_Lucent = 3000 00143 } USB_CONTROLLER_FLAVOR; 00144 00145 struct _URB_HEADER { 00146 USHORT Length; 00147 USHORT Function; 00148 USBD_STATUS Status; 00149 PVOID UsbdDeviceHandle; 00150 ULONG UsbdFlags; 00151 }; 00152 00153 typedef struct _USBD_VERSION_INFORMATION { 00154 ULONG USBDI_Version; 00155 ULONG Supported_USB_Version; 00156 } USBD_VERSION_INFORMATION, *PUSBD_VERSION_INFORMATION; 00157 00158 struct _URB_HCD_AREA { 00159 PVOID Reserved8[8]; 00160 }; 00161 00162 struct _URB_BULK_OR_INTERRUPT_TRANSFER { 00163 struct _URB_HEADER Hdr; 00164 USBD_PIPE_HANDLE PipeHandle; 00165 ULONG TransferFlags; 00166 ULONG TransferBufferLength; 00167 PVOID TransferBuffer; 00168 PMDL TransferBufferMDL; 00169 struct _URB *UrbLink; 00170 struct _URB_HCD_AREA hca; 00171 }; 00172 00173 struct _URB_CONTROL_DESCRIPTOR_REQUEST { 00174 struct _URB_HEADER Hdr; 00175 PVOID Reserved; 00176 ULONG Reserved0; 00177 ULONG TransferBufferLength; 00178 PVOID TransferBuffer; 00179 PMDL TransferBufferMDL; 00180 struct _URB *UrbLink; 00181 struct _URB_HCD_AREA hca; 00182 USHORT Reserved1; 00183 UCHAR Index; 00184 UCHAR DescriptorType; 00185 USHORT LanguageId; 00186 USHORT Reserved2; 00187 }; 00188 00189 struct _URB_CONTROL_FEATURE_REQUEST { 00190 struct _URB_HEADER Hdr; 00191 PVOID Reserved; 00192 ULONG Reserved2; 00193 ULONG Reserved3; 00194 PVOID Reserved4; 00195 PMDL Reserved5; 00196 struct _URB *UrbLink; 00197 struct _URB_HCD_AREA hca; 00198 USHORT Reserved0; 00199 USHORT FeatureSelector; 00200 USHORT Index; 00201 USHORT Reserved1; 00202 }; 00203 00204 struct _URB_CONTROL_GET_CONFIGURATION_REQUEST { 00205 struct _URB_HEADER Hdr; 00206 PVOID Reserved; 00207 ULONG Reserved0; 00208 ULONG TransferBufferLength; 00209 PVOID TransferBuffer; 00210 PMDL TransferBufferMDL; 00211 struct _URB *UrbLink; 00212 struct _URB_HCD_AREA hca; 00213 UCHAR Reserved1[8]; 00214 }; 00215 00216 struct _URB_CONTROL_GET_INTERFACE_REQUEST { 00217 struct _URB_HEADER Hdr; 00218 PVOID Reserved; 00219 ULONG Reserved0; 00220 ULONG TransferBufferLength; 00221 PVOID TransferBuffer; 00222 PMDL TransferBufferMDL; 00223 struct _URB *UrbLink; 00224 struct _URB_HCD_AREA hca; 00225 UCHAR Reserved1[4]; 00226 USHORT Interface; 00227 USHORT Reserved2; 00228 }; 00229 00230 struct _URB_CONTROL_GET_STATUS_REQUEST { 00231 struct _URB_HEADER Hdr; 00232 PVOID Reserved; 00233 ULONG Reserved0; 00234 ULONG TransferBufferLength; 00235 PVOID TransferBuffer; 00236 PMDL TransferBufferMDL; 00237 struct _URB *UrbLink; 00238 struct _URB_HCD_AREA hca; 00239 UCHAR Reserved1[4]; 00240 USHORT Index; 00241 USHORT Reserved2; 00242 }; 00243 00244 struct _URB_CONTROL_TRANSFER { 00245 struct _URB_HEADER Hdr; 00246 USBD_PIPE_HANDLE PipeHandle; 00247 ULONG TransferFlags; 00248 ULONG TransferBufferLength; 00249 PVOID TransferBuffer; 00250 PMDL TransferBufferMDL; 00251 struct _URB *UrbLink; 00252 struct _URB_HCD_AREA hca; 00253 UCHAR SetupPacket[8]; 00254 }; 00255 00256 struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST { 00257 struct _URB_HEADER Hdr; 00258 PVOID Reserved; 00259 ULONG TransferFlags; 00260 ULONG TransferBufferLength; 00261 PVOID TransferBuffer; 00262 PMDL TransferBufferMDL; 00263 struct _URB *UrbLink; 00264 struct _URB_HCD_AREA hca; 00265 UCHAR RequestTypeReservedBits; 00266 UCHAR Request; 00267 USHORT Value; 00268 USHORT Index; 00269 USHORT Reserved1; 00270 }; 00271 00272 struct _URB_FRAME_LENGTH_CONTROL { 00273 struct _URB_HEADER Hdr; 00274 }; 00275 00276 struct _URB_GET_CURRENT_FRAME_NUMBER { 00277 struct _URB_HEADER Hdr; 00278 ULONG FrameNumber; 00279 }; 00280 00281 struct _URB_GET_FRAME_LENGTH { 00282 struct _URB_HEADER Hdr; 00283 ULONG FrameLength; 00284 ULONG FrameNumber; 00285 }; 00286 00287 typedef struct _USBD_ISO_PACKET_DESCRIPTOR { 00288 ULONG Offset; 00289 ULONG Length; 00290 USBD_STATUS Status; 00291 } USBD_ISO_PACKET_DESCRIPTOR, *PUSBD_ISO_PACKET_DESCRIPTOR; 00292 00293 struct _URB_ISOCH_TRANSFER { 00294 struct _URB_HEADER Hdr; 00295 USBD_PIPE_HANDLE PipeHandle; 00296 ULONG TransferFlags; 00297 ULONG TransferBufferLength; 00298 PVOID TransferBuffer; 00299 PMDL TransferBufferMDL; 00300 struct _URB *UrbLink; 00301 struct _URB_HCD_AREA hca; 00302 ULONG StartFrame; 00303 ULONG NumberOfPackets; 00304 ULONG ErrorCount; 00305 USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1]; 00306 }; 00307 00308 typedef enum _USBD_PIPE_TYPE { 00309 UsbdPipeTypeControl, 00310 UsbdPipeTypeIsochronous, 00311 UsbdPipeTypeBulk, 00312 UsbdPipeTypeInterrupt 00313 } USBD_PIPE_TYPE; 00314 00315 typedef struct _USBD_PIPE_INFORMATION { 00316 USHORT MaximumPacketSize; 00317 UCHAR EndpointAddress; 00318 UCHAR Interval; 00319 USBD_PIPE_TYPE PipeType; 00320 USBD_PIPE_HANDLE PipeHandle; 00321 ULONG MaximumTransferSize; 00322 ULONG PipeFlags; 00323 } USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION ; 00324 00325 #define USBD_PIPE_DIRECTION_IN(pipeInformation) \ 00326 ((pipeInformation)->EndpointAddress & USB_ENDPOINT_DIRECTION_MASK) 00327 00328 typedef struct _USBD_INTERFACE_INFORMATION { 00329 USHORT Length; 00330 UCHAR InterfaceNumber; 00331 UCHAR AlternateSetting; 00332 UCHAR Class; 00333 UCHAR SubClass; 00334 UCHAR Protocol; 00335 UCHAR Reserved; 00336 USBD_INTERFACE_HANDLE InterfaceHandle; 00337 ULONG NumberOfPipes; 00338 USBD_PIPE_INFORMATION Pipes[1]; 00339 } USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION; 00340 00341 struct _URB_SELECT_INTERFACE { 00342 struct _URB_HEADER Hdr; 00343 USBD_CONFIGURATION_HANDLE ConfigurationHandle; 00344 USBD_INTERFACE_INFORMATION Interface; 00345 }; 00346 00347 struct _URB_SELECT_CONFIGURATION { 00348 struct _URB_HEADER Hdr; 00349 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 00350 USBD_CONFIGURATION_HANDLE ConfigurationHandle; 00351 USBD_INTERFACE_INFORMATION Interface; 00352 }; 00353 00354 struct _URB_PIPE_REQUEST { 00355 struct _URB_HEADER Hdr; 00356 USBD_PIPE_HANDLE PipeHandle; 00357 ULONG Reserved; 00358 }; 00359 00360 struct _URB_SET_FRAME_LENGTH { 00361 struct _URB_HEADER Hdr; 00362 LONG FrameLengthDelta; 00363 }; 00364 00365 typedef struct _URB { 00366 _ANONYMOUS_UNION union { 00367 struct _URB_HEADER UrbHeader; 00368 struct _URB_SELECT_INTERFACE UrbSelectInterface; 00369 struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration; 00370 struct _URB_PIPE_REQUEST UrbPipeRequest; 00371 struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl; 00372 struct _URB_GET_FRAME_LENGTH UrbGetFrameLength; 00373 struct _URB_SET_FRAME_LENGTH UrbSetFrameLength; 00374 struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber; 00375 struct _URB_CONTROL_TRANSFER UrbControlTransfer; 00376 struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer; 00377 struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer; 00378 struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest; 00379 struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest; 00380 struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest; 00381 struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest; 00382 struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest; 00383 struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest; 00384 } DUMMYUNIONNAME; 00385 } URB, *PURB; 00386 00387 #define URB_FROM_IRP(Irp) ((IoGetCurrentIrpStackLocation(Irp))->Parameters.Others.Argument1) 00388 00389 #define URB_FUNCTION_SELECT_CONFIGURATION 0x0000 00390 #define URB_FUNCTION_SELECT_INTERFACE 0x0001 00391 #define URB_FUNCTION_ABORT_PIPE 0x0002 00392 #define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003 00393 #define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004 00394 #define URB_FUNCTION_GET_FRAME_LENGTH 0x0005 00395 #define URB_FUNCTION_SET_FRAME_LENGTH 0x0006 00396 #define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007 00397 #define URB_FUNCTION_CONTROL_TRANSFER 0x0008 00398 #define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009 00399 #define URB_FUNCTION_ISOCH_TRANSFER 0x000A 00400 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B 00401 #define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C 00402 #define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D 00403 #define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E 00404 #define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F 00405 #define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010 00406 #define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011 00407 #define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012 00408 #define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013 00409 #define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014 00410 #define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015 00411 #define URB_FUNCTION_RESERVED_0X0016 0x0016 00412 #define URB_FUNCTION_VENDOR_DEVICE 0x0017 00413 #define URB_FUNCTION_VENDOR_INTERFACE 0x0018 00414 #define URB_FUNCTION_VENDOR_ENDPOINT 0x0019 00415 #define URB_FUNCTION_CLASS_DEVICE 0x001A 00416 #define URB_FUNCTION_CLASS_INTERFACE 0x001B 00417 #define URB_FUNCTION_CLASS_ENDPOINT 0x001C 00418 #define URB_FUNCTION_RESERVE_0X001D 0x001D 00419 #define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E 00420 #define URB_FUNCTION_CLASS_OTHER 0x001F 00421 #define URB_FUNCTION_VENDOR_OTHER 0x0020 00422 #define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021 00423 #define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022 00424 #define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023 00425 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024 00426 #define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025 00427 #define URB_FUNCTION_GET_CONFIGURATION 0x0026 00428 #define URB_FUNCTION_GET_INTERFACE 0x0027 00429 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028 00430 #define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029 00431 #define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR 0x002A 00432 #define URB_FUNCTION_RESERVE_0X002B 0x002B 00433 #define URB_FUNCTION_RESERVE_0X002C 0x002C 00434 #define URB_FUNCTION_RESERVE_0X002D 0x002D 00435 #define URB_FUNCTION_RESERVE_0X002E 0x002E 00436 #define URB_FUNCTION_RESERVE_0X002F 0x002F 00437 #define URB_FUNCTION_SYNC_RESET_PIPE 0x0030 00438 #define URB_FUNCTION_SYNC_CLEAR_STALL 0x0031 00439 00440 #define USBD_PF_CHANGE_MAX_PACKET 0x00000001 00441 #define USBD_PF_SHORT_PACKET_OPT 0x00000002 00442 #define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004 00443 #define USBD_PF_MAP_ADD_TRANSFERS 0x00000008 00444 00445 #define USBD_PF_VALID_MASK (USBD_PF_CHANGE_MAX_PACKET | \ 00446 USBD_PF_SHORT_PACKET_OPT | \ 00447 USBD_PF_ENABLE_RT_THREAD_ACCESS | \ 00448 USBD_PF_MAP_ADD_TRANSFERS) 00449 00450 #define OS_STRING_DESCRIPTOR_INDEX 0xEE 00451 00452 #define MS_GENRE_DESCRIPTOR_INDEX 0x0001 00453 #define MS_POWER_DESCRIPTOR_INDEX 0x0002 00454 00455 #define MS_OS_STRING_SIGNATURE L"MSFT100" 00456 00457 typedef struct _OS_STRING { 00458 UCHAR bLength; 00459 UCHAR bDescriptorType; 00460 WCHAR MicrosoftString[7]; 00461 UCHAR bVendorCode; 00462 UCHAR bPad; 00463 } OS_STRING, *POS_STRING; 00464 00465 #ifdef __cplusplus 00466 } 00467 #endif 00468 00469 #endif /* defined __USBDI_H */ 00470 00471 #endif /* __USB_H */
Generated on Tue Jul 12 2022 19:59:55 by
