WinXP下USB驱动开发(十)

3.4. 其他说明

Ø 编译环境:Win XP Checked Build Environment/Win XP Free Build Environment

Ø 开发环境:Microsoft Visual C++ 6.0

Ø 调试工具:Debugging Tools for Windows (x86)(WinDbg)

Ø 开发周期:2009-11-72009-10-24

Ø 设计人员/编码人员/调试人员:罗振辉

第4节 函数接口

4.1. USB_CONFIGURATION_DESCRIPTOR_INFO

描述

USB_CONFIGURATION_DESCRIPTOR_INFO用于描述设备配置信息,同等于USB_CONFIGURATION_DESCRIPTOR结构体的字符串版本。

class USB_CONFIGURATION_DESCRIPTOR_INFO{

public:

CString bLength;

CString bDescriptorType;

CString wTotalLength;

CString bNumInterfaces;

CString bConfigurationValue;

CString iConfiguration;

CString bmAttributes;

CString MaxPower;

};

成员

bLength

等同于USB_CONFIGURATION_DESCRIPTORbLength域。

bDescriptorType

等同于USB_CONFIGURATION_DESCRIPTORbDescriptorType域。

wTotalLength

等同于USB_CONFIGURATION_DESCRIPTORwTotalLength域。

bNumInterfaces

等同于USB_CONFIGURATION_DESCRIPTORbNumInterfaces域。

bConfigurationValue

等同于USB_CONFIGURATION_DESCRIPTORbConfigurationValue域。

iConfiguration

等同于USB_CONFIGURATION_DESCRIPTORiConfiguration域。

bmAttributes

等同于USB_CONFIGURATION_DESCRIPTORbmAttributes域。

MaxPower

等同于USB_CONFIGURATION_DESCRIPTORMaxPower域。

4.2. USB_INTERFACE_DESCRIPTOR_INFO

描述

USB_INTERFACE_DESCRIPTOR_INFO用于描述接口描述信息,同等于USB_INTERFACE_DESCRIPTOR结构体的字符串版本。

class USB_INTERFACE_DESCRIPTOR_INFO{

public:

CString bLength;

CString bDescriptorType;

CString bInterfaceNumber;

CString bAlternateSetting;

CString bNumEndpoints;

CString bInterfaceClass;

CString bInterfaceSubClass;

CString bInterfaceProtocol;

CString bInterface;

}

成员

bLength

等同于USB_INTERFACE_DESCRIPTORbLength域。

bDescriptorType

等同于USB_INTERFACE_DESCRIPTORbDescriptorType域。

bInterfaceNumber

等同于USB_INTERFACE_DESCRIPTORbInterfaceNumber域。

bAlternateSetting

等同于USB_INTERFACE_DESCRIPTORbAlternateSetting域。

bNumEndpoints

等同于USB_INTERFACE_DESCRIPTORbNumEndpoints域。

bInterfaceClass

等同于USB_INTERFACE_DESCRIPTORbInterfaceClass域。

bInterfaceSubClass

等同于USB_INTERFACE_DESCRIPTORbInterfaceSubClass域。

bInterfaceProtocol

等同于USB_INTERFACE_DESCRIPTORbInterfaceProtocol域。

bInterface

等同于USB_INTERFACE_DESCRIPTORbInterface域。

4.3. USB_ENDPOINT_DESCRIPTOR_INFO

描述

USB_ENDPOINT_DESCRIPTOR_INFO用于描述接口描述信息,同等于USB_ENDPOINT_DESCRIPTOR结构体的字符串版本。

class USB_ENDPOINT_DESCRIPTOR_INFO

{

public:

CString pipe;

CString bLength;

CString bDescriptorType;

CString bEndpointAddress;

CString bmAttributes;

CString wMaxPacketSize;

CString bInterval;

};

成员

Pipe

端点的名称。

bLength

等同于USB_ENDPOINT_DESCRIPTORbLength域。

bDescriptorType

等同于USB_ENDPOINT_DESCRIPTORbDescriptorType域。

bEndpointAddress

等同于USB_ENDPOINT_DESCRIPTORbEndpointAddress域。

bmAttributes

等同于USB_ENDPOINT_DESCRIPTORbmAttributes域。

wMaxPacketSize

等同于USB_ENDPOINT_DESCRIPTORwMaxPacketSize域。

