C++程序  |  105行  |  2.59 KB

/* 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_ALSA_MIXER_NAME_H
#define _CRAS_ALSA_MIXER_NAME_H

#include "cras_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Type of mixer control. */
typedef enum mixer_name_type {
	MIXER_NAME_UNDEFINED,
	MIXER_NAME_MAIN_VOLUME,
	MIXER_NAME_VOLUME,
} mixer_name_type;

/* Represents a list of mixer names found in ALSA. */
struct mixer_name {
	const char* name;
	enum CRAS_STREAM_DIRECTION dir;
	mixer_name_type type;
	struct mixer_name *prev, *next;
};

/* Add a name to the list.
 *
 * Args:
 *    names - A list of controls (may be NULL).
 *    name - The name to add.
 *    dir - The direction for this control.
 *    type - The type control being added.
 *
 * Returns:
 *    Returns the new head of the list (which changes only
 *    when names is NULL).
 */
struct mixer_name *mixer_name_add(struct mixer_name *names,
				  const char *name,
				  enum CRAS_STREAM_DIRECTION dir,
				  mixer_name_type type);

/* Add an array of name to the list.
 *
 * Args:
 *    names - A list of controls (may be NULL).
 *    name_array - The names to add.
 *    name_array_size - The size of name_array.
 *    dir - The direction for these controls.
 *    type - The type controls being added.
 *
 * Returns:
 *    Returns the new head of the list (which changes only
 *    when names is NULL).
 */
struct mixer_name *mixer_name_add_array(struct mixer_name *names,
					const char * const *name_array,
					size_t name_array_size,
					enum CRAS_STREAM_DIRECTION dir,
					mixer_name_type type);

/* Frees a list of names.
 *
 * Args:
 *    names - A list of names.
 */
void mixer_name_free(struct mixer_name *names);

/* Find the mixer_name for the given direction, name, and type.
 *
 * Args:
 *    names - A list of names (may be NULL).
 *    name - The name to find, or NULL to match by type.

 *    dir - The direction to match.
 *    type - The type to match, or MIXER_NAME_UNDEFINED to
 *           match by name only.
 *
 * Returns:
 *    Returns a pointer to the matching struct mixer_name or NULL if
 *    not found.
 */
struct mixer_name *mixer_name_find(struct mixer_name *names,
				   const char *name,
				   enum CRAS_STREAM_DIRECTION dir,
				   mixer_name_type type);

/* Dump the list of mixer names to DEBUG logs.
 *
 * Args:
 *    names - A list of names to dump.
 *    message - A message to print beforehand.
 */
void mixer_name_dump(struct mixer_name *names, const char *message);

#ifdef __cplusplus
}
#endif

#endif /* _CRAS_ALSA_MIXER_NAME_H */