1 /* $Id$ */
2 /*
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19 #ifndef __PJMEDIA_AUDIODEV_AUDIODEV_ERRNO_H__
20 #define __PJMEDIA_AUDIODEV_AUDIODEV_ERRNO_H__
21 
22 /**
23  * @file errno.h Error Codes
24  * @brief Audiodev specific error codes.
25  */
26 
27 #include <pjmedia-audiodev/config.h>
28 #include <pj/errno.h>
29 
30 /**
31  * @defgroup error_codes Error Codes
32  * @ingroup audio_device_api
33  * @brief Audio devive library specific error codes.
34  * @{
35  */
36 
37 
38 PJ_BEGIN_DECL
39 
40 
41 /**
42  * Start of error code relative to PJ_ERRNO_START_USER.
43  * This value is 420000.
44  */
45 #define PJMEDIA_AUDIODEV_ERRNO_START \
46 	    (PJ_ERRNO_START_USER + PJ_ERRNO_SPACE_SIZE*5)
47 #define PJMEDIA_AUDIODEV_ERRNO_END   \
48 	    (PJMEDIA_AUDIODEV_ERRNO_START + PJ_ERRNO_SPACE_SIZE - 1)
49 
50 
51 /**
52  * Mapping from PortAudio error codes to pjmedia error space.
53  */
54 #define PJMEDIA_AUDIODEV_PORTAUDIO_ERRNO_START \
55 	    (PJMEDIA_AUDIODEV_ERRNO_END-10000)
56 #define PJMEDIA_AUDIODEV_PORTAUDIO_ERRNO_END   \
57 	    (PJMEDIA_AUDIODEV_PORTAUDIO_ERRNO_START + 10000 -1)
58 /**
59  * Convert PortAudio error code to PJLIB error code.
60  * PortAudio error code range: 0 >= err >= -10000
61  */
62 #define PJMEDIA_AUDIODEV_ERRNO_FROM_PORTAUDIO(err) \
63 	    ((int)PJMEDIA_AUDIODEV_PORTAUDIO_ERRNO_START-err)
64 
65 /**
66  * Mapping from Windows multimedia WaveIn error codes.
67  */
68 #define PJMEDIA_AUDIODEV_WMME_IN_ERROR_START	\
69 	    (PJMEDIA_AUDIODEV_ERRNO_START + 30000)
70 #define PJMEDIA_AUDIODEV_WMME_IN_ERROR_END	\
71 	    (PJMEDIA_AUDIODEV_WMME_IN_ERROR_START + 1000 - 1)
72 /**
73  * Convert WaveIn operation error codes to PJLIB error space.
74  */
75 #define PJMEDIA_AUDIODEV_ERRNO_FROM_WMME_IN(err) \
76 	    ((int)PJMEDIA_AUDIODEV_WMME_IN_ERROR_START+err)
77 
78 
79 /**
80  * Mapping from Windows multimedia WaveOut error codes.
81  */
82 #define PJMEDIA_AUDIODEV_WMME_OUT_ERROR_START	\
83 	    (PJMEDIA_AUDIODEV_WMME_IN_ERROR_END + 1000)
84 #define PJMEDIA_AUDIODEV_WMME_OUT_ERROR_END	\
85 	    (PJMEDIA_AUDIODEV_WMME_OUT_ERROR_START + 1000)
86 /**
87  * Convert WaveOut operation error codes to PJLIB error space.
88  */
89 #define PJMEDIA_AUDIODEV_ERRNO_FROM_WMME_OUT(err) \
90 	    ((int)PJMEDIA_AUDIODEV_WMME_OUT_ERROR_START+err)
91 
92 
93 /**
94  * Mapping from CoreAudio error codes to pjmedia error space.
95  */
96 #define PJMEDIA_AUDIODEV_COREAUDIO_ERRNO_START \
97 	    (PJMEDIA_AUDIODEV_ERRNO_START+20000)
98 #define PJMEDIA_AUDIODEV_COREAUDIO_ERRNO_END   \
99 	    (PJMEDIA_AUDIODEV_COREAUDIO_ERRNO_START + 20000 -1)
100 /**
101  * Convert CoreAudio error code to PJLIB error code.
102  * CoreAudio error code range: 0 >= err >= -10000
103  */
104 #define PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(err) \
105 	    ((int)PJMEDIA_AUDIODEV_COREAUDIO_ERRNO_START-err)
106 
107 /**
108  * Mapping from BDIMAD error codes to pjmedia error space.
109  */
110 #define PJMEDIA_AUDIODEV_BDIMAD_ERROR_START	\
111 	    (PJMEDIA_AUDIODEV_ERRNO_START + 40000)
112 #define PJMEDIA_AUDIODEV_BDIMAD_ERROR_END	\
113 	    (PJMEDIA_AUDIODEV_BDIMAD_ERROR_START + 2000 - 1)
114 /**
115  * Convert BDIMAD error codes to PJLIB error space.
116  */
117 #define PJMEDIA_AUDIODEV_ERRNO_FROM_BDIMAD(err) \
118 	    ((int)PJMEDIA_AUDIODEV_BDIMAD_ERROR_START+err)
119 
120 /************************************************************
121  * Audio Device API error codes
122  ***********************************************************/
123 /**
124  * @hideinitializer
125  * General/unknown error.
126  */
127 #define PJMEDIA_EAUD_ERR	(PJMEDIA_AUDIODEV_ERRNO_START+1) /* 420001 */
128 
129 /**
130  * @hideinitializer
131  * Unknown error from audio driver
132  */
133 #define PJMEDIA_EAUD_SYSERR	(PJMEDIA_AUDIODEV_ERRNO_START+2) /* 420002 */
134 
135 /**
136  * @hideinitializer
137  * Audio subsystem not initialized
138  */
139 #define PJMEDIA_EAUD_INIT	(PJMEDIA_AUDIODEV_ERRNO_START+3) /* 420003 */
140 
141 /**
142  * @hideinitializer
143  * Invalid audio device
144  */
145 #define PJMEDIA_EAUD_INVDEV	(PJMEDIA_AUDIODEV_ERRNO_START+4) /* 420004 */
146 
147 /**
148  * @hideinitializer
149  * Found no devices
150  */
151 #define PJMEDIA_EAUD_NODEV	(PJMEDIA_AUDIODEV_ERRNO_START+5) /* 420005 */
152 
153 /**
154  * @hideinitializer
155  * Unable to find default device
156  */
157 #define PJMEDIA_EAUD_NODEFDEV	(PJMEDIA_AUDIODEV_ERRNO_START+6) /* 420006 */
158 
159 /**
160  * @hideinitializer
161  * Device not ready
162  */
163 #define PJMEDIA_EAUD_NOTREADY	(PJMEDIA_AUDIODEV_ERRNO_START+7) /* 420007 */
164 
165 /**
166  * @hideinitializer
167  * The audio capability is invalid or not supported
168  */
169 #define PJMEDIA_EAUD_INVCAP	(PJMEDIA_AUDIODEV_ERRNO_START+8) /* 420008 */
170 
171 /**
172  * @hideinitializer
173  * The operation is invalid or not supported
174  */
175 #define PJMEDIA_EAUD_INVOP	(PJMEDIA_AUDIODEV_ERRNO_START+9) /* 420009 */
176 
177 /**
178  * @hideinitializer
179  * Bad or invalid audio device format
180  */
181 #define PJMEDIA_EAUD_BADFORMAT	(PJMEDIA_AUDIODEV_ERRNO_START+10) /* 4200010 */
182 
183 /**
184  * @hideinitializer
185  * Invalid audio device sample format
186  */
187 #define PJMEDIA_EAUD_SAMPFORMAT	(PJMEDIA_AUDIODEV_ERRNO_START+11) /* 4200011 */
188 
189 /**
190  * @hideinitializer
191  * Bad latency setting
192  */
193 #define PJMEDIA_EAUD_BADLATENCY	(PJMEDIA_AUDIODEV_ERRNO_START+12) /* 4200012 */
194 
195  /**
196   * @hideinitializer
197   * General WASAPI error
198   */
199 #define PJMEDIA_EAUD_WASAPI_ERROR \
200 				(PJMEDIA_AUDIODEV_ERRNO_START+13) /* 4200013 */
201 
202 /**
203  * Get error message for the specified error code. Note that this
204  * function is only able to decode PJMEDIA Audiodev specific error code.
205  * Application should use pj_strerror(), which should be able to
206  * decode all error codes belonging to all subsystems (e.g. pjlib,
207  * pjmedia, pjsip, etc).
208  *
209  * @param status    The error code.
210  * @param buffer    The buffer where to put the error message.
211  * @param bufsize   Size of the buffer.
212  *
213  * @return	    The error message as NULL terminated string,
214  *                  wrapped with pj_str_t.
215  */
216 PJ_DECL(pj_str_t) pjmedia_audiodev_strerror(pj_status_t status, char *buffer,
217 					    pj_size_t bufsize);
218 
219 
220 PJ_END_DECL
221 
222 /**
223  * @}
224  */
225 
226 
227 #endif	/* __PJMEDIA_AUDIODEV_AUDIODEV_ERRNO_H__ */
228 
229