blob: 8c69c28c5513c36876a7cd8926ec067552c7f0c9 [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/****************************************************************************
2 ****************************************************************************
3 ***
4 *** This header was automatically generated from a Linux kernel header
5 *** of the same name, to make information necessary for userspace to
6 *** call into the kernel available to libc. It contains only constants,
7 *** structures, and macros generated from the original header, and thus,
8 *** contains no copyrightable information.
9 ***
10 ****************************************************************************
11 ****************************************************************************/
12#ifndef SOUNDCARD_H
13#define SOUNDCARD_H
Ben Cheng4b29af02012-03-07 16:14:53 -080014
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080015#define SOUND_VERSION 0x030802
16#define OPEN_SOUND_SYSTEM
Ben Cheng4b29af02012-03-07 16:14:53 -080017
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080018#include <linux/ioctl.h>
Ben Cheng4b29af02012-03-07 16:14:53 -080019
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080020#include <endian.h>
Ben Cheng4b29af02012-03-07 16:14:53 -080021
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080022#define SNDCARD_ADLIB 1
23#define SNDCARD_SB 2
24#define SNDCARD_PAS 3
25#define SNDCARD_GUS 4
26#define SNDCARD_MPU401 5
27#define SNDCARD_SB16 6
28#define SNDCARD_SB16MIDI 7
29#define SNDCARD_UART6850 8
30#define SNDCARD_GUS16 9
31#define SNDCARD_MSS 10
32#define SNDCARD_PSS 11
33#define SNDCARD_SSCAPE 12
34#define SNDCARD_PSS_MPU 13
35#define SNDCARD_PSS_MSS 14
36#define SNDCARD_SSCAPE_MSS 15
37#define SNDCARD_TRXPRO 16
38#define SNDCARD_TRXPRO_SB 17
39#define SNDCARD_TRXPRO_MPU 18
40#define SNDCARD_MAD16 19
41#define SNDCARD_MAD16_MPU 20
42#define SNDCARD_CS4232 21
43#define SNDCARD_CS4232_MPU 22
44#define SNDCARD_MAUI 23
45#define SNDCARD_PSEUDO_MSS 24
46#define SNDCARD_GUSPNP 25
47#define SNDCARD_UART401 26
Ben Cheng4b29af02012-03-07 16:14:53 -080048
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080049#ifndef _SIOWR
50#if defined(_IOWR) && (defined(_AIX) || !defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))
Ben Cheng4b29af02012-03-07 16:14:53 -080051
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080052#define SIOCPARM_MASK IOCPARM_MASK
53#define SIOC_VOID IOC_VOID
54#define SIOC_OUT IOC_OUT
55#define SIOC_IN IOC_IN
56#define SIOC_INOUT IOC_INOUT
57#define _SIOC_SIZE _IOC_SIZE
58#define _SIOC_DIR _IOC_DIR
59#define _SIOC_NONE _IOC_NONE
60#define _SIOC_READ _IOC_READ
61#define _SIOC_WRITE _IOC_WRITE
62#define _SIO _IO
63#define _SIOR _IOR
64#define _SIOW _IOW
65#define _SIOWR _IOWR
66#else
Ben Cheng4b29af02012-03-07 16:14:53 -080067
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080068#define SIOCPARM_MASK 0x1fff
69#define SIOC_VOID 0x00000000
70#define SIOC_OUT 0x20000000
71#define SIOC_IN 0x40000000
72#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
Ben Cheng4b29af02012-03-07 16:14:53 -080073
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080074#define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
75#define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
76#define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
Ben Cheng4b29af02012-03-07 16:14:53 -080077
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080078#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
79#define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
80#define _SIOC_DIR(x) (x & 0xf0000000)
81#define _SIOC_NONE SIOC_VOID
82#define _SIOC_READ SIOC_OUT
83#define _SIOC_WRITE SIOC_IN
84#endif
85#endif
Ben Cheng4b29af02012-03-07 16:14:53 -080086
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080087#define SNDCTL_SEQ_RESET _SIO ('Q', 0)
88#define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
89#define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
90#define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int)
91#define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
92#define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
93#define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
94#define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument)
95#define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
96#define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
97#define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
98#define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
99#define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
100#define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
101#define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int)
102#define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int)
103#define SNDCTL_SEQ_PANIC _SIO ('Q',17)
104#define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
105#define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
106#define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
107#define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
108#define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
Ben Cheng4b29af02012-03-07 16:14:53 -0800109
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800110typedef struct synth_control
111{
112 int devno;
113 char data[4000];
114}synth_control;
Ben Cheng4b29af02012-03-07 16:14:53 -0800115
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800116typedef struct remove_sample
117{
118 int devno;
119 int bankno;
120 int instrno;
121} remove_sample;
Ben Cheng4b29af02012-03-07 16:14:53 -0800122
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800123typedef struct seq_event_rec {
124 unsigned char arr[8];
125} seq_event_rec;
Ben Cheng4b29af02012-03-07 16:14:53 -0800126
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800127#define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
128#define SNDCTL_TMR_START _SIO ('T', 2)
129#define SNDCTL_TMR_STOP _SIO ('T', 3)
130#define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
131#define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
132#define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
133#define TMR_INTERNAL 0x00000001
134#define TMR_EXTERNAL 0x00000002
135#define TMR_MODE_MIDI 0x00000010
136#define TMR_MODE_FSK 0x00000020
137#define TMR_MODE_CLS 0x00000040
138#define TMR_MODE_SMPTE 0x00000080
139#define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
140#define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800141
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800142#define _LINUX_PATCHKEY_H_INDIRECT
143#include <linux/patchkey.h>
144#undef _LINUX_PATCHKEY_H_INDIRECT
Ben Cheng4b29af02012-03-07 16:14:53 -0800145
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800146#ifdef __BYTE_ORDER
147#if __BYTE_ORDER == __BIG_ENDIAN
148#define AFMT_S16_NE AFMT_S16_BE
149#elif __BYTE_ORDER == __LITTLE_ENDIAN
150#define AFMT_S16_NE AFMT_S16_LE
151#else
152#error "could not determine byte order"
153#endif
154#endif
Ben Cheng4b29af02012-03-07 16:14:53 -0800155
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800156struct patch_info {
157 unsigned short key;
158#define WAVE_PATCH _PATCHKEY(0x04)
159#define GUS_PATCH WAVE_PATCH
160#define WAVEFRONT_PATCH _PATCHKEY(0x06)
Ben Cheng4b29af02012-03-07 16:14:53 -0800161
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800162 short device_no;
163 short instr_no;
Ben Cheng4b29af02012-03-07 16:14:53 -0800164
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800165 unsigned int mode;
Ben Cheng4b29af02012-03-07 16:14:53 -0800166
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800167#define WAVE_16_BITS 0x01
168#define WAVE_UNSIGNED 0x02
169#define WAVE_LOOPING 0x04
170#define WAVE_BIDIR_LOOP 0x08
171#define WAVE_LOOP_BACK 0x10
172#define WAVE_SUSTAIN_ON 0x20
173#define WAVE_ENVELOPES 0x40
174#define WAVE_FAST_RELEASE 0x80
Ben Cheng4b29af02012-03-07 16:14:53 -0800175
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800176#define WAVE_VIBRATO 0x00010000
177#define WAVE_TREMOLO 0x00020000
178#define WAVE_SCALE 0x00040000
179#define WAVE_FRACTIONS 0x00080000
Ben Cheng4b29af02012-03-07 16:14:53 -0800180
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800181#define WAVE_ROM 0x40000000
182#define WAVE_MULAW 0x20000000
Ben Cheng4b29af02012-03-07 16:14:53 -0800183
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800184 int len;
185 int loop_start, loop_end;
Ben Cheng4b29af02012-03-07 16:14:53 -0800186
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800187 unsigned int base_freq;
188 unsigned int base_note;
189 unsigned int high_note;
190 unsigned int low_note;
191 int panning;
192 int detuning;
Ben Cheng4b29af02012-03-07 16:14:53 -0800193
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800194 unsigned char env_rate[ 6 ];
195 unsigned char env_offset[ 6 ];
Ben Cheng4b29af02012-03-07 16:14:53 -0800196
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800197 unsigned char tremolo_sweep;
198 unsigned char tremolo_rate;
199 unsigned char tremolo_depth;
Ben Cheng4b29af02012-03-07 16:14:53 -0800200
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800201 unsigned char vibrato_sweep;
202 unsigned char vibrato_rate;
203 unsigned char vibrato_depth;
Ben Cheng4b29af02012-03-07 16:14:53 -0800204
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800205 int scale_frequency;
206 unsigned int scale_factor;
Ben Cheng4b29af02012-03-07 16:14:53 -0800207
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800208 int volume;
209 int fractions;
210 int reserved1;
211 int spare[2];
212 char data[1];
213 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800214
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800215struct sysex_info {
216 short key;
217#define SYSEX_PATCH _PATCHKEY(0x05)
218#define MAUI_PATCH _PATCHKEY(0x06)
219 short device_no;
220 int len;
221 unsigned char data[1];
222 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800223
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800224#define SEQ_NOTEOFF 0
225#define SEQ_FMNOTEOFF SEQ_NOTEOFF
226#define SEQ_NOTEON 1
227#define SEQ_FMNOTEON SEQ_NOTEON
228#define SEQ_WAIT TMR_WAIT_ABS
229#define SEQ_PGMCHANGE 3
230#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
231#define SEQ_SYNCTIMER TMR_START
232#define SEQ_MIDIPUTC 5
233#define SEQ_DRUMON 6
234#define SEQ_DRUMOFF 7
235#define SEQ_ECHO TMR_ECHO
236#define SEQ_AFTERTOUCH 9
237#define SEQ_CONTROLLER 10
Ben Cheng4b29af02012-03-07 16:14:53 -0800238
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800239#define CTL_BANK_SELECT 0x00
240#define CTL_MODWHEEL 0x01
241#define CTL_BREATH 0x02
Ben Cheng4b29af02012-03-07 16:14:53 -0800242
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800243#define CTL_FOOT 0x04
244#define CTL_PORTAMENTO_TIME 0x05
245#define CTL_DATA_ENTRY 0x06
246#define CTL_MAIN_VOLUME 0x07
247#define CTL_BALANCE 0x08
Ben Cheng4b29af02012-03-07 16:14:53 -0800248
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800249#define CTL_PAN 0x0a
250#define CTL_EXPRESSION 0x0b
Ben Cheng4b29af02012-03-07 16:14:53 -0800251
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800252#define CTL_GENERAL_PURPOSE1 0x10
253#define CTL_GENERAL_PURPOSE2 0x11
254#define CTL_GENERAL_PURPOSE3 0x12
255#define CTL_GENERAL_PURPOSE4 0x13
Ben Cheng4b29af02012-03-07 16:14:53 -0800256
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800257#define CTL_DAMPER_PEDAL 0x40
258#define CTL_SUSTAIN 0x40
259#define CTL_HOLD 0x40
260#define CTL_PORTAMENTO 0x41
261#define CTL_SOSTENUTO 0x42
262#define CTL_SOFT_PEDAL 0x43
Ben Cheng4b29af02012-03-07 16:14:53 -0800263
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800264#define CTL_HOLD2 0x45
Ben Cheng4b29af02012-03-07 16:14:53 -0800265
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800266#define CTL_GENERAL_PURPOSE5 0x50
267#define CTL_GENERAL_PURPOSE6 0x51
268#define CTL_GENERAL_PURPOSE7 0x52
269#define CTL_GENERAL_PURPOSE8 0x53
Ben Cheng4b29af02012-03-07 16:14:53 -0800270
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800271#define CTL_EXT_EFF_DEPTH 0x5b
272#define CTL_TREMOLO_DEPTH 0x5c
273#define CTL_CHORUS_DEPTH 0x5d
274#define CTL_DETUNE_DEPTH 0x5e
275#define CTL_CELESTE_DEPTH 0x5e
276#define CTL_PHASER_DEPTH 0x5f
277#define CTL_DATA_INCREMENT 0x60
278#define CTL_DATA_DECREMENT 0x61
279#define CTL_NONREG_PARM_NUM_LSB 0x62
280#define CTL_NONREG_PARM_NUM_MSB 0x63
281#define CTL_REGIST_PARM_NUM_LSB 0x64
282#define CTL_REGIST_PARM_NUM_MSB 0x65
Ben Cheng4b29af02012-03-07 16:14:53 -0800283
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800284#define CTRL_PITCH_BENDER 255
285#define CTRL_PITCH_BENDER_RANGE 254
286#define CTRL_EXPRESSION 253
287#define CTRL_MAIN_VOLUME 252
288#define SEQ_BALANCE 11
289#define SEQ_VOLMODE 12
Ben Cheng4b29af02012-03-07 16:14:53 -0800290
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800291#define VOL_METHOD_ADAGIO 1
292#define VOL_METHOD_LINEAR 2
Ben Cheng4b29af02012-03-07 16:14:53 -0800293
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800294#define SEQ_FULLSIZE 0xfd
Ben Cheng4b29af02012-03-07 16:14:53 -0800295
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800296#define SEQ_PRIVATE 0xfe
297#define SEQ_EXTENDED 0xff
Ben Cheng4b29af02012-03-07 16:14:53 -0800298
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800299typedef unsigned char sbi_instr_data[32];
Ben Cheng4b29af02012-03-07 16:14:53 -0800300
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800301struct sbi_instrument {
302 unsigned short key;
303#define FM_PATCH _PATCHKEY(0x01)
304#define OPL3_PATCH _PATCHKEY(0x03)
305 short device;
306 int channel;
307 sbi_instr_data operators;
308 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800309
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800310struct synth_info {
311 char name[30];
312 int device;
313 int synth_type;
314#define SYNTH_TYPE_FM 0
315#define SYNTH_TYPE_SAMPLE 1
316#define SYNTH_TYPE_MIDI 2
Ben Cheng4b29af02012-03-07 16:14:53 -0800317
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800318 int synth_subtype;
319#define FM_TYPE_ADLIB 0x00
320#define FM_TYPE_OPL3 0x01
321#define MIDI_TYPE_MPU401 0x401
Ben Cheng4b29af02012-03-07 16:14:53 -0800322
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800323#define SAMPLE_TYPE_BASIC 0x10
324#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
325#define SAMPLE_TYPE_WAVEFRONT 0x11
Ben Cheng4b29af02012-03-07 16:14:53 -0800326
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800327 int perc_mode;
328 int nr_voices;
329 int nr_drums;
330 int instr_bank_size;
331 unsigned int capabilities;
332#define SYNTH_CAP_PERCMODE 0x00000001
333#define SYNTH_CAP_OPL3 0x00000002
334#define SYNTH_CAP_INPUT 0x00000004
335 int dummies[19];
336 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800337
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800338struct sound_timer_info {
339 char name[32];
340 int caps;
341 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800342
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800343#define MIDI_CAP_MPU401 1
Ben Cheng4b29af02012-03-07 16:14:53 -0800344
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800345struct midi_info {
346 char name[30];
347 int device;
348 unsigned int capabilities;
349 int dev_type;
350 int dummies[18];
351 };
Ben Cheng4b29af02012-03-07 16:14:53 -0800352
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800353typedef struct {
354 unsigned char cmd;
355 char nr_args, nr_returns;
356 unsigned char data[30];
357 } mpu_command_rec;
Ben Cheng4b29af02012-03-07 16:14:53 -0800358
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800359#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
360#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
361#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
Ben Cheng4b29af02012-03-07 16:14:53 -0800362
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800363#define SNDCTL_DSP_RESET _SIO ('P', 0)
364#define SNDCTL_DSP_SYNC _SIO ('P', 1)
365#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
366#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
367#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
368#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
369#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
370#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
371#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
372#define SNDCTL_DSP_POST _SIO ('P', 8)
373#define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
374#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800375
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800376#define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int)
377#define SNDCTL_DSP_SETFMT _SIOWR('P',5, int)
378#define AFMT_QUERY 0x00000000
379#define AFMT_MU_LAW 0x00000001
380#define AFMT_A_LAW 0x00000002
381#define AFMT_IMA_ADPCM 0x00000004
382#define AFMT_U8 0x00000008
383#define AFMT_S16_LE 0x00000010
384#define AFMT_S16_BE 0x00000020
385#define AFMT_S8 0x00000040
386#define AFMT_U16_LE 0x00000080
387#define AFMT_U16_BE 0x00000100
388#define AFMT_MPEG 0x00000200
389#define AFMT_AC3 0x00000400
Ben Cheng4b29af02012-03-07 16:14:53 -0800390
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800391typedef struct audio_buf_info {
392 int fragments;
393 int fragstotal;
394 int fragsize;
Ben Cheng4b29af02012-03-07 16:14:53 -0800395
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800396 int bytes;
Ben Cheng4b29af02012-03-07 16:14:53 -0800397
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800398 } audio_buf_info;
Ben Cheng4b29af02012-03-07 16:14:53 -0800399
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800400#define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
401#define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
402#define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
403#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
404#define DSP_CAP_REVISION 0x000000ff
405#define DSP_CAP_DUPLEX 0x00000100
406#define DSP_CAP_REALTIME 0x00000200
407#define DSP_CAP_BATCH 0x00000400
Ben Cheng4b29af02012-03-07 16:14:53 -0800408
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800409#define DSP_CAP_COPROC 0x00000800
Ben Cheng4b29af02012-03-07 16:14:53 -0800410
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800411#define DSP_CAP_TRIGGER 0x00001000
412#define DSP_CAP_MMAP 0x00002000
413#define DSP_CAP_MULTI 0x00004000
414#define DSP_CAP_BIND 0x00008000
Ben Cheng4b29af02012-03-07 16:14:53 -0800415
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800416#define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
417#define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
418#define PCM_ENABLE_INPUT 0x00000001
419#define PCM_ENABLE_OUTPUT 0x00000002
Ben Cheng4b29af02012-03-07 16:14:53 -0800420
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800421typedef struct count_info {
422 int bytes;
423 int blocks;
424 int ptr;
425 } count_info;
Ben Cheng4b29af02012-03-07 16:14:53 -0800426
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800427#define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
428#define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
Ben Cheng4b29af02012-03-07 16:14:53 -0800429
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800430typedef struct buffmem_desc {
431 unsigned *buffer;
432 int size;
433 } buffmem_desc;
434#define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
435#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
436#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
437#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
438#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800439
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800440#define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
441#define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
442#define DSP_BIND_QUERY 0x00000000
443#define DSP_BIND_FRONT 0x00000001
444#define DSP_BIND_SURR 0x00000002
445#define DSP_BIND_CENTER_LFE 0x00000004
446#define DSP_BIND_HANDSET 0x00000008
447#define DSP_BIND_MIC 0x00000010
448#define DSP_BIND_MODEM1 0x00000020
449#define DSP_BIND_MODEM2 0x00000040
450#define DSP_BIND_I2S 0x00000080
451#define DSP_BIND_SPDIF 0x00000100
Ben Cheng4b29af02012-03-07 16:14:53 -0800452
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800453#define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
454#define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
455#define SPDIF_PRO 0x0001
456#define SPDIF_N_AUD 0x0002
457#define SPDIF_COPY 0x0004
458#define SPDIF_PRE 0x0008
459#define SPDIF_CC 0x07f0
460#define SPDIF_L 0x0800
461#define SPDIF_DRS 0x4000
462#define SPDIF_V 0x8000
Ben Cheng4b29af02012-03-07 16:14:53 -0800463
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800464#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
465#define APF_NORMAL 0
466#define APF_NETWORK 1
467#define APF_CPUINTENS 2
Ben Cheng4b29af02012-03-07 16:14:53 -0800468
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800469#define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
470#define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
471#define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
472#define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800473
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800474#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
475#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
476#define SOUND_PCM_POST SNDCTL_DSP_POST
477#define SOUND_PCM_RESET SNDCTL_DSP_RESET
478#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
479#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
480#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
481#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
482#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
483#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
484#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
485#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
486#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
487#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
488#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
489#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
490#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
491#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
492#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
493#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
Ben Cheng4b29af02012-03-07 16:14:53 -0800494
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800495typedef struct copr_buffer {
496 int command;
497 int flags;
498#define CPF_NONE 0x0000
499#define CPF_FIRST 0x0001
500#define CPF_LAST 0x0002
501 int len;
502 int offs;
Ben Cheng4b29af02012-03-07 16:14:53 -0800503
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800504 unsigned char data[4000];
505 } copr_buffer;
Ben Cheng4b29af02012-03-07 16:14:53 -0800506
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800507typedef struct copr_debug_buf {
508 int command;
509 int parm1;
510 int parm2;
511 int flags;
512 int len;
513 } copr_debug_buf;
Ben Cheng4b29af02012-03-07 16:14:53 -0800514
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800515typedef struct copr_msg {
516 int len;
517 unsigned char data[4000];
518 } copr_msg;
Ben Cheng4b29af02012-03-07 16:14:53 -0800519
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800520#define SNDCTL_COPR_RESET _SIO ('C', 0)
521#define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
522#define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
523#define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
524#define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
525#define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
526#define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
527#define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
528#define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
529#define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
Ben Cheng4b29af02012-03-07 16:14:53 -0800530
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800531#define SOUND_MIXER_NRDEVICES 25
532#define SOUND_MIXER_VOLUME 0
533#define SOUND_MIXER_BASS 1
534#define SOUND_MIXER_TREBLE 2
535#define SOUND_MIXER_SYNTH 3
536#define SOUND_MIXER_PCM 4
537#define SOUND_MIXER_SPEAKER 5
538#define SOUND_MIXER_LINE 6
539#define SOUND_MIXER_MIC 7
540#define SOUND_MIXER_CD 8
541#define SOUND_MIXER_IMIX 9
542#define SOUND_MIXER_ALTPCM 10
543#define SOUND_MIXER_RECLEV 11
544#define SOUND_MIXER_IGAIN 12
545#define SOUND_MIXER_OGAIN 13
Ben Cheng4b29af02012-03-07 16:14:53 -0800546
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800547#define SOUND_MIXER_LINE1 14
548#define SOUND_MIXER_LINE2 15
549#define SOUND_MIXER_LINE3 16
550#define SOUND_MIXER_DIGITAL1 17
551#define SOUND_MIXER_DIGITAL2 18
552#define SOUND_MIXER_DIGITAL3 19
553#define SOUND_MIXER_PHONEIN 20
554#define SOUND_MIXER_PHONEOUT 21
555#define SOUND_MIXER_VIDEO 22
556#define SOUND_MIXER_RADIO 23
557#define SOUND_MIXER_MONITOR 24
Ben Cheng4b29af02012-03-07 16:14:53 -0800558
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800559#define SOUND_ONOFF_MIN 28
560#define SOUND_ONOFF_MAX 30
Ben Cheng4b29af02012-03-07 16:14:53 -0800561
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800562#define SOUND_MIXER_NONE 31
Ben Cheng4b29af02012-03-07 16:14:53 -0800563
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800564#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
565#define SOUND_MIXER_MUTE SOUND_MIXER_NONE
566#define SOUND_MIXER_LOUD SOUND_MIXER_NONE
Ben Cheng4b29af02012-03-07 16:14:53 -0800567
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800568#define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
Ben Cheng4b29af02012-03-07 16:14:53 -0800569
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800570#define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", "line1", "line2", "line3", "dig1", "dig2", "dig3", "phin", "phout", "video", "radio", "monitor"}
Ben Cheng4b29af02012-03-07 16:14:53 -0800571
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800572#define SOUND_MIXER_RECSRC 0xff
573#define SOUND_MIXER_DEVMASK 0xfe
574#define SOUND_MIXER_RECMASK 0xfd
575#define SOUND_MIXER_CAPS 0xfc
576#define SOUND_CAP_EXCL_INPUT 0x00000001
577#define SOUND_MIXER_STEREODEVS 0xfb
578#define SOUND_MIXER_OUTSRC 0xfa
579#define SOUND_MIXER_OUTMASK 0xf9
Ben Cheng4b29af02012-03-07 16:14:53 -0800580
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800581#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
582#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
583#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
584#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
585#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
586#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
587#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
588#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
589#define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
590#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
591#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
592#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
593#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
594#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
595#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
596#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
597#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
598#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
599#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
600#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
601#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
602#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
603#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
604#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
605#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
Ben Cheng4b29af02012-03-07 16:14:53 -0800606
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800607#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
608#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
609#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
Ben Cheng4b29af02012-03-07 16:14:53 -0800610
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800611#define MIXER_READ(dev) _SIOR('M', dev, int)
612#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
613#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
614#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
615#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
616#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
617#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
618#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
619#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
620#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
621#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
622#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
623#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
624#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
625#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
626#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
627#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
628#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
Ben Cheng4b29af02012-03-07 16:14:53 -0800629
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800630#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
631#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
632#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
Ben Cheng4b29af02012-03-07 16:14:53 -0800633
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800634#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
635#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
636#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
637#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
638#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
Ben Cheng4b29af02012-03-07 16:14:53 -0800639
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800640#define MIXER_WRITE(dev) _SIOWR('M', dev, int)
641#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
642#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
643#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
644#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
645#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
646#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
647#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
648#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
649#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
650#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
651#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
652#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
653#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
654#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
655#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
656#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
657#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
Ben Cheng4b29af02012-03-07 16:14:53 -0800658
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800659#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
660#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
661#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
Ben Cheng4b29af02012-03-07 16:14:53 -0800662
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800663#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
Ben Cheng4b29af02012-03-07 16:14:53 -0800664
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800665typedef struct mixer_info
666{
667 char id[16];
668 char name[32];
669 int modify_counter;
670 int fillers[10];
671} mixer_info;
Ben Cheng4b29af02012-03-07 16:14:53 -0800672
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800673typedef struct _old_mixer_info
674{
675 char id[16];
676 char name[32];
677} _old_mixer_info;
Ben Cheng4b29af02012-03-07 16:14:53 -0800678
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800679#define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
680#define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
Ben Cheng4b29af02012-03-07 16:14:53 -0800681
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800682typedef unsigned char mixer_record[128];
Ben Cheng4b29af02012-03-07 16:14:53 -0800683
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800684#define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
Ben Cheng4b29af02012-03-07 16:14:53 -0800685
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800686#define SOUND_MIXER_AGC _SIOWR('M', 103, int)
687#define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800688
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800689#define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
690#define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
691#define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
692#define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
693#define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800694
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800695typedef struct mixer_vol_table {
696 int num;
697 char name[32];
698 int levels[32];
699} mixer_vol_table;
Ben Cheng4b29af02012-03-07 16:14:53 -0800700
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800701#define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
702#define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
Ben Cheng4b29af02012-03-07 16:14:53 -0800703
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800704#define OSS_GETVERSION _SIOR ('M', 118, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800705
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800706#define EV_SEQ_LOCAL 0x80
707#define EV_TIMING 0x81
708#define EV_CHN_COMMON 0x92
709#define EV_CHN_VOICE 0x93
710#define EV_SYSEX 0x94
Ben Cheng4b29af02012-03-07 16:14:53 -0800711
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800712#define MIDI_NOTEOFF 0x80
713#define MIDI_NOTEON 0x90
714#define MIDI_KEY_PRESSURE 0xA0
Ben Cheng4b29af02012-03-07 16:14:53 -0800715
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800716#define MIDI_CTL_CHANGE 0xB0
717#define MIDI_PGM_CHANGE 0xC0
718#define MIDI_CHN_PRESSURE 0xD0
719#define MIDI_PITCH_BEND 0xE0
Ben Cheng4b29af02012-03-07 16:14:53 -0800720
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800721#define MIDI_SYSTEM_PREFIX 0xF0
Ben Cheng4b29af02012-03-07 16:14:53 -0800722
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800723#define TMR_WAIT_REL 1
724#define TMR_WAIT_ABS 2
725#define TMR_STOP 3
726#define TMR_START 4
727#define TMR_CONTINUE 5
728#define TMR_TEMPO 6
729#define TMR_ECHO 8
730#define TMR_CLOCK 9
731#define TMR_SPP 10
732#define TMR_TIMESIG 11
Ben Cheng4b29af02012-03-07 16:14:53 -0800733
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800734#define LOCL_STARTAUDIO 1
Ben Cheng4b29af02012-03-07 16:14:53 -0800735
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800736#if !defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL) || defined(USE_SEQ_MACROS)
Ben Cheng4b29af02012-03-07 16:14:53 -0800737
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800738#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
Ben Cheng4b29af02012-03-07 16:14:53 -0800739
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800740#define SEQ_PM_DEFINES int __foo_bar___
741#ifdef OSSLIB
742#define SEQ_USE_EXTBUF() extern unsigned char *_seqbuf; extern int _seqbuflen;extern int _seqbufptr
743#define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
744#define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
745#define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
746#define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
Ben Cheng4b29af02012-03-07 16:14:53 -0800747
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800748#define SEQ_LOAD_GMINSTR(dev, instr) OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
749#define SEQ_LOAD_GMDRUM(dev, drum) OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
750#else
Ben Cheng4b29af02012-03-07 16:14:53 -0800751
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800752#define SEQ_LOAD_GMINSTR(dev, instr)
753#define SEQ_LOAD_GMDRUM(dev, drum)
Ben Cheng4b29af02012-03-07 16:14:53 -0800754
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800755#define SEQ_USE_EXTBUF() extern unsigned char _seqbuf[]; extern int _seqbuflen;extern int _seqbufptr
Ben Cheng4b29af02012-03-07 16:14:53 -0800756
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800757#ifndef USE_SIMPLE_MACROS
Ben Cheng4b29af02012-03-07 16:14:53 -0800758
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800759#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
760#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
761#define _SEQ_ADVBUF(len) _seqbufptr += len
762#define SEQ_DUMPBUF seqbuf_dump
763#else
Ben Cheng4b29af02012-03-07 16:14:53 -0800764
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800765#define _SEQ_NEEDBUF(len)
766#endif
767#endif
Ben Cheng4b29af02012-03-07 16:14:53 -0800768
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800769#define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = SEQ_EXTENDED; _seqbuf[_seqbufptr+1] = SEQ_VOLMODE; _seqbuf[_seqbufptr+2] = (dev); _seqbuf[_seqbufptr+3] = (mode); _seqbuf[_seqbufptr+4] = 0; _seqbuf[_seqbufptr+5] = 0; _seqbuf[_seqbufptr+6] = 0; _seqbuf[_seqbufptr+7] = 0; _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800770
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800771#define _CHN_VOICE(dev, event, chn, note, parm) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = EV_CHN_VOICE; _seqbuf[_seqbufptr+1] = (dev); _seqbuf[_seqbufptr+2] = (event); _seqbuf[_seqbufptr+3] = (chn); _seqbuf[_seqbufptr+4] = (note); _seqbuf[_seqbufptr+5] = (parm); _seqbuf[_seqbufptr+6] = (0); _seqbuf[_seqbufptr+7] = 0; _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800772
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800773#define SEQ_START_NOTE(dev, chn, note, vol) _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
Ben Cheng4b29af02012-03-07 16:14:53 -0800774
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800775#define SEQ_STOP_NOTE(dev, chn, note, vol) _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
Ben Cheng4b29af02012-03-07 16:14:53 -0800776
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800777#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
Ben Cheng4b29af02012-03-07 16:14:53 -0800778
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800779#define _CHN_COMMON(dev, event, chn, p1, p2, w14) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = EV_CHN_COMMON; _seqbuf[_seqbufptr+1] = (dev); _seqbuf[_seqbufptr+2] = (event); _seqbuf[_seqbufptr+3] = (chn); _seqbuf[_seqbufptr+4] = (p1); _seqbuf[_seqbufptr+5] = (p2); *(short *)&_seqbuf[_seqbufptr+6] = (w14); _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800780
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800781#define SEQ_SYSEX(dev, buf, len) {int ii, ll=(len); unsigned char *bufp=buf; if (ll>6)ll=6; _SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = EV_SYSEX; _seqbuf[_seqbufptr+1] = (dev); for(ii=0;ii<ll;ii++) _seqbuf[_seqbufptr+ii+2] = bufp[ii]; for(ii=ll;ii<6;ii++) _seqbuf[_seqbufptr+ii+2] = 0xff; _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800782
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800783#define SEQ_CHN_PRESSURE(dev, chn, pressure) _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
Ben Cheng4b29af02012-03-07 16:14:53 -0800784
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800785#define SEQ_SET_PATCH SEQ_PGM_CHANGE
786#ifdef OSSLIB
787#define SEQ_PGM_CHANGE(dev, chn, patch) {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
788#else
789#define SEQ_PGM_CHANGE(dev, chn, patch) _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
790#endif
Ben Cheng4b29af02012-03-07 16:14:53 -0800791
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800792#define SEQ_CONTROL(dev, chn, controller, value) _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
Ben Cheng4b29af02012-03-07 16:14:53 -0800793
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800794#define SEQ_BENDER(dev, chn, value) _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
Ben Cheng4b29af02012-03-07 16:14:53 -0800795
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800796#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = SEQ_EXTENDED; _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER; _seqbuf[_seqbufptr+2] = (dev); _seqbuf[_seqbufptr+3] = (voice); _seqbuf[_seqbufptr+4] = (controller); _seqbuf[_seqbufptr+5] = ((value)&0xff); _seqbuf[_seqbufptr+6] = ((value>>8)&0xff); _seqbuf[_seqbufptr+7] = 0; _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800797
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800798#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
799#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
800#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
801#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
802#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
Ben Cheng4b29af02012-03-07 16:14:53 -0800803
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800804#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr+0] = EV_TIMING; _seqbuf[_seqbufptr+1] = (ev); _seqbuf[_seqbufptr+2] = 0; _seqbuf[_seqbufptr+3] = 0; *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800805
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800806#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
807#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
808#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
809#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
810#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
811#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
812#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
813#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
814#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
Ben Cheng4b29af02012-03-07 16:14:53 -0800815
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800816#define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; _seqbuf[_seqbufptr+1] = (ev); _seqbuf[_seqbufptr+2] = 0; _seqbuf[_seqbufptr+3] = 0; *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); _SEQ_ADVBUF(8);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800817
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800818#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
Ben Cheng4b29af02012-03-07 16:14:53 -0800819
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800820#define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4); _seqbuf[_seqbufptr] = SEQ_MIDIPUTC; _seqbuf[_seqbufptr+1] = (byte); _seqbuf[_seqbufptr+2] = (device); _seqbuf[_seqbufptr+3] = 0; _SEQ_ADVBUF(4);}
Ben Cheng4b29af02012-03-07 16:14:53 -0800821
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800822#ifdef OSSLIB
823#define SEQ_WRPATCH(patchx, len) OSS_write_patch(seqfd, (char*)(patchx), len)
824#define SEQ_WRPATCH2(patchx, len) OSS_write_patch2(seqfd, (char*)(patchx), len)
825#else
826#define SEQ_WRPATCH(patchx, len) {if (_seqbufptr) SEQ_DUMPBUF(); if (write(seqfd, (char*)(patchx), len)==-1) perror("Write patch: /dev/sequencer");}
827#define SEQ_WRPATCH2(patchx, len) (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
828#endif
Ben Cheng4b29af02012-03-07 16:14:53 -0800829
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800830#endif
831#endif