3 函数
3.1 核心函数
void
usb_init(void);
初始化libusb。
int
usb_find_busses(void);
查找所有总线,返回上次调用以后改变的数量(包括新增的和移除的总线)。
int
usb_find_devices(void);
寻找每个总线上的所有设备。应该在 usb_find_busses()
之后调用。返回上次调用后改变的数量(包括新增和移除的设备)。
struct
usb_bus
*usb_get_busses(void);
简单的返回全局变量 usb_busses 。这仅对支持C调用规范和可以使用共享库的语言,但是不支持C全局变量的(例如Delphi)。
3.2 设备操作
这组函数用于操作设备。允许你打开关闭设备,设置配置、轮换设置、干净的关闭和重置设备。它也提供OS级别的操作,如认领(claim)和释放接
口。
usb_dev_handle
*usb_open(struct
*usb_device
dev);
打开设备以供使用,返回设备句柄。
int
usb_close(usb_dev_handle
*dev);
关闭设备,返回0成功,负数失败。
int
usb_set_configuration(usb_dev_handle
*dev,
int
configuration);
设置活跃配置。configuration参数是描述符bConfigurationValue字段的值。返回0成功,负数失败。
int
usb_set_altinterface(usb_dev_handle
*dev,
int
alternate);
设置当前接口的活跃轮换设置。alternate参数是描述符bAlternateSetting字段的值。返回0成功,负数失败。
int
usb_resetep(usb_dev_handle
*dev,
unsigned
int
ep);
重置指定端点的所有状态。ep参数是描述符的bEndpointAddress字段的值。返回0称公,负数失败。
该接口不建议使用,你可能需要的是 usb_clear_halt()
。
int
usb_clear_halt(usb_dev_handle
*dev,
unsigned
int
ep);
清理端点所有停止状态,ep是描述符bEndpointAddress字段的值。返回0成功,负数失败。
int
usb_reset(usb_dev_handle
*dev);
重置指定设备,通过发送RESET指令过去。返回0成功,负数失败。
在执行该函数之后,需要重新列举,找到设备。当前的句柄无法再工作了。
int
usb_claim_interface(usb_dev_handle
*dev,
int
interface);
通过OS认领一个接口。interface参数是描述符的bInterfaceNumber字段。返回0成功,负数失败。
必须在任何接口相关操作(如 usb_set_altinterface()
、 usb_bulk_write()
等)之前调用。
返回码:
- EBUSY :接口无效,无法被认领
- ENOMEM :内存不足
int
usb_release_interface(usb_dev_handle
*dev,
int
interface);
释放之前认领的接口。interface参数是描述符的bInterfaceNumber字段。返回0成功,负数失败。
3.3 控制传输
发送消息到缺省控制管道。
int
usb_control_msg(usb_dev_handle
*dev,
int
requesttype,
int
request,
int
value,
int
index,
char
*bytes,
int
size,
int
timeout);
发送控制请求到设备的缺省控制管道。参数对应USB规范中的同名类型。返回读写字节数,负数失败。
int
usb_get_string(usb_dev_handle
*dev,
int
index,
int
langid,
char
*buf,
size_t
buflen);
获取设备的字符串描述,通过index和langdi索引。返回Unicode字符串到buf中。返回实际写入buf的字节数,负数失败。
int
usb_get_string_simple(usb_dev_handle
*dev,
int
index,
char
*buf,
size_t
buflen);
包装了 usb_get_string()
函数,返回第一种语言指定index索引的字符串描述,并转换到C风格的ASCII。返回写入buf字节数,负数失败。
int
usb_get_descriptor(usb_dev_handle
*dev,
unsigned
char
type,
unsigned
char
index,
void
*buf,
int
size);
获取设备缺省控制管道的描述符,通过type和index索引。返回实际写入buf的字节数,负数失败。
参考 usb_get_descriptor_by_endpoint()
了解允许指定控制端点的。
int
usb_get_descriptor_by_endpoint(usb_dev_handle
*dev,
int
ep,
unsigned
char
type,
unsigned
char
index,
void
*buf,
int
size);
从设备获取描述符,以type和index索引,以ep标志的控制管道。返回读取字节数,负数失败。
3.4 块传输
这部分允许应用从数据块管道发送和接收数据。
int
usb_bulk_write(usb_dev_handle
*dev,
int
ep,
char
*bytes,
int
size,
int
timeout);
写入一块数据到端点ep,返回写入成功字节数,负数失败。
int
usb_bulk_read(usb_dev_handle
*dev,
int
ep,
char
*bytes,
int
size,
int
timeout);
读取一块数据,从端点ep,返回读取成功字节数,负数失败。
3.5 中断传输
这组函数允许应用发送和接收数据通过中断管道。
int
usb_interrupt_write(usb_dev_handle
*dev,
int
ep,
char
*bytes,
int
size,
int
timeout);
执行对端点ep的中断写入,返回实际写入字节数,负数失败。
int
usb_interrupt_read(usb_dev_handle
*dev,
int
ep,
char
*bytes,
int
size,
int
timeout);
执行对中断端点ep的读取,返回实际读取字节数,负数失败。
3.6 不可移植
这些函数是不可移植的。有些是暴露了OS USB API之类的。他们都回加上函数名后缀 _np
。
一个C预处理器宏会定义实现的函数。形式是 LIBUSB_HAS_
加上函数名,没有 usb_
前缀。例如, usb_get_driver_np()
实现了,就会定义 LIBUSB_HAS_GET_DRIVER_NP
。
int
usb_get_driver_np(usb_dev_handle
*dev,
int
interface,
char
*name,
int
namelen);
这个函数获取接口驱动的名字。成功返回0,失败负数。
只在Linux有实现。
int
usb_detach_kernel_driver_np(usb_dev_handle
*dev,
int
interface);
这个函数从接口剥离内核驱动。使用了libusb的应用可以随即重新认领接口。返回0成功,负数失败。
只在Linux有实现。
相关推荐
Libusb 开发帮助指南,函数使用说明,chm格式帮助文档
嵌入式linux下基于libusb的USB驱动开发.pdf
libusb Developers Guide 作者:Johannes Erdfelt。Linux下USB编程的必备手册。
windows平台下,libusb-win32库的使用。以及在Qt编译环境下的HID通信
libusb是一个开源库,可以帮助开发者在用户空间的层面上与UBS设备进行通讯。如果想了解更多,可以查看他们的主页:http://libusb.org/ 在其文档中,建议首先阅读USB2的规格说明:...
USB驱动开发 windows linux平台均可开发
LibUsb-Win32 LibUsb-Win32 LibUsb-Win32
实现usb设备免驱数据操作,官方最新源码
libusb使用说明 libusb使用说明 libusb使用说明
上位机采用qt技术做界面,用开源libusb做驱动与下位机的usb进行通信,测试良好
一个用LIBUSB 驱动 数码相机的程序.
开发者论坛地址:http://libusb.6.n5.nabble.com/ libusb-1.0 API Reference:http://libusb.sourceforge.net/api-1.0/ 开发过程中有超时问题的原因:...
libUSB_RFWRITER用libusb 读写usb设备 要修改pid vid才能运行。
包含libusb驱动程序libusb-win32-bin-1.2.2.0以及delphi环境下的libusb使用的例子以及一篇libusb说明文档。
libusb-win32-bin-debug-1.2.5.0.這是一個有關於usb控制的Library.
libusb-win32
收集了各种版本的libusb源码和编译好的静态库 有demo最新的 1.0.23 最老的libusb0
libusb通信,实现对USB 串口的通信
libusb 块传输 同步传输 例程,网上相关资源不多.
驱动开发向来是内核开发中工作量最多的一块,随着USB设备的普及,大量的USB设备的驱动开发也成为驱动开发者手头上做的最多的事情。本文主要介绍Linux平台下基于libusb的驱动开发,希望能够给从事Linux驱动开发的朋友...