Lib USB 在vc6.0下的应用

本文详细介绍了如何使用LIBUSB-WIN32库进行USB设备的发现与固件下载,包括安装库、创建对话框、设置界面以及关键函数的使用。

由于要写一个USB下载固件的东西,主要配合更新固件功能,搜集了一些资料,放到了博客里,方便以后查阅。

1. 下载LIBUSB-WIN32。安装libusb-win32-filter-bin-0.1.12.1.exe,测试用

2. 通过VC创建一个DIALOG。

3. 设置好界面

4. 正式开始USB设置

  • 拷贝libusb0.dll、libusb.lib、usb.h到刚才创建的目录下。
  • 打开VC->Setting->Link下,选择generate项,在library module下填写”libusb.lib “,其实主要添加libusb.lib。

5 . program.

 

#include<usb.h>

/* usb.h这个头文件是要包括的,里面包含了必须要用到的数据结构 */

 

/* 我们将一个设备的属性用一个结构体来概括 */

typedefstruct

{

structusb_device* udev;

usb_dev_handle*device_handle;

/* 这里可以添加设备的其他属性,这里只列出每个设备要用到的属性 */

}device_descript;

 

/* 用来设置传输数据的时间延迟 */

#defineUSB_TIMEOUT 10000

 

/* 厂家ID 和产品 ID */

#defineVENDOR_ID 0xffff

#definePRODUCT_ID 0xffff

 

/* 这里定义数组来保存设备的相关属性,DEVICE_MINOR可 以设置能够同时操作的设备数量,用全局变量的目的在于方便保存属性 */

#defineDEVICE_MINOR 16

intg_num;

device_descriptg_list[ DEVICE_MINOR ];

//发现DEVICE。发现一个奇怪的问题,VMWARE中不能运行,但是到真实的PC就可以,看来我要启动到PC下开发了。

void ::OnButtonDevie()
{
// TODO: Add your control notification handler code here
struct usb_bus *bus;
struct usb_device *dev;
g_num = 0;
usb_init();
usb_set_debug(3);
usb_find_busses();
usb_find_devices();

/* */
for (bus = usb_get_busses(); bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
if(dev->descriptor.idVendor==VENDOR_ID&&dev->descriptor.idProduct == PRODUCT_ID) {
/* */
if (g_num < DEVICE_MINOR) {
g_list[g_num].udev = dev;
g_num ++;
}
}
}
}
m_nInfo.Format(”Founded %d \n”,g_num);
UpdateData(FALSE);
}

好了,至此,就可以用USB其他的函数完成读写。

6. 关键函数使用

 

usb_control_msg--------

    unsigned char Outbuf[8];

       unsigned char request=0x01;

 

       Outbuf[0]= '1';Outbuf[1]= '2';Outbuf[2]= '3';Outbuf[3]= 0x33;Outbuf[4] = 0x44;

       Outbuf[5]= 0x55;Outbuf[6] = 0x66;Outbuf[7] = 0x77;

 

       //usb_control_msg先发送setup包,然后根据发送缓冲区的大小,发送in或out包

       unsigned char nbytes = usb_control_msg(M_USBhandle,

              USB_TYPE_VENDOR| USB_RECIP_DEVICE | USB_ENDPOINT_OUT,

              request,

              0x00,

              0x00,

              (char*)Outbuf, 0x08,

              5000);

usb_control_msg将会引起主机向从机发送 setup事件,setup传输的数据阶段就是usb_control_msg函数中的参数,另外,setup事物之后,主机会向从机发送 out事物,根据Outbuf的数据和 定义的size来发送数据

 

usb_interrupt_write----

根据设备定义的中断out端点发送数据,直接以out事务的形式发送

 

usb_interrupt_read--------

根据设备的描述符里定义的中断查询时间,主机会以这个间隔来发送int请求,等待从机的数据返回

 

 

关于libusb-win32开发的经验(2012-11-10 11:37:50)转载▼标签: win32rs232驱动usblibusbit 分类: 外围器件接口 作为设备开发者, 一般需要让设备与上位机PC通讯, 我们往往考虑采用以下几种接口: rs232, USB, ethernet. 现在在PC机上已经很难见到rs232的接口, 而ethernet也需要做特殊的配置, USB大多成为我们的首选. 对于数据偏少的应用, 我们可以利用USB虚拟串口的方式来完成这样的任务, 虚拟串口的驱动和实例, 对于下位机来说也非常常见. 有个问题: 很多应用无法用虚拟串口的方式来得到满足, 只能按照USB的方式来解决问题. 这个时候, 我们只好针对USB进行编程. 对于复杂的驱动编程, 大多数程序员往往望而却步. 不过总有其他简单的方法解决问题. 这里, 我们介绍一个USB通讯库: libusb. 介绍 libusb是一个针对usb通讯的库. 使用它, 你不需要知道操作系统的细节, 你只需要对USB有足够的了解即可. 它也不需要你写驱动, 所有的工作都可以在用户态完成. 使用方法很简单, 这里有一个示例: http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation#IV.Examples , 是不是很简单? 原理 libusb自己带有一个内核驱动, 名字叫libusb0.sys, 放在WINDOWSSYSTEM32DRIVERS里面. 用户程序调用libusb0.dll, dll会把任务交由驱动来完成. 这样保证用户态就能够完成USB通讯的作业. 具体做了什么, 可以通过下载项目的源文件来了解, 等我有时间的时候再看看吧. 安装方法 libusb现在有好几个版本. 主页面在这里: http://www.libusb.org/ 因为我们一般是进行工程应用, 选择相对稳定的版本: libusb-0.1. 平台在windows下的话, 我们采用libusb-win32: http://www.libusb.org/wiki/libusb-win32 linux下一般已经添加到源里面去了, 查找libusb即可. windows下安装方法: http://www.libusb.org/wiki/libusb-win32#Installation 里面有2种安装方式, Filter Driver Installation 和 Device Driver Installation, 前面一个可以说是开发环境, 后面可以说是发布驱动本身. 我们因为是做系统, 选择前面一个方式, 省得麻烦. 使用 这里有比较详细的文档: http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation libusb-win32的下载地址http://sourceforge.net/apps/trac/libusb-win32/wiki 开发者论坛地址:http://libusb.6.n5.nabble.com/ libusb-1.0 API Reference:http://libusb.sourceforge.net/api-1.0/ 开发过程中有超时问题的原因:http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值