Android (Termux) reports target_os="android" which is not supported by nusb::list_devices(). This caused E0425 and E0282 compile errors when building on Termux. Changes: - Cargo.toml: move nusb to a target-gated dependency block so it is only compiled on linux/macos/windows - src/hardware/discover.rs: add #![cfg(...)] file-level gate matching the nusb platform support matrix - src/hardware/mod.rs: gate discover/introspect module declarations, discover_hardware() call, handle_command() dispatch, and all helper fns on the same platform set; add a clear user-facing message on unsupported platforms - src/security/pairing.rs: replace deprecated rand::thread_rng() with rand::rng() to keep clippy -D warnings clean Fixes #880
51 lines
1.6 KiB
Rust
51 lines
1.6 KiB
Rust
//! USB device discovery — enumerate devices and enrich with board registry.
|
|
//!
|
|
//! USB enumeration via `nusb` is only supported on Linux, macOS, and Windows.
|
|
//! On Android (Termux) and other unsupported platforms this module is excluded
|
|
//! from compilation; callers in `hardware/mod.rs` fall back to an empty result.
|
|
|
|
#![cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))]
|
|
|
|
use super::registry;
|
|
use anyhow::Result;
|
|
use nusb::MaybeFuture;
|
|
|
|
/// Information about a discovered USB device.
|
|
#[derive(Debug, Clone)]
|
|
pub struct UsbDeviceInfo {
|
|
pub bus_id: String,
|
|
pub device_address: u8,
|
|
pub vid: u16,
|
|
pub pid: u16,
|
|
pub product_string: Option<String>,
|
|
pub board_name: Option<String>,
|
|
pub architecture: Option<String>,
|
|
}
|
|
|
|
/// Enumerate all connected USB devices and enrich with board registry lookup.
|
|
#[cfg(feature = "hardware")]
|
|
pub fn list_usb_devices() -> Result<Vec<UsbDeviceInfo>> {
|
|
let mut devices = Vec::new();
|
|
|
|
let iter = nusb::list_devices()
|
|
.wait()
|
|
.map_err(|e| anyhow::anyhow!("USB enumeration failed: {e}"))?;
|
|
|
|
for dev in iter {
|
|
let vid = dev.vendor_id();
|
|
let pid = dev.product_id();
|
|
let board = registry::lookup_board(vid, pid);
|
|
|
|
devices.push(UsbDeviceInfo {
|
|
bus_id: dev.bus_id().to_string(),
|
|
device_address: dev.device_address(),
|
|
vid,
|
|
pid,
|
|
product_string: dev.product_string().map(String::from),
|
|
board_name: board.map(|b| b.name.to_string()),
|
|
architecture: board.and_then(|b| b.architecture.map(String::from)),
|
|
});
|
|
}
|
|
|
|
Ok(devices)
|
|
}
|