pub struct ControlProxy { /* private fields */ }
Implementations§
Source§impl ControlProxy
impl ControlProxy
Sourcepub fn take_event_stream(&self) -> ControlEventStream
pub fn take_event_stream(&self) -> ControlEventStream
Get a Stream of events from the remote end of the protocol.
§Panics
Panics if the event stream was already taken.
Sourcepub fn get_elements(
&self,
) -> QueryResponseFut<ReaderGetElementsResult, DefaultFuchsiaResourceDialect>
pub fn get_elements( &self, ) -> QueryResponseFut<ReaderGetElementsResult, DefaultFuchsiaResourceDialect>
Returns a vector of supported processing elements.
Must return one or more processing elements, or ZX_ERR_NOT_SUPPORTED
.
If GetTopologies
returns one or more topologies, then GetElements
must return one or
more elements.
Sourcepub fn watch_element_state(
&self,
processing_element_id: u64,
) -> QueryResponseFut<ElementState, DefaultFuchsiaResourceDialect>
pub fn watch_element_state( &self, processing_element_id: u64, ) -> QueryResponseFut<ElementState, DefaultFuchsiaResourceDialect>
Get the processing element state via a hanging get.
For a given processing_element_id
, the driver will reply to the first WatchElementState
sent by the client. The driver will not respond to subsequent client WatchElementState
calls for a given processing_element_id
until any field of the Element
table changes
from what was most recently reported for that processing_element_id
.
The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE
, if this
method is called again while there is already a pending WatchElementState
for this client
and processing_element_id.
Sourcepub fn get_topologies(
&self,
) -> QueryResponseFut<ReaderGetTopologiesResult, DefaultFuchsiaResourceDialect>
pub fn get_topologies( &self, ) -> QueryResponseFut<ReaderGetTopologiesResult, DefaultFuchsiaResourceDialect>
Returns a vector of supported topologies.
Must return one or more topologies, or ZX_ERR_NOT_SUPPORTED
.
If more than one topology is returned, then the client may choose any of the topologies from
the list with SetTopology
.
If only one topology is returned, then the topology definition is informational only since
the one and only topology used can’t be changed with SetTopology
.
If GetElements
returns one or more elements, then GetTopologies
must return one or
more topologies.
Sourcepub fn watch_topology(
&self,
) -> QueryResponseFut<u64, DefaultFuchsiaResourceDialect>
pub fn watch_topology( &self, ) -> QueryResponseFut<u64, DefaultFuchsiaResourceDialect>
Get the current topology via a hanging get.
The driver will immediately reply to the first WatchTopology
sent by each client. The
driver will not respond to subsequent WatchTopology
calls from that client until the
signal-processing topology changes, which occurs as a result of a SetTopology
call.
The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE
, if this
method is called again while there is already a pending WatchTopology
for this client.
Sourcepub fn set_element_state(
&self,
processing_element_id: u64,
state: &SettableElementState,
) -> QueryResponseFut<SignalProcessingSetElementStateResult, DefaultFuchsiaResourceDialect>
pub fn set_element_state( &self, processing_element_id: u64, state: &SettableElementState, ) -> QueryResponseFut<SignalProcessingSetElementStateResult, DefaultFuchsiaResourceDialect>
Controls a processing element using a unique ElementId returned by GetElements
.
Note that SettableElementState
is a subset of ElementState
, because some fields returned
from WatchElementState
(e.g. latency
) can only be observed (not set) by the client.
Returns ZX_ERR_INVALID_ARGS
if the processing_element_id
does not match an id returned
by GetElements
or the type of SettableTypeSpecificElementState
does not
match the ElementType
of the processing element returned by
GetElements
for this id.
The driver may return ZX_ERR_INVALID_ARGS
if the state
values are invalid, i.e. any
of the values violates rules specified in this protocol, e.g. trying to change an
EQUALIZER
processing element’s EqualizerBandState
frequency
when this processing
element did not advertise CAN_CONTROL_FREQUENCY
in its supported_controls
.
SetElementState
may be called before or after non-SignalProcessing
protocol
calls. If called after non-SignalProcessing
protocol calls then
SetElementState
may or may not require renegotiation of the driver state as
reached with calls of the protocol composing SignalProcessing
, e.g. Dai
.
For instance, SetElementState
changing an AGL
processing element’s parameters
may not require renegotiation of the Dai
state because changing a gain parameter usually
does not change the set of supported audio formats.
By contrast, if SetElementState
changes the parameters of a CONNECTION_POINT
element, the change may require renegotiation because it may invalidate the set of
supported formats returned in a previous GetDaiFormats
Dai
protocol call.
It is the driver’s job to determine when renegotiation is required. If renegotiation is
required, then SetElementState
must return ZX_ERR_BAD_STATE
and the client must
close the protocol channel such that the protocol negotiations are started over.
The client then must make the SetElementState
call that returned
ZX_ERR_BAD_STATE
before any non-SignalProcessing
protocol calls.
Sourcepub fn set_topology(
&self,
topology_id: u64,
) -> QueryResponseFut<SignalProcessingSetTopologyResult, DefaultFuchsiaResourceDialect>
pub fn set_topology( &self, topology_id: u64, ) -> QueryResponseFut<SignalProcessingSetTopologyResult, DefaultFuchsiaResourceDialect>
Sets the topology to be used using an id to the vector returned by GetTopologies
.
The current topology is communicated by WatchTopology
responses. To change which topology
is active, a client uses SetTopology
.
If the specified topology_id
is not within thetopologies
returned by GetTopologies
,
this call will return ZX_ERR_INVALID_ARGS
.
If GetTopologies
returns only one Topology
, SetTopology
is optional and has no effect.
SetTopology
may be called before or after non-SignalProcessing
protocol calls.
If called after non-SignalProcessing
protocol calls, then SetTopology
may return
ZX_ERR_BAD_STATE
to indicate that the operation can not proceed without renegotiation of
the driver state. See SetElementState
for further discussion.
Sourcepub fn set_gain(
&self,
payload: &ControlSetGainRequest,
) -> QueryResponseFut<ControlSetGainResult, DefaultFuchsiaResourceDialect>
pub fn set_gain( &self, payload: &ControlSetGainRequest, ) -> QueryResponseFut<ControlSetGainResult, DefaultFuchsiaResourceDialect>
Change the device’s overall gain state.
Should only be called for StreamConfig devices.
Sourcepub fn create_ring_buffer(
&self,
payload: ControlCreateRingBufferRequest,
) -> QueryResponseFut<ControlCreateRingBufferResult, DefaultFuchsiaResourceDialect>
pub fn create_ring_buffer( &self, payload: ControlCreateRingBufferRequest, ) -> QueryResponseFut<ControlCreateRingBufferResult, DefaultFuchsiaResourceDialect>
Create the ring buffer used to pass audio to/from this device. If the device is
Composite, then the targeted RING_BUFFER ENDPOINT must be identified by element_id
.
Should only be called for Composite and StreamConfig devices.
Sourcepub fn set_dai_format(
&self,
payload: &ControlSetDaiFormatRequest,
) -> QueryResponseFut<ControlSetDaiFormatResult, DefaultFuchsiaResourceDialect>
pub fn set_dai_format( &self, payload: &ControlSetDaiFormatRequest, ) -> QueryResponseFut<ControlSetDaiFormatResult, DefaultFuchsiaResourceDialect>
Set the wire format for the digital interconnect connected to this Codec endpoint.
This method returns information related to the format that was set, including delay values.
If the device is Composite, then the targeted DAI_INTERCONNECT ENDPOINT must be identified
by element_id
.
Should only be called for Codec and Composite devices.
Sourcepub fn codec_start(
&self,
) -> QueryResponseFut<ControlCodecStartResult, DefaultFuchsiaResourceDialect>
pub fn codec_start( &self, ) -> QueryResponseFut<ControlCodecStartResult, DefaultFuchsiaResourceDialect>
Start the Codec hardware. If successful, this returns after the Codec was started and
start_time
indicates the time when the hardware started. Note that the Codec’s DaiFormat
must be set (by a successful SetDaiFormat
call) before calling this method.
Should only be called for Codec devices.
Sourcepub fn codec_stop(
&self,
) -> QueryResponseFut<ControlCodecStopResult, DefaultFuchsiaResourceDialect>
pub fn codec_stop( &self, ) -> QueryResponseFut<ControlCodecStopResult, DefaultFuchsiaResourceDialect>
Stop the Codec hardware. If successful, this returns after the Codec was stopped and
stop_time
indicates the time when the hardware stopped. Note that the Codec’s DaiFormat
must be set (by a successful SetDaiFormat
call) before calling this method.
Should only be called for Codec devices.
Sourcepub fn reset(
&self,
) -> QueryResponseFut<ControlResetResult, DefaultFuchsiaResourceDialect>
pub fn reset( &self, ) -> QueryResponseFut<ControlResetResult, DefaultFuchsiaResourceDialect>
Reset the hardware – stopping the hardware, releasing any ring buffers, and clearing any DaiFormats or RingBufferFormats that were set.
This method returns when the hardware reset is complete.
After calling this method, the device is still controlled, but any ring buffers must be
re-created and re-started.
For devices with DAI_INTERCONNECTs (such as Codecs and some Composites), SetDaiFormat
and
CodecStart
must be called again (in that order) to return the interconnect to the active
operational mode.
As applicable, SetTopology
and SetElementState
must also be called.
Should only be called for Codec and Composite devices.
Trait Implementations§
Source§impl Clone for ControlProxy
impl Clone for ControlProxy
Source§fn clone(&self) -> ControlProxy
fn clone(&self) -> ControlProxy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl ControlProxyInterface for ControlProxy
impl ControlProxyInterface for ControlProxy
type GetElementsResponseFut = QueryResponseFut<Result<Vec<Element>, i32>>
type WatchElementStateResponseFut = QueryResponseFut<ElementState>
type GetTopologiesResponseFut = QueryResponseFut<Result<Vec<Topology>, i32>>
type WatchTopologyResponseFut = QueryResponseFut<u64>
type SetElementStateResponseFut = QueryResponseFut<Result<(), i32>>
type SetTopologyResponseFut = QueryResponseFut<Result<(), i32>>
type SetGainResponseFut = QueryResponseFut<Result<ControlSetGainResponse, ControlSetGainError>>
type CreateRingBufferResponseFut = QueryResponseFut<Result<ControlCreateRingBufferResponse, ControlCreateRingBufferError>>
type SetDaiFormatResponseFut = QueryResponseFut<Result<ControlSetDaiFormatResponse, ControlSetDaiFormatError>>
type CodecStartResponseFut = QueryResponseFut<Result<ControlCodecStartResponse, ControlCodecStartError>>
type CodecStopResponseFut = QueryResponseFut<Result<ControlCodecStopResponse, ControlCodecStopError>>
type ResetResponseFut = QueryResponseFut<Result<ControlResetResponse, ControlResetError>>
fn get_elements(&self) -> Self::GetElementsResponseFut
fn watch_element_state( &self, processing_element_id: u64, ) -> Self::WatchElementStateResponseFut
fn get_topologies(&self) -> Self::GetTopologiesResponseFut
fn watch_topology(&self) -> Self::WatchTopologyResponseFut
fn set_element_state( &self, processing_element_id: u64, state: &SettableElementState, ) -> Self::SetElementStateResponseFut
fn set_topology(&self, topology_id: u64) -> Self::SetTopologyResponseFut
fn set_gain(&self, payload: &ControlSetGainRequest) -> Self::SetGainResponseFut
fn create_ring_buffer( &self, payload: ControlCreateRingBufferRequest, ) -> Self::CreateRingBufferResponseFut
fn set_dai_format( &self, payload: &ControlSetDaiFormatRequest, ) -> Self::SetDaiFormatResponseFut
fn codec_start(&self) -> Self::CodecStartResponseFut
fn codec_stop(&self) -> Self::CodecStopResponseFut
fn reset(&self) -> Self::ResetResponseFut
Source§impl Debug for ControlProxy
impl Debug for ControlProxy
Source§impl Proxy for ControlProxy
impl Proxy for ControlProxy
Source§type Protocol = ControlMarker
type Protocol = ControlMarker
Proxy
controls.Source§fn from_channel(inner: AsyncChannel) -> Self
fn from_channel(inner: AsyncChannel) -> Self
Source§fn into_channel(self) -> Result<AsyncChannel, Self>
fn into_channel(self) -> Result<AsyncChannel, Self>
Source§fn as_channel(&self) -> &AsyncChannel
fn as_channel(&self) -> &AsyncChannel
§fn into_client_end(self) -> Result<ClientEnd<Self::Protocol>, Self>
fn into_client_end(self) -> Result<ClientEnd<Self::Protocol>, Self>
Auto Trait Implementations§
impl Freeze for ControlProxy
impl !RefUnwindSafe for ControlProxy
impl Send for ControlProxy
impl Sync for ControlProxy
impl Unpin for ControlProxy
impl !UnwindSafe for ControlProxy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)