Struct usb_device::descriptor::DescriptorWriter
source · [−]pub struct DescriptorWriter<'a> { /* private fields */ }
Expand description
A writer for USB descriptors.
Implementations
sourceimpl DescriptorWriter<'_>
impl DescriptorWriter<'_>
sourcepub fn position(&self) -> usize
pub fn position(&self) -> usize
Gets the current position in the buffer, i.e. the number of bytes written so far.
sourcepub fn write(&mut self, descriptor_type: u8, descriptor: &[u8]) -> Result<()>
pub fn write(&mut self, descriptor_type: u8, descriptor: &[u8]) -> Result<()>
Writes an arbitrary (usually class-specific) descriptor.
sourcepub fn write_with(
&mut self,
descriptor_type: u8,
f: impl FnOnce(&mut [u8]) -> Result<usize>
) -> Result<()>
pub fn write_with(
&mut self,
descriptor_type: u8,
f: impl FnOnce(&mut [u8]) -> Result<usize>
) -> Result<()>
Writes an arbitrary (usually class-specific) descriptor by using a callback function.
The callback function gets a reference to the remaining buffer space, and it should write
the descriptor into it and return the number of bytes written. If the descriptor doesn’t
fit, the function should return Err(UsbError::BufferOverflow)
. That and any error returned
by it will be propagated up.
sourcepub fn iad(
&mut self,
first_interface: InterfaceNumber,
interface_count: u8,
function_class: u8,
function_sub_class: u8,
function_protocol: u8
) -> Result<()>
pub fn iad(
&mut self,
first_interface: InterfaceNumber,
interface_count: u8,
function_class: u8,
function_sub_class: u8,
function_protocol: u8
) -> Result<()>
Writes a interface association descriptor. Call from UsbClass::get_configuration_descriptors
before writing the USB class or function’s interface descriptors if your class has more than
one interface and wants to play nicely with composite devices on Windows. If the USB device
hosting the class was not configured as composite with IADs enabled, calling this function
does nothing, so it is safe to call from libraries.
Arguments
first_interface
- Number of the function’s first interface, previously allocated withUsbBusAllocator::interface
.interface_count
- Number of interfaces in the function.function_class
- Class code assigned by USB.org. Use0xff
for vendor-specific devices that do not conform to any class.function_sub_class
- Sub-class code. Depends on class.function_protocol
- Protocol code. Depends on class and sub-class.
sourcepub fn interface(
&mut self,
number: InterfaceNumber,
interface_class: u8,
interface_sub_class: u8,
interface_protocol: u8
) -> Result<()>
pub fn interface(
&mut self,
number: InterfaceNumber,
interface_class: u8,
interface_sub_class: u8,
interface_protocol: u8
) -> Result<()>
Writes a interface descriptor.
Arguments
number
- Interface number previously allocated withUsbBusAllocator::interface
.interface_class
- Class code assigned by USB.org. Use0xff
for vendor-specific devices that do not conform to any class.interface_sub_class
- Sub-class code. Depends on class.interface_protocol
- Protocol code. Depends on class and sub-class.
sourcepub fn interface_alt(
&mut self,
number: InterfaceNumber,
alternate_setting: u8,
interface_class: u8,
interface_sub_class: u8,
interface_protocol: u8,
interface_string: Option<StringIndex>
) -> Result<()>
pub fn interface_alt(
&mut self,
number: InterfaceNumber,
alternate_setting: u8,
interface_class: u8,
interface_sub_class: u8,
interface_protocol: u8,
interface_string: Option<StringIndex>
) -> Result<()>
Writes a interface descriptor with a specific alternate setting and interface string identifier.
Arguments
number
- Interface number previously allocated withUsbBusAllocator::interface
.alternate_setting
- Number of the alternate settinginterface_class
- Class code assigned by USB.org. Use0xff
for vendor-specific devices that do not conform to any class.interface_sub_class
- Sub-class code. Depends on class.interface_protocol
- Protocol code. Depends on class and sub-class.interface_string
- Index of string descriptor describing this interface
sourcepub fn endpoint<'e, B: UsbBus, D: EndpointDirection>(
&mut self,
endpoint: &Endpoint<'e, B, D>
) -> Result<()>
pub fn endpoint<'e, B: UsbBus, D: EndpointDirection>(
&mut self,
endpoint: &Endpoint<'e, B, D>
) -> Result<()>
Writes an endpoint descriptor.
Arguments
endpoint
- Endpoint previously allocated withUsbBusAllocator
.
sourcepub fn endpoint_ex<'e, B: UsbBus, D: EndpointDirection>(
&mut self,
endpoint: &Endpoint<'e, B, D>,
f: impl FnOnce(&mut [u8]) -> Result<usize>
) -> Result<()>
pub fn endpoint_ex<'e, B: UsbBus, D: EndpointDirection>(
&mut self,
endpoint: &Endpoint<'e, B, D>,
f: impl FnOnce(&mut [u8]) -> Result<usize>
) -> Result<()>
Writes an endpoint descriptor with extra trailing data.
This is rarely needed and shouldn’t be used except for compatibility with standard USB classes that require it. Extra data is normally written in a separate class specific descriptor.
Arguments
endpoint
- Endpoint previously allocated withUsbBusAllocator
.f
- Callback for the extra data. Seewrite_with
for more information.