3个版本

0.1.2 2023年10月18日
0.1.1 2023年7月13日
0.1.0 2023年7月9日

#1176硬件支持

Download history 5/week @ 2024-04-14 18/week @ 2024-04-28 1/week @ 2024-05-05 5/week @ 2024-05-26 32/week @ 2024-06-09 6/week @ 2024-06-16 13/week @ 2024-06-23 39/week @ 2024-07-14 6/week @ 2024-07-21 24/week @ 2024-07-28

69 每月下载量

MIT 许可证

215KB
5K SLoC

yusb

yusb是Rust libusb 包装器的另一个分支!

发音为yoo-ess-bee

这是Ilya Averyanov的rusb crate的更新,而rusb crate本身是David Cuddeback的libusb crate的分支。

这个crate的初始版本在多个方面与rusb有所不同

  • 删除了UsbContext特质
    • ContextGenericContext类型合并为单个具体的Context类型。
    • 现在全局上下文只是一个具有内部指针的Context实例。
  • 现在Device<T>DeviceList<T>不再需要针对Context类型进行泛型(因为现在只有一个上下文类型),现在分别是DeviceDeviceList
  • 有一个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-configvcpkg找到。

本地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