Struct serial2_tokio::SerialPort

source ·
pub struct SerialPort { /* private fields */ }
Expand description

An asynchronous serial port for Tokio.

Implementations§

source§

impl SerialPort

source

pub fn open(path: impl AsRef<Path>, settings: impl IntoSettings) -> Result<Self>

Open and configure a serial port by path or name.

On Unix systems, the name parameter must be a path to a TTY device. On Windows, it must be the name of a COM device, such as COM1, COM2, etc.

The second argument is used to configure the serial port. For simple cases, you pass a u32 for the baud rate. See IntoSettings for more information.

The library automatically uses the win32 device namespace on Windows, so COM ports above COM9 are supported out of the box.

§Example
SerialPort::open("/dev/ttyUSB0", 115200)?;
source

pub fn available_ports() -> Result<Vec<PathBuf>>

Get a list of available serial ports.

Not currently supported on all platforms. On unsupported platforms, this function always returns an error.

source

pub fn set_configuration(&mut self, settings: &Settings) -> Result<()>

Configure (or reconfigure) the serial port.

source

pub fn get_configuration(&self) -> Result<Settings>

Get the current configuration of the serial port.

This function can fail if the underlying syscall fails, or if the serial port configuration can’t be reported using Settings.

source

pub fn try_clone(&self) -> Result<Self>

Try to clone the serial port handle.

The cloned object refers to the same serial port.

Mixing reads and writes on different handles to the same serial port from different threads may lead to unexpect results. The data may end up interleaved in unpredictable ways.

source

pub async fn read(&self, buf: &mut [u8]) -> Result<usize>

Read bytes from the serial port.

This is identical to AsyncReadExt::read(), except that this function takes a const reference &self. This allows you to use the serial port concurrently from multiple tasks.

Note that there are no guarantees about which task receives what data when multiple tasks are reading from the serial port. You should normally limit yourself to a single reading task and a single writing task.

source

