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