pub enum PacketStreamControlRequest {
GetProperties {
responder: PacketStreamControlGetPropertiesResponder,
},
AllocateVmos {
payload: AllocateVmosConfig,
responder: PacketStreamControlAllocateVmosResponder,
},
DeallocateVmos {
responder: PacketStreamControlDeallocateVmosResponder,
},
RegisterVmos {
payload: RegisterVmosConfig,
responder: PacketStreamControlRegisterVmosResponder,
},
UnregisterVmos {
responder: PacketStreamControlUnregisterVmosResponder,
},
GetPacketStreamSink {
responder: PacketStreamControlGetPacketStreamSinkResponder,
},
SetPacketStreamSink {
payload: PacketStreamControlSetPacketStreamSinkRequest,
responder: PacketStreamControlSetPacketStreamSinkResponder,
},
Start {
responder: PacketStreamControlStartResponder,
},
Stop {
responder: PacketStreamControlStopResponder,
},
#[non_exhaustive] _UnknownMethod {
ordinal: u64,
control_handle: PacketStreamControlControlHandle,
method_type: MethodType,
},
}Expand description
Control protocol for establishing and managing the packet stream.
Variants§
GetProperties
Accessor for top level static properties.
Fields
responder: PacketStreamControlGetPropertiesResponderAllocateVmos
Request the driver to allocate VMOs for data transfer. Returns the allocated VMOs and their assigned IDs.
The returned VMO handle must include ZX_RIGHT_TRANSFER, ZX_RIGHT_READ and ZX_RIGHT_MAP. If the packet stream is an output stream, then the handle must also include ZX_RIGHT_WRITE.
Returns ZX_ERR_INVALID_ARGS if min_vmo_size is zero or vmo_count is zero.
Returns ZX_ERR_NO_MEMORY if the driver cannot allocate the requested VMOs.
Returns ZX_ERR_BAD_STATE if VMOs are already allocated or registered, or if the
stream is already started. Call DeallocateVmos or UnregisterVmos first to
reconfigure.
DeallocateVmos
Releases all VMOs previously allocated via AllocateVmos.
This also occurs automatically when the PacketStreamControl channel is closed.
Returns ZX_ERR_BAD_STATE if VMOs are not currently allocated, or if the stream is
not stopped.
Fields
responder: PacketStreamControlDeallocateVmosResponderRegisterVmos
Registers client-allocated VMOs with the driver.
The registered VMO handle must include ZX_RIGHT_TRANSFER, ZX_RIGHT_READ and ZX_RIGHT_MAP. If the packet stream is an input stream, then the handle must also include ZX_RIGHT_WRITE.
Returns ZX_ERR_INVALID_ARGS if vmo_infos is empty, or if any VMO handle is invalid,
or if duplicate vmo_ids are found.
Returns ZX_ERR_ACCESS_DENIED if any VMO does not have the required rights.
Returns ZX_ERR_BAD_STATE if VMOs are already registered or allocated, or if the
stream is already started. Call UnregisterVmos or DeallocateVmos first to
reconfigure.
UnregisterVmos
Unregisters all VMOs previously registered via RegisterVmos.
This also occurs automatically when the PacketStreamControl channel is closed.
Returns ZX_ERR_BAD_STATE if VMOs are not currently registered, or if the stream is
not stopped.
Fields
responder: PacketStreamControlUnregisterVmosResponderGetPacketStreamSink
Connects to the data sink implemented by the driver. This is used for audio Output where the driver consumes data.
Flow:
- App writes audio data to a registered VMO.
- App flushes the cache for the written region (if
needs_cache_flush_or_invalidateis true). - App calls
PacketStreamSink.PutPacketwith the location of the data. - Driver consumes the data.
If this method is called multiple times, the previous PacketStreamSink channel is closed,
and any pending requests on that channel are discarded. The new channel replaces the old
one.
Returns ZX_ERR_NOT_SUPPORTED if the stream is an input stream, or if the driver does
not support this method.
Fields
SetPacketStreamSink
Provides a data sink to the driver. This is used for audio Input where the driver produces data.
Flow:
- Driver writes audio data to a registered VMO.
- Driver calls
PacketStreamSink.PutPacketwith the location of the data. - App receives
PutPacket. - App invalidates the cache for the region (if
needs_cache_flush_or_invalidateis true). - App reads the data.
If this method is called multiple times, the driver closes the previous PacketStreamSink
channel. The new channel replaces the old one.
Returns ZX_ERR_NOT_SUPPORTED if the stream is an output stream, or if the driver does
not support this method.
Fields
Start
Start the packet-stream.
Returns ZX_ERR_BAD_STATE if:
- Buffers have not been allocated (if
DRIVER_OWNEDwas specified) and/or registered (ifCLIENT_OWNEDwas specified). This is not applicable ifINLINEis supported. - The stream is already started.
Fields
responder: PacketStreamControlStartResponderStop
Stop the packet-stream.
Once the response is received, the stream is halted.
Behavior depends on the stream direction:
- Output: The driver stops consuming packets. Any pending
PacketStreamSink.PutPacketrequests will remain pending untilStartis called again. Clients may callPacketStreamSink.FlushPacketsafterStopto discard these pending packets. - Input: The driver stops producing packets. No further
PacketStreamSink.PutPacketcalls will be made by the driver untilStartis called again.
Note that since PacketStreamSink uses a separate channel, there is no strict ordering
guarantee between Stop and PacketStreamSink.PutPacket:
- For Output, some in-flight
PacketStreamSink.PutPacketcalls may complete successfully afterStophas returned. - For Input, some in-flight
PacketStreamSink.PutPacketcalls may arrive at the client afterStophas returned.
Returns ZX_ERR_BAD_STATE if the stream is not started.
Fields
responder: PacketStreamControlStopResponder#[non_exhaustive]_UnknownMethod
An interaction was received which does not match any known method.
Fields
This variant is marked as non-exhaustive
control_handle: PacketStreamControlControlHandlemethod_type: MethodTypeImplementations§
Source§impl PacketStreamControlRequest
impl PacketStreamControlRequest
pub fn into_get_properties( self, ) -> Option<PacketStreamControlGetPropertiesResponder>
pub fn into_allocate_vmos( self, ) -> Option<(AllocateVmosConfig, PacketStreamControlAllocateVmosResponder)>
pub fn into_deallocate_vmos( self, ) -> Option<PacketStreamControlDeallocateVmosResponder>
pub fn into_register_vmos( self, ) -> Option<(RegisterVmosConfig, PacketStreamControlRegisterVmosResponder)>
pub fn into_unregister_vmos( self, ) -> Option<PacketStreamControlUnregisterVmosResponder>
pub fn into_get_packet_stream_sink( self, ) -> Option<PacketStreamControlGetPacketStreamSinkResponder>
pub fn into_set_packet_stream_sink( self, ) -> Option<(PacketStreamControlSetPacketStreamSinkRequest, PacketStreamControlSetPacketStreamSinkResponder)>
pub fn into_start(self) -> Option<PacketStreamControlStartResponder>
pub fn into_stop(self) -> Option<PacketStreamControlStopResponder>
Sourcepub fn method_name(&self) -> &'static str
pub fn method_name(&self) -> &'static str
Name of the method defined in FIDL