From 70432966e0c5b1d0afe3ae1cc73e5233f42df861 Mon Sep 17 00:00:00 2001 From: dingari Date: Tue, 26 May 2026 14:10:20 +0000 Subject: [PATCH 1/3] fix(examples): use bus_id() instead of busnum() when constructing/matching on DeviceArg busnum() is only available on Linux. The cross-platform equivalent is bus_id(). * Linux: String version of the busnum (e.g. \"001\") * MacOS: Top byte of the location ID (e.g. \"01\") * Windows: Unsure In any case, it should be consistent with the output of the `list` command in the example --- rockusb/examples/common.rs | 11 +++++------ rockusb/examples/rockusb.rs | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rockusb/examples/common.rs b/rockusb/examples/common.rs index c50c8b0..0c41acb 100644 --- a/rockusb/examples/common.rs +++ b/rockusb/examples/common.rs @@ -547,17 +547,16 @@ fn reset_parser() -> impl clap::builder::TypedValueParser { #[derive(Debug, Clone)] pub struct DeviceArg { - pub bus_number: u8, + pub bus_id: String, pub address: u8, } fn parse_device(device: &str) -> Result { let mut parts = device.split(':'); - let bus_number = parts + let bus_id = parts .next() - .ok_or_else(|| anyhow!("No bus number: use :
"))? - .parse() - .map_err(|_| anyhow!("Bus should be a number"))?; + .ok_or_else(|| anyhow!("No bus id: use :
"))? + .to_string(); let address = parts .next() .ok_or_else(|| anyhow!("No address: use :
"))? @@ -567,7 +566,7 @@ fn parse_device(device: &str) -> Result { return Err(anyhow!("Too many parts")); } Ok(DeviceArg { - bus_number, + bus_id, address, }) } diff --git a/rockusb/examples/rockusb.rs b/rockusb/examples/rockusb.rs index 4840c4c..f1e0563 100644 --- a/rockusb/examples/rockusb.rs +++ b/rockusb/examples/rockusb.rs @@ -10,8 +10,8 @@ async fn list_available_devices() -> Result<()> { println!("Available rockchip devices:"); for d in devices { println!( - "* Bus {} Device {} ID {}:{}", - d.busnum(), + "* Bus {} Device {} ID {:04x}:{:04x}", + d.bus_id(), d.device_address(), d.vendor_id(), d.product_id() @@ -33,7 +33,7 @@ async fn main() -> Result<()> { let mut devices = rockusb::nusb::devices().await?; let info = if let Some(dev) = opt.device { devices - .find(|d| d.busnum() == dev.bus_number && d.device_address() == dev.address) + .find(|d| d.bus_id() == dev.bus_id && d.device_address() == dev.address) .ok_or_else(|| anyhow!("Specified device not found"))? } else { let mut devices: Vec<_> = devices.collect(); From f52bc08af033c9e9fd3fe689294a51db7a161490 Mon Sep 17 00:00:00 2001 From: dingari Date: Tue, 16 Jun 2026 22:15:53 +0000 Subject: [PATCH 2/3] fix(examples): make rockusb-libusb example build --- rockusb/examples/rockusb-libusb.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rockusb/examples/rockusb-libusb.rs b/rockusb/examples/rockusb-libusb.rs index c9cce18..0ba18a1 100644 --- a/rockusb/examples/rockusb-libusb.rs +++ b/rockusb/examples/rockusb-libusb.rs @@ -33,10 +33,12 @@ fn main() -> Result<()> { .iter() .find(|d| match d { Ok(device) => { - device.bus_number() == dev.bus_number && device.address() == dev.address + let bus_id = format!("{:03}", device.bus_number()); + bus_id == dev.bus_id && device.address() == dev.address } Err(DeviceUnavalable { device, .. }) => { - device.bus_number() == dev.bus_number && device.address() == dev.address + let bus_id = format!("{:03}", device.bus_number()); + bus_id == dev.bus_id && device.address() == dev.address } }) .ok_or_else(|| anyhow!("Specified device not found"))? From 3db3a728cd917b1f636b4fc16b50a62cef7f2989 Mon Sep 17 00:00:00 2001 From: dingari Date: Tue, 16 Jun 2026 22:16:07 +0000 Subject: [PATCH 3/3] style(examples): fmt --- rockusb/examples/common.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/rockusb/examples/common.rs b/rockusb/examples/common.rs index 0c41acb..d9e1914 100644 --- a/rockusb/examples/common.rs +++ b/rockusb/examples/common.rs @@ -565,10 +565,7 @@ fn parse_device(device: &str) -> Result { if parts.next().is_some() { return Err(anyhow!("Too many parts")); } - Ok(DeviceArg { - bus_id, - address, - }) + Ok(DeviceArg { bus_id, address }) } #[derive(clap::Parser)]