www.pudn.com > wave-isotransfer.rar > usbdriver.h


#ifndef USBDRIVER_H 
#define USBDRIVER_H 
#endif 
 
#ifdef DRIVER 
#include "wdm.h" 
#include "usbdi.h" 
#include "usbdlib.h" 
#include  
#endif 
 
#ifndef _BYTE_DEFINED 
#define _BYTE_DEFINED 
typedef unsigned char BYTE; 
#endif  
 
#ifndef _WORD_DEFINED 
#define _WORD_DEFINED 
typedef unsigned short WORD; 
#endif  
 
typedef struct _GET_STRING_DESCRIPTOR_IN 
{ 
   UCHAR    Index; 
   USHORT   LanguageId; 
} GET_STRING_DESCRIPTOR_IN, *PGET_STRING_DESCRIPTOR_IN; 
 
typedef struct _ISO_TRANSFER_CONTROL 
{ 
   ULONG PipeNum; 
 
   ULONG PacketSize; 
 
   ULONG PacketCount; 
 
   ULONG FramesPerBuffer;  
 
   ULONG BufferCount;      
} ISO_TRANSFER_CONTROL, *PISO_TRANSFER_CONTROL; 
 
 
#ifdef DRIVER 
 
typedef struct _RING_BUFFER 
{ 
   PUCHAR      inPtr; 
   PUCHAR      outPtr; 
   ULONG       totalSize; 
   ULONG       currentSize; 
   KSPIN_LOCK	spinLock; 
   PUCHAR      buffer; 
} RING_BUFFER, *PRING_BUFFER; 
 
typedef struct _ISO_STREAM_OBJECT ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; 
 
typedef struct _ISO_TRANSFER_OBJECT 
{ 
   ULONG Frame; 
   PISO_STREAM_OBJECT StreamObject; 
   PURB Urb; 
   PIRP Irp; 
   KEVENT Done; 
} ISO_TRANSFER_OBJECT, *PISO_TRANSFER_OBJECT; 
 
typedef struct _ISO_STREAM_OBJECT 
{ 
   PDEVICE_OBJECT DeviceObject; 
   ULONG PacketSize; 
   ULONG NumPackets; 
   PUSBD_PIPE_INFORMATION PipeInfo; 
   PVOID TransferBuffer; 
   ULONG TransferBufferLength; 
   PVOID IsoDescriptorBuffer; 
   ULONG FramesPerBuffer; 
   ULONG BufferCount; 
   ULONG PendingTransfers; 
   PRING_BUFFER DataRingBuffer; 
   PRING_BUFFER DescriptorRingBuffer; 
   PISO_TRANSFER_OBJECT TransferObject; 
} ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; 
 
typedef struct tagDEVICE_EXTENSION 
{ 
   PDEVICE_OBJECT PhysicalDeviceObject;  
   PDEVICE_OBJECT LowerDeviceObject;	 
   BOOLEAN Stop;    
 
   USBD_CONFIGURATION_HANDLE ConfigurationHandle; 
 
   PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; 
 
   PUSBD_INTERFACE_INFORMATION Interface; 
 
   ULONG OpenHandles; 
 
   WCHAR DeviceLinkName[64]; 
 
   LONG Usages; 
 
   KEVENT evRemove; 
 
   BOOLEAN Removing; 
    
} DEVICE_EXTENSION, *PDEVICE_EXTENSION; 
 
NTSTATUS TestAddDevice(IN PDRIVER_OBJECT DriverObject, 
                       IN PDEVICE_OBJECT PhysicalDeviceObject); 
VOID TestDrvUnload(IN PDRIVER_OBJECT DriverObject); 
NTSTATUS TestPnpIrp(IN PDEVICE_OBJECT fdo, IN PIRP Irp); 
NTSTATUS TestPowerIrp(IN PDEVICE_OBJECT fdo,IN PIRP Irp); 
NTSTATUS TestCreate(IN PDEVICE_OBJECT fdo, IN PIRP Irp); 
NTSTATUS TestClose(IN PDEVICE_OBJECT fdo, IN PIRP Irp); 
NTSTATUS TestIOCTL(IN PDEVICE_OBJECT fdo,IN PIRP Irp); 
BOOLEAN LockDevice(IN PDEVICE_OBJECT fdo); 
void UnlockDevice(PDEVICE_OBJECT fdo); 
NTSTATUS CompleteRequest(IN PIRP Irp,IN NTSTATUS status,IN ULONG info); 
NTSTATUS UsbCallUSBDI(IN PDEVICE_OBJECT fdo,IN PURB Urb); 
NTSTATUS UsbResetPipe(IN PDEVICE_OBJECT DeviceObject,IN ULONG PipeNum); 
 
#endif    
 
 
#define Ezusb_IOCTL_INDEX  0x0800 
 
#define IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+0,\ 
                                                   METHOD_BUFFERED,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+1,\ 
                                                   METHOD_BUFFERED,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_Ezusb_GET_STRING_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+2,\ 
                                                   METHOD_BUFFERED,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_EZUSB_ISO_WRITE             CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+3,\ 
                                                   METHOD_IN_DIRECT,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_EZUSB_ISO_READ              CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+4,\ 
                                                   METHOD_OUT_DIRECT,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER  CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+5,\ 
                                                   METHOD_BUFFERED,  \ 
                                                   FILE_ANY_ACCESS) 
 
#define IOCTL_Ezusb_RESETPIPE             CTL_CODE(FILE_DEVICE_UNKNOWN,  \ 
                                                   Ezusb_IOCTL_INDEX+6,\ 
                                                   METHOD_IN_DIRECT,  \ 
                                                   FILE_ANY_ACCESS)