ALSA project - the C library reference
use-case.h
Go to the documentation of this file.
1 
10 /*
11  *
12  * This library is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU Lesser General Public License as
14  * published by the Free Software Foundation; either version 2.1 of
15  * the License, or (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public
23  * License along with this library; if not, write to the Free Software
24  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25  *
26  * Copyright (C) 2008-2010 SlimLogic Ltd
27  * Copyright (C) 2010 Wolfson Microelectronics PLC
28  * Copyright (C) 2010 Texas Instruments Inc.
29  *
30  * Support for the verb/device/modifier core logic and API,
31  * command line tool and file parser was kindly sponsored by
32  * Texas Instruments Inc.
33  * Support for multiple active modifiers and devices,
34  * transition sequences, multiple client access and user defined use
35  * cases was kindly sponsored by Wolfson Microelectronics PLC.
36  */
37 
38 #ifndef __ALSA_USE_CASE_H
39 #define __ALSA_USE_CASE_H
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #include <alsa/asoundlib.h>
46 
93 /*
94  * Use Case Verb.
95  *
96  * The use case verb is the main device audio action. e.g. the "HiFi" use
97  * case verb will configure the audio hardware for HiFi Music playback
98  * and capture.
99  */
100 #define SND_USE_CASE_VERB_INACTIVE "Inactive"
101 #define SND_USE_CASE_VERB_HIFI "HiFi"
102 #define SND_USE_CASE_VERB_HIFI_LOW_POWER "HiFi Low Power"
103 #define SND_USE_CASE_VERB_VOICE "Voice"
104 #define SND_USE_CASE_VERB_VOICE_LOW_POWER "Voice Low Power"
105 #define SND_USE_CASE_VERB_VOICECALL "Voice Call"
106 #define SND_USE_CASE_VERB_IP_VOICECALL "Voice Call IP"
107 #define SND_USE_CASE_VERB_ANALOG_RADIO "FM Analog Radio"
108 #define SND_USE_CASE_VERB_DIGITAL_RADIO "FM Digital Radio"
109 /* add new verbs to end of list */
110 
111 
112 /*
113  * Use Case Device.
114  *
115  * Physical system devices the render and capture audio. Devices can be OR'ed
116  * together to support audio on simultaneous devices.
117  *
118  * If multiple devices with the same name exists, the number suffixes should
119  * be added to these names like HDMI1,HDMI2,HDMI3 etc. No number gaps are
120  * allowed. The names with numbers must be continuous.
121  *
122  * If EnableSequence/DisableSequence controls independent paths in the hardware
123  * it is also recommended to split playback and capture UCM devices and use
124  * the number suffixes. Example use case: Use the integrated microphone
125  * in the laptop instead the microphone in headphones.
126  *
127  * The preference of the devices is determined by the priority value.
128  */
129 #define SND_USE_CASE_DEV_NONE "None"
130 #define SND_USE_CASE_DEV_SPEAKER "Speaker"
131 #define SND_USE_CASE_DEV_LINE "Line"
132 #define SND_USE_CASE_DEV_MIC "Mic"
133 #define SND_USE_CASE_DEV_HEADPHONES "Headphones"
134 #define SND_USE_CASE_DEV_HEADSET "Headset"
135 #define SND_USE_CASE_DEV_HANDSET "Handset"
136 #define SND_USE_CASE_DEV_BLUETOOTH "Bluetooth"
137 #define SND_USE_CASE_DEV_EARPIECE "Earpiece"
138 #define SND_USE_CASE_DEV_SPDIF "SPDIF"
139 #define SND_USE_CASE_DEV_HDMI "HDMI"
140 /* add new devices to end of list */
141 
142 
143 /*
144  * Use Case Modifiers.
145  *
146  * The use case modifier allows runtime configuration changes to deal with
147  * asynchronous events.
148  *
149  * e.g. to record a voice call :-
150  * 1. Set verb to SND_USE_CASE_VERB_VOICECALL (for voice call)
151  * 2. Set modifier SND_USE_CASE_MOD_CAPTURE_VOICE when capture required.
152  * 3. Call snd_use_case_get("CapturePCM") to get ALSA source PCM name
153  * with captured voice pcm data.
154  *
155  * e.g. to play a ring tone when listenin to MP3 Music :-
156  * 1. Set verb to SND_USE_CASE_VERB_HIFI (for MP3 playback)
157  * 2. Set modifier to SND_USE_CASE_MOD_PLAY_TONE when incoming call happens.
158  * 3. Call snd_use_case_get("PlaybackPCM") to get ALSA PCM sink name for
159  * ringtone pcm data.
160  */
161 #define SND_USE_CASE_MOD_CAPTURE_VOICE "Capture Voice"
162 #define SND_USE_CASE_MOD_CAPTURE_MUSIC "Capture Music"
163 #define SND_USE_CASE_MOD_PLAY_MUSIC "Play Music"
164 #define SND_USE_CASE_MOD_PLAY_VOICE "Play Voice"
165 #define SND_USE_CASE_MOD_PLAY_TONE "Play Tone"
166 #define SND_USE_CASE_MOD_ECHO_REF "Echo Reference"
167 /* add new modifiers to end of list */
168 
169 
178 #define SND_USE_CASE_TQ_MUSIC "Music"
179 #define SND_USE_CASE_TQ_VOICE "Voice"
180 #define SND_USE_CASE_TQ_TONES "Tones"
183 typedef struct snd_use_case_mgr snd_use_case_mgr_t;
184 
191 char *snd_use_case_identifier(const char *fmt, ...);
192 
199 int snd_use_case_free_list(const char *list[], int items);
200 
230  const char *identifier,
231  const char **list[]);
232 
233 
379  const char *identifier,
380  const char **value);
381 
394  const char *identifier,
395  long *value);
396 
420  const char *identifier,
421  const char *value);
422 
446  const char *card_name);
447 
448 
455 
462 
469 
470 /*
471  * helper functions
472  */
473 
479 static __inline__ int snd_use_case_card_list(const char **list[])
480 {
481  return snd_use_case_get_list(NULL, NULL, list);
482 }
483 
490 static __inline__ int snd_use_case_verb_list(snd_use_case_mgr_t *uc_mgr,
491  const char **list[])
492 {
493  return snd_use_case_get_list(uc_mgr, "_verbs", list);
494 }
495 
504  const char *ucm_id,
505  const char *value);
506 
515  const char *ucm_id,
516  const char *value);
517 
522 #ifdef __cplusplus
523 }
524 #endif
525 
526 #endif /* __ALSA_USE_CASE_H */
snd_use_case_mgr_reset
int snd_use_case_mgr_reset(snd_use_case_mgr_t *uc_mgr)
Reset use case manager verb, device, modifier to deafult settings.
Definition: main.c:1058
snd_use_case_parse_ctl_elem_id
int snd_use_case_parse_ctl_elem_id(snd_ctl_elem_id_t *dst, const char *ucm_id, const char *value)
Parse control element identifier.
Definition: main.c:2083
snd_use_case_free_list
int snd_use_case_free_list(const char *list[], int items)
Free a string list.
Definition: main.c:133
snd_use_case_mgr_t
struct snd_use_case_mgr snd_use_case_mgr_t
Definition: use-case.h:183
snd_mixer_selem_id_t
struct _snd_mixer_selem_id snd_mixer_selem_id_t
Definition: mixer.h:219
snd_use_case_identifier
char * snd_use_case_identifier(const char *fmt,...)
Create an identifier.
Definition: main.c:108
snd_ctl_elem_id_t
struct _snd_ctl_elem_id snd_ctl_elem_id_t
Definition: control.h:57
snd_use_case_mgr_reload
int snd_use_case_mgr_reload(snd_use_case_mgr_t *uc_mgr)
Reload and re-parse use case configuration files for sound card.
Definition: main.c:980
snd_use_case_set
int snd_use_case_set(snd_use_case_mgr_t *uc_mgr, const char *identifier, const char *value)
Set new.
Definition: main.c:2032
snd_use_case_geti
int snd_use_case_geti(snd_use_case_mgr_t *uc_mgr, const char *identifier, long *value)
Get current - integer.
Definition: main.c:1770
snd_use_case_parse_selem_id
int snd_use_case_parse_selem_id(snd_mixer_selem_id_t *dst, const char *ucm_id, const char *value)
Parse mixer element identifier.
Definition: main.c:2115
snd_use_case_mgr_close
int snd_use_case_mgr_close(snd_use_case_mgr_t *uc_mgr)
Close use case manager.
Definition: main.c:1005
snd_use_case_get
int snd_use_case_get(snd_use_case_mgr_t *uc_mgr, const char *identifier, const char **value)
Get current - string.
Definition: main.c:1673
snd_use_case_mgr_open
int snd_use_case_mgr_open(snd_use_case_mgr_t **uc_mgr, const char *card_name)
Open and initialise use case core for sound card.
Definition: main.c:935
snd_use_case_get_list
int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr, const char *identifier, const char **list[])
Obtain a list of entries.
Definition: main.c:1501