3个版本
0.1.2 | 2023年10月18日 |
---|---|
0.1.1 | 2023年7月13日 |
0.1.0 | 2023年7月9日 |
#1176 在 硬件支持
69 每月下载量
215KB
5K SLoC
yusb
yusb是Rust libusb 包装器的另一个分支!
发音为yoo-ess-bee。
这是Ilya Averyanov的rusb crate的更新,而rusb crate本身是David Cuddeback的libusb crate的分支。
这个crate的初始版本在多个方面与rusb
有所不同
- 删除了
UsbContext
特质- 将
Context
和GenericContext
类型合并为单个具体的Context
类型。 - 现在全局上下文只是一个具有空内部指针的
Context
实例。
- 将
- 现在
Device<T>
和DeviceList<T>
不再需要针对Context
类型进行泛型(因为现在只有一个上下文类型),现在分别是Device
和DeviceList
。 - 有一个
Port
类型,用于唯一标识连接到系统中的设备的物理USB端口。- 它是总线号和有序的Hub端口列表的组合
- 这有助于在多个设备使用相同的VID:PID且没有序列号或其他区分特征时唯一标识设备。
- 单个端口是可比较的,并且可以转换为使用Linux syspath格式的字符串,如2-1.4.3。
- 更新了
Speed
类型- 它可以转换为Mbps的浮点速度,并直接以这种方式显示。
- 它与以下内容有序和可比较
if (device.speed() < Speed::Super) { println!("Plug the device into a faster port");
DeviceList
实现了IntoIterator
,因此可以直接在 for 循环中使用,无需.iter()
- 对代码库进行了一些通用的清理和现代化。
此crate提供对本地libusb
库的安全包装。它应用了RAII模式和Rust生命周期以确保所有libusb
功能的安全使用。RAII模式确保在不再需要时释放所有获取的资源,而Rust生命周期确保按正确顺序释放资源。
依赖项
要使用yusb,不需要额外的设置,因为yusb将自动下载libusb的源代码并构建它。
但是,如果构建libusb失败,您也可以尝试设置本地的libusb
库,以便它可以通过pkg-config
或vcpkg
找到。
本地libusb
库支持的 所有系统也由libusb
crate支持。它已在Linux、OS X和Windows上进行了测试。
交叉编译
当交叉编译到国外目标时,可以使用yusb
crate。有关如何交叉编译yusb
的详细信息,请参阅libusb1-sys
crate的README。
用法
在Cargo.toml
中将yusb
添加为依赖项
[dependencies]
yusb = "0.1"
导入yusb
crate。几乎所有yusb
功能的起点都是创建一个上下文对象。有了上下文对象,您可以列出设备、读取它们的描述符、打开它们以及与它们的端点进行通信
fn main() {
for device in yusb::devices().unwrap().iter() {
let device_desc = device.device_descriptor().unwrap();
println!("Bus {:03} Device {:03} ID {:04x}:{:04x}",
device.bus_number(),
device.address(),
device_desc.vendor_id(),
device_desc.product_id());
}
}
许可证
在MIT许可证下分发。
许可证说明。
如果您通过使用vendored
功能(例如)将本地libusb
库链接为静态库,则必须遵循libusb的GNU LGPL。
依赖项
~1–1.5MB
~29K SLoC