Home | History | Annotate | Download | only in libcras
      1 /* Copyright (c) 2012 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  * This API creates multiple threads, one for control, and a thread per audio
      6  * stream. The control thread is used to receive messages and notifications
      7  * from the audio server, and manage the per-stream threads. API calls below
      8  * may send messages to the control thread, or directly to the server. It is
      9  * required that the control thread is running in order to support audio
     10  * streams and notifications from the server.
     11  *
     12  * The API has multiple initialization sequences, but some of those can block
     13  * while waiting for a response from the server.
     14  *
     15  * The following is the non-blocking API initialization sequence:
     16  *	cras_client_create()
     17  *      cras_client_set_connection_status_cb()                       (optional)
     18  *      cras_client_run_thread()
     19  *      cras_client_connect_async()
     20  *
     21  * The connection callback is executed asynchronously from the control thread
     22  * when the connection has been established. The connection callback should be
     23  * used to turn on or off interactions with any API call that communicates with
     24  * the audio server or starts/stops audio streams. The above is implemented by
     25  * cras_helper_create_connect_async().
     26  *
     27  * The following alternative (deprecated) initialization sequence can ensure
     28  * that the connection is established synchronously.
     29  *
     30  * Just connect to the server (no control thread):
     31  *      cras_client_create()
     32  *      cras_client_set_server_connection_cb()                       (optional)
     33  *   one of:
     34  *      cras_client_connect()                                  (blocks forever)
     35  *   or
     36  *      cras_client_connect_timeout()                      (blocks for timeout)
     37  *
     38  * For API calls below that require the control thread to be running:
     39  *      cras_client_run_thread();
     40  *      cras_client_connected_wait();                     (blocks up to 1 sec.)
     41  *
     42  * The above minus setting the connection callback is implemented within
     43  * cras_helper_create_connect().
     44  */
     45 
     46 #ifndef CRAS_CLIENT_H_
     47 #define CRAS_CLIENT_H_
     48 
     49 #ifdef __cplusplus
     50 extern "C" {
     51 #endif
     52 
     53 #include <stdbool.h>
     54 #include <stdint.h>
     55 #include <sys/select.h>
     56 
     57 #include "cras_iodev_info.h"
     58 #include "cras_types.h"
     59 #include "cras_util.h"
     60 
     61 struct cras_client;
     62 struct cras_hotword_handle;
     63 struct cras_stream_params;
     64 
     65 /* Callback for audio received or transmitted.
     66  * Args (All pointer will be valid - except user_arg, that's up to the user):
     67  *    client: The client requesting service.
     68  *    stream_id - Unique identifier for the stream needing data read/written.
     69  *    samples - Read or write samples to/form here.
     70  *    frames - Maximum number of frames to read or write.
     71  *    sample_time - Playback time for the first sample read/written.
     72  *    user_arg - Value passed to add_stream;
     73  * Return:
     74  *    Returns the number of frames read or written on success, or a negative
     75  *    number if there is a stream-fatal error. Returns EOF when the end of the
     76  *    stream is reached.
     77  */
     78 typedef int (*cras_playback_cb_t)(struct cras_client *client,
     79 				  cras_stream_id_t stream_id,
     80 				  uint8_t *samples,
     81 				  size_t frames,
     82 				  const struct timespec *sample_time,
     83 				  void *user_arg);
     84 
     85 /* Callback for audio received and/or transmitted.
     86  * Args (All pointer will be valid - except user_arg, that's up to the user):
     87  *    client: The client requesting service.
     88  *    stream_id - Unique identifier for the stream needing data read/written.
     89  *    captured_samples - Read samples form here.
     90  *    playback_samples - Read or write samples to here.
     91  *    frames - Maximum number of frames to read or write.
     92  *    captured_time - Time the first sample was read.
     93  *    playback_time - Playback time for the first sample written.
     94  *    user_arg - Value passed to add_stream;
     95  * Return:
     96  *    Returns the number of frames read or written on success, or a negative
     97  *    number if there is a stream-fatal error. Returns EOF when the end of the
     98  *    stream is reached.
     99  */
    100 typedef int (*cras_unified_cb_t)(struct cras_client *client,
    101 				 cras_stream_id_t stream_id,
    102 				 uint8_t *captured_samples,
    103 				 uint8_t *playback_samples,
    104 				 unsigned int frames,
    105 				 const struct timespec *captured_time,
    106 				 const struct timespec *playback_time,
    107 				 void *user_arg);
    108 
    109 /* Callback for handling stream errors.
    110  * Args:
    111  *    client - The client created with cras_client_create().
    112  *    stream_id - The ID for this stream.
    113  *    error - The error code,
    114  *    user_arg - The argument defined in cras_client_*_params_create().
    115  */
    116 typedef int (*cras_error_cb_t)(struct cras_client *client,
    117 			       cras_stream_id_t stream_id,
    118 			       int error,
    119 			       void *user_arg);
    120 
    121 /* Callback for handling server error. DEPRECATED
    122  *
    123  * Deprecated by cras_server_connection_status_cb_t: use that instead.
    124  * This is equivalent to CRAS_CONN_STATUS_FAILED.
    125  *
    126  * This callback is executed rarely: only when the connection to the server has
    127  * already been interrupted and could not be re-established due to resource
    128  * allocation failure (memory or file-descriptors). The caller may attempt
    129  * to reestablish communication once those resources are available with
    130  * cras_client_connect_async(), or (blocking) cras_client_connect().
    131  *
    132  * Args:
    133  *    client - The client created with cras_client_create().
    134  *    user_arg - The argument defined in cras_client_set_server_errro_cb().
    135  */
    136 typedef void (*cras_server_error_cb_t)(struct cras_client *client,
    137 				       void *user_arg);
    138 
    139 /* Server connection status. */
    140 typedef enum cras_connection_status {
    141 	CRAS_CONN_STATUS_FAILED,
    142 		/* Resource allocation problem. Free resources, and retry the
    143 		 * connection with cras_client_connect_async(), or (blocking)
    144 		 * cras_client_connect(). Do not call cras_client_connect(),
    145 		 * cras_client_connect_timeout(), or cras_client_destroy()
    146 		 * from the callback. */
    147 	CRAS_CONN_STATUS_DISCONNECTED,
    148 		/* The control thread is attempting to reconnect to the
    149 		 * server in the background. Any attempt to access the
    150 		 * server will fail or block (see
    151 		 * cras_client_set_server_message_blocking(). */
    152 	CRAS_CONN_STATUS_CONNECTED,
    153 		/* Connection is established. All state change callbacks
    154 		 * have been re-registered, but audio streams must be
    155 		 * restarted, and node state data must be updated. */
    156 } cras_connection_status_t;
    157 
    158 /* Callback for handling server connection status.
    159  *
    160  * See also cras_client_set_connection_status_cb(). Do not call
    161  * cras_client_connect(), cras_client_connect_timeout(), or
    162  * cras_client_destroy() from this callback.
    163  *
    164  * Args:
    165  *    client - The client created with cras_client_create().
    166  *    status - The status of the connection to the server.
    167  *    user_arg - The argument defined in
    168  *               cras_client_set_connection_status_cb().
    169  */
    170 typedef void (*cras_connection_status_cb_t)(struct cras_client *client,
    171 					    cras_connection_status_t status,
    172 					    void *user_arg);
    173 
    174 /* Callback for setting thread priority. */
    175 typedef void (*cras_thread_priority_cb_t)(struct cras_client *client);
    176 
    177 /* Callback for handling get hotword models reply. */
    178 typedef void (*get_hotword_models_cb_t)(struct cras_client *client,
    179 					const char *hotword_models);
    180 
    181 /* Callback to wait for a hotword trigger. */
    182 typedef void (*cras_hotword_trigger_cb_t)(struct cras_client *client,
    183 					  struct cras_hotword_handle *handle,
    184 					  void *user_data);
    185 
    186 /* Callback for handling hotword errors. */
    187 typedef int (*cras_hotword_error_cb_t)(struct cras_client *client,
    188 				       struct cras_hotword_handle *handle,
    189 				       int error,
    190 				       void *user_data);
    191 
    192 /*
    193  * Client handling.
    194  */
    195 
    196 /* Creates a new client.
    197  * Args:
    198  *    client - Filled with a pointer to the new client.
    199  * Returns:
    200  *    0 on success (*client is filled with a valid cras_client pointer).
    201  *    Negative error code on failure(*client will be NULL).
    202  */
    203 int cras_client_create(struct cras_client **client);
    204 
    205 /* Destroys a client.
    206  * Args:
    207  *    client - returned from "cras_client_create".
    208  */
    209 void cras_client_destroy(struct cras_client *client);
    210 
    211 /* Connects a client to the running server.
    212  * Waits forever (until interrupted or connected).
    213  * Args:
    214  *    client - pointer returned from "cras_client_create".
    215  * Returns:
    216  *    0 on success, or a negative error code on failure (from errno.h).
    217  */
    218 int cras_client_connect(struct cras_client *client);
    219 
    220 /* Connects a client to the running server, retries until timeout.
    221  * Args:
    222  *    client - pointer returned from "cras_client_create".
    223  *    timeout_ms - timeout in milliseconds or negative to wait forever.
    224  * Returns:
    225  *    0 on success, or a negative error code on failure (from errno.h).
    226  */
    227 int cras_client_connect_timeout(struct cras_client *client,
    228 				unsigned int timeout_ms);
    229 
    230 /* Begins running the client control thread.
    231  *
    232  * Required for stream operations and other operations noted below.
    233  *
    234  * Args:
    235  *    client - the client to start (from cras_client_create).
    236  * Returns:
    237  *    0 on success or if the thread is already running, -EINVAL if the client
    238  *    pointer is NULL, or the negative result of pthread_create().
    239  */
    240 int cras_client_run_thread(struct cras_client *client);
    241 
    242 /* Stops running a client.
    243  * This function is executed automatically by cras_client_destroy().
    244  * Args:
    245  *    client - the client to stop (from cras_client_create).
    246  * Returns:
    247  *    0 on success or if the thread was already stopped, -EINVAL if the client
    248  *    isn't valid.
    249  */
    250 int cras_client_stop(struct cras_client *client);
    251 
    252 /* Wait up to 1 second for the client thread to complete the server connection.
    253  *
    254  * After cras_client_run_thread() is executed, this function can be used to
    255  * ensure that the connection has been established with the server and ensure
    256  * that any information about the server is up to date. If
    257  * cras_client_run_thread() has not yet been executed, or cras_client_stop()
    258  * was executed and thread isn't running, then this function returns -EINVAL.
    259  *
    260  * Args:
    261  *    client - pointer returned from "cras_client_create".
    262  * Returns:
    263  *    0 on success, or a negative error code on failure (from errno.h).
    264  */
    265 int cras_client_connected_wait(struct cras_client *client);
    266 
    267 /* Ask the client control thread to connect to the audio server.
    268  *
    269  * After cras_client_run_thread() is executed, this function can be used
    270  * to ask the control thread to connect to the audio server asynchronously.
    271  * The callback set with cras_client_set_connection_status_cb() will be
    272  * executed when the connection is established.
    273  *
    274  * Args:
    275  *    client - The client from cras_client_create().
    276  * Returns:
    277  *    0 on success, or a negative error code on failure (from errno.h).
    278  *    -EINVAL if the client pointer is invalid or the control thread is
    279  *    not running.
    280  */
    281 int cras_client_connect_async(struct cras_client *client);
    282 
    283 /* Sets server error callback. DEPRECATED
    284  *
    285  * See cras_server_error_cb_t for more information about this callback.
    286  *
    287  * Args:
    288  *    client - The client from cras_client_create.
    289  *    err_cb - The callback function to register.
    290  *    user_arg - Pointer that will be passed to the callback.
    291  */
    292 void cras_client_set_server_error_cb(struct cras_client *client,
    293 				     cras_server_error_cb_t err_cb,
    294 				     void *user_arg);
    295 
    296 /* Sets server connection status callback.
    297  *
    298  * See cras_connection_status_t for a description of the connection states
    299  * and appropriate user action.
    300  *
    301  * Args:
    302  *    client - The client from cras_client_create.
    303  *    connection_cb - The callback function to register.
    304  *    user_arg - Pointer that will be passed to the callback.
    305  */
    306 void cras_client_set_connection_status_cb(
    307 		struct cras_client *client,
    308 		cras_connection_status_cb_t connection_cb,
    309 		void *user_arg);
    310 
    311 /* Sets callback for setting thread priority.
    312  * Args:
    313  *    client - The client from cras_client_create.
    314  *    cb - The thread priority callback.
    315  */
    316 void cras_client_set_thread_priority_cb(struct cras_client *client,
    317 					cras_thread_priority_cb_t cb);
    318 
    319 /* Returns the current list of output devices.
    320  *
    321  * Requires that the connection to the server has been established.
    322  *
    323  * Data is copied and thus can become out of date. This call must be
    324  * re-executed to get updates.
    325  *
    326  * Args:
    327  *    client - The client from cras_client_create.
    328  *    devs - Array that will be filled with device info.
    329  *    nodes - Array that will be filled with node info.
    330  *    *num_devs - Maximum number of devices to put in the array.
    331  *    *num_nodes - Maximum number of nodes to put in the array.
    332  * Returns:
    333  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    334  *    *num_devs is set to the actual number of devices info filled.
    335  *    *num_nodes is set to the actual number of nodes info filled.
    336  */
    337 int cras_client_get_output_devices(const struct cras_client *client,
    338 				   struct cras_iodev_info *devs,
    339 				   struct cras_ionode_info *nodes,
    340 				   size_t *num_devs, size_t *num_nodes);
    341 
    342 /* Returns the current list of input devices.
    343  *
    344  * Requires that the connection to the server has been established.
    345  *
    346  * Data is copied and thus can become out of date. This call must be
    347  * re-executed to get updates.
    348  *
    349  * Args:
    350  *    client - The client from cras_client_create.
    351  *    devs - Array that will be filled with device info.
    352  *    nodes - Array that will be filled with node info.
    353  *    *num_devs - Maximum number of devices to put in the array.
    354  *    *num_nodes - Maximum number of nodes to put in the array.
    355  * Returns:
    356  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    357  *    *num_devs is set to the actual number of devices info filled.
    358  *    *num_nodes is set to the actual number of nodes info filled.
    359  */
    360 int cras_client_get_input_devices(const struct cras_client *client,
    361 				  struct cras_iodev_info *devs,
    362 				  struct cras_ionode_info *nodes,
    363 				  size_t *num_devs, size_t *num_nodes);
    364 
    365 /* Returns the current list of clients attached to the server.
    366  *
    367  * Requires that the connection to the server has been established.
    368  *
    369  * Data is copied and thus can become out of date. This call must be
    370  * re-executed to get updates.
    371  *
    372  * Args:
    373  *    client - This client (from cras_client_create).
    374  *    clients - Array that will be filled with a list of attached clients.
    375  *    max_clients - Maximum number of clients to put in the array.
    376  * Returns:
    377  *    The number of attached clients.  This may be more that max_clients passed
    378  *    in, this indicates that all of the clients wouldn't fit in the provided
    379  *    array.
    380  */
    381 int cras_client_get_attached_clients(const struct cras_client *client,
    382 				     struct cras_attached_client_info *clients,
    383 				     size_t max_clients);
    384 
    385 /* Find a node info with the matching node id.
    386  *
    387  * Requires that the connection to the server has been established.
    388  *
    389  * Data is copied and thus can become out of date. This call must be
    390  * re-executed to get updates.
    391  *
    392  * Args:
    393  *    client - This client (from cras_client_create).
    394  *    input - Non-zero for input nodes, zero for output nodes.
    395  *    node_id - The node id to look for.
    396  *    node_info - The information about the ionode will be returned here.
    397  * Returns:
    398  *    0 if successful, negative on error; -ENOENT if the node cannot be found.
    399  */
    400 int cras_client_get_node_by_id(const struct cras_client *client,
    401 			       int input,
    402 			       const cras_node_id_t node_id,
    403 			       struct cras_ionode_info* node_info);
    404 
    405 /* Checks if the output device with the given name is currently plugged in.
    406  *
    407  * For internal devices this checks that jack state, for USB devices this will
    408  * always be true if they are present. The name parameter can be the complete
    409  * name or any unique prefix of the name. If the name is not unique the first
    410  * matching name will be checked.
    411  *
    412  * Requires that the connection to the server has been established.
    413  *
    414  * Data is copied and thus can become out of date. This call must be
    415  * re-executed to get updates.
    416  *
    417  * Args:
    418  *    client - The client from cras_client_create.
    419  *    name - Name of the device to check.
    420  * Returns:
    421  *    1 if the device exists and is plugged, 0 otherwise.
    422  */
    423 int cras_client_output_dev_plugged(const struct cras_client *client,
    424 				   const char *name);
    425 
    426 /* Set the value of an attribute of an ionode.
    427  *
    428  * Args:
    429  *    client - The client from cras_client_create.
    430  *    node_id - The id of the ionode.
    431  *    attr - the attribute we want to change.
    432  *    value - the value we want to set.
    433  * Returns:
    434  *    Returns 0 for success, negative on error (from errno.h).
    435  */
    436 int cras_client_set_node_attr(struct cras_client *client,
    437 			      cras_node_id_t node_id,
    438 			      enum ionode_attr attr,
    439 			      int value);
    440 
    441 /* Select the preferred node for playback/capture.
    442  *
    443  * Args:
    444  *    client - The client from cras_client_create.
    445  *    direction - The direction of the ionode.
    446  *    node_id - The id of the ionode. If node_id is the special value 0, then
    447  *        the preference is cleared and cras will choose automatically.
    448  */
    449 int cras_client_select_node(struct cras_client *client,
    450 			    enum CRAS_STREAM_DIRECTION direction,
    451 			    cras_node_id_t node_id);
    452 
    453 /* Adds an active node for playback/capture.
    454  *
    455  * Args:
    456  *    client - The client from cras_client_create.
    457  *    direction - The direction of the ionode.
    458  *    node_id - The id of the ionode. If there's no node matching given
    459  *        id, nothing will happen in CRAS.
    460  */
    461 int cras_client_add_active_node(struct cras_client *client,
    462 				enum CRAS_STREAM_DIRECTION direction,
    463 				cras_node_id_t node_id);
    464 
    465 /* Removes an active node for playback/capture.
    466  *
    467  * Args:
    468  *    client - The client from cras_client_create.
    469  *    direction - The direction of the ionode.
    470  *    node_id - The id of the ionode. If there's no node matching given
    471  *        id, nothing will happen in CRAS.
    472  */
    473 int cras_client_rm_active_node(struct cras_client *client,
    474 			       enum CRAS_STREAM_DIRECTION direction,
    475 			       cras_node_id_t node_id);
    476 
    477 
    478 /* Asks the server to reload dsp plugin configuration from the ini file.
    479  *
    480  * Args:
    481  *    client - The client from cras_client_create.
    482  * Returns:
    483  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    484  */
    485 int cras_client_reload_dsp(struct cras_client *client);
    486 
    487 /* Asks the server to dump current dsp information to syslog.
    488  *
    489  * Args:
    490  *    client - The client from cras_client_create.
    491  * Returns:
    492  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    493  */
    494 int cras_client_dump_dsp_info(struct cras_client *client);
    495 
    496 /* Asks the server to dump current audio thread information.
    497  *
    498  * Args:
    499  *    client - The client from cras_client_create.
    500  *    cb - A function to call when the data is received.
    501  * Returns:
    502  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    503  */
    504 int cras_client_update_audio_debug_info(
    505 	struct cras_client *client, void (*cb)(struct cras_client *));
    506 
    507 /* Asks the server to dump current audio thread snapshots.
    508  *
    509  * Args:
    510  *    client - The client from cras_client_create.
    511  *    cb - A function to call when the data is received.
    512  * Returns:
    513  *    0 on success, -EINVAL if the client isn't valid or isn't running.
    514  */
    515 int cras_client_update_audio_thread_snapshots(
    516 	struct cras_client *client, void (*cb)(struct cras_client *));
    517 
    518 /*
    519  * Stream handling.
    520  */
    521 
    522 /* Setup stream configuration parameters.
    523  * Args:
    524  *    direction - playback(CRAS_STREAM_OUTPUT) or capture(CRAS_STREAM_INPUT).
    525  *    buffer_frames - total number of audio frames to buffer (dictates latency).
    526  *    cb_threshold - For playback, call back for more data when the buffer
    527  *        reaches this level. For capture, this is ignored (Audio callback will
    528  *        be called when buffer_frames have been captured).
    529  *    unused - No longer used.
    530  *    stream_type - media or talk (currently only support "default").
    531  *    flags - None currently used.
    532  *    user_data - Pointer that will be passed to the callback.
    533  *    aud_cb - Called when audio is needed(playback) or ready(capture). Allowed
    534  *        return EOF to indicate that the stream should terminate.
    535  *    err_cb - Called when there is an error with the stream.
    536  *    format - The format of the audio stream.  Specifies bits per sample,
    537  *        number of channels, and sample rate.
    538  */
    539 struct cras_stream_params *cras_client_stream_params_create(
    540 		enum CRAS_STREAM_DIRECTION direction,
    541 		size_t buffer_frames,
    542 		size_t cb_threshold,
    543 		size_t unused,
    544 		enum CRAS_STREAM_TYPE stream_type,
    545 		uint32_t flags,
    546 		void *user_data,
    547 		cras_playback_cb_t aud_cb,
    548 		cras_error_cb_t err_cb,
    549 		struct cras_audio_format *format);
    550 
    551 /* Functions to enable or disable specific effect on given stream parameter.
    552  * Args:
    553  *    params - Stream configuration parameters.
    554  */
    555 void cras_client_stream_params_enable_aec(struct cras_stream_params *params);
    556 void cras_client_stream_params_disable_aec(struct cras_stream_params *params);
    557 void cras_client_stream_params_enable_ns(struct cras_stream_params *params);
    558 void cras_client_stream_params_disable_ns(struct cras_stream_params *params);
    559 void cras_client_stream_params_enable_agc(struct cras_stream_params *params);
    560 void cras_client_stream_params_disable_agc(struct cras_stream_params *params);
    561 void cras_client_stream_params_enable_vad(struct cras_stream_params *params);
    562 void cras_client_stream_params_disable_vad(struct cras_stream_params *params);
    563 
    564 /* Setup stream configuration parameters.
    565  * Args:
    566  *    direction - playback(CRAS_STREAM_OUTPUT) or capture(CRAS_STREAM_INPUT) or
    567  *        loopback(CRAS_STREAM_POST_MIX_PRE_DSP).
    568  *    block_size - The number of frames per callback(dictates latency).
    569  *    stream_type - media or talk (currently only support "default").
    570  *    flags - None currently used.
    571  *    user_data - Pointer that will be passed to the callback.
    572  *    unified_cb - Called for streams that do simultaneous input/output.
    573  *    err_cb - Called when there is an error with the stream.
    574  *    format - The format of the audio stream.  Specifies bits per sample,
    575  *        number of channels, and sample rate.
    576  */
    577 struct cras_stream_params *cras_client_unified_params_create(
    578 		enum CRAS_STREAM_DIRECTION direction,
    579 		unsigned int block_size,
    580 		enum CRAS_STREAM_TYPE stream_type,
    581 		uint32_t flags,
    582 		void *user_data,
    583 		cras_unified_cb_t unified_cb,
    584 		cras_error_cb_t err_cb,
    585 		struct cras_audio_format *format);
    586 
    587 /* Destroy stream params created with cras_client_stream_params_create. */
    588 void cras_client_stream_params_destroy(struct cras_stream_params *params);
    589 
    590 /* Creates a new stream and return the stream id or < 0 on error.
    591  *
    592  * Requires execution of cras_client_run_thread(), and an active connection
    593  * to the audio server.
    594  *
    595  * Args:
    596  *    client - The client to add the stream to (from cras_client_create).
    597  *    stream_id_out - On success will be filled with the new stream id.
    598  *        Guaranteed to be set before any callbacks are made.
    599  *    config - The cras_stream_params struct specifying the parameters for the
    600  *        stream.
    601  * Returns:
    602  *    0 on success, negative error code on failure (from errno.h).
    603  */
    604 int cras_client_add_stream(struct cras_client *client,
    605 			   cras_stream_id_t *stream_id_out,
    606 			   struct cras_stream_params *config);
    607 
    608 /* Creates a pinned stream and return the stream id or < 0 on error.
    609  *
    610  * Requires execution of cras_client_run_thread(), and an active connection
    611  * to the audio server.
    612  *
    613  * Args:
    614  *    client - The client to add the stream to (from cras_client_create).
    615  *    dev_idx - Index of the device to attach the newly created stream.
    616  *    stream_id_out - On success will be filled with the new stream id.
    617  *        Guaranteed to be set before any callbacks are made.
    618  *    config - The cras_stream_params struct specifying the parameters for the
    619  *        stream.
    620  * Returns:
    621  *    0 on success, negative error code on failure (from errno.h).
    622  */
    623 int cras_client_add_pinned_stream(struct cras_client *client,
    624 				  uint32_t dev_idx,
    625 				  cras_stream_id_t *stream_id_out,
    626 				  struct cras_stream_params *config);
    627 
    628 /* Removes a currently playing/capturing stream.
    629  *
    630  * Requires execution of cras_client_run_thread().
    631  *
    632  * Args:
    633  *    client - Client to remove the stream (returned from cras_client_create).
    634  *    stream_id - ID returned from cras_client_add_stream to identify the stream
    635           to remove.
    636  * Returns:
    637  *    0 on success negative error code on failure (from errno.h).
    638  */
    639 int cras_client_rm_stream(struct cras_client *client,
    640 			  cras_stream_id_t stream_id);
    641 
    642 /* Sets the volume scaling factor for the given stream.
    643  *
    644  * Requires execution of cras_client_run_thread().
    645  *
    646  * Args:
    647  *    client - Client owning the stream.
    648  *    stream_id - ID returned from cras_client_add_stream.
    649  *    volume_scaler - 0.0-1.0 the new value to scale this stream by.
    650  */
    651 int cras_client_set_stream_volume(struct cras_client *client,
    652 				  cras_stream_id_t stream_id,
    653 				  float volume_scaler);
    654 
    655 /*
    656  * System level functions.
    657  */
    658 
    659 /* Sets the volume of the system.
    660  *
    661  * Volume here ranges from 0 to 100, and will be translated to dB based on the
    662  * output-specific volume curve.
    663  *
    664  * Args:
    665  *    client - The client from cras_client_create.
    666  *    volume - 0-100 the new volume index.
    667  * Returns:
    668  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    669  *    -EINVAL if 'client' is invalid.
    670  */
    671 int cras_client_set_system_volume(struct cras_client *client, size_t volume);
    672 
    673 /* Sets the capture gain of the system.
    674  *
    675  * Gain is specified in dBFS * 100.  For example 5dB of gain would be specified
    676  * with an argument of 500, while -10 would be specified with -1000.
    677  *
    678  * Args:
    679  *    client - The client from cras_client_create.
    680  *    gain - The gain in dBFS * 100.
    681  * Returns:
    682  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    683  *    -EINVAL if 'client' is invalid.
    684  */
    685 int cras_client_set_system_capture_gain(struct cras_client *client, long gain);
    686 
    687 /* Sets the mute state of the system.
    688  *
    689  * Args:
    690  *    client - The client from cras_client_create.
    691  *    mute - 0 is un-mute, 1 is muted.
    692  * Returns:
    693  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    694  *    -EINVAL if 'client' is invalid.
    695  */
    696 int cras_client_set_system_mute(struct cras_client *client, int mute);
    697 
    698 /* Sets the user mute state of the system.
    699  *
    700  * This is used for mutes caused by user interaction. Like the mute key.
    701  *
    702  * Args:
    703  *    client - The client from cras_client_create.
    704  *    mute - 0 is un-mute, 1 is muted.
    705  * Returns:
    706  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    707  *    -EINVAL if 'client' is invalid.
    708  */
    709 int cras_client_set_user_mute(struct cras_client *client, int mute);
    710 
    711 /* Sets the mute locked state of the system.
    712  *
    713  * Changing mute state is impossible when this flag is set to locked.
    714  *
    715  * Args:
    716  *    client - The client from cras_client_create.
    717  *    locked - 0 is un-locked, 1 is locked.
    718  * Returns:
    719  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    720  *    -EINVAL if 'client' is invalid.
    721  */
    722 int cras_client_set_system_mute_locked(struct cras_client *client, int locked);
    723 
    724 /* Sets the capture mute state of the system.
    725  *
    726  * Recordings will be muted when this is set.
    727  *
    728  * Args:
    729  *    client - The client from cras_client_create.
    730  *    mute - 0 is un-mute, 1 is muted.
    731  * Returns:
    732  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    733  *    -EINVAL if 'client' is invalid.
    734  */
    735 int cras_client_set_system_capture_mute(struct cras_client *client, int mute);
    736 
    737 /* Sets the capture mute locked state of the system.
    738  *
    739  * Changing mute state is impossible when this flag is set to locked.
    740  *
    741  * Args:
    742  *    client - The client from cras_client_create.
    743  *    locked - 0 is un-locked, 1 is locked.
    744  * Returns:
    745  *    0 for success, -EPIPE if there is an I/O error talking to the server, or
    746  *    -EINVAL if 'client' is invalid.
    747  */
    748 int cras_client_set_system_capture_mute_locked(struct cras_client *client,
    749 					       int locked);
    750 
    751 /* Gets the current system volume.
    752  *
    753  * Requires that the connection to the server has been established.
    754  *
    755  * Args:
    756  *    client - The client from cras_client_create.
    757  * Returns:
    758  *    The current system volume between 0 and 100.
    759  */
    760 size_t cras_client_get_system_volume(const struct cras_client *client);
    761 
    762 /* Gets the current system capture gain.
    763  *
    764  * Requires that the connection to the server has been established.
    765  *
    766  * Args:
    767  *    client - The client from cras_client_create.
    768  * Returns:
    769  *    The current system capture volume in dB * 100.
    770  */
    771 long cras_client_get_system_capture_gain(const struct cras_client *client);
    772 
    773 /* Gets the current system mute state.
    774  *
    775  * Requires that the connection to the server has been established.
    776  *
    777  * Args:
    778  *    client - The client from cras_client_create.
    779  * Returns:
    780  *    0 if not muted, 1 if it is.
    781  */
    782 int cras_client_get_system_muted(const struct cras_client *client);
    783 
    784 /* Gets the current user mute state.
    785  *
    786  * Requires that the connection to the server has been established.
    787  *
    788  * Args:
    789  *    client - The client from cras_client_create.
    790  * Returns:
    791  *    0 if not muted, 1 if it is.
    792  */
    793 int cras_client_get_user_muted(const struct cras_client *client);
    794 
    795 /* Gets the current system capture mute state.
    796  *
    797  * Requires that the connection to the server has been established.
    798  *
    799  * Args:
    800  *    client - The client from cras_client_create.
    801  * Returns:
    802  *    0 if capture is not muted, 1 if it is.
    803  */
    804 int cras_client_get_system_capture_muted(const struct cras_client *client);
    805 
    806 /* Gets the current minimum system volume.
    807  * Args:
    808  *    client - The client from cras_client_create.
    809  * Returns:
    810  *    The minimum value for the current output device in dBFS * 100.  This is
    811  *    the level of attenuation at volume == 1.
    812  */
    813 long cras_client_get_system_min_volume(const struct cras_client *client);
    814 
    815 /* Gets the current maximum system volume.
    816  * Args:
    817  *    client - The client from cras_client_create.
    818  * Returns:
    819  *    The maximum value for the current output device in dBFS * 100.  This is
    820  *    the level of attenuation at volume == 100.
    821  */
    822 long cras_client_get_system_max_volume(const struct cras_client *client);
    823 
    824 /* Gets the current minimum system capture gain.
    825  *
    826  * Requires that the connection to the server has been established.
    827  *
    828  * Args:
    829  *    client - The client from cras_client_create.
    830  * Returns:
    831  *    The minimum capture gain for the current input device in dBFS * 100.
    832  */
    833 long cras_client_get_system_min_capture_gain(const struct cras_client *client);
    834 
    835 /* Gets the current maximum system capture gain.
    836  *
    837  * Requires that the connection to the server has been established.
    838  *
    839  * Args:
    840  *    client - The client from cras_client_create.
    841  * Returns:
    842  *    The maximum capture gain for the current input device in dBFS * 100.
    843  */
    844 long cras_client_get_system_max_capture_gain(const struct cras_client *client);
    845 
    846 /* Gets audio debug info.
    847  *
    848  * Requires that the connection to the server has been established.
    849  * Access to the resulting pointer is not thread-safe.
    850  *
    851  * Args:
    852  *    client - The client from cras_client_create.
    853  * Returns:
    854  *    A pointer to the debug info.  This info is only updated when requested by
    855  *    calling cras_client_update_audio_debug_info.
    856  */
    857 const struct audio_debug_info *cras_client_get_audio_debug_info(
    858 		const struct cras_client *client);
    859 
    860 /* Gets audio thread snapshot buffer.
    861  *
    862  * Requires that the connection to the server has been established.
    863  * Access to the resulting pointer is not thread-safe.
    864  *
    865  * Args:
    866  *    client - The client from cras_client_create.
    867  * Returns:
    868  *    A pointer to the snapshot buffer.  This info is only updated when
    869  *    requested by calling cras_client_update_audio_thread_snapshots.
    870  */
    871 const struct cras_audio_thread_snapshot_buffer *
    872 	cras_client_get_audio_thread_snapshot_buffer(
    873 		const struct cras_client *client);
    874 
    875 /* Gets the number of streams currently attached to the server.
    876  *
    877  * This is the total number of capture and playback streams. If the ts argument
    878  * is not null, then it will be filled with the last time audio was played or
    879  * recorded. ts will be set to the current time if streams are currently
    880  * active.
    881  *
    882  * Requires that the connection to the server has been established.
    883  *
    884  * Args:
    885  *    client - The client from cras_client_create.
    886  *    ts - Filled with the timestamp of the last stream.
    887  * Returns:
    888  *    The number of active streams.
    889  */
    890 unsigned cras_client_get_num_active_streams(const struct cras_client *client,
    891 					    struct timespec *ts);
    892 
    893 
    894 /*
    895  * Utility functions.
    896  */
    897 
    898 /* Returns the number of bytes in an audio frame for a stream.
    899  * Args:
    900  *    format - The format of the audio stream.  Specifies bits per sample,
    901  *        number of channels, and sample rate.
    902  * Returns:
    903  *   Positive number of bytes in a frame, or a negative error code if fmt is
    904  *   NULL.
    905  */
    906 int cras_client_format_bytes_per_frame(struct cras_audio_format *fmt);
    907 
    908 /* For playback streams, calculates the latency of the next sample written.
    909  * Only valid when called from the audio callback function for the stream
    910  * (aud_cb).
    911  * Args:
    912  *    sample_time - The sample time stamp passed in to aud_cb.
    913  *    delay - Out parameter will be filled with the latency.
    914  * Returns:
    915  *    0 on success, -EINVAL if delay is NULL.
    916  */
    917 int cras_client_calc_playback_latency(const struct timespec *sample_time,
    918 				      struct timespec *delay);
    919 
    920 /* For capture returns the latency of the next frame to be read from the buffer
    921  * (based on when it was captured).  Only valid when called from the audio
    922  * callback function for the stream (aud_cb).
    923  * Args:
    924  *    sample_time - The sample time stamp passed in to aud_cb.
    925  *    delay - Out parameter will be filled with the latency.
    926  * Returns:
    927  *    0 on success, -EINVAL if delay is NULL.
    928  */
    929 int cras_client_calc_capture_latency(const struct timespec *sample_time,
    930 				     struct timespec *delay);
    931 
    932 /* Set the volume of the given output node. Only for output nodes.
    933  *
    934  * Args:
    935  *    client - The client from cras_client_create.
    936  *    node_id - ID of the node.
    937  *    volume - New value for node volume.
    938  */
    939 int cras_client_set_node_volume(struct cras_client *client,
    940 				cras_node_id_t node_id,
    941 				uint8_t volume);
    942 
    943 /* Swap the left and right channel of the given node.
    944  *
    945  * Args:
    946  *    client - The client from cras_client_create.
    947  *    node_id - ID of the node.
    948  *    enable - 1 to enable swap mode, 0 to disable.
    949  */
    950 int cras_client_swap_node_left_right(struct cras_client *client,
    951 					cras_node_id_t node_id, int enable);
    952 
    953 /* Set the capture gain of the given input node.  Only for input nodes.
    954  *
    955  * Args:
    956  *    client - The client from cras_client_create.
    957  *    node_id - ID of the node.
    958  *    gain - New capture gain for the node.
    959  */
    960 int cras_client_set_node_capture_gain(struct cras_client *client,
    961 				      cras_node_id_t node_id,
    962 				      long gain);
    963 
    964 /* Add a test iodev to the iodev list.
    965  *
    966  * Args:
    967  *    client - The client from cras_client_create.
    968  *    type - The type of test iodev, see cras_types.h
    969  */
    970 int cras_client_add_test_iodev(struct cras_client *client,
    971 			       enum TEST_IODEV_TYPE type);
    972 
    973 /* Send a test command to a test iodev.
    974  *
    975  * Args:
    976  *    client - The client from cras_client_create.
    977  *    iodev_idx - The index of the test iodev.
    978  *    command - The command to send.
    979  *    data_len - Length of command data.
    980  *    data - Command data.
    981  */
    982 int cras_client_test_iodev_command(struct cras_client *client,
    983 				   unsigned int iodev_idx,
    984 				   enum CRAS_TEST_IODEV_CMD command,
    985 				   unsigned int data_len,
    986 				   const uint8_t *data);
    987 
    988 /* Finds the first node of the given type.
    989  *
    990  * This is used for finding a special hotword node.
    991  *
    992  * Requires that the connection to the server has been established.
    993  *
    994  * Args:
    995  *    client - The client from cras_client_create.
    996  *    type - The type of device to find.
    997  *    direction - Search input or output devices.
    998  *    node_id - The found node on success.
    999  * Returns:
   1000  *    0 on success, a negative error on failure.
   1001  */
   1002 int cras_client_get_first_node_type_idx(const struct cras_client *client,
   1003 					enum CRAS_NODE_TYPE type,
   1004 					enum CRAS_STREAM_DIRECTION direction,
   1005 					cras_node_id_t *node_id);
   1006 
   1007 /* Finds the first device that contains a node of the given type.
   1008  *
   1009  * This is used for finding a special hotword device.
   1010  *
   1011  * Requires that the connection to the server has been established.
   1012  *
   1013  * Args:
   1014  *    client - The client from cras_client_create.
   1015  *    type - The type of device to find.
   1016  *    direction - Search input or output devices.
   1017  * Returns the device index of a negative error on failure.
   1018  */
   1019 int cras_client_get_first_dev_type_idx(const struct cras_client *client,
   1020 				       enum CRAS_NODE_TYPE type,
   1021 				       enum CRAS_STREAM_DIRECTION direction);
   1022 
   1023 /* Sets the suspend state of audio playback and capture.
   1024  *
   1025  * Set this before putting the system into suspend.
   1026  *
   1027  * Args:
   1028  *    client - The client from cras_client_create.
   1029  *    suspend - Suspend the system if non-zero, otherwise resume.
   1030  */
   1031 int cras_client_set_suspend(struct cras_client *client, int suspend);
   1032 
   1033 /* Configures the global converter for output remixing.
   1034  *
   1035  * Args:
   1036  *    client - The client from cras_client_create.
   1037  *    num_channels - Number of output channels.
   1038  *    coefficient - Float array representing |num_channels| * |num_channels|
   1039  *        matrix. Channels of mixed PCM output will be remixed by
   1040  *        multiplying this matrix.
   1041  */
   1042 int cras_client_config_global_remix(struct cras_client *client,
   1043 				    unsigned num_channels,
   1044 				    float *coefficient);
   1045 
   1046 /* Gets the set of supported hotword language models on a node. The supported
   1047  * models may differ on different nodes.
   1048  *
   1049  * Args:
   1050  *    client - The client from cras_client_create.
   1051  *    node_id - ID of a hotword input node (CRAS_NODE_TYPE_HOTWORD).
   1052  *    cb - The function to be called when hotword models are ready.
   1053  * Returns:
   1054  *    0 on success.
   1055  */
   1056 int cras_client_get_hotword_models(struct cras_client *client,
   1057 				     cras_node_id_t node_id,
   1058 				     get_hotword_models_cb_t cb);
   1059 
   1060 /* Sets the hotword language model on a node. If there are existing streams on
   1061  * the hotword input node when this function is called, they need to be closed
   1062  * then re-opend for the model change to take effect.
   1063  * Args:
   1064  *    client - The client from cras_client_create.
   1065  *    node_id - ID of a hotword input node (CRAS_NODE_TYPE_HOTWORD).
   1066  *    model_name - Name of the model to use, e.g. "en_us".
   1067  * Returns:
   1068  *    0 on success.
   1069  *    -EINVAL if client or node_id is invalid.
   1070  *    -ENOENT if the specified model is not found.
   1071  */
   1072 int cras_client_set_hotword_model(struct cras_client *client,
   1073 				  cras_node_id_t node_id,
   1074 				  const char *model_name);
   1075 
   1076 /*
   1077  * Creates a hotword stream and waits for the hotword to trigger.
   1078  *
   1079  * Args:
   1080  *    client - The client to add the stream to (from cras_client_create).
   1081  *    user_data - Pointer that will be passed to the callback.
   1082  *    trigger_cb - Called when a hotword is triggered.
   1083  *    err_cb - Called when there is an error with the stream.
   1084  *    handle_out - On success will be filled with a cras_hotword_handle.
   1085  * Returns:
   1086  *    0 on success, negative error code on failure (from errno.h).
   1087  */
   1088 int cras_client_enable_hotword_callback(
   1089 		struct cras_client *client,
   1090 		void *user_data,
   1091 		cras_hotword_trigger_cb_t trigger_cb,
   1092 		cras_hotword_error_cb_t err_cb,
   1093 		struct cras_hotword_handle **handle_out);
   1094 
   1095 /*
   1096  * Closes a hotword stream that was created by cras_client_wait_for_hotword.
   1097  *
   1098  * Args:
   1099  *    client - Client to remove the stream (returned from cras_client_create).
   1100  *    handle - cras_hotword_handle returned from cras_client_wait_for_hotword.
   1101  * Returns:
   1102  *    0 on success negative error code on failure (from errno.h).
   1103  */
   1104 int cras_client_disable_hotword_callback(struct cras_client *client,
   1105 					 struct cras_hotword_handle *handle);
   1106 
   1107 /* Starts or stops the aec dump task on server side.
   1108  * Args:
   1109  *    client - The client from cras_client_create.
   1110  *    stream_id - The id of the input stream running with aec effect.
   1111  *    start - True to start APM debugging, otherwise to stop it.
   1112  *    fd - File descriptor of the file to store aec dump result.
   1113  */
   1114 int cras_client_set_aec_dump(struct cras_client *client,
   1115 			     cras_stream_id_t stream_id,
   1116 			     int start,
   1117 			     int fd);
   1118 /*
   1119  * Reloads the aec.ini config file on server side.
   1120  */
   1121 int cras_client_reload_aec_config(struct cras_client *client);
   1122 
   1123 /*
   1124  * Returns if AEC is supported.
   1125  */
   1126 int cras_client_get_aec_supported(struct cras_client *client);
   1127 
   1128 /* Set the context pointer for system state change callbacks.
   1129  * Args:
   1130  *    client - The client from cras_client_create.
   1131  *    context - The context pointer passed to all callbacks.
   1132  */
   1133 void cras_client_set_state_change_callback_context(
   1134 		struct cras_client *client, void *context);
   1135 
   1136 /* Output volume change callback.
   1137  *
   1138  * Args:
   1139  *    context - Context pointer set with
   1140  *              cras_client_set_state_change_callback_context().
   1141  *    volume - The system output volume, ranging from 0 to 100.
   1142  */
   1143 typedef void (*cras_client_output_volume_changed_callback)(
   1144 		void* context, int32_t volume);
   1145 
   1146 /* Output mute change callback.
   1147  *
   1148  * Args:
   1149  *    context - Context pointer set with
   1150  *              cras_client_set_state_change_callback_context().
   1151  *    muted - Non-zero when the audio is muted, zero otherwise.
   1152  *    user_muted - Non-zero when the audio has been muted by the
   1153  *                 user, zero otherwise.
   1154  *    mute_locked - Non-zero when the mute funcion is locked,
   1155  *                  zero otherwise.
   1156  */
   1157 typedef void (*cras_client_output_mute_changed_callback)(
   1158 		void* context, int muted, int user_muted, int mute_locked);
   1159 
   1160 /* Capture gain change callback.
   1161  *
   1162  * Args:
   1163  *    context - Context pointer set with
   1164  *              cras_client_set_state_change_callback_context().
   1165  *    gain - The system capture gain, in centi-decibels.
   1166  */
   1167 typedef void (*cras_client_capture_gain_changed_callback)(
   1168 		void* context, int32_t gain);
   1169 
   1170 /* Capture mute change callback.
   1171  *
   1172  * Args:
   1173  *    context - Context pointer set with
   1174  *              cras_client_set_state_change_callback_context().
   1175  *    muted - Non-zero when the audio is muted, zero otherwise.
   1176  *    mute_locked - Non-zero when the mute funcion is locked,
   1177  *                  zero otherwise.
   1178  */
   1179 typedef void (*cras_client_capture_mute_changed_callback)(
   1180 		void* context, int muted, int mute_locked);
   1181 
   1182 /* Nodes change callback.
   1183  *
   1184  * Args:
   1185  *    context - Context pointer set with
   1186  *              cras_client_set_state_change_callback_context().
   1187  */
   1188 typedef void (*cras_client_nodes_changed_callback)(void* context);
   1189 
   1190 /* Active node change callback.
   1191  *
   1192  * Args:
   1193  *    context - Context pointer set with
   1194  *              cras_client_set_state_change_callback_context().
   1195  *    direction - Indicates the direction of the selected node.
   1196  *    node_id - The ID of the selected node. Special device ID values
   1197  *              defined by CRAS_SPECIAL_DEVICE will be used when no other
   1198  *              device or node is selected or between selections.
   1199  */
   1200 typedef void (*cras_client_active_node_changed_callback)(
   1201     void* context, enum CRAS_STREAM_DIRECTION direction,
   1202     cras_node_id_t node_id);
   1203 
   1204 /* Output node volume change callback.
   1205  *
   1206  * Args:
   1207  *    context - Context pointer set with
   1208  *              cras_client_set_state_change_callback_context().
   1209  *    node_id - The ID of the output node.
   1210  *    volume - The volume for this node with range 0 to 100.
   1211  */
   1212 typedef void (*cras_client_output_node_volume_changed_callback)(
   1213 		void* context, cras_node_id_t node_id, int32_t volume);
   1214 
   1215 /* Node left right swapped change callback.
   1216  *
   1217  * Args:
   1218  *    context - Context pointer set with
   1219  *              cras_client_set_state_change_callback_context().
   1220  *    node_id - The ID of the node.
   1221  *    swapped - Non-zero if the node is left-right swapped, zero otherwise.
   1222  */
   1223 typedef void (*cras_client_node_left_right_swapped_changed_callback)(
   1224 		void* context, cras_node_id_t node_id, int swapped);
   1225 
   1226 /* Input node gain change callback.
   1227  * Args:
   1228  *    context - Context pointer set with
   1229  *              cras_client_set_state_change_callback_context().
   1230  *    node_id - The ID of the input node.
   1231  *    gain - The gain for this node in centi-decibels.
   1232  */
   1233 typedef void (*cras_client_input_node_gain_changed_callback)(
   1234 		void* context, cras_node_id_t node_id, int32_t gain);
   1235 
   1236 /* Number of active streams change callback.
   1237  *
   1238  * Args:
   1239  *    context - Context pointer set with
   1240  *              cras_client_set_state_change_callback_context().
   1241  *    direction - Indicates the direction of the stream's node.
   1242  *    num_active_streams - The number of active streams.
   1243  */
   1244 typedef void (*cras_client_num_active_streams_changed_callback)(
   1245 		void* context, enum CRAS_STREAM_DIRECTION direction,
   1246 		uint32_t num_active_streams);
   1247 
   1248 /* Set system state information callbacks.
   1249  * NOTE: These callbacks are executed from the client control thread.
   1250  * Each state change callback is given the context pointer set with
   1251  * cras_client_set_state_change_callback_context(). The context pointer is
   1252  * NULL by default.
   1253  * Args:
   1254  *    client - The client from cras_client_create.
   1255  *    cb - The callback, or NULL to disable the call-back.
   1256  * Returns:
   1257  *    0 for success or negative errno error code on error.
   1258  */
   1259 int cras_client_set_output_volume_changed_callback(
   1260 		struct cras_client *client,
   1261 		cras_client_output_volume_changed_callback cb);
   1262 int cras_client_set_output_mute_changed_callback(
   1263 		struct cras_client *client,
   1264 		cras_client_output_mute_changed_callback cb);
   1265 int cras_client_set_capture_gain_changed_callback(
   1266 		struct cras_client *client,
   1267 		cras_client_capture_gain_changed_callback cb);
   1268 int cras_client_set_capture_mute_changed_callback(
   1269 		struct cras_client *client,
   1270 		cras_client_capture_mute_changed_callback cb);
   1271 int cras_client_set_nodes_changed_callback(
   1272 		struct cras_client *client,
   1273 		cras_client_nodes_changed_callback cb);
   1274 int cras_client_set_active_node_changed_callback(
   1275 		struct cras_client *client,
   1276 		cras_client_active_node_changed_callback cb);
   1277 int cras_client_set_output_node_volume_changed_callback(
   1278 		struct cras_client *client,
   1279 		cras_client_output_node_volume_changed_callback cb);
   1280 int cras_client_set_node_left_right_swapped_changed_callback(
   1281 		struct cras_client *client,
   1282 		cras_client_node_left_right_swapped_changed_callback cb);
   1283 int cras_client_set_input_node_gain_changed_callback(
   1284 		struct cras_client *client,
   1285 		cras_client_input_node_gain_changed_callback cb);
   1286 int cras_client_set_num_active_streams_changed_callback(
   1287 		struct cras_client *client,
   1288 		cras_client_num_active_streams_changed_callback cb);
   1289 
   1290 #ifdef __cplusplus
   1291 }
   1292 #endif
   1293 
   1294 #endif /* CRAS_CLIENT_H_ */
   1295