/* 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 */