diff --git a/mavlink-core/src/connection/direct_serial/config.rs b/mavlink-core/src/connection/direct_serial/config.rs index bc22512d779..6c47dc8d9bf 100644 --- a/mavlink-core/src/connection/direct_serial/config.rs +++ b/mavlink-core/src/connection/direct_serial/config.rs @@ -1,4 +1,5 @@ use core::fmt::Display; +use core::time::Duration; /// MAVLink address for a serial connection /// @@ -14,6 +15,7 @@ use core::fmt::Display; pub struct SerialConfig { pub(crate) port_name: String, pub(crate) baud_rate: u32, + pub(crate) timeout: Option, read_buffer_capacity: usize, } @@ -26,10 +28,23 @@ impl SerialConfig { Self { port_name, baud_rate, + timeout: None, read_buffer_capacity: default_capacity, } } + /// Sets the serial port timeout. + /// + /// When set, serial reads will return an error after the specified duration. + /// + /// By default, this is 1 millisecond. + /// + /// Only applies to sync connections and is a no-op for async ones. + pub fn timeout(mut self, timeout: Duration) -> Self { + self.timeout = Some(timeout); + self + } + /// Updates the read buffer capacity. pub fn with_read_buffer_capacity(mut self, capacity: usize) -> Self { self.read_buffer_capacity = capacity; diff --git a/mavlink-core/src/connection/direct_serial/sync.rs b/mavlink-core/src/connection/direct_serial/sync.rs index 1c88c837a83..412a71e1801 100644 --- a/mavlink-core/src/connection/direct_serial/sync.rs +++ b/mavlink-core/src/connection/direct_serial/sync.rs @@ -106,7 +106,7 @@ impl Connectable for SerialConfig { .parity(Parity::None) .stop_bits(StopBits::One) .flow_control(FlowControl::None) - .timeout(Duration::from_millis(1)) + .timeout(self.timeout.unwrap_or(Duration::from_millis(1))) .open()?; let write_port = read_port.try_clone()?;