template <>

class Server

Defined at line 1256 of file fidling/gen/sdk/fidl/fuchsia.hardware.audio/fuchsia.hardware.audio/cpp/fidl/fuchsia.hardware.audio/cpp/natural_messaging.h

Public Methods

void GetProperties (GetPropertiesCompleter::Sync & completer)

Accessor for top level static properties.

void AllocateVmos (AllocateVmosRequest & request, AllocateVmosCompleter::Sync & completer)

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.

void DeallocateVmos (DeallocateVmosCompleter::Sync & completer)

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.

void RegisterVmos (RegisterVmosRequest & request, RegisterVmosCompleter::Sync & completer)

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_id`s 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.

void Server ()

Defined at line 1259 of file fidling/gen/sdk/fidl/fuchsia.hardware.audio/fuchsia.hardware.audio/cpp/fidl/fuchsia.hardware.audio/cpp/natural_messaging.h

void UnregisterVmos (UnregisterVmosCompleter::Sync & completer)

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.

void GetPacketStreamSink (GetPacketStreamSinkCompleter::Sync & completer)

Connects to the data sink implemented by the driver.

This is used for audio **Output** where the driver consumes data.

Flow:

1. App writes audio data to a registered VMO.

2. App flushes the cache for the written region (if `needs_cache_flush_or_invalidate` is

true).

3. App calls `PacketStreamSink.PutPacket` with the location of the data.

4. 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.

void SetPacketStreamSink (SetPacketStreamSinkRequest & request, SetPacketStreamSinkCompleter::Sync & completer)

Provides a data sink to the driver.

This is used for audio **Input** where the driver produces data.

Flow:

1. Driver writes audio data to a registered VMO.

2. Driver calls `PacketStreamSink.PutPacket` with the location of the data.

3. App receives `PutPacket`.

4. App invalidates the cache for the region (if `needs_cache_flush_or_invalidate` is

true).

5. 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.

void Start (StartCompleter::Sync & completer)

Start the packet-stream.

Returns `ZX_ERR_BAD_STATE` if:

* Buffers have not been allocated (if `DRIVER_OWNED` was specified)

and/or registered (if `CLIENT_OWNED` was specified). This is not applicable if

`INLINE` is supported.

* The stream is already started.

void Stop (StopCompleter::Sync & completer)

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.PutPacket`

requests will remain pending until `Start` is called again. Clients may call

`PacketStreamSink.FlushPackets` after `Stop` to discard these pending packets.

* **Input**: The driver stops producing packets. No further `PacketStreamSink.PutPacket`

calls will be made by the driver until `Start` is 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.PutPacket` calls may

complete successfully after `Stop` has returned.

* For **Input**, some in-flight `PacketStreamSink.PutPacket` calls may

arrive at the client after `Stop` has returned.

Returns `ZX_ERR_BAD_STATE` if the stream is not started.

Handler bind_handler (async_dispatcher_t * dispatcher)

|bind_handler| returns a handler that binds incoming connections to this

server implementation.

The returned handler borrows the server instance.

The server must outlive the provided |dispatcher|. Only after

the dispatcher is shutdown will it be safe to destroy the servers.

The server should not be moved.

void ~Server ()

Defined at line 1260 of file fidling/gen/sdk/fidl/fuchsia.hardware.audio/fuchsia.hardware.audio/cpp/fidl/fuchsia.hardware.audio/cpp/natural_messaging.h