Lib USB 在vc6.0下的应用

由于要写一个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请求,等待从机的数据返回

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值