📄 whusb20.h
字号:
//////////////////////////////////////////////////////////////////////////////
//文件名称:Whceb01.h
//文件功能:设备扩展、各种驱动例程以及自定义函数的声明
//文件作者:张伟标
//工作部门:研究一室
//创建时间:2004年1月9日
//修改记录:
//版权所有:维豪信息技术有限公司
//
//Copyright 2004 WellHope Information Technology Corporation, Ltd.
//All rights reserved.
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Include WDM standard header with C linkage
#ifdef __cplusplus
extern "C"
{
#endif
//#include "wdm.h"
#include <wdm.h>
//#include <ntddk.h>
#include <stdio.h>
#include "usb100.h"
#include "usbioctl.h" //自己加的
#include "usbdi.h"
#include "usbdlib.h"
#ifdef __cplusplus
}
#endif
/////////////////////////////////////////////////////////////////////////////
// DebugPrint and Guid headers
#include "Whusb20Type.h"
#include "Whusb20DebugPrint.h"
#include "initguid.h"
#include "Whusb20Guid.h"
#include "Whusb20Trace.h"
#include "Whusb20Defs.h" //自定义结构及常量
/////////////////////////////////////////////////////////////////////////////
// Our device extension
#define MAX_CHANNEL 4
#define VALID_CHANNEL 1
#define WHCEB01_TIMEOUT -10000*2000 //20毫秒
#define WHCEB01_CREATE_TIMEOUT -10000*5000 //5s
typedef enum
{
CHNL_0 = 0,
CHNL_1 = 1,
CHNL_2 = 2, //为了方便与运算,所以定义为4
CHNL_3 = 3,
CHNL_ERROR = 0xff
}WHCEB01_CHNL;
typedef struct _WHCEB01_CHANNEL
{
WHCEB01_CHNL ChannelNum;
USBD_PIPE_HANDLE InputHandle;
USBD_PIPE_HANDLE OutputHandle;
}WHCEB01_CHANNEL,*PWHCEB01_CHANNEL;
typedef struct _WHCEB01_DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PDEVICE_OBJECT pdo;
PDEVICE_OBJECT NextStackDevice;
UNICODE_STRING ifSymLinkName;
BOOL GotResources; // Not stopped
BOOL Paused; // Stop or remove pending
BOOL IODisabled; // Paused or stopped
// BOOL InterruptsEnabled;
ULONG OpenHandleCount; // Count of open handles
ULONG UsageCount; // Pending I/O Count
BOOL Stopping; // In process of stopping
KEVENT StoppingEvent; // Set when all pending I/O complete
USBD_CONFIGURATION_HANDLE hWhceb01ConfigurationHandle; // Selected Configuration handle
USBD_INTERFACE_HANDLE hWhceb01InterfaceHandle;
USBD_PIPE_HANDLE hWhceb01PipeHandle; //原框架中的,现在没用
USBD_PIPE_HANDLE hWhceb01InterruptInHandle[4]; //中断输入管道句柄 注:实际为BULK传输方式
USBD_PIPE_HANDLE hWhceb01InterruptOutHandle[4];//中断输出管道句柄 注:实际为BULK传输方式
BOOL ChannelisUsed[4];
KMUTEX ChannelMutex;
KMUTEX FrameMutex;
KEVENT WaitEvent;
ULONG Whceb01NumOfPipes; //管道数目
WHCEB01_PDU_HEAD PduHead;
ULONG UsbTimeout; // Read timeout in seconds
// Resource allocations
BOOL GotPortOrMemory;
BOOL PortInIOSpace;
BOOL PortNeedsMapping;
PUCHAR PortBase;
PHYSICAL_ADDRESS PortStartAddress;
ULONG PortLength;
BOOL GotInterrupt;
ULONG Vector;
KIRQL Irql;
KINTERRUPT_MODE Mode;
KAFFINITY Affinity;
PKINTERRUPT InterruptObject;
} WHCEB01_DEVICE_EXTENSION, *PWHCEB01_DEVICE_EXTENSION;
/////////////////////////////////////////////////////////////////////////////
// Forward declarations of global functions
VOID Whceb01Unload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS Whceb01Power( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01Pnp( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01AddDevice( IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT pdo);
NTSTATUS Whceb01Create(IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01Close( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01Write( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01Read( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01DeviceControl( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS Whceb01SystemControl( IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
/////////////////////////////////////////////////////////////////////////////
BOOL LockDevice( IN PWHCEB01_DEVICE_EXTENSION dx);
void UnlockDevice( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS StartDevice( IN PWHCEB01_DEVICE_EXTENSION dx,
IN PCM_RESOURCE_LIST AllocatedResourcesTranslated);
VOID StopDevice( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS ForwardIrpAndWait( IN PDEVICE_OBJECT fdo, IN PIRP Irp);
/////////////////////////////////////////////////////////////////////////////
// USB routines
NTSTATUS UsbResetDevice( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS UsbGetUsbInfo( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS UsbGetDeviceDescriptor( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT PUSB_DEVICE_DESCRIPTOR deviceDescriptor,
OUT ULONG* Size);
NTSTATUS UsbGetConfigurationDescriptors( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT PUSB_CONFIGURATION_DESCRIPTOR *descriptors,
IN UCHAR ConfigIndex,
OUT ULONG* DescriptorsSize);
NTSTATUS UsbGetSpecifiedDescriptor( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT PVOID Descriptor,
IN UCHAR DescriptorType,
IN OUT ULONG* Size);
NTSTATUS UsbSelectConfiguration( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS UsbDeselectConfiguration( IN PWHCEB01_DEVICE_EXTENSION dx);
NTSTATUS UsbDoInterruptTransfer( IN PWHCEB01_DEVICE_EXTENSION dx, IN PVOID Buffer, ULONG* BufferSize);
NTSTATUS UsbGetStatuses( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT PUCHAR Statuses,
IN ULONG Size);
NTSTATUS UsbGetFrameInfo( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT ULONG* FrameLength,
OUT ULONG* FrameNumber,
OUT ULONG* FrameAlterNumber);
NTSTATUS UsbSendOutputReport( IN PWHCEB01_DEVICE_EXTENSION dx, IN UCHAR OutputData);
NTSTATUS UsbGetIdleRate( IN PWHCEB01_DEVICE_EXTENSION dx);
#define FreeIfAllocated(x) if( (x)!=NULL) { ExFreePool(x); (x) = NULL; }
/////////////////////////////////////////////////////////////////////////////
NTSTATUS CompleteIrp( IN PIRP Irp, IN NTSTATUS status, IN ULONG info);
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//自定义函数
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01ResetPipe
//函数功能:复位管道
//入口参数:设备扩展
// 要复位的管道句柄
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01ResetPipe( IN PWHCEB01_DEVICE_EXTENSION dx, IN USBD_PIPE_HANDLE hPipe );
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01ResetDevice
//函数功能:复位设备
//入口参数:设备扩展
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01ResetDevice( IN PWHCEB01_DEVICE_EXTENSION dx );
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01TransferHostToDevice
//函数功能:host-to-device控制传输函数
//入口参数:设备扩展
// host-to-device缓冲区指针
// host-to-device缓冲区长度
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01TransferHostToDevice( IN PWHCEB01_DEVICE_EXTENSION dx,
IN PVOID BufferHostToDevice,
IN ULONG BufferHostToDeviceLength);
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01TransferDeviceToHost
//函数功能:device-to-host控制传输函数
//入口参数:设备扩展
// device-to-host缓冲区指针
// device-to-host缓冲区长度
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01TransferDeviceToHost( IN PWHCEB01_DEVICE_EXTENSION dx,
OUT PVOID BufferDeviceToHost,
IN ULONG BufferDeviceToHostLength);
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01InterruptTransferHtD
//函数功能:host-to-device中断传输函数
//入口参数:设备扩展
// host-to-device缓冲区指针
// host-to-device缓冲区长度
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01InterruptTransferHtD( IN PWHCEB01_DEVICE_EXTENSION dx, PWHCEB01_CHANNEL pChannel ,
IN PVOID BufferHostToDevice,
IN ULONG BufferHostToDeviceLength);
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01InterruptTransferDtH
//函数功能:device-to-host中断传输函数
//入口参数:设备扩展
// device-to-host缓冲区指针
// device-to-host缓冲区长度
//返回值 :
/////////////////////////////////////////////////////////////////////////////
NTSTATUS Whceb01InterruptTransferDtH( IN PWHCEB01_DEVICE_EXTENSION dx, PWHCEB01_CHANNEL pChannel ,
OUT PVOID BufferDeviceToHost,
IN ULONG BufferDeviceToHostLength);
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01DelaySpecifiedNumberOfMs
//函数功能:延时函数
//入口参数:要延时的毫秒数
//返回值 :无
/////////////////////////////////////////////////////////////////////////////
VOID Whceb01DelaySpecifiedNumberOfMs( IN ULONG NumberOfMs);
/////////////////////////////////////////////////////////////////////////////
//函数名称:Whceb01DelaySpecifiedNumberOfUs
//函数功能:延时函数
//入口参数:要延时的微秒数
//返回值 :无
/////////////////////////////////////////////////////////////////////////////
VOID Whceb01DelaySpecifiedNumberOfUs( IN ULONG NumberOfUs);
NTSTATUS CallUSBDI( IN PWHCEB01_DEVICE_EXTENSION dx, IN PVOID UrbEtc,
IN ULONG IoControlCode,//=IOCTL_INTERNAL_USB_SUBMIT_URB,
IN ULONG Arg2);//=0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -