serial2

Serial communication for Rust.

The serial2 crate provides a cross-platform way to use serial ports. The API is inspired by the serial and serialport crates, and in some cases even borrows implementation details.

This crate adds some missing functionality compared to the serial crate, and aims to have a simpler API than other alternatives. This mostly means that there is a single [SerialPort] type rather than a trait and platform specific implementations. Platform specific functionality is simply implemented on the same type, and removed on incompatible platforms with #[cfg(...)] attributes.

You can open and configure a serial port in one go with [SerialPort::open()]. The returned [SerialPort] object implements the standard [std::io::Read] and [std::io::Write] traits, as well as some serial port specific functions. The [SerialPort::available_ports()] function can be used to get a list of available serial ports on supported platforms.

It is also possible to clear the OS buffers for the serial port. The kernel input buffer contains data that has been received by the kernel, but has not yet been returned by a read() call. The kernel output buffer contains data that has been passed to the kernel with a write() call, but has not yet been transmitted by the hardware. You can clear these buffers with one of the [SerialPort::discard_input_buffer()], [SerialPort::discard_output_buffer()] or [SerialPort::discard_buffers()] functions.

The crate also supports read/write timeouts, which can be set using [SerialPort::set_read_timeout] and [SerialPort::set_write_timeout]. The exact timeout behaviour is platform specific, so be sure to read the documentation for more details.

Finally, the library allows you to control or read the state of some individual signal lines using [SerialPort::set_rts()], [SerialPort::read_cts()], [SerialPort::set_dtr()], [SerialPort::read_dsr()], [SerialPort::read_ri()] and [SerialPort::read_cd()].