mod command;
pub(crate) mod parsers;
mod screen_data;
mod serial_number;
mod setup_info;
pub(crate) use command::Command;
pub use screen_data::ScreenData;
pub(crate) use serial_number::SerialNumber;
pub(crate) use setup_info::SetupInfo;
use std::sync::Arc;
use std::time::Duration;
pub(crate) type ConfigCallback<T> = Option<Arc<Box<dyn Fn(T) + Send + Sync + 'static>>>;
pub(crate) const NEXT_SCREEN_DATA_TIMEOUT: Duration = Duration::from_secs(2);
pub(crate) const COMMAND_RESPONSE_TIMEOUT: Duration = Duration::from_secs(2);
pub(crate) const RECEIVE_INITIAL_DEVICE_INFO_TIMEOUT: Duration = Duration::from_secs(2);
macro_rules! impl_rf_explorer {
($rf_explorer:ident, $message_container:ty) => {
use crate::common::BaudRate;
use crate::rf_explorer;
use std::borrow::Cow;
impl $rf_explorer {
pub fn connect() -> Option<Self> {
Some(Self {
rfe: Device::connect(Cow::from(rf_explorer::Command::RequestConfig))?,
})
}
pub fn connect_with_name_and_baud_rate(
name: &str,
baud_rate: u32,
) -> ConnectionResult<Self> {
Ok(Self {
rfe: Device::connect_with_name_and_baud_rate(
name,
baud_rate,
Cow::from(rf_explorer::Command::RequestConfig),
)?,
})
}
fn messages(&self) -> &$message_container {
self.rfe.messages()
}
pub fn port_name(&self) -> &str {
self.rfe.port_name()
}
pub fn baud_rate(&self) -> io::Result<u32> {
self.rfe.baud_rate()
}
pub fn set_baud_rate(&self, baud_rate: u32) -> crate::Result<()> {
let baud_rate = BaudRate::try_from(baud_rate)?;
self.send_command(rf_explorer::Command::SetBaudRate { baud_rate })?;
self.rfe
.serial_port()
.set_baud_rate(baud_rate.bps())
.map_err(crate::Error::from)
}
pub(crate) fn send_command(
&self,
command: impl Into<Cow<'static, [u8]>>,
) -> io::Result<()> {
self.rfe.send_command(command)
}
pub fn send_bytes(&self, bytes: impl AsRef<[u8]>) -> io::Result<()> {
self.rfe.send_bytes(bytes)
}
pub fn lcd_on(&self) -> io::Result<()> {
self.rfe.send_command(rf_explorer::Command::EnableLcd)
}
pub fn lcd_off(&self) -> io::Result<()> {
self.rfe.send_command(rf_explorer::Command::DisableLcd)
}
pub fn enable_dump_screen(&self) -> io::Result<()> {
self.rfe
.send_command(rf_explorer::Command::EnableDumpScreen)
}
pub fn disable_dump_screen(&self) -> io::Result<()> {
self.rfe
.send_command(rf_explorer::Command::DisableDumpScreen)
}
pub fn hold(&self) -> io::Result<()> {
self.rfe.send_command(rf_explorer::Command::Hold)
}
pub fn reboot(&self) -> io::Result<()> {
self.rfe.send_command(rf_explorer::Command::Reboot)
}
pub fn power_off(&self) -> io::Result<()> {
self.rfe.send_command(rf_explorer::Command::PowerOff)
}
}
};
}
pub(crate) use impl_rf_explorer;