1 /* Copyright 2015 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  */
5 #ifndef _CRAS_HELPERS_H
6 #define _CRAS_HELPERS_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /* Creates and connects a client to the running server asynchronously.
13  *
14  * When the connection has been established the connection_cb is executed
15  * with the appropriate state. See cras_connection_status_cb_t for more
16  * information.
17  *
18  * Args:
19  *    client - Filled with a pointer to the new client.
20  *    connection_cb - The connection status callback function.
21  *    user_arg - Argument passed to the connection status callback.
22  * Returns:
23  *    0 on success, or a negative error code on failure (from errno.h).
24  */
25 int cras_helper_create_connect_async(struct cras_client **client,
26 				     cras_connection_status_cb_t connection_cb,
27 				     void *user_arg);
28 
29 /* Creates and connects a client to the running server.
30  *
31  * Waits forever (or interrupt) for the server to be available.
32  *
33  * Args:
34  *    client - Filled with a pointer to the new client.
35  * Returns:
36  *    0 on success, or a negative error code on failure (from errno.h).
37  */
38 int cras_helper_create_connect(struct cras_client **client);
39 
40 /* Adds a stream with the given parameters, no flags and a buffer size of 2048
41  * Note that the unified_cb parameter is being phased out.
42  * TODO(crbug.com/972928): convert this from unified_cb.
43  * Args:
44  *    client - The client to add the stream to (from cras_client_create).
45  *    direction - playback(CRAS_STREAM_OUTPUT) or capture(CRAS_STREAM_INPUT) or
46  *        loopback(CRAS_STREAM_POST_MIX_PRE_DSP).
47  *    user_data - Pointer that will be passed to the callback.
48  *    unified_cb - Called to request audio data or to notify the client when
49  *                 captured audio is available. Though this is a unified_cb,
50  *                 only one direction will be used for a stream, depending
51  *                 on the 'direction' parameter.
52  *    err_cb - Called when there is an error with the stream.
53  *    format - The type of the samples, ex. S16_LE.
54  *    frame_rate - Sample rate.
55  *    num_channels - Number of channels in the stream, should be 1 or 2 when
56  *        using this API, for > 2 channel streams see cras_client.h.
57  *    dev_idx - Set this to a negative number to play to the default device, if
58  *        positive it is the index of the device to pin the stream to.
59  *    stream_id_out - On success will be filled with the new stream id.
60  *        Guaranteed to be set before any callbacks are made.
61  * Returns:
62  *    0 on success, negative error code on failure (from errno.h).
63  */
64 int cras_helper_add_stream_simple(struct cras_client *client,
65 				  enum CRAS_STREAM_DIRECTION direction,
66 				  void *user_data, cras_unified_cb_t unified_cb,
67 				  cras_error_cb_t err_cb,
68 				  snd_pcm_format_t format,
69 				  unsigned int frame_rate,
70 				  unsigned int num_channels, int dev_idx,
71 				  cras_stream_id_t *stream_id_out);
72 
73 /* Plays the given buffer at a default latency.
74  * Args:
75  *    client - The client to add the stream to (from cras_client_create).
76  *    buffer - The audio samples.
77  *    num_frames - The size of the buffer in number of samples.
78  *    format - The type of the samples, ex. S16_LE.
79  *    frame_rate - Sample rate.
80  *    num_channels - Number of channels in the stream.
81  *    dev_idx - Set this to a negative number to play to the default device, if
82  *        positive it is the index of the device to pin the stream to.
83  * Returns:
84  *    0 on success, negative error code on failure (from errno.h).
85  */
86 int cras_helper_play_buffer(struct cras_client *client, const void *buffer,
87 			    unsigned int num_frames, snd_pcm_format_t format,
88 			    unsigned int frame_rate, unsigned int num_channels,
89 			    int dev_idx);
90 
91 #ifdef __cplusplus
92 } /* extern "C" */
93 #endif
94 
95 #endif /* _CRAS_HELPERS_H */
96