pub struct MidiClass<'d, D: Driver<'d>> { /* private fields */ }
Expand description
Packet level implementation of a USB MIDI device.
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 port. The following constraints must be followed if you use this class directly:
read_packet
must be called with a buffer large enough to holdmax_packet_size
bytes.write_packet
must not be called with a buffer larger thanmax_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>> MidiClass<'d, D>
impl<'d, D: Driver<'d>> MidiClass<'d, D>
Sourcepub fn new(
builder: &mut Builder<'d, D>,
n_in_jacks: u8,
n_out_jacks: u8,
max_packet_size: u16,
) -> Self
pub fn new( builder: &mut Builder<'d, D>, n_in_jacks: u8, n_out_jacks: u8, max_packet_size: u16, ) -> Self
Creates a new MidiClass
with the provided UsbBus, number of input and output jacks and max_packet_size
in bytes.
For full-speed devices, max_packet_size
has to be one of 8, 16, 32 or 64.
Sourcepub fn max_packet_size(&self) -> u16
pub fn max_packet_size(&self) -> u16
Gets the maximum packet size in bytes.
Sourcepub async fn write_packet(&mut self, data: &[u8]) -> Result<(), EndpointError>
pub async fn write_packet(&mut self, data: &[u8]) -> Result<(), EndpointError>
Writes a single packet into the IN endpoint.
Sourcepub async fn read_packet(
&mut self,
data: &mut [u8],
) -> Result<usize, EndpointError>
pub async fn read_packet( &mut self, data: &mut [u8], ) -> Result<usize, EndpointError>
Reads a single packet from the OUT endpoint.
Sourcepub async fn wait_connection(&mut self)
pub async fn wait_connection(&mut self)
Waits for the USB host to enable this interface
Auto Trait Implementations§
impl<'d, D> Freeze for MidiClass<'d, D>
impl<'d, D> RefUnwindSafe for MidiClass<'d, D>
impl<'d, D> Send for MidiClass<'d, D>
impl<'d, D> Sync for MidiClass<'d, D>
impl<'d, D> Unpin for MidiClass<'d, D>
impl<'d, D> UnwindSafe for MidiClass<'d, D>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more