bInterval

等同于USB_ENDPOINT_DESCRIPTORbInterval域。

4.4. UsbDesc

描述

该结构主要用于处理USB设备描述、接口和端点描述信息,使其与测试软件的List控件显示相对应,该结构体是上述USB_ENDPOINT_DESCRIPTOR_INFOUSB_INTERFACE

_DESCRIPTOR_INFOUSB_CONFIGURATION_DESCRIPTOR_INFO结构体的处理集合,其中包含三个数组信息usbcfgusbinterfacedescusbendpointdesc描述了设备相关的设备描述、接口描述和端点描述信息。

class AFX_EXT_CLASS UsbDesc

{

public:

USB_CONFIGURATION_DESCRIPTOR_INFO usbcfg[USB_CONFIGURATION_DESCRIPTOR_INFO_ARRAY_SIZE];

USB_INTERFACE_DESCRIPTOR_INFO usbinterfacedesc[USB_INTERFACE_DESCRIPTOR_INFO_ARRAY_SIZE];

USB_ENDPOINT_DESCRIPTOR_INFO usbendpointdesc[USB_ENDPOINT_DESCRIPTOR_INFO_ARRAY_SIZE];

int usbcfg_curindex;

int usbinter_curindex;

int usbendp_curindex;

UsbDesc();

virtual ~UsbDesc();

public:

void SetUsbFigReport(CListCtrl &m_usbfig);

void SetInterfaceDescReport(CListCtrl &m_interface);

void SetEndpointDescReport(CListCtrl &m_endpoint);

void SetAllDescReport(CListCtrl &m_usbfig,CListCtrl &m_interface,CListCtrl &m_endpoint);

void InsertFigItem(CListCtrl &m_usbfig);

void InsertInterfaceItem(CListCtrl &m_interface);

void InsertEndpointItem(CListCtrl &m_endpoint);

void InsertAllCtlItem(CListCtrl &m_usbfig,CListCtrl &m_interface,CListCtrl &m_endpoint);

};

成员

Usbcfg

数组用于记录设备描述符信息。

Usbinterfacedesc

数组用于记录接口描述信息。

Usbendpointdesc

数组用于记录端点描述信息。

usbcfg_curindex

记录设备描述信息块数。

usbinter_curindex

记录接口描述信息块数。

usbendp_curindex

记录端点描述信息块数。

函数

n SetUsbFigReport

描述

设置设备描述信息控件Header信息,同时改变其显示风格。

void UsbDesc::SetUsbFigReport(CListCtrl &m_usbfig)

参数

m_usbfig

设备描述信息控件的引用。

返回值

n SetInterfaceDescReport

描述

设置接口描述控件Header信息,同时改变其显示风格。

Void SetInterfaceDescReport(CListCtrl &m_interface)

参数

m_interface

接口描述控件的引用。

返回值

n SetEndpointDescReport

描述

设置端点描述控件Header信息,同时改变其显示风格。

Void SetEndpointDescReport(CListCtrl &m_endpoint)

参数

m_endpoint

端点描述控件的引用。

返回值

n SetAllDescReport

描述

设置设备、接口和端点描述控件Header信息,同时改变其显示风格。

Void SetAllDescReport(CListCtrl &m_usbfig,CListCtrl &m_interface,CListCtrl &m_endpoint)

参数

m_usbfig

设备描述信息控件的引用。

m_interface

接口描述控件的引用。

m_endpoint

端点描述控件的引用。

返回值

n InsertFigItem

描述

向设备描述控件中加入一条信息项。

Void InsertFigItem(CListCtrl &m_usbfig)

参数

m_usbfig

设备描述信息控件的引用。

返回值

n InsertInterfaceItem

描述

向接口描述控件中加入一条信息项。

Void InsertInterfaceItem(CListCtrl &m_interface)

参数

m_interface

接口描述控件的引用。

返回值

n InsertEndpointItem

描述

向端点描述控件中加入一条信息项。

Void InsertEndpointItem(CListCtrl &m_endpoint)

参数

m_endpoint

端点描述控件的引用。

返回值

n InsertAllCtlItem

描述

向设备、接口和端点描述控件中加入一条信息项。

Void InsertEndpointItem(CListCtrl &m_endpoint)

参数

m_usbfig

设备描述信息控件的引用。

m_interface

