Naveen Neel / shedskin
Committer:
sca8er
Date:
Mon Mar 05 04:56:58 2012 +0000
Revision:
3:0c3bcea5b4d0
Parent:
2:5853bf44af9f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sca8er 2:5853bf44af9f 1 /*
sca8er 2:5853bf44af9f 2 * usbdi.h
sca8er 2:5853bf44af9f 3 *
sca8er 2:5853bf44af9f 4 * USBD and USB device driver definitions
sca8er 2:5853bf44af9f 5 *
sca8er 2:5853bf44af9f 6 * This file is part of the w32api package.
sca8er 2:5853bf44af9f 7 *
sca8er 2:5853bf44af9f 8 * Contributors:
sca8er 2:5853bf44af9f 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
sca8er 2:5853bf44af9f 10 *
sca8er 2:5853bf44af9f 11 * THIS SOFTWARE IS NOT COPYRIGHTED
sca8er 2:5853bf44af9f 12 *
sca8er 2:5853bf44af9f 13 * This source code is offered for use in the public domain. You may
sca8er 2:5853bf44af9f 14 * use, modify or distribute it freely.
sca8er 2:5853bf44af9f 15 *
sca8er 2:5853bf44af9f 16 * This code is distributed in the hope that it will be useful but
sca8er 2:5853bf44af9f 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
sca8er 2:5853bf44af9f 18 * DISCLAIMED. This includes but is not limited to warranties of
sca8er 2:5853bf44af9f 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sca8er 2:5853bf44af9f 20 *
sca8er 2:5853bf44af9f 21 */
sca8er 2:5853bf44af9f 22
sca8er 2:5853bf44af9f 23 #ifndef __USBDI_H
sca8er 2:5853bf44af9f 24 #define __USBDI_H
sca8er 2:5853bf44af9f 25
sca8er 2:5853bf44af9f 26 #if __GNUC__ >=3
sca8er 2:5853bf44af9f 27 #pragma GCC system_header
sca8er 2:5853bf44af9f 28 #endif
sca8er 2:5853bf44af9f 29
sca8er 2:5853bf44af9f 30 #ifdef __USB_H
sca8er 2:5853bf44af9f 31 #error usb.h cannot be included with usbdi.h
sca8er 2:5853bf44af9f 32 #else
sca8er 2:5853bf44af9f 33
sca8er 2:5853bf44af9f 34 #ifdef __cplusplus
sca8er 2:5853bf44af9f 35 extern "C" {
sca8er 2:5853bf44af9f 36 #endif
sca8er 2:5853bf44af9f 37
sca8er 2:5853bf44af9f 38 #include "ntddk.h"
sca8er 2:5853bf44af9f 39 #include "usbioctl.h"
sca8er 2:5853bf44af9f 40
sca8er 2:5853bf44af9f 41 #define USBDI_VERSION 0x300
sca8er 2:5853bf44af9f 42
sca8er 2:5853bf44af9f 43 #define USB_DEFAULT_DEVICE_ADDRESS 0
sca8er 2:5853bf44af9f 44 #define USB_DEFAULT_ENDPOINT_ADDRESS 0
sca8er 2:5853bf44af9f 45 #define USB_DEFAULT_MAX_PACKET 64
sca8er 2:5853bf44af9f 46
sca8er 2:5853bf44af9f 47 #define URB_FROM_IRP(Irp) ((IoGetCurrentIrpStackLocation(Irp))->Parameters.Others.Argument1)
sca8er 2:5853bf44af9f 48
sca8er 2:5853bf44af9f 49 #define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
sca8er 2:5853bf44af9f 50 #define URB_FUNCTION_SELECT_INTERFACE 0x0001
sca8er 2:5853bf44af9f 51 #define URB_FUNCTION_ABORT_PIPE 0x0002
sca8er 2:5853bf44af9f 52 #define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003
sca8er 2:5853bf44af9f 53 #define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004
sca8er 2:5853bf44af9f 54 #define URB_FUNCTION_GET_FRAME_LENGTH 0x0005
sca8er 2:5853bf44af9f 55 #define URB_FUNCTION_SET_FRAME_LENGTH 0x0006
sca8er 2:5853bf44af9f 56 #define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007
sca8er 2:5853bf44af9f 57 #define URB_FUNCTION_CONTROL_TRANSFER 0x0008
sca8er 2:5853bf44af9f 58 #define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
sca8er 2:5853bf44af9f 59 #define URB_FUNCTION_ISOCH_TRANSFER 0x000A
sca8er 2:5853bf44af9f 60 #define URB_FUNCTION_RESET_PIPE 0x001E
sca8er 2:5853bf44af9f 61 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
sca8er 2:5853bf44af9f 62 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
sca8er 2:5853bf44af9f 63 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
sca8er 2:5853bf44af9f 64 #define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C
sca8er 2:5853bf44af9f 65 #define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
sca8er 2:5853bf44af9f 66 #define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029
sca8er 2:5853bf44af9f 67 #define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D
sca8er 2:5853bf44af9f 68 #define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E
sca8er 2:5853bf44af9f 69 #define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F
sca8er 2:5853bf44af9f 70 #define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023
sca8er 2:5853bf44af9f 71 #define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010
sca8er 2:5853bf44af9f 72 #define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011
sca8er 2:5853bf44af9f 73 #define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012
sca8er 2:5853bf44af9f 74 #define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022
sca8er 2:5853bf44af9f 75 #define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013
sca8er 2:5853bf44af9f 76 #define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014
sca8er 2:5853bf44af9f 77 #define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015
sca8er 2:5853bf44af9f 78 #define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021
sca8er 2:5853bf44af9f 79 #define URB_FUNCTION_RESERVED0 0x0016
sca8er 2:5853bf44af9f 80 #define URB_FUNCTION_VENDOR_DEVICE 0x0017
sca8er 2:5853bf44af9f 81 #define URB_FUNCTION_VENDOR_INTERFACE 0x0018
sca8er 2:5853bf44af9f 82 #define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
sca8er 2:5853bf44af9f 83 #define URB_FUNCTION_VENDOR_OTHER 0x0020
sca8er 2:5853bf44af9f 84 #define URB_FUNCTION_CLASS_DEVICE 0x001A
sca8er 2:5853bf44af9f 85 #define URB_FUNCTION_CLASS_INTERFACE 0x001B
sca8er 2:5853bf44af9f 86 #define URB_FUNCTION_CLASS_ENDPOINT 0x001C
sca8er 2:5853bf44af9f 87 #define URB_FUNCTION_CLASS_OTHER 0x001F
sca8er 2:5853bf44af9f 88 #define URB_FUNCTION_RESERVED 0x001D
sca8er 2:5853bf44af9f 89 #define URB_FUNCTION_GET_CONFIGURATION 0x0026
sca8er 2:5853bf44af9f 90 #define URB_FUNCTION_GET_INTERFACE 0x0027
sca8er 2:5853bf44af9f 91 #define URB_FUNCTION_LAST 0x0029
sca8er 2:5853bf44af9f 92
sca8er 2:5853bf44af9f 93 typedef LONG USBD_STATUS;
sca8er 2:5853bf44af9f 94 typedef PVOID USBD_PIPE_HANDLE;
sca8er 2:5853bf44af9f 95 typedef PVOID USBD_CONFIGURATION_HANDLE;
sca8er 2:5853bf44af9f 96 typedef PVOID USBD_INTERFACE_HANDLE;
sca8er 2:5853bf44af9f 97
sca8er 2:5853bf44af9f 98 #define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0)
sca8er 2:5853bf44af9f 99 #define USBD_HALTED(Status) ((ULONG)(Status) >> 30 == 3)
sca8er 2:5853bf44af9f 100 #define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
sca8er 2:5853bf44af9f 101 #define USBD_STATUS(Status) ((ULONG)(Status) & 0x0FFFFFFFL)
sca8er 2:5853bf44af9f 102 #define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
sca8er 2:5853bf44af9f 103
sca8er 2:5853bf44af9f 104 #define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L)
sca8er 2:5853bf44af9f 105 #define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L)
sca8er 2:5853bf44af9f 106 #define USBD_STATUS_HALTED ((USBD_STATUS)0xC0000000L)
sca8er 2:5853bf44af9f 107 #define USBD_STATUS_ERROR ((USBD_STATUS)0x80000000L)
sca8er 2:5853bf44af9f 108 #define USBD_STATUS_NO_MEMORY ((USBD_STATUS)0x80000100L)
sca8er 2:5853bf44af9f 109 #define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L)
sca8er 2:5853bf44af9f 110 #define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
sca8er 2:5853bf44af9f 111 #define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
sca8er 2:5853bf44af9f 112 #define USBD_STATUS_REQUEST_FAILED ((USBD_STATUS)0x80000500L)
sca8er 2:5853bf44af9f 113 #define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
sca8er 2:5853bf44af9f 114 #define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
sca8er 2:5853bf44af9f 115 #define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
sca8er 2:5853bf44af9f 116 #define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
sca8er 2:5853bf44af9f 117 #define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L)
sca8er 2:5853bf44af9f 118 #define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L)
sca8er 2:5853bf44af9f 119 #define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
sca8er 2:5853bf44af9f 120 #define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L)
sca8er 2:5853bf44af9f 121 #define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
sca8er 2:5853bf44af9f 122 #define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
sca8er 2:5853bf44af9f 123 #define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
sca8er 2:5853bf44af9f 124 #define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
sca8er 2:5853bf44af9f 125 #define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
sca8er 2:5853bf44af9f 126 #define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL)
sca8er 2:5853bf44af9f 127 #define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL)
sca8er 2:5853bf44af9f 128 #define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
sca8er 2:5853bf44af9f 129 #define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
sca8er 2:5853bf44af9f 130 #define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
sca8er 2:5853bf44af9f 131 #define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L)
sca8er 2:5853bf44af9f 132 #define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
sca8er 2:5853bf44af9f 133 #define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
sca8er 2:5853bf44af9f 134 #define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
sca8er 2:5853bf44af9f 135 #define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L)
sca8er 2:5853bf44af9f 136 #define USBD_STATUS_FRAME_CONTROL_NOT_OWNED \
sca8er 2:5853bf44af9f 137 ((USBD_STATUS)0xC0000D00L)
sca8er 2:5853bf44af9f 138 #define USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR \
sca8er 2:5853bf44af9f 139 ((USBD_STATUS)0xC0000F00L)
sca8er 2:5853bf44af9f 140 #define USBD_STATUS_CANCELING ((USBD_STATUS)0x00020000L)
sca8er 2:5853bf44af9f 141
sca8er 2:5853bf44af9f 142 #define USBD_PIPE_DIRECTION_IN(pipeInformation) \
sca8er 2:5853bf44af9f 143 ((pipeInformation)->EndpointAddress & USB_ENDPOINT_DIRECTION_MASK)
sca8er 2:5853bf44af9f 144
sca8er 2:5853bf44af9f 145 struct _URB_HEADER {
sca8er 2:5853bf44af9f 146 USHORT Length;
sca8er 2:5853bf44af9f 147 USHORT Function;
sca8er 2:5853bf44af9f 148 USBD_STATUS Status;
sca8er 2:5853bf44af9f 149 PVOID UsbdDeviceHandle;
sca8er 2:5853bf44af9f 150 ULONG UsbdFlags;
sca8er 2:5853bf44af9f 151 };
sca8er 2:5853bf44af9f 152
sca8er 2:5853bf44af9f 153 struct _URB_HCD_AREA {
sca8er 2:5853bf44af9f 154 PVOID HcdEndpoint;
sca8er 2:5853bf44af9f 155 PIRP HcdIrp;
sca8er 2:5853bf44af9f 156 LIST_ENTRY HcdListEntry;
sca8er 2:5853bf44af9f 157 LIST_ENTRY HcdListEntry2;
sca8er 2:5853bf44af9f 158 PVOID HcdCurrentIoFlushPointer;
sca8er 2:5853bf44af9f 159 PVOID HcdExtension;
sca8er 2:5853bf44af9f 160 };
sca8er 2:5853bf44af9f 161
sca8er 2:5853bf44af9f 162 struct _URB_BULK_OR_INTERRUPT_TRANSFER {
sca8er 2:5853bf44af9f 163 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 164 USBD_PIPE_HANDLE PipeHandle;
sca8er 2:5853bf44af9f 165 ULONG TransferFlags;
sca8er 2:5853bf44af9f 166 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 167 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 168 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 169 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 170 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 171 };
sca8er 2:5853bf44af9f 172
sca8er 2:5853bf44af9f 173 struct _URB_CONTROL_DESCRIPTOR_REQUEST {
sca8er 2:5853bf44af9f 174 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 175 PVOID Reserved;
sca8er 2:5853bf44af9f 176 ULONG Reserved0;
sca8er 2:5853bf44af9f 177 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 178 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 179 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 180 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 181 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 182 USHORT Reserved1;
sca8er 2:5853bf44af9f 183 UCHAR Index;
sca8er 2:5853bf44af9f 184 UCHAR DescriptorType;
sca8er 2:5853bf44af9f 185 USHORT LanguageId;
sca8er 2:5853bf44af9f 186 USHORT Reserved2;
sca8er 2:5853bf44af9f 187 };
sca8er 2:5853bf44af9f 188
sca8er 2:5853bf44af9f 189 struct _URB_CONTROL_FEATURE_REQUEST {
sca8er 2:5853bf44af9f 190 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 191 PVOID Reserved;
sca8er 2:5853bf44af9f 192 ULONG Reserved2;
sca8er 2:5853bf44af9f 193 ULONG Reserved3;
sca8er 2:5853bf44af9f 194 PVOID Reserved4;
sca8er 2:5853bf44af9f 195 PMDL Reserved5;
sca8er 2:5853bf44af9f 196 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 197 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 198 USHORT Reserved0;
sca8er 2:5853bf44af9f 199 USHORT FeatureSelector;
sca8er 2:5853bf44af9f 200 USHORT Index;
sca8er 2:5853bf44af9f 201 USHORT Reserved1;
sca8er 2:5853bf44af9f 202 };
sca8er 2:5853bf44af9f 203
sca8er 2:5853bf44af9f 204 struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
sca8er 2:5853bf44af9f 205 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 206 PVOID Reserved;
sca8er 2:5853bf44af9f 207 ULONG Reserved0;
sca8er 2:5853bf44af9f 208 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 209 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 210 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 211 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 212 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 213 UCHAR Reserved1[8];
sca8er 2:5853bf44af9f 214 };
sca8er 2:5853bf44af9f 215
sca8er 2:5853bf44af9f 216 struct _URB_CONTROL_GET_INTERFACE_REQUEST {
sca8er 2:5853bf44af9f 217 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 218 PVOID Reserved;
sca8er 2:5853bf44af9f 219 ULONG Reserved0;
sca8er 2:5853bf44af9f 220 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 221 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 222 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 223 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 224 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 225 UCHAR Reserved1[4];
sca8er 2:5853bf44af9f 226 USHORT Interface;
sca8er 2:5853bf44af9f 227 USHORT Reserved2;
sca8er 2:5853bf44af9f 228 };
sca8er 2:5853bf44af9f 229
sca8er 2:5853bf44af9f 230 struct _URB_CONTROL_GET_STATUS_REQUEST {
sca8er 2:5853bf44af9f 231 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 232 PVOID Reserved;
sca8er 2:5853bf44af9f 233 ULONG Reserved0;
sca8er 2:5853bf44af9f 234 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 235 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 236 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 237 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 238 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 239 UCHAR Reserved1[4];
sca8er 2:5853bf44af9f 240 USHORT Index;
sca8er 2:5853bf44af9f 241 USHORT Reserved2;
sca8er 2:5853bf44af9f 242 };
sca8er 2:5853bf44af9f 243
sca8er 2:5853bf44af9f 244 struct _URB_CONTROL_TRANSFER {
sca8er 2:5853bf44af9f 245 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 246 USBD_PIPE_HANDLE PipeHandle;
sca8er 2:5853bf44af9f 247 ULONG TransferFlags;
sca8er 2:5853bf44af9f 248 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 249 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 250 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 251 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 252 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 253 UCHAR SetupPacket[8];
sca8er 2:5853bf44af9f 254 };
sca8er 2:5853bf44af9f 255
sca8er 2:5853bf44af9f 256 struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
sca8er 2:5853bf44af9f 257 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 258 PVOID Reserved;
sca8er 2:5853bf44af9f 259 ULONG TransferFlags;
sca8er 2:5853bf44af9f 260 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 261 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 262 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 263 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 264 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 265 UCHAR RequestTypeReservedBits;
sca8er 2:5853bf44af9f 266 UCHAR Request;
sca8er 2:5853bf44af9f 267 USHORT Value;
sca8er 2:5853bf44af9f 268 USHORT Index;
sca8er 2:5853bf44af9f 269 USHORT Reserved1;
sca8er 2:5853bf44af9f 270 };
sca8er 2:5853bf44af9f 271
sca8er 2:5853bf44af9f 272 struct _URB_FRAME_LENGTH_CONTROL {
sca8er 2:5853bf44af9f 273 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 274 };
sca8er 2:5853bf44af9f 275
sca8er 2:5853bf44af9f 276 struct _URB_GET_CURRENT_FRAME_NUMBER {
sca8er 2:5853bf44af9f 277 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 278 ULONG FrameNumber;
sca8er 2:5853bf44af9f 279 };
sca8er 2:5853bf44af9f 280
sca8er 2:5853bf44af9f 281 struct _URB_GET_FRAME_LENGTH {
sca8er 2:5853bf44af9f 282 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 283 ULONG FrameLength;
sca8er 2:5853bf44af9f 284 ULONG FrameNumber;
sca8er 2:5853bf44af9f 285 };
sca8er 2:5853bf44af9f 286
sca8er 2:5853bf44af9f 287 typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
sca8er 2:5853bf44af9f 288 ULONG Offset;
sca8er 2:5853bf44af9f 289 ULONG Length;
sca8er 2:5853bf44af9f 290 USBD_STATUS Status;
sca8er 2:5853bf44af9f 291 } USBD_ISO_PACKET_DESCRIPTOR, *PUSBD_ISO_PACKET_DESCRIPTOR;
sca8er 2:5853bf44af9f 292
sca8er 2:5853bf44af9f 293 struct _URB_ISOCH_TRANSFER {
sca8er 2:5853bf44af9f 294 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 295 USBD_PIPE_HANDLE PipeHandle;
sca8er 2:5853bf44af9f 296 ULONG TransferFlags;
sca8er 2:5853bf44af9f 297 ULONG TransferBufferLength;
sca8er 2:5853bf44af9f 298 PVOID TransferBuffer;
sca8er 2:5853bf44af9f 299 PMDL TransferBufferMDL;
sca8er 2:5853bf44af9f 300 struct _URB *UrbLink;
sca8er 2:5853bf44af9f 301 struct _URB_HCD_AREA hca;
sca8er 2:5853bf44af9f 302 ULONG StartFrame;
sca8er 2:5853bf44af9f 303 ULONG NumberOfPackets;
sca8er 2:5853bf44af9f 304 ULONG ErrorCount;
sca8er 2:5853bf44af9f 305 USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
sca8er 2:5853bf44af9f 306 };
sca8er 2:5853bf44af9f 307
sca8er 2:5853bf44af9f 308 struct _URB_PIPE_REQUEST {
sca8er 2:5853bf44af9f 309 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 310 USBD_PIPE_HANDLE PipeHandle;
sca8er 2:5853bf44af9f 311 ULONG Reserved;
sca8er 2:5853bf44af9f 312 };
sca8er 2:5853bf44af9f 313
sca8er 2:5853bf44af9f 314 struct _URB_SET_FRAME_LENGTH {
sca8er 2:5853bf44af9f 315 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 316 LONG FrameLengthDelta;
sca8er 2:5853bf44af9f 317 };
sca8er 2:5853bf44af9f 318
sca8er 2:5853bf44af9f 319 typedef struct _USBD_DEVICE_INFORMATION {
sca8er 2:5853bf44af9f 320 ULONG OffsetNext;
sca8er 2:5853bf44af9f 321 PVOID UsbdDeviceHandle;
sca8er 2:5853bf44af9f 322 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
sca8er 2:5853bf44af9f 323 } USBD_DEVICE_INFORMATION, *PUSBD_DEVICE_INFORMATION;
sca8er 2:5853bf44af9f 324
sca8er 2:5853bf44af9f 325 typedef enum _USBD_PIPE_TYPE {
sca8er 2:5853bf44af9f 326 UsbdPipeTypeControl,
sca8er 2:5853bf44af9f 327 UsbdPipeTypeIsochronous,
sca8er 2:5853bf44af9f 328 UsbdPipeTypeBulk,
sca8er 2:5853bf44af9f 329 UsbdPipeTypeInterrupt
sca8er 2:5853bf44af9f 330 } USBD_PIPE_TYPE;
sca8er 2:5853bf44af9f 331
sca8er 2:5853bf44af9f 332 /* USBD_PIPE_INFORMATION.PipeFlags constants */
sca8er 2:5853bf44af9f 333 #define USBD_PF_CHANGE_MAX_PACKET 0x00000001
sca8er 2:5853bf44af9f 334 #define USBD_PF_DOUBLE_BUFFER 0x00000002
sca8er 2:5853bf44af9f 335 #define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
sca8er 2:5853bf44af9f 336 #define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
sca8er 2:5853bf44af9f 337
sca8er 2:5853bf44af9f 338 typedef struct _USBD_PIPE_INFORMATION {
sca8er 2:5853bf44af9f 339 USHORT MaximumPacketSize;
sca8er 2:5853bf44af9f 340 UCHAR EndpointAddress;
sca8er 2:5853bf44af9f 341 UCHAR Interval;
sca8er 2:5853bf44af9f 342 USBD_PIPE_TYPE PipeType;
sca8er 2:5853bf44af9f 343 USBD_PIPE_HANDLE PipeHandle;
sca8er 2:5853bf44af9f 344 ULONG MaximumTransferSize;
sca8er 2:5853bf44af9f 345 ULONG PipeFlags;
sca8er 2:5853bf44af9f 346 } USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
sca8er 2:5853bf44af9f 347
sca8er 2:5853bf44af9f 348 typedef struct _USBD_INTERFACE_INFORMATION {
sca8er 2:5853bf44af9f 349 USHORT Length;
sca8er 2:5853bf44af9f 350 UCHAR InterfaceNumber;
sca8er 2:5853bf44af9f 351 UCHAR AlternateSetting;
sca8er 2:5853bf44af9f 352 UCHAR Class;
sca8er 2:5853bf44af9f 353 UCHAR SubClass;
sca8er 2:5853bf44af9f 354 UCHAR Protocol;
sca8er 2:5853bf44af9f 355 UCHAR Reserved;
sca8er 2:5853bf44af9f 356 USBD_INTERFACE_HANDLE InterfaceHandle;
sca8er 2:5853bf44af9f 357 ULONG NumberOfPipes;
sca8er 2:5853bf44af9f 358 USBD_PIPE_INFORMATION Pipes[1];
sca8er 2:5853bf44af9f 359 } USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;
sca8er 2:5853bf44af9f 360
sca8er 2:5853bf44af9f 361 struct _URB_SELECT_CONFIGURATION {
sca8er 2:5853bf44af9f 362 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 363 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
sca8er 2:5853bf44af9f 364 USBD_CONFIGURATION_HANDLE ConfigurationHandle;
sca8er 2:5853bf44af9f 365 USBD_INTERFACE_INFORMATION Interface;
sca8er 2:5853bf44af9f 366 };
sca8er 2:5853bf44af9f 367
sca8er 2:5853bf44af9f 368 struct _URB_SELECT_INTERFACE {
sca8er 2:5853bf44af9f 369 struct _URB_HEADER Hdr;
sca8er 2:5853bf44af9f 370 USBD_CONFIGURATION_HANDLE ConfigurationHandle;
sca8er 2:5853bf44af9f 371 USBD_INTERFACE_INFORMATION Interface;
sca8er 2:5853bf44af9f 372 };
sca8er 2:5853bf44af9f 373
sca8er 2:5853bf44af9f 374 typedef struct _USBD_VERSION_INFORMATION {
sca8er 2:5853bf44af9f 375 ULONG USBDI_Version;
sca8er 2:5853bf44af9f 376 ULONG Supported_USB_Version;
sca8er 2:5853bf44af9f 377 } USBD_VERSION_INFORMATION, *PUSBD_VERSION_INFORMATION;
sca8er 2:5853bf44af9f 378
sca8er 2:5853bf44af9f 379 typedef struct _URB {
sca8er 2:5853bf44af9f 380 union {
sca8er 2:5853bf44af9f 381 struct _URB_HEADER UrbHeader;
sca8er 2:5853bf44af9f 382 struct _URB_SELECT_INTERFACE UrbSelectInterface;
sca8er 2:5853bf44af9f 383 struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
sca8er 2:5853bf44af9f 384 struct _URB_PIPE_REQUEST UrbPipeRequest;
sca8er 2:5853bf44af9f 385 struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
sca8er 2:5853bf44af9f 386 struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
sca8er 2:5853bf44af9f 387 struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
sca8er 2:5853bf44af9f 388 struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
sca8er 2:5853bf44af9f 389 struct _URB_CONTROL_TRANSFER UrbControlTransfer;
sca8er 2:5853bf44af9f 390 struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
sca8er 2:5853bf44af9f 391 struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
sca8er 2:5853bf44af9f 392 struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
sca8er 2:5853bf44af9f 393 struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
sca8er 2:5853bf44af9f 394 struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
sca8er 2:5853bf44af9f 395 struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
sca8er 2:5853bf44af9f 396 struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
sca8er 2:5853bf44af9f 397 struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
sca8er 2:5853bf44af9f 398 };
sca8er 2:5853bf44af9f 399 } URB, *PURB;
sca8er 2:5853bf44af9f 400
sca8er 2:5853bf44af9f 401 #ifdef __cplusplus
sca8er 2:5853bf44af9f 402 }
sca8er 2:5853bf44af9f 403 #endif
sca8er 2:5853bf44af9f 404
sca8er 2:5853bf44af9f 405 #endif /* defined __USB_H */
sca8er 2:5853bf44af9f 406
sca8er 2:5853bf44af9f 407 #endif /* __USBDI_H */