Struct serialport::TTYPort
source · pub struct TTYPort { /* private fields */ }
Expand description
A serial port implementation for POSIX TTY ports
The port will be closed when the value is dropped. However, this struct
should not be instantiated directly by using TTYPort::open()
, instead use
the cross-platform serialport::open()
or
serialport::open_with_settings()
.
Note: on macOS, when connecting to a pseudo-terminal (pty
opened via
posix_openpt
), the baud_rate
should be set to 0; this will be used to
explicitly skip an attempt to set the baud rate of the file descriptor
that would otherwise happen via an ioctl
command.
use serialport::{TTYPort, SerialPort};
let (mut master, slave) = TTYPort::pair().expect("Unable to create ptty pair");
// ... elsewhere
let mut port = TTYPort::open(&serialport::new(slave.name().unwrap(), 0)).expect("unable to open");
Implementations§
source§impl TTYPort
impl TTYPort
sourcepub fn open(builder: &SerialPortBuilder) -> Result<TTYPort>
pub fn open(builder: &SerialPortBuilder) -> Result<TTYPort>
Opens a TTY device as a serial port.
path
should be the path to a TTY device, e.g., /dev/ttyS0
.
Ports are opened in exclusive mode by default. If this is undesirable
behavior, use TTYPort::set_exclusive(false)
.
If the port settings differ from the default settings, characters received
before the new settings become active may be garbled. To remove those
from the receive buffer, call TTYPort::clear(ClearBuffer::Input)
.
§Errors
NoDevice
if the device could not be opened. This could indicate that the device is already in use.InvalidInput
ifpath
is not a valid device name.Io
for any other error while opening or initializing the device.
sourcepub fn exclusive(&self) -> bool
pub fn exclusive(&self) -> bool
Returns the exclusivity of the port
If a port is exclusive, then trying to open the same device path again will fail.
sourcepub fn set_exclusive(&mut self, exclusive: bool) -> Result<()>
pub fn set_exclusive(&mut self, exclusive: bool) -> Result<()>
Sets the exclusivity of the port
If a port is exclusive, then trying to open the same device path again will fail.
See the man pages for the tiocexcl and tiocnxcl ioctl’s for more details.
§Errors
Io
for any error while setting exclusivity for the port.
sourcepub fn pair() -> Result<(Self, Self)>
pub fn pair() -> Result<(Self, Self)>
Create a pair of pseudo serial terminals
§Returns
Two connected TTYPort
objects: (master, slave)
§Errors
Attempting any IO or parameter settings on the slave tty after the master tty is closed will return errors.
On some platforms manipulating the master port will fail and only modifying the slave port is possible.
§Examples
use serialport::TTYPort;
let (master, slave) = TTYPort::pair().unwrap();
sourcepub fn send_break(&self, duration: BreakDuration) -> Result<()>
pub fn send_break(&self, duration: BreakDuration) -> Result<()>
Sends 0-valued bits over the port for a set duration
sourcepub fn try_clone_native(&self) -> Result<TTYPort>
pub fn try_clone_native(&self) -> Result<TTYPort>
Attempts to clone the SerialPort
. This allow you to write and read simultaneously from the
same serial connection. Please note that if you want a real asynchronous serial port you
should look at mio-serial or
tokio-serial.
Also, you must be very careful when changing the settings of a cloned SerialPort
: since
the settings are cached on a per object basis, trying to modify them from two different
objects can cause some nasty behavior.
This is the same as SerialPort::try_clone()
but returns the concrete type instead.
§Errors
This function returns an error if the serial port couldn’t be cloned.
Trait Implementations§
source§impl FromRawFd for TTYPort
impl FromRawFd for TTYPort
source§unsafe fn from_raw_fd(fd: RawFd) -> Self
unsafe fn from_raw_fd(fd: RawFd) -> Self
Self
from the given raw file
descriptor. Read moresource§impl IntoRawFd for TTYPort
impl IntoRawFd for TTYPort
source§fn into_raw_fd(self) -> RawFd
fn into_raw_fd(self) -> RawFd
source§impl Read for TTYPort
impl Read for TTYPort
source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moresource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moresource§impl SerialPort for TTYPort
impl SerialPort for TTYPort
source§fn baud_rate(&self) -> Result<u32>
fn baud_rate(&self) -> Result<u32>
Returns the port’s baud rate
On some platforms this will be the actual device baud rate, which may differ from the desired baud rate.
source§fn flow_control(&self) -> Result<FlowControl>
fn flow_control(&self) -> Result<FlowControl>
source§fn set_flow_control(&mut self, flow_control: FlowControl) -> Result<()>
fn set_flow_control(&mut self, flow_control: FlowControl) -> Result<()>
source§fn set_timeout(&mut self, timeout: Duration) -> Result<()>
fn set_timeout(&mut self, timeout: Duration) -> Result<()>
source§fn write_request_to_send(&mut self, level: bool) -> Result<()>
fn write_request_to_send(&mut self, level: bool) -> Result<()>
source§fn write_data_terminal_ready(&mut self, level: bool) -> Result<()>
fn write_data_terminal_ready(&mut self, level: bool) -> Result<()>
source§fn read_clear_to_send(&mut self) -> Result<bool>
fn read_clear_to_send(&mut self) -> Result<bool>
source§fn read_data_set_ready(&mut self) -> Result<bool>
fn read_data_set_ready(&mut self) -> Result<bool>
source§fn read_ring_indicator(&mut self) -> Result<bool>
fn read_ring_indicator(&mut self) -> Result<bool>
source§fn read_carrier_detect(&mut self) -> Result<bool>
fn read_carrier_detect(&mut self) -> Result<bool>
source§fn bytes_to_read(&self) -> Result<u32>
fn bytes_to_read(&self) -> Result<u32>
source§fn bytes_to_write(&self) -> Result<u32>
fn bytes_to_write(&self) -> Result<u32>
source§fn clear(&self, buffer_to_clear: ClearBuffer) -> Result<()>
fn clear(&self, buffer_to_clear: ClearBuffer) -> Result<()>
source§fn try_clone(&self) -> Result<Box<dyn SerialPort>>
fn try_clone(&self) -> Result<Box<dyn SerialPort>>
SerialPort
. This allow you to write and read simultaneously from the
same serial connection. Please note that if you want a real asynchronous serial port you
should look at mio-serial or
tokio-serial. Read moresource§fn clear_break(&self) -> Result<()>
fn clear_break(&self) -> Result<()>
source§impl Write for TTYPort
impl Write for TTYPort
source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)