usbscan.h 3.5 KB

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