libusb-win32学习笔记(二)
来源:互联网 发布:机顶盒看电影软件排行 编辑:程序博客网 时间:2024/04/30 08:01
libusb-win32学习笔记(二)
当完成配置工作后,就可以进行代码的编写(需要了解一些基本的USB协议的知识)。对于一个库的使用,其帮助文档是非常重要的,可以去找libusb-win32开发文档 (http://sourceforge.net/p/libusb-win32/wiki/Documentation/)。
接下来分析一下使用bulk进行数据传输的代码。
编写代码时,首先要确定IDVendor和IDProduct,接着要确定bulk端点的输入输出的端口EP_IN和EP_OUT(PC端与USB设备是相反的):
#define IDVendor 0x1122#define IDProduct 0x3344#define EP_OUT 0x04#define EP_IN 0x83#define MY_CONFIG 0x01#define MY_INT 0x00#define BUFFER_SIZE 64
接着是初始化,以及查找自己的设备:
struct usb_bus *bus; struct usb_device *dev; struct usb_dev_handle *hdev; int ret = 0; char buffer2[BUFFER_SIZE] = "USBKEY by libusb-win32";
usb_init();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 == IDVendor && dev->descriptor.idProduct == IDProduct){ //...... } }}
通过idVendor和idProduct找到自己的设备之后就可以打开设备,得到一个设备的句柄hdev,通过该句柄就可以进行传输控制等操作了:
hdev = usb_open(dev);if(hdev == NULL){ printf("open error!\n"); return 1;}
要进行数据的传输,必须先调用下面两个函数,进行配置和注册(可以查看帮助文档了解到):
if (usb_set_configuration(hdev, MY_CONFIG) < 0) { printf("error setting config #%d: %s", MY_CONFIG, usb_strerror()); return 1;}if (usb_claim_interface(hdev, MY_INT) < 0) { printf("error claiming interface #%d:\n%s", MY_INT, usb_strerror()); return 1;}
其中MY_CONFIG和MY_INT分别由descriptor 中的 bConfigurationValue字段和 descriptor 中的bInterfaceNumber(关于这两个字段在USB协议中有介绍)。
接着就可以使用函数进行bulk端点读写操作:
ret = usb_bulk_write(hdev,EP_OUT,buffer2,BUFFER_SIZE,1000);if(ret < 0){ printf("ret = %d\n",ret); printf("write error: %s\n",usb_strerror()); }else{ printf("SED: %d\n",ret); printf("SED: %s\n",buffer2); }ret = usb_bulk_read(hdev,EP_IN,buffer2,BUFFER_SIZE,1000);if(ret < 0){ printf("ret = %d\n",ret); printf("read error: %s\n",usb_strerror());}else{ printf("REC: %d\n",ret); printf("REC: %s\n",buffer2);}ret = usb_bulk_read(hdev,EP_IN,buffer2,BUFFER_SIZE,1000);if(ret < 0){ printf("ret = %d\n",ret); printf("read error: %s\n",usb_strerror());}else{ printf("REC: %d\n",ret); printf("REC: %s\n",buffer2);}
读写结束后关闭设备:
usb_close(hdev);
USB硬件设备的部分代码:
unsigned char buffer[BUFFER_SIZE];USB_Init();while(1){ USB_Bulk_Gets( buffer, 64 ); USB_Bulk_Puts( buffer, 64 ); USB_Bulk_Puts( "USBKEY IN A980", 64 );}
程序运行结果:
- libusb-win32学习笔记(二)
- libusb-win32.lib 笔记
- libusb学习笔记
- Win32汇编学习笔记(二)
- Win32汇编学习笔记(二)
- libusb-win32
- libusb-win32
- libusb-win32
- LibUSB-Win32
- libusb学习笔记1——libusb的安装
- Win32汇编学习笔记(罗云彬)(二)
- WIN32 GDI+ 学习笔记(二):使用画笔
- 学习笔记 -- Win32多线程程序设计(二) WaitForSingleObject and WaitForMultipleObjects
- 《win32多线程程序设计》学习笔记二
- libusb-win32介绍
- libusb-win32 编译配置
- libusb-win32介绍
- libusb-win32介绍
- Found 2 versions of android-support-v4.jar in the dependency list原因及其解决方案
- ASP.NET MVC 3实现类似于Server.Transfer的效果
- Cleaning time-series and other data streams
- ARM DTS解析
- 在Asp.net MVC 4.0中使用IHttpHandler
- libusb-win32学习笔记(二)
- sdf
- 在Struts 2中实现文件上传
- 重复3次的蒙特卡罗算法
- Makefile自动生成(autotools工具的使用)
- json数据处理技巧(字段带空格、增加字段)
- 10-0. 说反话 (20)
- 再看TCP/IP第一卷>关于链路层的知识细节及相关协议
- 在Android源码树中添加userspace I2C读写工具(i2c-util)