Trait usb_device::class::UsbClass
source · pub trait UsbClass<B: UsbBus> {
fn reset(&self) { ... }
fn get_configuration_descriptors(
&self,
writer: &mut DescriptorWriter<'_>
) -> Result<()> { ... }
fn control_out(&self, xfer: ControlOut<'_, '_, '_, B>) { ... }
fn control_in(&self, xfer: ControlIn<'_, '_, '_, B>) { ... }
fn endpoint_setup(&self, addr: EndpointAddress) { ... }
fn endpoint_out(&self, addr: EndpointAddress) { ... }
fn endpoint_in_complete(&self, addr: EndpointAddress) { ... }
fn get_string(&self, index: StringIndex, lang_id: u16) -> Option<&str> { ... }
}
Expand description
A trait implemented by USB class implementations.
Provided Methods
sourcefn get_configuration_descriptors(
&self,
writer: &mut DescriptorWriter<'_>
) -> Result<()>
fn get_configuration_descriptors(
&self,
writer: &mut DescriptorWriter<'_>
) -> Result<()>
Called when a GET_DESCRIPTOR request is received for a configuration descriptor. When
called, the implementation should write its interface, endpoint and any extra class
descriptors into writer
. The configuration descriptor itself will be written by
UsbDevice and shouldn’t be written by classes.
Errors
Generally errors returned by DescriptorWriter
. Implementors should propagate any errors
using ?
.
sourcefn control_out(&self, xfer: ControlOut<'_, '_, '_, B>)
fn control_out(&self, xfer: ControlOut<'_, '_, '_, B>)
Called when a control request is received with direction HostToDevice.
All requests are passed to classes in turn, which can choose to accept, ignore or report an error. Classes can even choose to override standard requests, but doing that is rarely necessary.
See ControlOut
for how to respond to the transfer.
When implementing your own class, you should ignore any requests that are not meant for your class so that any other classes in the composite device can process them.
Arguments
req
- The request from the SETUP packet.xfer
- A handle to the transfer.
sourcefn control_in(&self, xfer: ControlIn<'_, '_, '_, B>)
fn control_in(&self, xfer: ControlIn<'_, '_, '_, B>)
Called when a control request is received with direction DeviceToHost.
All requests are passed to classes in turn, which can choose to accept, ignore or report an error. Classes can even choose to override standard requests, but doing that is rarely necessary.
See ControlIn
for how to respond to the transfer.
When implementing your own class, you should ignore any requests that are not meant for your class so that any other classes in the composite device can process them.
Arguments
req
- The request from the SETUP packet.data
- Data to send in the DATA stage of the control transfer.
sourcefn endpoint_setup(&self, addr: EndpointAddress)
fn endpoint_setup(&self, addr: EndpointAddress)
Called when endpoint with address addr
has received a SETUP packet. Implementing this
shouldn’t be necessary in most cases, but is provided for completeness’ sake.
Note: This method may be called for an endpoint address you didn’t allocate, and in that case you should ignore the event.
sourcefn endpoint_out(&self, addr: EndpointAddress)
fn endpoint_out(&self, addr: EndpointAddress)
Called when endpoint with address addr
has received data (OUT packet).
Note: This method may be called for an endpoint address you didn’t allocate, and in that case you should ignore the event.
sourcefn endpoint_in_complete(&self, addr: EndpointAddress)
fn endpoint_in_complete(&self, addr: EndpointAddress)
Called when endpoint with address addr
has completed transmitting data (IN packet).
Note: This method may be called for an endpoint address you didn’t allocate, and in that case you should ignore the event.
sourcefn get_string(&self, index: StringIndex, lang_id: u16) -> Option<&str>
fn get_string(&self, index: StringIndex, lang_id: u16) -> Option<&str>
Gets a class-specific string descriptor.
Note: All string descriptor requests are passed to all classes in turn, so implementations
should return None
if an unknown index is requested.
Arguments
index
- A string index allocated earlier withUsbAllocator
.lang_id
- The language ID for the string to retrieve.