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 是一个开源的 USB 编程库,提供了一个跨平台的 API,使得开发者可以轻松地访问和控制 USB 设备。本文将介绍如何在嵌入式 Linux 系统下使用 libusb 库开发 USB 驱动程序,并详细讨论 libusb 库的使用方法和 ...
Libusb 开发帮助指南,函数使用说明,chm格式帮助文档
该手册还提到,libusb 的开发者正在努力推进新版本的 libusb,目标是将其升级到 v1.0,届时将提供更加完善的 API 和更多功能。 3. API libusb 的 API 设计初衷是为了提供一个简洁、易用的接口,让开发者可以轻松地...
- **编译与移植**: 这个版本的libusb源代码包含了编译所需的文件和配置脚本,开发者可以按照指南在不同的平台上编译和安装。 - **文档资源**: 通常,libusb库会提供详细的文档,包括API参考、示例代码和安装指南,...
解压libusb-0.1.12.tar.gz后,你会看到一系列的源代码文件和文档,包括头文件、C语言源码、示例程序、构建脚本以及安装指南等。 在开发过程中,开发者可以通过libusb提供的函数来实现以下功能: 1. 设备枚举:获取...
总的来说,libusb-compat是libusb库的一个重要补充,对于那些需要在不同系统或不同libusb版本间保持代码兼容性的开发者来说,它是不可或缺的工具。通过理解libusb-compat的工作原理和使用方法,开发者可以更顺利地...
5. **文档(Documentation)**:包括手册页和开发者指南,解释库的使用方法和API。 6. **配置文件(Configuation Files)**:用于构建库的脚本,如`configure`和`Makefile`,这些文件在Unix-like系统中用于编译和...
这个“libusb最新驱动”压缩包提供了libusb-win32驱动程序,它专为Windows系统设计,使得开发者无需自行编写驱动程序就能与USB设备进行交互。这个驱动程序支持的操作系统广泛,涵盖了从较旧的Windows 2000到较新的...
2. **README.txt**:这是项目的重要文档,通常包含安装指南、使用示例、许可信息等内容,帮助用户理解如何使用libusb库。 3. **VS2013、VS2015、VS2017、VS2019**:这些文件夹可能包含了针对不同Visual Studio版本...
这个“libusb-1.0-22源码”是该库的一个特定版本,允许开发者在编译后将其集成到自己的应用程序中,以便与USB设备进行低级别交互。本文将详细介绍libusb库的关键概念、功能以及如何使用其源码。 ### 1. libusb库...
标题中的"libsub libsub"可能是由于输入错误或者重复,我们通常会假设它是指"libusb",这是一个开源的库,用于与USB设备进行通信。libusb为多种操作系统提供了通用接口,包括Linux、Windows和macOS等。这个库允许...
"README.txt"是项目或软件包的说明文档,它通常会包含安装指南、使用示例、许可信息以及开发者需要知道的任何其他重要细节。对于LIBUSB库,README文件会解释如何在Ubuntu系统上配置和使用该库。 "MinGW64"和"MinGW...
3. **Docs**: 这个目录可能包含了项目的文档,包括API参考、用户指南或者示例代码,帮助开发者理解和使用这个库。 4. **Utility**: 这可能是包含辅助工具或实用程序的目录,这些工具可能用于设备检测、数据传输或...
libusb-1.0.22.zip是一个包含libusb-1.0.22版本的压缩包,这个开源库是开发者进行USB设备编程的重要工具。libusb是一个高度可移植的库,它允许程序员在多种操作系统上直接与USB设备进行通信,包括Linux、Windows和...
为了充分利用这个库,开发者需要熟悉C/C++编程,因为LibUSB主要以这些语言提供API。他们还需要了解USB协议的基础知识,以及三星设备的特定通信协议,如果有的话。 总结起来,"Samsung SPF LibUSB.zip" 是一个针对...
3. **文档**:libusb的文档通常包括API参考手册、用户指南和示例代码,帮助开发者快速上手并理解如何使用libusb进行USB编程。 4. **构建脚本**:为了在不同的平台上编译和安装libusb,压缩包通常会包含Makefile或...
3. **Qt集成**:要在Qt中使用libusb,开发者需要将libusb库的头文件添加到项目的包含路径,并链接所需的库文件。通过调用libusb的API,可以实现USB设备的枚举、打开、读写操作以及设置配置和接口。 4. **USB设备...
4. **文档**:可能包含API文档、用户指南或者示例代码,帮助开发者理解如何使用这个库。 5. **驱动程序安装程序**:在Windows上,可能需要安装libusb-win32驱动来使系统识别并使用libusb库。 6. **示例程序**:有时...
3. **Docs**:这个目录可能包含项目的文档,如API参考、使用指南等,帮助开发者理解和使用LibUsbDotNet。 4. **Utility**:这是一个可能包含各种辅助工具或实用程序的目录,用于帮助开发、测试或管理LibUsbDotNet。...