embassy-usb

Crates

git

Versions

default

Flavors

embassy_usb::class::cdc_acm

Struct CdcAcmClass

Source
pub struct CdcAcmClass<'d, D: Driver<'d>> { /* private fields */ }
Expand description

Packet level implementation of a CDC-ACM serial port.

This class can be used directly and it has the least overhead due to directly reading and writing USB packets with no intermediate buffers, but it will not act like a stream-like serial port. The following constraints must be followed if you use this class directly:

  • read_packet must be called with a buffer large enough to hold max_packet_size bytes.
  • write_packet must not be called with a buffer larger than max_packet_size bytes.
  • If you write a packet that is exactly max_packet_size bytes long, it won’t be processed by the host operating system until a subsequent shorter packet is sent. A zero-length packet (ZLP) can be sent if there is no other data to send. This is because USB bulk transactions must be terminated with a short packet, even if the bulk endpoint is used for stream-like data.

Implementations§

Source§

impl<'d, D: Driver<'d>> CdcAcmClass<'d, D>

Source

pub fn new( builder: &mut Builder<'d, D>, state: &'d mut State<'d>, max_packet_size: u16, ) -> Self

Creates a new CdcAcmClass with the provided UsbBus and max_packet_size in bytes. For full-speed devices, max_packet_size has to be one of 8, 16, 32 or 64.

Source

pub fn max_packet_size(&self) -> u16

Gets the maximum packet size in bytes.

Source

pub fn line_coding(&self) -> LineCoding

Gets the current line coding. The line coding contains information that’s mainly relevant for USB to UART serial port emulators, and can be ignored if not relevant.

Source

pub fn dtr(&self) -> bool

Gets the DTR (data terminal ready) state

Source

pub fn rts(&self) -> bool

Gets the RTS (request to send) state

Source

pub async fn write_packet(&mut self, data: &[u8]) -> Result<(), EndpointError>

Writes a single packet into the IN endpoint.

Source

pub async fn read_packet( &mut self, data: &mut [u8], ) -> Result<usize, EndpointError>

Reads a single packet from the OUT endpoint.

Source

pub async fn wait_connection(&mut self)

Waits for the USB host to enable this interface

Source

pub fn split(self) -> (Sender<'d, D>, Receiver<'d, D>)

Split the class into a sender and receiver.

This allows concurrently sending and receiving packets from separate tasks.

Source

pub fn split_with_control( self, ) -> (Sender<'d, D>, Receiver<'d, D>, ControlChanged<'d>)

Split the class into sender, receiver and control

Allows concurrently sending and receiving packets whilst monitoring for control changes (dtr, rts)

Auto Trait Implementations§

§

impl<'d, D> Freeze for CdcAcmClass<'d, D>
where <D as Driver<'d>>::EndpointIn: Freeze, <D as Driver<'d>>::EndpointOut: Freeze,

§

impl<'d, D> !RefUnwindSafe for CdcAcmClass<'d, D>

§

impl<'d, D> !Send for CdcAcmClass<'d, D>

§

impl<'d, D> !Sync for CdcAcmClass<'d, D>

§

impl<'d, D> Unpin for CdcAcmClass<'d, D>
where <D as Driver<'d>>::EndpointIn: Unpin, <D as Driver<'d>>::EndpointOut: Unpin,

§

impl<'d, D> !UnwindSafe for CdcAcmClass<'d, D>

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<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>,

Source§

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>,

Source§

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.