pub struct UsbFunctionInterfaceSynchronousProxy { /* private fields */ }Implementations§
Source§impl UsbFunctionInterfaceSynchronousProxy
impl UsbFunctionInterfaceSynchronousProxy
pub fn new(channel: Channel) -> Self
pub fn into_channel(self) -> Channel
Sourcepub fn wait_for_event(
&self,
deadline: MonotonicInstant,
) -> Result<UsbFunctionInterfaceEvent, Error>
pub fn wait_for_event( &self, deadline: MonotonicInstant, ) -> Result<UsbFunctionInterfaceEvent, Error>
Waits until an event arrives and returns it. It is safe for other threads to make concurrent requests while waiting for an event.
Sourcepub fn control(
&self,
setup: &UsbSetup,
write: &[u8],
___deadline: MonotonicInstant,
) -> Result<UsbFunctionInterfaceControlResult, Error>
pub fn control( &self, setup: &UsbSetup, write: &[u8], ___deadline: MonotonicInstant, ) -> Result<UsbFunctionInterfaceControlResult, Error>
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.
Sourcepub fn set_configured(
&self,
configured: bool,
speed: UsbSpeed,
___deadline: MonotonicInstant,
) -> Result<UsbFunctionInterfaceSetConfiguredResult, Error>
pub fn set_configured( &self, configured: bool, speed: UsbSpeed, ___deadline: MonotonicInstant, ) -> Result<UsbFunctionInterfaceSetConfiguredResult, Error>
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.
Sourcepub fn set_interface(
&self,
interface: u8,
alt_setting: u8,
___deadline: MonotonicInstant,
) -> Result<UsbFunctionInterfaceSetInterfaceResult, Error>
pub fn set_interface( &self, interface: u8, alt_setting: u8, ___deadline: MonotonicInstant, ) -> Result<UsbFunctionInterfaceSetInterfaceResult, Error>
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.
Trait Implementations§
Source§impl From<Channel> for UsbFunctionInterfaceSynchronousProxy
Available on Fuchsia only.
impl From<Channel> for UsbFunctionInterfaceSynchronousProxy
Source§impl From<UsbFunctionInterfaceSynchronousProxy> for NullableHandle
Available on Fuchsia only.
impl From<UsbFunctionInterfaceSynchronousProxy> for NullableHandle
Source§fn from(value: UsbFunctionInterfaceSynchronousProxy) -> Self
fn from(value: UsbFunctionInterfaceSynchronousProxy) -> Self
Source§impl FromClient for UsbFunctionInterfaceSynchronousProxy
Available on Fuchsia only.
impl FromClient for UsbFunctionInterfaceSynchronousProxy
Source§type Protocol = UsbFunctionInterfaceMarker
type Protocol = UsbFunctionInterfaceMarker
Source§fn from_client(value: ClientEnd<UsbFunctionInterfaceMarker>) -> Self
fn from_client(value: ClientEnd<UsbFunctionInterfaceMarker>) -> Self
Source§impl SynchronousProxy for UsbFunctionInterfaceSynchronousProxy
Available on Fuchsia only.
impl SynchronousProxy for UsbFunctionInterfaceSynchronousProxy
Source§type Proxy = UsbFunctionInterfaceProxy
type Proxy = UsbFunctionInterfaceProxy
Source§type Protocol = UsbFunctionInterfaceMarker
type Protocol = UsbFunctionInterfaceMarker
Proxy controls.