Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbscan.h Source File

usbscan.h

00001 /*
00002  * usbscan.h
00003  *
00004  * USB scanner definitions
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 __USBSCAN_H
00024 #define __USBSCAN_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 
00036 #define FILE_DEVICE_USB_SCAN              0x8000
00037 #define IOCTL_INDEX                       0x0800
00038 
00039 #define IOCTL_CANCEL_IO \
00040   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 1, METHOD_BUFFERED,FILE_ANY_ACCESS)
00041 
00042 #define IOCTL_GET_VERSION \
00043   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 0, METHOD_BUFFERED,FILE_ANY_ACCESS)
00044 
00045 #define IOCTL_GET_CHANNEL_ALIGN_RQST \
00046   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 5, METHOD_BUFFERED,FILE_ANY_ACCESS)
00047 
00048 #define IOCTL_GET_DEVICE_DESCRIPTOR \
00049   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 6, METHOD_BUFFERED,FILE_ANY_ACCESS)
00050 
00051 #define IOCTL_GET_PIPE_CONFIGURATION \
00052   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 10,METHOD_BUFFERED,FILE_ANY_ACCESS)
00053 
00054 #define IOCTL_GET_USB_DESCRIPTOR \
00055   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 8, METHOD_BUFFERED,FILE_ANY_ACCESS)
00056 
00057 #define IOCTL_READ_REGISTERS \
00058   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 3, METHOD_BUFFERED,FILE_ANY_ACCESS)
00059 
00060 #define IOCTL_RESET_PIPE \
00061   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 7, METHOD_BUFFERED,FILE_ANY_ACCESS)
00062 
00063 #define IOCTL_SEND_USB_REQUEST \
00064   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 9, METHOD_BUFFERED,FILE_ANY_ACCESS)
00065 
00066 #define IOCTL_SET_TIMEOUT \
00067   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 11,METHOD_BUFFERED,FILE_ANY_ACCESS)
00068 
00069 #define IOCTL_WAIT_ON_DEVICE_EVENT \
00070   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 2, METHOD_BUFFERED,FILE_ANY_ACCESS)
00071 
00072 #define IOCTL_WRITE_REGISTERS \
00073   CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
00074 
00075 
00076 #define MAX_NUM_PIPES                     8
00077 
00078 #define BULKIN_FLAG                       0x80
00079 
00080 typedef struct _CHANNEL_INFO {
00081   /*OUT*/ ULONG  EventChannelSize;
00082   /*OUT*/ ULONG  uReadDataAlignment;
00083   /*OUT*/ ULONG  uWriteDataAlignment;
00084 }CHANNEL_INFO, *PCHANNEL_INFO;
00085 
00086 typedef struct _DEVICE_DESCRIPTOR {
00087   /*OUT*/ USHORT  usVendorId; 
00088   /*OUT*/ USHORT  usProductId; 
00089   /*OUT*/ USHORT  usBcdDevice; 
00090   /*OUT*/ USHORT  usLanguageId; 
00091 } DEVICE_DESCRIPTOR, *PDEVICE_DESCRIPTOR;
00092 
00093 typedef struct _DRV_VERSION {
00094   /*OUT*/ ULONG  major;
00095   /*OUT*/ ULONG  minor;
00096   /*OUT*/ ULONG  internal; 
00097 } DRV_VERSION, *PDRV_VERSION;
00098 
00099 typedef struct _IO_BLOCK {
00100   /*IN*/ ULONG  uOffset;
00101   /*IN*/ ULONG  uLength;
00102   /*IN OUT*/ PUCHAR  pbyData;
00103   /*IN*/ ULONG  uIndex;
00104 } IO_BLOCK, *PIO_BLOCK;
00105 
00106 typedef struct _IO_BLOCK_EX {
00107   /*IN*/ ULONG  uOffset;
00108   /*IN*/ ULONG  uLength;
00109   /*IN OUT*/ PUCHAR  pbyData;
00110   /*IN*/ ULONG  uIndex;
00111   /*IN*/ UCHAR  bRequest;
00112   /*IN*/ UCHAR  bmRequestType;
00113   /*IN*/ UCHAR  fTransferDirectionIn;
00114 } IO_BLOCK_EX, *PIO_BLOCK_EX;
00115 
00116 typedef struct _USBSCAN_GET_DESCRIPTOR {
00117   /*IN*/ UCHAR  DescriptorType;
00118   /*IN*/ UCHAR  Index;
00119   /*IN*/ USHORT  LanguageId;
00120 } USBSCAN_GET_DESCRIPTOR, *PUSBSCAN_GET_DESCRIPTOR;
00121 
00122 typedef enum _RAW_PIPE_TYPE {
00123     USBSCAN_PIPE_CONTROL,
00124     USBSCAN_PIPE_ISOCHRONOUS,
00125     USBSCAN_PIPE_BULK,
00126     USBSCAN_PIPE_INTERRUPT
00127 } RAW_PIPE_TYPE;
00128 
00129 typedef struct _USBSCAN_PIPE_INFORMATION {
00130   USHORT  MaximumPacketSize;
00131   UCHAR  EndpointAddress;
00132   UCHAR  Interval;
00133   RAW_PIPE_TYPE  PipeType;
00134 } USBSCAN_PIPE_INFORMATION, *PUSBSCAN_PIPE_INFORMATION;
00135 
00136 typedef struct _USBSCAN_PIPE_CONFIGURATION {
00137   /*OUT*/ ULONG  NumberOfPipes;
00138   /*OUT*/ USBSCAN_PIPE_INFORMATION  PipeInfo[MAX_NUM_PIPES];
00139 } USBSCAN_PIPE_CONFIGURATION, *PUSBSCAN_PIPE_CONFIGURATION;
00140 
00141 typedef struct _USBSCAN_TIMEOUT {
00142   /*IN*/ ULONG  TimeoutRead;
00143   /*IN*/ ULONG  TimeoutWrite;
00144   /*IN*/ ULONG  TimeoutEvent;
00145 } USBSCAN_TIMEOUT, *PUSBSCAN_TIMEOUT;
00146 
00147 typedef enum _PIPE_TYPE {
00148     EVENT_PIPE,
00149     READ_DATA_PIPE,
00150     WRITE_DATA_PIPE,
00151     ALL_PIPE
00152 } PIPE_TYPE;
00153 
00154 #ifdef __cplusplus
00155 }
00156 #endif
00157 
00158 #endif /* __USBSCAN_H */