embassy-usb

Crates

git

Versions

default

Flavors

Skip to main content

MscClass

Struct MscClass 

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

USB Mass Storage Class (MSC) implementation.

Implementations§

Source§

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

Source

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

Creates a new MSC class with configuration.

Source

pub fn max_packet_size(&self) -> u16

Gets the endpoint max packet size in bytes.

Source

pub async fn wait_connection(&mut self)

Waits for the USB host to enable this interface.

Source

pub async fn run<B: AsyncBlockDevice>( &mut self, block_device: &mut B, block_buf: &mut [u8], ) -> StopReason

Runs the MSC BOT state machine until the host ejects the medium.

Disconnects and reconnects are handled internally. When this returns, the host has received the status of the eject command but the device is still attached: disable the USB device, or call run again to keep serving commands.

block_buf is a temporary buffer used for block transfers and must be at least block_device.block_size() and max_packet_size bytes long.

A buffer of two or more blocks is split in two halves, so the USB transfer of one half overlaps with block_device reading or writing the other. Each call to block_device moves up to half the buffer, so a buffer of several blocks speeds up large transfers.

Auto Trait Implementations§

§

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

§

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

§

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

§

impl<'d, D> Send for MscClass<'d, D>
where <D as Driver<'d>>::EndpointOut: Send, <D as Driver<'d>>::EndpointIn: Send,

§

impl<'d, D> Sync for MscClass<'d, D>
where <D as Driver<'d>>::EndpointOut: Sync, <D as Driver<'d>>::EndpointIn: Sync,

§

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

§

impl<'d, D> UnsafeUnpin for MscClass<'d, D>
where <D as Driver<'d>>::EndpointOut: UnsafeUnpin, <D as Driver<'d>>::EndpointIn: UnsafeUnpin,

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 = !

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.