pub mod detect;
#[cfg(feature = "native")]
pub mod serial;
pub use detect::{DetectedPort, UsbDevice};
#[cfg(feature = "native")]
pub use serial::SerialPort;
use crate::error::Result;
use std::io::{Read, Write};
use std::time::Duration;
pub trait ConnectionPort: Read + Write + Send {
fn set_timeout(&mut self, timeout: Duration) -> Result<()>;
fn timeout(&self) -> Duration;
fn set_baud_rate(&mut self, baud_rate: u32) -> Result<()>;
fn baud_rate(&self) -> u32;
fn clear(&mut self) -> Result<()>;
fn name(&self) -> &str;
}
#[cfg(feature = "native")]
pub fn list_ports() -> Result<Vec<String>> {
Ok(serial::SerialPort::list_ports()?
.into_iter()
.map(|p| p.port_name)
.collect())
}
#[cfg(feature = "native")]
pub fn find_port(pattern: Option<&str>) -> Result<String> {
let ports = list_ports()?;
match pattern {
Some(p) => ports
.into_iter()
.find(|port| port.contains(p))
.ok_or(crate::error::Error::DeviceNotFound),
None => ports
.into_iter()
.next()
.ok_or(crate::error::Error::DeviceNotFound),
}
}