1 /* 2 * usbscan.h 3 * 4 * This file is part of the mingw-w64 runtime package. 5 * No warranty is given; refer to the file DISCLAIMER within this package. 6 */ 7 8 #ifndef _USBSCAN_H_ 9 #define _USBSCAN_H_ 10 11 #include <winapifamily.h> 12 13 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 14 15 #ifndef MAX_NUM_PIPES 16 #define MAX_NUM_PIPES 8 17 #endif 18 19 #define BULKIN_FLAG 0x80 20 21 #pragma pack(push, 8) 22 typedef struct _DRV_VERSION { 23 unsigned major; 24 unsigned minor; 25 unsigned internal; 26 } DRV_VERSION,*PDRV_VERSION; 27 28 typedef struct _IO_BLOCK { 29 unsigned uOffset; 30 unsigned uLength; 31 PUCHAR pbyData; 32 unsigned uIndex; 33 } IO_BLOCK,*PIO_BLOCK; 34 35 typedef struct _IO_BLOCK_EX { 36 unsigned uOffset; 37 unsigned uLength; 38 PUCHAR pbyData; 39 unsigned uIndex; 40 UCHAR bRequest; 41 UCHAR bmRequestType; 42 UCHAR fTransferDirectionIn; 43 } IO_BLOCK_EX,*PIO_BLOCK_EX; 44 45 typedef struct _CHANNEL_INFO { 46 unsigned EventChannelSize; 47 unsigned uReadDataAlignment; 48 unsigned uWriteDataAlignment; 49 } CHANNEL_INFO,*PCHANNEL_INFO; 50 51 typedef enum { 52 EVENT_PIPE, 53 READ_DATA_PIPE, 54 WRITE_DATA_PIPE, 55 ALL_PIPE 56 } PIPE_TYPE; 57 58 typedef struct _USBSCAN_GET_DESCRIPTOR { 59 UCHAR DescriptorType; 60 UCHAR Index; 61 USHORT LanguageId; 62 } USBSCAN_GET_DESCRIPTOR,*PUSBSCAN_GET_DESCRIPTOR; 63 64 typedef struct _DEVICE_DESCRIPTOR { 65 USHORT usVendorId; 66 USHORT usProductId; 67 USHORT usBcdDevice; 68 USHORT usLanguageId; 69 } DEVICE_DESCRIPTOR,*PDEVICE_DESCRIPTOR; 70 71 typedef enum _RAW_PIPE_TYPE { 72 USBSCAN_PIPE_CONTROL, 73 USBSCAN_PIPE_ISOCHRONOUS, 74 USBSCAN_PIPE_BULK, 75 USBSCAN_PIPE_INTERRUPT 76 } RAW_PIPE_TYPE; 77 78 typedef struct _USBSCAN_PIPE_INFORMATION { 79 USHORT MaximumPacketSize; 80 UCHAR EndpointAddress; 81 UCHAR Interval; 82 RAW_PIPE_TYPE PipeType; 83 } USBSCAN_PIPE_INFORMATION,*PUSBSCAN_PIPE_INFORMATION; 84 85 typedef struct _USBSCAN_PIPE_CONFIGURATION { 86 ULONG NumberOfPipes; 87 USBSCAN_PIPE_INFORMATION PipeInfo[MAX_NUM_PIPES]; 88 } USBSCAN_PIPE_CONFIGURATION,*PUSBSCAN_PIPE_CONFIGURATION; 89 90 typedef struct _USBSCAN_TIMEOUT { 91 ULONG TimeoutRead; 92 ULONG TimeoutWrite; 93 ULONG TimeoutEvent; 94 } USBSCAN_TIMEOUT,*PUSBSCAN_TIMEOUT; 95 #pragma pack(pop) 96 97 #define FILE_DEVICE_USB_SCAN 0x8000 98 #define IOCTL_INDEX 0x0800 99 #define ALL ALL_PIPE 100 #define IOCTL_ABORT_PIPE IOCTL_CANCEL_IO 101 102 #define IOCTL_GET_VERSION CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX, METHOD_BUFFERED, FILE_ANY_ACCESS) 103 #define IOCTL_CANCEL_IO CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+1, METHOD_BUFFERED, FILE_ANY_ACCESS) 104 #define IOCTL_WAIT_ON_DEVICE_EVENT CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+2, METHOD_BUFFERED, FILE_ANY_ACCESS) 105 #define IOCTL_READ_REGISTERS CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+3, METHOD_BUFFERED, FILE_ANY_ACCESS) 106 #define IOCTL_WRITE_REGISTERS CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+4, METHOD_BUFFERED, FILE_ANY_ACCESS) 107 #define IOCTL_GET_CHANNEL_ALIGN_RQST CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+5, METHOD_BUFFERED, FILE_ANY_ACCESS) 108 #define IOCTL_GET_DEVICE_DESCRIPTOR CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+6, METHOD_BUFFERED, FILE_ANY_ACCESS) 109 #define IOCTL_RESET_PIPE CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+7, METHOD_BUFFERED, FILE_ANY_ACCESS) 110 #define IOCTL_GET_USB_DESCRIPTOR CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+8, METHOD_BUFFERED, FILE_ANY_ACCESS) 111 #define IOCTL_SEND_USB_REQUEST CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+9, METHOD_BUFFERED, FILE_ANY_ACCESS) 112 #define IOCTL_GET_PIPE_CONFIGURATION CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+10, METHOD_BUFFERED, FILE_ANY_ACCESS) 113 #define IOCTL_SET_TIMEOUT CTL_CODE (FILE_DEVICE_USB_SCAN, IOCTL_INDEX+11, METHOD_BUFFERED, FILE_ANY_ACCESS) 114 115 #endif 116 117 #endif 118