pub struct UartDriver<'d> { /* private fields */ }
Expand description

Serial abstraction

Implementations§

source§

impl<'d> UartDriver<'d>

source

pub fn new<UART: Uart>( uart: impl Peripheral<P = UART> + 'd, tx: impl Peripheral<P = impl OutputPin> + 'd, rx: impl Peripheral<P = impl InputPin> + 'd, cts: Option<impl Peripheral<P = impl InputPin> + 'd>, rts: Option<impl Peripheral<P = impl OutputPin> + 'd>, config: &Config ) -> Result<Self, EspError>

Create a new serial driver

source

pub fn event_queue(&self) -> Option<&Queue<UartEvent>>

Retrieves the event queue for this UART. Returns None if the config specified 0 for queue_size.

source

pub fn change_stop_bits(&self, stop_bits: StopBits) -> Result<&Self, EspError>

Change the number of stop bits

source

pub fn stop_bits(&self) -> Result<StopBits, EspError>

Returns the current number of stop bits

source

pub fn change_data_bits(&self, data_bits: DataBits) -> Result<&Self, EspError>

Change the number of data bits

source

pub fn data_bits(&self) -> Result<DataBits, EspError>

Return the current number of data bits

source

pub fn change_parity(&self, parity: Parity) -> Result<&Self, EspError>

Change the type of parity checking

source

pub fn parity(&self) -> Result<Parity, EspError>

Returns the current type of parity checking

source

pub fn change_baudrate<T: Into<Hertz> + Copy>( &self, baudrate: T ) -> Result<&Self, EspError>

Change the baudrate.

Will automatically select the clock source. When possible the reference clock (1MHz) will be used, because this is constant when the clock source/frequency changes. However if one of the clock frequencies is below 10MHz or if the baudrate is above the reference clock or if the baudrate cannot be set within 1.5% then use the APB clock.

source

pub fn baudrate(&self) -> Result<Hertz, EspError>

Returns the current baudrate

source

pub fn split(&mut self) -> (UartTxDriver<'_>, UartRxDriver<'_>)

Split the serial driver in separate TX and RX drivers

source

pub fn into_split(self) -> (UartTxDriver<'d>, UartRxDriver<'d>)

Split the serial driver in separate TX and RX drivers.

Unlike [split], the halves are owned and reference counted.

source

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

Read multiple bytes into a slice

source

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

Write multiple bytes from a slice

source

pub fn write_nb(&self, bytes: &[u8]) -> Result<usize, EspError>

Write multiple bytes from a slice directly to the TX FIFO hardware. Returns the number of bytes written, where 0 would mean that the TX FIFO is full.

NOTE: In case the UART TX buffer is enabled, this method might have unpredictable results when used together with method write, as the latter will push the data to be sent to the TX buffer first.

To avoid this, always call wait_done after the last call to write and before calling this method.

source

pub fn flush_read(&self) -> Result<(), EspError>

👎Deprecated since 0.41.3: Use UartDriver::clear_rx instead

Clears the receive buffer.

source

pub fn clear_rx(&self) -> Result<(), EspError>

Clears the receive buffer.

source

pub fn flush_write(&self) -> Result<(), EspError>

👎Deprecated since 0.41.3: Use UartDriver::wait_tx_done instead

Waits for the transmission to complete.

source

pub fn wait_tx_done(&self, timeout: TickType_t) -> Result<(), EspError>

Waits until the transmission is complete or until the specified timeout expires.

source

pub fn port(&self) -> uart_port_t

source

pub fn remaining_read(&self) -> Result<usize, EspError>

Get count of remaining bytes in the receive ring buffer

source

pub fn remaining_write(&self) -> Result<usize, EspError>

Get count of remaining capacity in the transmit ring buffer

Trait Implementations§

source§

impl<'d> Drop for UartDriver<'d>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<'d> ErrorType for UartDriver<'d>

§

type Error = EspIOError

Error type of all the IO operations on this type.
source§

impl<'d> ErrorType for UartDriver<'d>

§

type Error = SerialError

Error type
source§

impl<'d> Read for UartDriver<'d>

source§

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

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

fn read_exact( &mut self, buf: &mut [u8] ) -> Result<(), ReadExactError<Self::Error>>

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

impl<'d> Read for UartDriver<'d>

source§

fn read(&mut self) -> Result<u8, Self::Error>

Reads a single word from the serial interface
source§

impl<'d> Write for UartDriver<'d>

source§

fn write(&mut self, byte: u8) -> Result<(), Self::Error>

Writes a single word to the serial interface.
source§

fn flush(&mut self) -> Result<(), Self::Error>

Ensures that none of the previously written words are still buffered.
source§

impl<'d> Write for UartDriver<'d>

source§

fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error>

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

fn flush(&mut self) -> Result<(), Self::Error>

Flush this output stream, blocking until all intermediately buffered contents reach their destination.
source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error>

Write an entire buffer into this writer. Read more
source§

fn write_fmt( &mut self, fmt: Arguments<'_> ) -> Result<(), WriteFmtError<Self::Error>>

Write a formatted string into this writer, returning any error encountered. Read more
source§

impl<'d> Write for UartDriver<'d>

source§

fn write_str(&mut self, s: &str) -> Result

Writes a string slice into this writer, returning whether the write succeeded. Read more
1.1.0§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a [char] into this writer, returning whether the write succeeded. Read more
1.0.0§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the [write!] macro with implementors of this trait. Read more
source§

impl<'d> Read<u8> for UartDriver<'d>

§

type Error = SerialError

Read error
source§

fn read(&mut self) -> Result<u8, Self::Error>

Reads a single word from the serial interface
source§

impl<'d> Write<u8> for UartDriver<'d>

§

type Error = SerialError

Write error
source§

fn flush(&mut self) -> Result<(), Self::Error>

Ensures that none of the previously written words are still buffered
source§

fn write(&mut self, byte: u8) -> Result<(), Self::Error>

Writes a single word to the serial interface
source§

impl<'d> Send for UartDriver<'d>

source§

impl<'d> Sync for UartDriver<'d>

Auto Trait Implementations§

§

impl<'d> RefUnwindSafe for UartDriver<'d>

§

impl<'d> Unpin for UartDriver<'d>

§

impl<'d> !UnwindSafe for UartDriver<'d>

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn into(self) -> U

Calls U::from(self).

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

§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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.
§

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

Performs the conversion.