use std::time::Duration;
use serde::{Deserialize, Serialize};
use super::{DataBits, Parity, RtsType, StopBits};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Config {
pub device: String,
pub baud_rate: u32,
pub data_bits: DataBits,
pub parity: Parity,
pub stop_bits: StopBits,
pub rts_type: RtsType,
pub rts_delay_us: u64,
pub flush_after_write: bool,
#[serde(with = "humantime_serde")]
pub transaction_timeout: Duration,
#[serde(with = "humantime_serde")]
pub serial_timeout: Duration,
pub max_frame_size: u64,
}
impl Default for Config {
fn default() -> Self {
Self {
device: "/dev/ttyAMA0".to_string(),
baud_rate: 9600,
data_bits: DataBits::default(),
parity: Parity::default(),
stop_bits: StopBits::default(),
rts_type: RtsType::default(),
rts_delay_us: 3500,
flush_after_write: true,
transaction_timeout: Duration::from_secs(5),
serial_timeout: Duration::from_secs(1),
max_frame_size: 256,
}
}
}
impl Config {
pub fn serial_port_info(&self) -> String {
format!(
"{} ({} baud, {} data bits, {} parity, {} stop bits)",
self.device, self.baud_rate, self.data_bits, self.parity, self.stop_bits
)
}
}