diff --git a/examples/hardware_check.rs b/examples/hardware_check.rs index f27a0381..e9a5ca6e 100644 --- a/examples/hardware_check.rs +++ b/examples/hardware_check.rs @@ -227,6 +227,7 @@ fn test_single_port(port: &mut dyn serialport::SerialPort, loopback: bool) { // Test setting stop bits println!("Testing stop bits..."); stop_bits_check!(port, StopBits::Two); + stop_bits_check!(port, StopBits::OnePointFive); stop_bits_check!(port, StopBits::One); // Test bytes to read and write diff --git a/src/lib.rs b/src/lib.rs index 200374e8..c01aa777 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -225,6 +225,9 @@ pub enum StopBits { /// One stop bit. One, + /// One and a half stop bits. + OnePointFive, + /// Two stop bits. Two, } @@ -233,6 +236,7 @@ impl fmt::Display for StopBits { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match *self { StopBits::One => write!(f, "One"), + StopBits::OnePointFive => write!(f, "OnePointFive"), StopBits::Two => write!(f, "Two"), } } @@ -242,6 +246,7 @@ impl From for u8 { fn from(value: StopBits) -> Self { match value { StopBits::One => 1, + StopBits::OnePointFive => 1, StopBits::Two => 2, } } diff --git a/src/posix/termios.rs b/src/posix/termios.rs index f53af807..ec718d88 100644 --- a/src/posix/termios.rs +++ b/src/posix/termios.rs @@ -198,6 +198,7 @@ pub(crate) fn set_data_bits(termios: &mut Termios, data_bits: DataBits) { pub(crate) fn set_stop_bits(termios: &mut Termios, stop_bits: StopBits) { match stop_bits { StopBits::One => termios.c_cflag &= !libc::CSTOPB, + StopBits::OnePointFive => termios.c_cflag &= !libc::CSTOPB, StopBits::Two => termios.c_cflag |= libc::CSTOPB, }; } diff --git a/src/windows/com.rs b/src/windows/com.rs index 5573ab77..c3ab9aad 100644 --- a/src/windows/com.rs +++ b/src/windows/com.rs @@ -326,6 +326,7 @@ impl SerialPort for COMPort { let dcb = dcb::get_dcb(self.handle)?; match dcb.StopBits { TWOSTOPBITS => Ok(StopBits::Two), + ONE5STOPBITS => Ok(StopBits::OnePointFive), ONESTOPBIT => Ok(StopBits::One), _ => Err(Error::new( ErrorKind::Unknown, diff --git a/src/windows/dcb.rs b/src/windows/dcb.rs index d0207fd6..4bb644fa 100644 --- a/src/windows/dcb.rs +++ b/src/windows/dcb.rs @@ -89,6 +89,7 @@ pub(crate) fn set_parity(dcb: &mut DCB, parity: Parity) { pub(crate) fn set_stop_bits(dcb: &mut DCB, stop_bits: StopBits) { dcb.StopBits = match stop_bits { StopBits::One => ONESTOPBIT, + StopBits::OnePointFive => ONE5STOPBITS, StopBits::Two => TWOSTOPBITS, }; }