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