/* Copyright 2016 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_OBSERVER_H
#define CRAS_OBSERVER_H
#include "cras_observer_ops.h"
struct cras_observer_client;
/* Add an observer.
* Args:
* ops - Set callback function pointers in the operations that should be
* called for state changes, or NULL otherwise.
* context - Context pointer passed to the callbacks.
* Returns:
* Valid pointer to the client reference, or NULL on memory allocation
* error.
*/
struct cras_observer_client *cras_observer_add(
const struct cras_observer_ops *ops,
void *context);
/* Retrieve the observed state changes.
* Args:
* client - The client to query.
* ops - Filled with the current values in the callback table.
*/
void cras_observer_get_ops(const struct cras_observer_client *client,
struct cras_observer_ops *ops);
/* Update the observed state changes.
* Args:
* client - The client to modify.
* ops - Set callback function pointers in the operations that should be
* called for state changes, or NULL otherwise.
*/
void cras_observer_set_ops(struct cras_observer_client *client,
const struct cras_observer_ops *ops);
/* Returns non-zero if the given ops are empty. */
int cras_observer_ops_are_empty(const struct cras_observer_ops *ops);
/* Remove this observer client.
* Args:
* client - The client to remove.
*/
void cras_observer_remove(struct cras_observer_client *client);
/* Initialize the observer server. */
int cras_observer_server_init();
/* Destroy the observer server. */
void cras_observer_server_free();
/* Notify observers of output volume change. */
void cras_observer_notify_output_volume(int32_t volume);
/* Notify observers of output mute change. */
void cras_observer_notify_output_mute(int muted, int user_muted,
int mute_locked);
/* Notify observers of capture gain change. */
void cras_observer_notify_capture_gain(int32_t gain);
/* Notify observers of capture mute change. */
void cras_observer_notify_capture_mute(int muted, int mute_locked);
/* Notify observers of a nodes list change. */
void cras_observer_notify_nodes(void);
/* Notify observers of active output node change. */
void cras_observer_notify_active_node(enum CRAS_STREAM_DIRECTION dir,
cras_node_id_t node_id);
/* Notify observers of output node volume change. */
void cras_observer_notify_output_node_volume(cras_node_id_t node_id,
int32_t volume);
/* Notify observers of node left-right swap change. */
void cras_observer_notify_node_left_right_swapped(cras_node_id_t node_id,
int swapped);
/* Notify observers of input node gain change. */
void cras_observer_notify_input_node_gain(cras_node_id_t node_id,
int32_t gain);
/* Notify observers of suspend state changed. */
void cras_observer_notify_suspend_changed(int suspended);
/* Notify observers of the number of active streams. */
void cras_observer_notify_num_active_streams(enum CRAS_STREAM_DIRECTION dir,
uint32_t num_active_streams);
#endif /* CRAS_OBSERVER_H */