ALSA project - the C library reference
|
00001 00010 /* 00011 * 00012 * This library is free software; you can redistribute it and/or modify 00013 * it under the terms of the GNU Lesser General Public License as 00014 * published by the Free Software Foundation; either version 2.1 of 00015 * the License, or (at your option) any later version. 00016 * 00017 * This program is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU Lesser General Public License for more details. 00021 * 00022 * You should have received a copy of the GNU Lesser General Public 00023 * License along with this library; if not, write to the Free Software 00024 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00025 * 00026 * Copyright (C) 2008-2010 SlimLogic Ltd 00027 * Copyright (C) 2010 Wolfson Microelectronics PLC 00028 * Copyright (C) 2010 Texas Instruments Inc. 00029 * 00030 * Support for the verb/device/modifier core logic and API, 00031 * command line tool and file parser was kindly sponsored by 00032 * Texas Instruments Inc. 00033 * Support for multiple active modifiers and devices, 00034 * transition sequences, multiple client access and user defined use 00035 * cases was kindly sponsored by Wolfson Microelectronics PLC. 00036 */ 00037 00038 #ifndef __ALSA_USE_CASE_H 00039 #define __ALSA_USE_CASE_H 00040 00041 #ifdef __cplusplus 00042 extern "C" { 00043 #endif 00044 00091 /* 00092 * Use Case Verb. 00093 * 00094 * The use case verb is the main device audio action. e.g. the "HiFi" use 00095 * case verb will configure the audio hardware for HiFi Music playback 00096 * and capture. 00097 */ 00098 #define SND_USE_CASE_VERB_INACTIVE "Inactive" 00099 #define SND_USE_CASE_VERB_HIFI "HiFi" 00100 #define SND_USE_CASE_VERB_HIFI_LOW_POWER "HiFi Low Power" 00101 #define SND_USE_CASE_VERB_VOICE "Voice" 00102 #define SND_USE_CASE_VERB_VOICE_LOW_POWER "Voice Low Power" 00103 #define SND_USE_CASE_VERB_VOICECALL "Voice Call" 00104 #define SND_USE_CASE_VERB_IP_VOICECALL "Voice Call IP" 00105 #define SND_USE_CASE_VERB_ANALOG_RADIO "FM Analog Radio" 00106 #define SND_USE_CASE_VERB_DIGITAL_RADIO "FM Digital Radio" 00107 /* add new verbs to end of list */ 00108 00109 00110 /* 00111 * Use Case Device. 00112 * 00113 * Physical system devices the render and capture audio. Devices can be OR'ed 00114 * together to support audio on similtanious devices. 00115 */ 00116 #define SND_USE_CASE_DEV_NONE "None" 00117 #define SND_USE_CASE_DEV_SPEAKER "Speaker" 00118 #define SND_USE_CASE_DEV_LINE "Line" 00119 #define SND_USE_CASE_DEV_HEADPHONES "Headphones" 00120 #define SND_USE_CASE_DEV_HEADSET "Headset" 00121 #define SND_USE_CASE_DEV_HANDSET "Handset" 00122 #define SND_USE_CASE_DEV_BLUETOOTH "Bluetooth" 00123 #define SND_USE_CASE_DEV_EARPIECE "Earpiece" 00124 #define SND_USE_CASE_DEV_SPDIF "SPDIF" 00125 #define SND_USE_CASE_DEV_HDMI "HDMI" 00126 /* add new devices to end of list */ 00127 00128 00129 /* 00130 * Use Case Modifiers. 00131 * 00132 * The use case modifier allows runtime configuration changes to deal with 00133 * asynchronous events. 00134 * 00135 * e.g. to record a voice call :- 00136 * 1. Set verb to SND_USE_CASE_VERB_VOICECALL (for voice call) 00137 * 2. Set modifier SND_USE_CASE_MOD_CAPTURE_VOICE when capture required. 00138 * 3. Call snd_use_case_get("_pcm_/_cdevice") to get ALSA source PCM name 00139 * with captured voice pcm data. 00140 * 00141 * e.g. to play a ring tone when listenin to MP3 Music :- 00142 * 1. Set verb to SND_USE_CASE_VERB_HIFI (for MP3 playback) 00143 * 2. Set modifier to SND_USE_CASE_MOD_PLAY_TONE when incoming call happens. 00144 * 3. Call snd_use_case_get("_pcm_/_pdevice") to get ALSA PCM sink name for 00145 * ringtone pcm data. 00146 */ 00147 #define SND_USE_CASE_MOD_CAPTURE_VOICE "Capture Voice" 00148 #define SND_USE_CASE_MOD_CAPTURE_MUSIC "Capture Music" 00149 #define SND_USE_CASE_MOD_PLAY_MUSIC "Play Music" 00150 #define SND_USE_CASE_MOD_PLAY_VOICE "Play Voice" 00151 #define SND_USE_CASE_MOD_PLAY_TONE "Play Tone" 00152 #define SND_USE_CASE_MOD_ECHO_REF "Echo Reference" 00153 /* add new modifiers to end of list */ 00154 00155 00164 #define SND_USE_CASE_TQ_MUSIC "Music" 00165 #define SND_USE_CASE_TQ_VOICE "Voice" 00166 #define SND_USE_CASE_TQ_TONES "Tones" 00167 00169 typedef struct snd_use_case_mgr snd_use_case_mgr_t; 00170 00177 char *snd_use_case_identifier(const char *fmt, ...); 00178 00185 int snd_use_case_free_list(const char *list[], int items); 00186 00208 int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr, 00209 const char *identifier, 00210 const char **list[]); 00211 00212 00240 int snd_use_case_get(snd_use_case_mgr_t *uc_mgr, 00241 const char *identifier, 00242 const char **value); 00243 00255 int snd_use_case_geti(snd_use_case_mgr_t *uc_mgr, 00256 const char *identifier, 00257 long *value); 00258 00281 int snd_use_case_set(snd_use_case_mgr_t *uc_mgr, 00282 const char *identifier, 00283 const char *value); 00284 00291 int snd_use_case_mgr_open(snd_use_case_mgr_t **uc_mgr, const char *card_name); 00292 00293 00299 int snd_use_case_mgr_reload(snd_use_case_mgr_t *uc_mgr); 00300 00306 int snd_use_case_mgr_close(snd_use_case_mgr_t *uc_mgr); 00307 00313 int snd_use_case_mgr_reset(snd_use_case_mgr_t *uc_mgr); 00314 00315 /* 00316 * helper functions 00317 */ 00318 00324 static inline int snd_use_case_card_list(const char **list[]) 00325 { 00326 return snd_use_case_get_list(NULL, NULL, list); 00327 } 00328 00335 static inline int snd_use_case_verb_list(snd_use_case_mgr_t *uc_mgr, 00336 const char **list[]) 00337 { 00338 return snd_use_case_get_list(uc_mgr, "_verbs", list); 00339 } 00340 00345 #ifdef __cplusplus 00346 } 00347 #endif 00348 00349 #endif /* __ALSA_USE_CASE_H */