pub async fn read_vectored(&self, buf: &mut [IoSliceMut<'_>]) -> Result<usize>

Read bytes from the serial port into a slice of buffers.

Note that there are no guarantees about which task receives what data when multiple tasks are reading from the serial port. You should normally limit yourself to a single reading task and a single writing task.

source

pub fn is_read_vectored(&self) -> bool

Check if the implementation supports vectored reads.

If this returns false, then Self::read_vectored() will only use the first buffer of the given slice. All platforms except for Windows support vectored reads.

source

pub async fn write(&self, buf: &[u8]) -> Result<usize>

Write bytes to the serial port.

This is identical to AsyncWriteExt::write(), except that this function takes a const reference &self. This allows you to use the serial port concurrently from multiple tasks.

Note that data written to the same serial port from multiple tasks may end up interleaved at the receiving side. You should normally limit yourself to a single reading task and a single writing task.

source

pub async fn write_all(&self, buf: &[u8]) -> Result<()>

Write all bytes to the serial port.

This will continue to call Self::write() until the entire buffer has been written, or an I/O error occurs.

This is identical to AsyncWriteExt::write_all(), except that this function takes a const reference &self. This allows you to use the serial port concurrently from multiple tasks.

Note that data written to the same serial port from multiple tasks may end up interleaved at the receiving side. You should normally limit yourself to a single reading task and a single writing task.

source

pub async fn write_vectored(&self, buf: &[IoSlice<'_>]) -> Result<usize>

Write bytes to the serial port from a slice of buffers.

This is identical to AsyncWriteExt::write_vectored(), except that this function takes a const reference &self. This allows you to use the serial port concurrently from multiple tasks.

Note that data written to the same serial port from multiple tasks may end up interleaved at the receiving side. You should normally limit yourself to a single reading task and a single writing task.

source

pub fn is_write_vectored(&self) -> bool

Check if the implementation supports vectored writes.

If this returns false, then Self::write_vectored() will only use the first buffer of the given slice. All platforms except for Windows support vectored writes.

source

pub fn discard_buffers(&self) -> Result<()>

Discard the kernel input and output buffers for the serial port.

When you write to a serial port, the data may be put in a buffer by the OS to be transmitted by the actual device later. Similarly, data received on the device can be put in a buffer by the OS untill you read it. This function clears both buffers: any untransmitted data and received but unread data is discarded by the OS.

source

pub fn discard_input_buffer(&self) -> Result<()>

Discard the kernel input buffers for the serial port.

Data received on the device can be put in a buffer by the OS untill you read it. This function clears that buffer: received but unread data is discarded by the OS.

This is particularly useful when communicating with a device that only responds to commands that you send to it. If you discard the input buffer before sending the command, you discard any noise that may have been received after the last command.

source

pub fn discard_output_buffer(&self) -> Result<()>

Discard the kernel output buffers for the serial port.

When you write to a serial port, the data is generally put in a buffer by the OS to be transmitted by the actual device later. This function clears that buffer: any untransmitted data is discarded by the OS.

source

pub fn set_rts(&self, state: bool) -> Result<()>

Set the state of the Ready To Send line.

If hardware flow control is enabled on the serial port, it is platform specific what will happen. The function may fail with an error or it may silently be ignored. It may even succeed and interfere with the flow control.

source

pub fn read_cts(&self) -> Result<bool>

Read the state of the Clear To Send line.

If hardware flow control is enabled on the serial port, it is platform specific what will happen. The function may fail with an error, it may return a bogus value, or it may return the actual state of the CTS line.

source

pub fn set_dtr(&self, state: bool) -> Result<()>

Set the state of the Data Terminal Ready line.

If hardware flow control is enabled on the serial port, it is platform specific what will happen. The function may fail with an error or it may silently be ignored.

source

pub fn read_dsr(&self) -> Result<bool>

Read the state of the Data Set Ready line.

If hardware flow control is enabled on the serial port, it is platform specific what will happen. The function may fail with an error, it may return a bogus value, or it may return the actual state of the DSR line.

source

pub fn read_ri(&self) -> Result<bool>

Read the state of the Ring Indicator line.

This line is also sometimes also called the RNG or RING line.

source

pub fn read_cd(&self) -> Result<bool>

Read the state of the Carrier Detect (CD) line.

This line is also called the Data Carrier Detect (DCD) line or the Receive Line Signal Detect (RLSD) line.

source

pub fn get_rs4xx_mode(&self) -> Result<TransceiverMode>

Available on crate feature rs4xx and Linux only.

Get the RS-4xx mode of the serial port transceiver.

This is currently only supported on Linux.

Not all serial ports can be configured in a different mode by software. Some serial ports are always in RS-485 or RS-422 mode, and some may have hardware switches or jumpers to configure the transceiver. In those cases, this function will usually report an error or rs4xx::TransceiverMode::Default, even though the serial port is configured is RS-485 or RS-422 mode.

Note that driver support for this feature is very limited and sometimes inconsistent. Please read all the warnings in the rs4xx module carefully.

source

pub fn set_rs4xx_mode(&self, mode: impl Into<TransceiverMode>) -> Result<()>

Available on crate feature rs4xx and Linux only.

Set the RS-4xx mode of the serial port transceiver.

This is currently only supported on Linux.

Not all serial ports can be configured in a different mode by software. Some serial ports are always in RS-485 or RS-422 mode, and some may have hardware switches or jumpers to configure the transceiver. In that case, this function will usually return an error, but the port can still be in RS-485 or RS-422 mode.

Note that driver support for this feature is very limited and sometimes inconsistent. Please read all the warnings in the rs4xx module carefully.

Trait Implementations§

source§

impl AsyncRead for SerialPort

source§

fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>, ) -> Poll<Result<()>>

Attempts to read from the AsyncRead into buf. Read more
source§

impl AsyncWrite for SerialPort

source§

fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize>>

Attempt to write bytes from buf into the object. Read more
source§

fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>

Like poll_write, except that it writes from a slice of buffers. Read more
source§

fn poll_flush( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll<Result<(), Error>>

Attempts to flush the object, ensuring that any buffered data reach their destination. Read more
source§

fn poll_shutdown( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Result<(), Error>>

Initiates or attempts to shut down this writer, returning success when the I/O connection has completely shut down. Read more
source§

fn is_write_vectored(&self) -> bool

Determines if this writer has an efficient poll_write_vectored implementation. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<R> AsyncReadExt for R
where R: AsyncRead + ?Sized,

source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where Self: Sized, R: AsyncRead,

Creates a new AsyncRead instance that chains this stream with next. Read more
source§

fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>
where Self: Unpin,

Pulls some bytes from this source into the specified buffer, returning how many bytes were read. Read more
source§

fn read_buf<'a, B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>
where Self: Sized + Unpin, B: BufMut,

Pulls some bytes from this source into the specified buffer, advancing the buffer’s internal cursor. Read more
source§

fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>
where Self: Unpin,

Reads the exact number of bytes required to fill buf. Read more
source§

fn read_u8(&mut self) -> ReadU8<&mut Self>
where Self: Unpin,

Reads an unsigned 8 bit integer from the underlying reader. Read more
source§

fn read_i8(&mut self) -> ReadI8<&mut Self>
where Self: Unpin,

Reads a signed 8 bit integer from the underlying reader. Read more
source§

fn read_u16(&mut self) -> ReadU16<&mut Self>
where Self: Unpin,

Reads an unsigned 16-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_i16(&mut self) -> ReadI16<&mut Self>
where Self: Unpin,

Reads a signed 16-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_u32(&mut self) -> ReadU32<&mut Self>
where Self: Unpin,

Reads an unsigned 32-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_i32(&mut self) -> ReadI32<&mut Self>
where Self: Unpin,

Reads a signed 32-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_u64(&mut self) -> ReadU64<&mut Self>
where Self: Unpin,

Reads an unsigned 64-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_i64(&mut self) -> ReadI64<&mut Self>
where Self: Unpin,

Reads an signed 64-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_u128(&mut self) -> ReadU128<&mut Self>
where Self: Unpin,

Reads an unsigned 128-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_i128(&mut self) -> ReadI128<&mut Self>
where Self: Unpin,

Reads an signed 128-bit integer in big-endian order from the underlying reader. Read more
source§

fn read_f32(&mut self) -> ReadF32<&mut Self>
where Self: Unpin,

Reads an 32-bit floating point type in big-endian order from the underlying reader. Read more
source§

fn read_f64(&mut self) -> ReadF64<&mut Self>
where Self: Unpin,

Reads an 64-bit floating point type in big-endian order from the underlying reader. Read more
source§

fn read_u16_le(&mut self) -> ReadU16Le<&mut Self>
where Self: Unpin,

Reads an unsigned 16-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_i16_le(&mut self) -> ReadI16Le<&mut Self>
where Self: Unpin,

Reads a signed 16-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_u32_le(&mut self) -> ReadU32Le<&mut Self>
where Self: Unpin,

Reads an unsigned 32-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_i32_le(&mut self) -> ReadI32Le<&mut Self>
where Self: Unpin,

Reads a signed 32-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_u64_le(&mut self) -> ReadU64Le<&mut Self>
where Self: Unpin,

Reads an unsigned 64-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_i64_le(&mut self) -> ReadI64Le<&mut Self>
where Self: Unpin,

Reads an signed 64-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_u128_le(&mut self) -> ReadU128Le<&mut Self>
where Self: Unpin,

Reads an unsigned 128-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_i128_le(&mut self) -> ReadI128Le<&mut Self>
where Self: Unpin,

Reads an signed 128-bit integer in little-endian order from the underlying reader. Read more
source§

fn read_f32_le(&mut self) -> ReadF32Le<&mut Self>
where Self: Unpin,

Reads an 32-bit floating point type in little-endian order from the underlying reader. Read more
source§

fn read_f64_le(&mut self) -> ReadF64Le<&mut Self>
where Self: Unpin,

Reads an 64-bit floating point type in little-endian order from the underlying reader. Read more
source§

fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>
where Self: Unpin,

Reads all bytes until EOF in this source, placing them into buf. Read more
source§

fn read_to_string<'a>( &'a mut self, dst: &'a mut String, ) -> ReadToString<'a, Self>
where Self: Unpin,

Reads all bytes until EOF in this source, appending them to buf. Read more
source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adaptor which reads at most limit bytes from it. Read more
source§

impl<W> AsyncWriteExt for W
where W: AsyncWrite + ?Sized,

source§

fn write<'a>(&'a mut self, src: &'a [u8]) -> Write<'a, Self>
where Self: Unpin,

Writes a buffer into this writer, returning how many bytes were written. Read more
source§

fn write_vectored<'a, 'b>( &'a mut self, bufs: &'a [IoSlice<'b>], ) -> WriteVectored<'a, 'b, Self>
where Self: Unpin,

Like write, except that it writes from a slice of buffers. Read more
source§

fn write_buf<'a, B>(&'a mut self, src: &'a mut B) -> WriteBuf<'a, Self, B>
where Self: Sized + Unpin, B: Buf,

Writes a buffer into this writer, advancing the buffer’s internal cursor. Read more
source§

fn write_all_buf<'a, B>( &'a mut self, src: &'a mut B, ) -> WriteAllBuf<'a, Self, B>
where Self: Sized + Unpin, B: Buf,

Attempts to write an entire buffer into this writer. Read more
source§

fn write_all<'a>(&'a mut self, src: &'a [u8]) -> WriteAll<'a, Self>
where Self: Unpin,

Attempts to write an entire buffer into this writer. Read more
source§

fn write_u8(&mut self, n: u8) -> WriteU8<&mut Self>
where Self: Unpin,

Writes an unsigned 8-bit integer to the underlying writer. Read more
source§

fn write_i8(&mut self, n: i8) -> WriteI8<&mut Self>
where Self: Unpin,

Writes a signed 8-bit integer to the underlying writer. Read more
source§

fn write_u16(&mut self, n: u16) -> WriteU16<&mut Self>
where Self: Unpin,

Writes an unsigned 16-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_i16(&mut self, n: i16) -> WriteI16<&mut Self>
where Self: Unpin,

Writes a signed 16-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_u32(&mut self, n: u32) -> WriteU32<&mut Self>
where Self: Unpin,

Writes an unsigned 32-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_i32(&mut self, n: i32) -> WriteI32<&mut Self>
where Self: Unpin,

Writes a signed 32-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_u64(&mut self, n: u64) -> WriteU64<&mut Self>
where Self: Unpin,

Writes an unsigned 64-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_i64(&mut self, n: i64) -> WriteI64<&mut Self>
where Self: Unpin,

Writes an signed 64-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_u128(&mut self, n: u128) -> WriteU128<&mut Self>
where Self: Unpin,

Writes an unsigned 128-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_i128(&mut self, n: i128) -> WriteI128<&mut Self>
where Self: Unpin,

Writes an signed 128-bit integer in big-endian order to the underlying writer. Read more
source§

fn write_f32(&mut self, n: f32) -> WriteF32<&mut Self>
where Self: Unpin,

Writes an 32-bit floating point type in big-endian order to the underlying writer. Read more
source§

fn write_f64(&mut self, n: f64) -> WriteF64<&mut Self>
where Self: Unpin,

Writes an 64-bit floating point type in big-endian order to the underlying writer. Read more
source§

fn write_u16_le(&mut self, n: u16) -> WriteU16Le<&mut Self>
where Self: Unpin,

Writes an unsigned 16-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_i16_le(&mut self, n: i16) -> WriteI16Le<&mut Self>
where Self: Unpin,

Writes a signed 16-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_u32_le(&mut self, n: u32) -> WriteU32Le<&mut Self>
where Self: Unpin,

Writes an unsigned 32-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_i32_le(&mut self, n: i32) -> WriteI32Le<&mut Self>
where Self: Unpin,

Writes a signed 32-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_u64_le(&mut self, n: u64) -> WriteU64Le<&mut Self>
where Self: Unpin,

Writes an unsigned 64-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_i64_le(&mut self, n: i64) -> WriteI64Le<&mut Self>
where Self: Unpin,

Writes an signed 64-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_u128_le(&mut self, n: u128) -> WriteU128Le<&mut Self>
where Self: Unpin,

Writes an unsigned 128-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_i128_le(&mut self, n: i128) -> WriteI128Le<&mut Self>
where Self: Unpin,

Writes an signed 128-bit integer in little-endian order to the underlying writer. Read more
source§

fn write_f32_le(&mut self, n: f32) -> WriteF32Le<&mut Self>
where Self: Unpin,

Writes an 32-bit floating point type in little-endian order to the underlying writer. Read more
source§

fn write_f64_le(&mut self, n: f64) -> WriteF64Le<&mut Self>
where Self: Unpin,

Writes an 64-bit floating point type in little-endian order to the underlying writer. Read more
source§

fn flush(&mut self) -> Flush<'_, Self>
where Self: Unpin,

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
source§

fn shutdown(&mut self) -> Shutdown<'_, Self>
where Self: Unpin,

Shuts down the output stream, ensuring that the value can be dropped cleanly. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.