pub enum UsbFunctionInterfaceRequest {
Control {
setup: UsbSetup,
write: Vec<u8>,
responder: UsbFunctionInterfaceControlResponder,
},
SetConfigured {
configured: bool,
speed: UsbSpeed,
responder: UsbFunctionInterfaceSetConfiguredResponder,
},
SetInterface {
interface: u8,
alt_setting: u8,
responder: UsbFunctionInterfaceSetInterfaceResponder,
},
#[non_exhaustive] _UnknownMethod {
ordinal: u64,
control_handle: UsbFunctionInterfaceControlHandle,
method_type: MethodType,
},
}Expand description
Protocol offered to [UsbFunction] instances to handle host-initiated
requests.
This protocol is implemented by the USB function driver (protocol server) and called by the USB peripheral controller (protocol client).
Variants§
Control
Callback for handling EP0 class/vendor-specific control requests targeting the interface(s) owned by this function.
This is called when the host sends a control request to the device. The protocol server (of
[UsbFunctionInterface]) should process the request and return the result.
The host expects a response within a strict timeout period defined by the USB specification Section 9.2.6 (50ms for requests without data, and 500ms for read data stages). Because of these hardware-enforced limits, the implementation must reply as quickly as possible and avoid blocking the dispatcher.
setup is the control request metadata (setup packet). write contains the raw bytes sent
by the host in the Data Stage of a host-to-device (OUT) control transfer. It is empty for
device-to-host (IN) transfers. read in the response payload contains the raw bytes
returned to the host in the Data Stage of a device-to-host (IN) control transfer. It must
be empty for host-to-device (OUT) transfers.
Any error returned by this method (including ZX_ERR_NOT_SUPPORTED) causes the
peripheral controller to stall Endpoint 0, signaling a “Request Error” to the host.
- error:
ZX_ERR_NOT_SUPPORTEDif the request is not supported by the protocol server.ZX_ERR_INVALID_ARGSif the setup packet or data is invalid.ZX_ERR_IO_NOT_PRESENTif the device was disconnected while processing the request.
SetConfigured
Inform the protocol server (of [UsbFunctionInterface]) when the USB device configured
state changes.
Called with configured == true in response to a SET_CONFIGURATION control request that
selects a configuration that contains this function. In this case, the protocol server
should use [UsbFunction.ConfigureEndpoint] to configure its endpoints.
Per USB 2.0 Specification Section 9.4.7, receiving a SET_CONFIGURATION request when the
function is already configured is valid and should reset/re-initialize the function state
rather than returning an error.
Called with configured == false when configuration is disabled or USB is disconnected.
The protocol server should then use [UsbFunction.DisableEndpoint] to disable its
endpoints.
The protocol server must perform all endpoint configuration/disabling and wait for those
calls to complete before replying to this method. This ensures that the protocol client can
report success/failure back to the host (by ACK’ing or STALL’ing the SET_CONFIGURATION
request).
Any error returned by this method causes the peripheral controller to stall Control
Endpoint 0, signaling a failure to the host (rejecting the SET_CONFIGURATION request).
- error:
ZX_ERR_BAD_STATEif the device or function is in an uninitialized state where configuration transitions are invalid (excluding re-configuring an active state).ZX_ERR_INVALID_ARGSif the speed or configuration parameters are invalid.ZX_ERR_NOT_SUPPORTEDif the requested speed or configuration is unsupported.ZX_ERR_NO_RESOURCESif endpoint allocation or hardware configuration fails.
SetInterface
Called to set an alternate setting for an interface due to a SET_INTERFACE control
request.
The protocol server (of [UsbFunctionInterface]) must use [UsbFunction.ConfigureEndpoint]
and [UsbFunction.DisableEndpoint] to configure or disable the interface’s endpoints as
appropriate for the new alternate setting.
Depending on the alternate setting definition, this transition may require configuring new
endpoints (via ConfigureEndpoint), disabling existing endpoints (via DisableEndpoint),
or doing both. If an alternate setting does not use any endpoints, no endpoint
configuration calls are required.
The protocol server must perform all endpoint configuration/disabling and wait for those
calls to complete before replying to this method. This ensures that the protocol client can
report success/failure back to the host (by ACK’ing or STALL’ing the SET_INTERFACE
request).
Any error returned by this method causes the peripheral controller to stall Control
Endpoint 0, signaling a failure to the host (rejecting the SET_INTERFACE request).
- error:
ZX_ERR_NOT_SUPPORTEDif the alternate setting is not supported.ZX_ERR_INVALID_ARGSif the interface or alt_setting is invalid.- Other errors if the function driver fails to configure or disable endpoints for the new setting.
#[non_exhaustive]_UnknownMethod
An interaction was received which does not match any known method.
Fields
This variant is marked as non-exhaustive
control_handle: UsbFunctionInterfaceControlHandlemethod_type: MethodTypeImplementations§
Source§impl UsbFunctionInterfaceRequest
impl UsbFunctionInterfaceRequest
pub fn into_control( self, ) -> Option<(UsbSetup, Vec<u8>, UsbFunctionInterfaceControlResponder)>
pub fn into_set_configured( self, ) -> Option<(bool, UsbSpeed, UsbFunctionInterfaceSetConfiguredResponder)>
pub fn into_set_interface( self, ) -> Option<(u8, u8, UsbFunctionInterfaceSetInterfaceResponder)>
Sourcepub fn method_name(&self) -> &'static str
pub fn method_name(&self) -> &'static str
Name of the method defined in FIDL