WinXP下USB驱动开发(十)
来源:互联网 发布:线路板处理画图软件 编辑:程序博客网 时间:2024/05/04 11:27
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-7到2009-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_DESCRIPTOR中bLength域。
bDescriptorType
等同于USB_CONFIGURATION_DESCRIPTOR中bDescriptorType域。
wTotalLength
等同于USB_CONFIGURATION_DESCRIPTOR中wTotalLength域。
bNumInterfaces
等同于USB_CONFIGURATION_DESCRIPTOR中bNumInterfaces域。
bConfigurationValue
等同于USB_CONFIGURATION_DESCRIPTOR中bConfigurationValue域。
iConfiguration
等同于USB_CONFIGURATION_DESCRIPTOR中iConfiguration域。
bmAttributes
等同于USB_CONFIGURATION_DESCRIPTOR中bmAttributes域。
MaxPower
等同于USB_CONFIGURATION_DESCRIPTOR中MaxPower域。
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_DESCRIPTOR中bLength域。
bDescriptorType
等同于USB_INTERFACE_DESCRIPTOR中bDescriptorType域。
bInterfaceNumber
等同于USB_INTERFACE_DESCRIPTOR中bInterfaceNumber域。
bAlternateSetting
等同于USB_INTERFACE_DESCRIPTOR中bAlternateSetting域。
bNumEndpoints
等同于USB_INTERFACE_DESCRIPTOR中bNumEndpoints域。
bInterfaceClass
等同于USB_INTERFACE_DESCRIPTOR中bInterfaceClass域。
bInterfaceSubClass
等同于USB_INTERFACE_DESCRIPTOR中bInterfaceSubClass域。
bInterfaceProtocol
等同于USB_INTERFACE_DESCRIPTOR中bInterfaceProtocol域。
bInterface
等同于USB_INTERFACE_DESCRIPTOR中bInterface域。
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_DESCRIPTOR中bLength域。
bDescriptorType
等同于USB_ENDPOINT_DESCRIPTOR中bDescriptorType域。
bEndpointAddress
等同于USB_ENDPOINT_DESCRIPTOR中bEndpointAddress域。
bmAttributes
等同于USB_ENDPOINT_DESCRIPTOR中bmAttributes域。
wMaxPacketSize
等同于USB_ENDPOINT_DESCRIPTOR中wMaxPacketSize域。
bInterval
等同于USB_ENDPOINT_DESCRIPTOR中bInterval域。
4.4. UsbDesc
描述
该结构主要用于处理USB设备描述、接口和端点描述信息,使其与测试软件的List控件显示相对应,该结构体是上述USB_ENDPOINT_DESCRIPTOR_INFO、USB_INTERFACE
_DESCRIPTOR_INFO和USB_CONFIGURATION_DESCRIPTOR_INFO结构体的处理集合,其中包含三个数组信息usbcfg、usbinterfacedesc和usbendpointdesc描述了设备相关的设备描述、接口描述和端点描述信息。
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.inf和LPC2400_USB.sys文件。
./ DLL:存放发布后的Dll文件以及可用的lib文件,主要包括UsbDesc.h、LPC2400_USB.dll、LPC2400_USB_API.H和LPC2400_USB.lib文件。
./ Test:存放发布后的测试软件,主要包括LPC2400_USB.dll、USBTest.exe和mfc42.dll文件。
./ papers:主要用于存放驱动相关信息,主要包括WinXP下USB驱动开发.pdf文件。
第4节 VC调用LPC2400_USB动态库的方法
LPC2400_USB动态库在归档文件夹DLL中找到,其中包括LPC2400_USB.lib、LPC2400_USB.dll、LPC2400_USB_API.H和UsbDesc.h如下步骤调用看门狗动态库。
在扩展名为.CPP的文件中包含LPC2400_USB_API.H和UsbDesc.h头文件。如:#include “EPCS_500_WDT_API.H”
在工程的连接器设置中连接到LPC2400_USB.lib文件。
如:在VC6环境下,在项目属性页里的配置属性→连接器→输入→附加依赖项中添加LPC2400_USB.lib。
第6节 总结
通过本次试验,我对USBD规范协议有了比较全面的了解,比如说如何区分管道、端点和接口,同时为日后的Windows驱动开发积累经验。该文《WinXP下USB驱动开发》记录了我从了解USB协议到驱动设计、编写、测试和归档的全部过程,可供USB驱动开发人员参考。
- WinXP下USB驱动开发(十)
- WinXP下USB驱动开发(一)
- WinXP下USB驱动开发(二)
- WinXP下USB驱动开发(三)
- WinXP下USB驱动开发(四)
- WinXP下USB驱动开发(五)
- WinXP下USB驱动开发(六)
- WinXP下USB驱动开发(七)
- WinXP下USB驱动开发(八)
- WinXP下USB驱动开发(九)
- linux下USB驱动开发
- linux下USB驱动开发
- linux下USB驱动开发
- WinXP下 VC6.0 驱动开发环境配置
- windows下驱动开发配置(win10,win7,winXP)
- Linux USB RNDIS设备在WinXP、Win7、Win10下的驱动安装
- Linux系统下USB摄像头驱动开发
- Linux系统下USB摄像头驱动开发
- 使用C#发送邮件
- 快速上手:创建第一个Force.com Flex桌面应用
- C语言中的类型转换
- 在.NET框架应用程序中发送电子邮件
- 常用Sql语句
- WinXP下USB驱动开发(十)
- QT
- 用ASP.NET设计高效邮件列表
- JAVA实现基于可视化的代码,可以实现商品总计,很方便。
- 揭秘世界上最强大的七台超级计算机所在地
- 网站建设之邮件发送形式
- fedora
- Android WiFi On/Off sequence diagram
- tomcat使用备忘