use std::time::Duration;
use crate::logging::debug;
pub mod cli;
pub mod helpers;
pub mod rpc;
pub(crate) const FLIPPER_BAUD: u32 = 115_200;
pub(crate) const TIMEOUT: Duration = Duration::from_secs(10);
#[derive(Debug)]
pub struct FlipperDevice {
pub port_name: String,
pub device_name: String,
}
#[cfg_attr(feature = "tracing", tracing::instrument)]
pub fn list_flipper_ports() -> Result<Vec<FlipperDevice>, serialport::Error> {
debug!("scanning ports");
let ports = serialport::available_ports()?;
let ports = ports
.into_iter()
.filter_map(|port| {
debug!("{}", port.port_name);
if let serialport::SerialPortType::UsbPort(usb_info) = port.port_type {
if usb_info.manufacturer.as_deref() == Some("Flipper Devices Inc.") {
if let Some(product) = usb_info.product {
debug!("└── is flipper");
return Some(FlipperDevice {
port_name: port.port_name,
device_name: product,
});
}
}
}
debug!("└── is not flipper");
None
})
.collect();
Ok(ports)
}