root / lab4 / .minix-src / include / sys / audioio.h @ 14
History | View | Annotate | Download (10.4 KB)
1 |
/* $NetBSD: audioio.h,v 1.34 2011/09/06 01:16:43 jmcneill Exp $ */
|
---|---|
2 |
|
3 |
/*
|
4 |
* Copyright (c) 1991-1993 Regents of the University of California.
|
5 |
* All rights reserved.
|
6 |
*
|
7 |
* Redistribution and use in source and binary forms, with or without
|
8 |
* modification, are permitted provided that the following conditions
|
9 |
* are met:
|
10 |
* 1. Redistributions of source code must retain the above copyright
|
11 |
* notice, this list of conditions and the following disclaimer.
|
12 |
* 2. Redistributions in binary form must reproduce the above copyright
|
13 |
* notice, this list of conditions and the following disclaimer in the
|
14 |
* documentation and/or other materials provided with the distribution.
|
15 |
* 3. All advertising materials mentioning features or use of this software
|
16 |
* must display the following acknowledgement:
|
17 |
* This product includes software developed by the Computer Systems
|
18 |
* Engineering Group at Lawrence Berkeley Laboratory.
|
19 |
* 4. Neither the name of the University nor of the Laboratory may be used
|
20 |
* to endorse or promote products derived from this software without
|
21 |
* specific prior written permission.
|
22 |
*
|
23 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
24 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
25 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
26 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
27 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
28 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
29 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
31 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
32 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
33 |
* SUCH DAMAGE.
|
34 |
*
|
35 |
*/
|
36 |
|
37 |
#ifndef _SYS_AUDIOIO_H_
|
38 |
#define _SYS_AUDIOIO_H_
|
39 |
|
40 |
#include <sys/types.h> |
41 |
#include <sys/ioccom.h> |
42 |
|
43 |
#ifndef _KERNEL
|
44 |
#include <string.h> /* Required for memset(3) prototype (AUDIO_INITINFO) */ |
45 |
#endif /* _KERNEL */ |
46 |
|
47 |
/*
|
48 |
* Audio device
|
49 |
*/
|
50 |
struct audio_prinfo {
|
51 |
u_int sample_rate; /* sample rate in bit/s */
|
52 |
u_int channels; /* number of channels, usually 1 or 2 */
|
53 |
u_int precision; /* number of bits/sample */
|
54 |
u_int encoding; /* data encoding (AUDIO_ENCODING_* below) */
|
55 |
u_int gain; /* volume level */
|
56 |
u_int port; /* selected I/O port */
|
57 |
u_int seek; /* BSD extension */
|
58 |
u_int avail_ports; /* available I/O ports */
|
59 |
u_int buffer_size; /* total size audio buffer */
|
60 |
u_int _ispare[1];
|
61 |
/* Current state of device: */
|
62 |
u_int samples; /* number of samples */
|
63 |
u_int eof; /* End Of File (zero-size writes) counter */
|
64 |
u_char pause; /* non-zero if paused, zero to resume */
|
65 |
u_char error; /* non-zero if underflow/overflow ocurred */
|
66 |
u_char waiting; /* non-zero if another process hangs in open */
|
67 |
u_char balance; /* stereo channel balance */
|
68 |
u_char cspare[2];
|
69 |
u_char open; /* non-zero if currently open */
|
70 |
u_char active; /* non-zero if I/O is currently active */
|
71 |
}; |
72 |
typedef struct audio_prinfo audio_prinfo_t; |
73 |
|
74 |
struct audio_info {
|
75 |
struct audio_prinfo play; /* Info for play (output) side */ |
76 |
struct audio_prinfo record; /* Info for record (input) side */ |
77 |
|
78 |
u_int monitor_gain; /* input to output mix */
|
79 |
/* BSD extensions */
|
80 |
u_int blocksize; /* H/W read/write block size */
|
81 |
u_int hiwat; /* output high water mark */
|
82 |
u_int lowat; /* output low water mark */
|
83 |
u_int _ispare1; |
84 |
u_int mode; /* current device mode */
|
85 |
#define AUMODE_PLAY 0x01 |
86 |
#define AUMODE_RECORD 0x02 |
87 |
#define AUMODE_PLAY_ALL 0x04 /* don't do real-time correction */ |
88 |
}; |
89 |
typedef struct audio_info audio_info_t; |
90 |
|
91 |
#define AUDIO_INITINFO(p) \
|
92 |
(void)memset((void *)(p), 0xff, sizeof(struct audio_info)) |
93 |
|
94 |
/*
|
95 |
* Parameter for the AUDIO_GETDEV ioctl to determine current
|
96 |
* audio devices.
|
97 |
*/
|
98 |
#define MAX_AUDIO_DEV_LEN 16 |
99 |
typedef struct audio_device { |
100 |
char name[MAX_AUDIO_DEV_LEN];
|
101 |
char version[MAX_AUDIO_DEV_LEN];
|
102 |
char config[MAX_AUDIO_DEV_LEN];
|
103 |
} audio_device_t; |
104 |
|
105 |
typedef struct audio_offset { |
106 |
u_int samples; /* Total number of bytes transferred */
|
107 |
u_int deltablks; /* Blocks transferred since last checked */
|
108 |
u_int offset; /* Physical transfer offset in buffer */
|
109 |
} audio_offset_t; |
110 |
|
111 |
/*
|
112 |
* Supported audio encodings
|
113 |
*/
|
114 |
/* Encoding ID's */
|
115 |
#define AUDIO_ENCODING_NONE 0 /* no encoding assigned */ |
116 |
#define AUDIO_ENCODING_ULAW 1 /* ITU G.711 mu-law */ |
117 |
#define AUDIO_ENCODING_ALAW 2 /* ITU G.711 A-law */ |
118 |
#define AUDIO_ENCODING_PCM16 3 /* signed linear PCM, obsolete */ |
119 |
#define AUDIO_ENCODING_LINEAR AUDIO_ENCODING_PCM16 /* SunOS compat */ |
120 |
#define AUDIO_ENCODING_PCM8 4 /* unsigned linear PCM, obsolete */ |
121 |
#define AUDIO_ENCODING_LINEAR8 AUDIO_ENCODING_PCM8 /* SunOS compat */ |
122 |
#define AUDIO_ENCODING_ADPCM 5 /* adaptive differential PCM */ |
123 |
#define AUDIO_ENCODING_SLINEAR_LE 6 |
124 |
#define AUDIO_ENCODING_SLINEAR_BE 7 |
125 |
#define AUDIO_ENCODING_ULINEAR_LE 8 |
126 |
#define AUDIO_ENCODING_ULINEAR_BE 9 |
127 |
#define AUDIO_ENCODING_SLINEAR 10 |
128 |
#define AUDIO_ENCODING_ULINEAR 11 |
129 |
#define AUDIO_ENCODING_MPEG_L1_STREAM 12 |
130 |
#define AUDIO_ENCODING_MPEG_L1_PACKETS 13 |
131 |
#define AUDIO_ENCODING_MPEG_L1_SYSTEM 14 |
132 |
#define AUDIO_ENCODING_MPEG_L2_STREAM 15 |
133 |
#define AUDIO_ENCODING_MPEG_L2_PACKETS 16 |
134 |
#define AUDIO_ENCODING_MPEG_L2_SYSTEM 17 |
135 |
#define AUDIO_ENCODING_AC3 18 |
136 |
|
137 |
typedef struct audio_encoding { |
138 |
int index;
|
139 |
char name[MAX_AUDIO_DEV_LEN];
|
140 |
int encoding;
|
141 |
int precision;
|
142 |
int flags;
|
143 |
#define AUDIO_ENCODINGFLAG_EMULATED 1 /* software emulation mode */ |
144 |
} audio_encoding_t; |
145 |
|
146 |
/*
|
147 |
* Balance settings.
|
148 |
*/
|
149 |
#define AUDIO_LEFT_BALANCE 0 /* left channel only */ |
150 |
#define AUDIO_MID_BALANCE 32 /* equal left/right channel */ |
151 |
#define AUDIO_RIGHT_BALANCE 64 /* right channel only */ |
152 |
#define AUDIO_BALANCE_SHIFT 3 |
153 |
|
154 |
/*
|
155 |
* Output ports
|
156 |
*/
|
157 |
#define AUDIO_SPEAKER 0x01 /* built-in speaker */ |
158 |
#define AUDIO_HEADPHONE 0x02 /* headphone jack */ |
159 |
#define AUDIO_LINE_OUT 0x04 /* line out */ |
160 |
|
161 |
/*
|
162 |
* Input ports
|
163 |
*/
|
164 |
#define AUDIO_MICROPHONE 0x01 /* microphone */ |
165 |
#define AUDIO_LINE_IN 0x02 /* line in */ |
166 |
#define AUDIO_CD 0x04 /* on-board CD inputs */ |
167 |
#define AUDIO_INTERNAL_CD_IN AUDIO_CD /* internal CDROM */ |
168 |
|
169 |
/*
|
170 |
* Audio device operations
|
171 |
*/
|
172 |
#define AUDIO_GETINFO _IOR('A', 21, struct audio_info) |
173 |
#define AUDIO_SETINFO _IOWR('A', 22, struct audio_info) |
174 |
#define AUDIO_DRAIN _IO('A', 23) |
175 |
#define AUDIO_FLUSH _IO('A', 24) |
176 |
#define AUDIO_WSEEK _IOR('A', 25, u_long) |
177 |
#define AUDIO_RERROR _IOR('A', 26, int) |
178 |
#define AUDIO_GETDEV _IOR('A', 27, struct audio_device) |
179 |
#define AUDIO_GETENC _IOWR('A', 28, struct audio_encoding) |
180 |
#define AUDIO_GETFD _IOR('A', 29, int) |
181 |
#define AUDIO_SETFD _IOWR('A', 30, int) |
182 |
#define AUDIO_PERROR _IOR('A', 31, int) |
183 |
#define AUDIO_GETIOFFS _IOR('A', 32, struct audio_offset) |
184 |
#define AUDIO_GETOOFFS _IOR('A', 33, struct audio_offset) |
185 |
#define AUDIO_GETPROPS _IOR('A', 34, int) |
186 |
#define AUDIO_PROP_FULLDUPLEX 0x01 |
187 |
#define AUDIO_PROP_MMAP 0x02 |
188 |
#define AUDIO_PROP_INDEPENDENT 0x04 |
189 |
#define AUDIO_PROP_PLAYBACK 0x10 |
190 |
#define AUDIO_PROP_CAPTURE 0x20 |
191 |
#define AUDIO_GETBUFINFO _IOR('A', 35, struct audio_info) |
192 |
|
193 |
/*
|
194 |
* Mixer device
|
195 |
*/
|
196 |
#define AUDIO_MIN_GAIN 0 |
197 |
#define AUDIO_MAX_GAIN 255 |
198 |
|
199 |
typedef struct mixer_level { |
200 |
int num_channels;
|
201 |
u_char level[8]; /* [num_channels] */ |
202 |
} mixer_level_t; |
203 |
#define AUDIO_MIXER_LEVEL_MONO 0 |
204 |
#define AUDIO_MIXER_LEVEL_LEFT 0 |
205 |
#define AUDIO_MIXER_LEVEL_RIGHT 1 |
206 |
|
207 |
/*
|
208 |
* Device operations
|
209 |
*/
|
210 |
|
211 |
typedef struct audio_mixer_name { |
212 |
char name[MAX_AUDIO_DEV_LEN];
|
213 |
int msg_id;
|
214 |
} audio_mixer_name_t; |
215 |
|
216 |
typedef struct mixer_devinfo { |
217 |
int index;
|
218 |
audio_mixer_name_t label; |
219 |
int type;
|
220 |
#define AUDIO_MIXER_CLASS 0 |
221 |
#define AUDIO_MIXER_ENUM 1 |
222 |
#define AUDIO_MIXER_SET 2 |
223 |
#define AUDIO_MIXER_VALUE 3 |
224 |
int mixer_class;
|
225 |
int next, prev;
|
226 |
#define AUDIO_MIXER_LAST -1 |
227 |
union {
|
228 |
struct audio_mixer_enum {
|
229 |
int num_mem;
|
230 |
struct {
|
231 |
audio_mixer_name_t label; |
232 |
int ord;
|
233 |
} member[32];
|
234 |
} e; |
235 |
struct audio_mixer_set {
|
236 |
int num_mem;
|
237 |
struct {
|
238 |
audio_mixer_name_t label; |
239 |
int mask;
|
240 |
} member[32];
|
241 |
} s; |
242 |
struct audio_mixer_value {
|
243 |
audio_mixer_name_t units; |
244 |
int num_channels;
|
245 |
int delta;
|
246 |
} v; |
247 |
} un; |
248 |
} mixer_devinfo_t; |
249 |
|
250 |
|
251 |
typedef struct mixer_ctrl { |
252 |
int dev;
|
253 |
int type;
|
254 |
union {
|
255 |
int ord; /* enum */ |
256 |
int mask; /* set */ |
257 |
mixer_level_t value; /* value */
|
258 |
} un; |
259 |
} mixer_ctrl_t; |
260 |
|
261 |
/*
|
262 |
* Mixer operations
|
263 |
*/
|
264 |
#define AUDIO_MIXER_READ _IOWR('M', 0, mixer_ctrl_t) |
265 |
#define AUDIO_MIXER_WRITE _IOWR('M', 1, mixer_ctrl_t) |
266 |
#define AUDIO_MIXER_DEVINFO _IOWR('M', 2, mixer_devinfo_t) |
267 |
|
268 |
/*
|
269 |
* Well known device names
|
270 |
*/
|
271 |
#define AudioNmicrophone "mic" |
272 |
#define AudioNline "line" |
273 |
#define AudioNcd "cd" |
274 |
#define AudioNdac "dac" |
275 |
#define AudioNaux "aux" |
276 |
#define AudioNrecord "record" |
277 |
#define AudioNvolume "volume" |
278 |
#define AudioNmonitor "monitor" |
279 |
#define AudioNtreble "treble" |
280 |
#define AudioNmid "mid" |
281 |
#define AudioNbass "bass" |
282 |
#define AudioNbassboost "bassboost" |
283 |
#define AudioNspeaker "speaker" |
284 |
#define AudioNheadphone "headphones" |
285 |
#define AudioNoutput "output" |
286 |
#define AudioNinput "input" |
287 |
#define AudioNmaster "master" |
288 |
#define AudioNstereo "stereo" |
289 |
#define AudioNmono "mono" |
290 |
#define AudioNloudness "loudness" |
291 |
#define AudioNspatial "spatial" |
292 |
#define AudioNsurround "surround" |
293 |
#define AudioNpseudo "pseudo" |
294 |
#define AudioNmute "mute" |
295 |
#define AudioNenhanced "enhanced" |
296 |
#define AudioNpreamp "preamp" |
297 |
#define AudioNon "on" |
298 |
#define AudioNoff "off" |
299 |
#define AudioNmode "mode" |
300 |
#define AudioNsource "source" |
301 |
#define AudioNfmsynth "fmsynth" |
302 |
#define AudioNwave "wave" |
303 |
#define AudioNmidi "midi" |
304 |
#define AudioNmixerout "mixerout" |
305 |
#define AudioNswap "swap" /* swap left and right channels */ |
306 |
#define AudioNagc "agc" |
307 |
#define AudioNdelay "delay" |
308 |
#define AudioNselect "select" /* select destination */ |
309 |
#define AudioNvideo "video" |
310 |
#define AudioNcenter "center" |
311 |
#define AudioNdepth "depth" |
312 |
#define AudioNlfe "lfe" |
313 |
|
314 |
#define AudioEmulaw "mulaw" |
315 |
#define AudioEalaw "alaw" |
316 |
#define AudioEadpcm "adpcm" |
317 |
#define AudioEslinear "slinear" |
318 |
#define AudioEslinear_le "slinear_le" |
319 |
#define AudioEslinear_be "slinear_be" |
320 |
#define AudioEulinear "ulinear" |
321 |
#define AudioEulinear_le "ulinear_le" |
322 |
#define AudioEulinear_be "ulinear_be" |
323 |
#define AudioEmpeg_l1_stream "mpeg_l1_stream" |
324 |
#define AudioEmpeg_l1_packets "mpeg_l1_packets" |
325 |
#define AudioEmpeg_l1_system "mpeg_l1_system" |
326 |
#define AudioEmpeg_l2_stream "mpeg_l2_stream" |
327 |
#define AudioEmpeg_l2_packets "mpeg_l2_packets" |
328 |
#define AudioEmpeg_l2_system "mpeg_l2_system" |
329 |
#define AudioEac3 "ac3" |
330 |
|
331 |
#define AudioCinputs "inputs" |
332 |
#define AudioCoutputs "outputs" |
333 |
#define AudioCrecord "record" |
334 |
#define AudioCmonitor "monitor" |
335 |
#define AudioCequalization "equalization" |
336 |
#define AudioCmodem "modem" |
337 |
|
338 |
#endif /* !_SYS_AUDIOIO_H_ */ |