Embed:
(wiki syntax)
Show/hide line numbers
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
1.7.2