接口描述控件的引用。

m_endpoint

端点描述控件的引用。

返回值

4.5. LPC2400_USB_OpenPipe

描述

打开端点,返回端点操作句柄。

HANDLE _declspec(dllexport) LPC2400_USB_OpenPipe(IN int PipeID);

参数

PipeID

端点号。

返回值

失败:返回INVALID_HANDLE_VALUE 成功:返回设备句柄

4.6. LPC2400_USB_ReadData

描述

从设备缓存读取一段数据,保存在rData当中

BOOL _declspec(dllexport) LPC2400_USB_ReadData(IN HANDLE hRead,

OUT char cdata[],

IN DWORD readlen);

参数

hRead

设备句柄。

Readlen

需要从设备读取数据的长度。

rData

保存读取的数据。

返回值

TRUE:操作成功 FALSE:失败

4.7. LPC2400_USB_WriteData

描述

向设备写入一段数据。

BOOL _declspec(dllexport) LPC2400_USB_WriteData(IN HANDLE hWrite,

IN CString wData);

参数

hWrite

设备句柄。

wData

需要向设备写入的数据。

返回值

TRUE:操作成功 FALSE:失败

4.8. LPC2400_USB_FOR_TEST

描述

测试USB驱动是否运行成功:向逻辑端点1 发送数据 向物理端点3 读取数据。

BOOL _declspec(dllexport) LPC2400_USB_FOR_TEST(CString wData,CString &rData);

参数

wData

用于向设备写入的数据。

rData

用于向设备读取的数据。

返回值

TRUE:操作成功 FALSE:失败

4.9. dumpUsbConfig

描述

结合USBDesc结构体获取设备的设备描述、接口描述和端点描述信息,并保存在传如的参数当中。

BOOL _declspec(dllexport) dumpUsbConfig(IN OUT UsbDesc &usbdesc);

参数

usbdesc

用于保存设备描述、接口描述和端点描述信息。

返回值

TRUE:操作成功 FALSE:失败

4.10. LPC2400_USB_ReadByte

描述

从设备中读取一个字节的数据。

BOOL _declspec(dllexport) LPC2400_USB_ReadByte(IN HANDLE hRead

OUT UCHAR &rData);

参数

hRead

设备句柄。

rData

读取的字节数据。

返回值

TRUE:操作成功 FALSE:失败

4.11. LPC2400_USB_WriteByte

描述

向设备中写入一串用于控制的字符串。

BOOL _declspec(dllexport) LPC2400_USB_WriteByte(IN HANDLE hWrite,

UCHAR inchar[]);

参数

hRead

设备句柄。

Inchar

需要写入的数据。

返回值

TRUE:操作成功 FALSE:失败

第5节 归档说明

软件归档,产生如下几个文件夹,默认为当前路径已经指向归档路径。

./ Driver:存放发布后的驱动文件以及INF安装文件,主要包括LPC2400_USB.infLPC2400_USB.sys文件。

./ DLL:存放发布后的Dll文件以及可用的lib文件,主要包括UsbDesc.hLPC2400_USB.dllLPC2400_USB_API.HLPC2400_USB.lib文件。

./ Test:存放发布后的测试软件,主要包括LPC2400_USB.dllUSBTest.exemfc42.dll文件。

./ papers:主要用于存放驱动相关信息,主要包括WinXPUSB驱动开发.pdf文件。

第4节 VC调用LPC2400_USB动态库的方法

LPC2400_USB动态库在归档文件夹DLL中找到,其中包括LPC2400_USB.libLPC2400_USB.dllLPC2400_USB_API.HUsbDesc.h如下步骤调用看门狗动态库。

在扩展名为.CPP的文件中包含LPC2400_USB_API.HUsbDesc.h头文件。如:#include “EPCS_500_WDT_API.H”

在工程的连接器设置中连接到LPC2400_USB.lib文件。

如:在VC6环境下,在项目属性页里的配置属性连接器输入附加依赖项中添加LPC2400_USB.lib

第6节 总结

通过本次试验,我对USBD规范协议有了比较全面的了解,比如说如何区分管道、端点和接口,同时为日后的Windows驱动开发积累经验。该文《WinXPUSB驱动开发》记录了我从了解USB协议到驱动设计、编写、测试和归档的全部过程,可供USB驱动开发人员参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值