/* Copyright 2015 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef _CRAS_HELPERS_H
#define _CRAS_HELPERS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Creates and connects a client to the running server asynchronously.
*
* When the connection has been established the connection_cb is executed
* with the appropriate state. See cras_connection_status_cb_t for more
* information.
*
* Args:
* client - Filled with a pointer to the new client.
* connection_cb - The connection status callback function.
* user_arg - Argument passed to the connection status callback.
* Returns:
* 0 on success, or a negative error code on failure (from errno.h).
*/
int cras_helper_create_connect_async(struct cras_client **client,
cras_connection_status_cb_t connection_cb,
void *user_arg);
/* Creates and connects a client to the running server.
*
* Waits forever (or interrupt) for the server to be available.
*
* Args:
* client - Filled with a pointer to the new client.
* Returns:
* 0 on success, or a negative error code on failure (from errno.h).
*/
int cras_helper_create_connect(struct cras_client **client);
/* Adds a stream with the given parameters, no flags and a buffer size of 2048
* Args:
* client - The client to add the stream to (from cras_client_create).
* direction - playback(CRAS_STREAM_OUTPUT) or capture(CRAS_STREAM_INPUT) or
* loopback(CRAS_STREAM_POST_MIX_PRE_DSP).
* user_data - Pointer that will be passed to the callback.
* unified_cb - Called for streams that do simultaneous input/output.
* err_cb - Called when there is an error with the stream.
* format - The type of the samples, ex. S16_LE.
* frame_rate - Sample rate.
* num_channels - Number of channels in the stream, should be 1 or 2 when
* using this API, for > 2 channel streams see cras_client.h.
* dev_idx - Set this to a negative number to play to the default device, if
* positive it is the index of the device to pin the stream to.
* stream_id_out - On success will be filled with the new stream id.
* Guaranteed to be set before any callbacks are made.
* Returns:
* 0 on success, negative error code on failure (from errno.h).
*/
int cras_helper_add_stream_simple(struct cras_client *client,
enum CRAS_STREAM_DIRECTION direction,
void *user_data,
cras_unified_cb_t unified_cb,
cras_error_cb_t err_cb,
snd_pcm_format_t format,
unsigned int frame_rate,
unsigned int num_channels,
int dev_idx,
cras_stream_id_t *stream_id_out);
/* Plays the given buffer at a default latency.
* Args:
* client - The client to add the stream to (from cras_client_create).
* buffer - The audio samples.
* num_frames - The size of the buffer in number of samples.
* format - The type of the samples, ex. S16_LE.
* frame_rate - Sample rate.
* num_channels - Number of channels in the stream.
* dev_idx - Set this to a negative number to play to the default device, if
* positive it is the index of the device to pin the stream to.
* Returns:
* 0 on success, negative error code on failure (from errno.h).
*/
int cras_helper_play_buffer(struct cras_client *client,
const void *buffer,
unsigned int num_frames,
snd_pcm_format_t format,
unsigned int frame_rate,
unsigned int num_channels,
int dev_idx);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _CRAS_HELPERS_H */