1*f80ad8b4SAndroid Build Coastguard Worker /* 2*f80ad8b4SAndroid Build Coastguard Worker * Copyright by Hannu Savolainen 1993-1997 3*f80ad8b4SAndroid Build Coastguard Worker * 4*f80ad8b4SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 5*f80ad8b4SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are 6*f80ad8b4SAndroid Build Coastguard Worker * met: 1. Redistributions of source code must retain the above copyright 7*f80ad8b4SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 2. 8*f80ad8b4SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright notice, 9*f80ad8b4SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 10*f80ad8b4SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 11*f80ad8b4SAndroid Build Coastguard Worker * 12*f80ad8b4SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY 13*f80ad8b4SAndroid Build Coastguard Worker * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 14*f80ad8b4SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 15*f80ad8b4SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 16*f80ad8b4SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 17*f80ad8b4SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 18*f80ad8b4SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 19*f80ad8b4SAndroid Build Coastguard Worker * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 20*f80ad8b4SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 21*f80ad8b4SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 22*f80ad8b4SAndroid Build Coastguard Worker * SUCH DAMAGE. 23*f80ad8b4SAndroid Build Coastguard Worker */ 24*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPISOUNDCARD_H 25*f80ad8b4SAndroid Build Coastguard Worker #define _UAPISOUNDCARD_H 26*f80ad8b4SAndroid Build Coastguard Worker 27*f80ad8b4SAndroid Build Coastguard Worker 28*f80ad8b4SAndroid Build Coastguard Worker /* 29*f80ad8b4SAndroid Build Coastguard Worker * OSS interface version. With versions earlier than 3.6 this value is 30*f80ad8b4SAndroid Build Coastguard Worker * an integer with value less than 361. In versions 3.6 and later 31*f80ad8b4SAndroid Build Coastguard Worker * it's a six digit hexadecimal value. For example value 32*f80ad8b4SAndroid Build Coastguard Worker * of 0x030600 represents OSS version 3.6.0. 33*f80ad8b4SAndroid Build Coastguard Worker * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of 34*f80ad8b4SAndroid Build Coastguard Worker * the currently active driver. 35*f80ad8b4SAndroid Build Coastguard Worker */ 36*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_VERSION 0x030802 37*f80ad8b4SAndroid Build Coastguard Worker #define OPEN_SOUND_SYSTEM 38*f80ad8b4SAndroid Build Coastguard Worker 39*f80ad8b4SAndroid Build Coastguard Worker /* In Linux we need to be prepared for cross compiling */ 40*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h> 41*f80ad8b4SAndroid Build Coastguard Worker 42*f80ad8b4SAndroid Build Coastguard Worker /* Endian macros. */ 43*f80ad8b4SAndroid Build Coastguard Worker #ifndef __KERNEL__ 44*f80ad8b4SAndroid Build Coastguard Worker # include <endian.h> 45*f80ad8b4SAndroid Build Coastguard Worker #endif 46*f80ad8b4SAndroid Build Coastguard Worker 47*f80ad8b4SAndroid Build Coastguard Worker /* 48*f80ad8b4SAndroid Build Coastguard Worker * Supported card ID numbers (Should be somewhere else?) 49*f80ad8b4SAndroid Build Coastguard Worker */ 50*f80ad8b4SAndroid Build Coastguard Worker 51*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_ADLIB 1 52*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_SB 2 53*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_PAS 3 54*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_GUS 4 55*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_MPU401 5 56*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_SB16 6 57*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_SB16MIDI 7 58*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_UART6850 8 59*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_GUS16 9 60*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_MSS 10 61*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_PSS 11 62*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_SSCAPE 12 63*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_PSS_MPU 13 64*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_PSS_MSS 14 65*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_SSCAPE_MSS 15 66*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_TRXPRO 16 67*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_TRXPRO_SB 17 68*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_TRXPRO_MPU 18 69*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_MAD16 19 70*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_MAD16_MPU 20 71*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_CS4232 21 72*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_CS4232_MPU 22 73*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_MAUI 23 74*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_PSEUDO_MSS 24 75*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_GUSPNP 25 76*f80ad8b4SAndroid Build Coastguard Worker #define SNDCARD_UART401 26 77*f80ad8b4SAndroid Build Coastguard Worker /* Sound card numbers 27 to N are reserved. Don't add more numbers here. */ 78*f80ad8b4SAndroid Build Coastguard Worker 79*f80ad8b4SAndroid Build Coastguard Worker /*********************************** 80*f80ad8b4SAndroid Build Coastguard Worker * IOCTL Commands for /dev/sequencer 81*f80ad8b4SAndroid Build Coastguard Worker */ 82*f80ad8b4SAndroid Build Coastguard Worker 83*f80ad8b4SAndroid Build Coastguard Worker #ifndef _SIOWR 84*f80ad8b4SAndroid Build Coastguard Worker #if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))) 85*f80ad8b4SAndroid Build Coastguard Worker /* Use already defined ioctl defines if they exist (except with Sun or Sparc) */ 86*f80ad8b4SAndroid Build Coastguard Worker #define SIOCPARM_MASK IOCPARM_MASK 87*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_VOID IOC_VOID 88*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_OUT IOC_OUT 89*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_IN IOC_IN 90*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_INOUT IOC_INOUT 91*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_SIZE _IOC_SIZE 92*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_DIR _IOC_DIR 93*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_NONE _IOC_NONE 94*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_READ _IOC_READ 95*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_WRITE _IOC_WRITE 96*f80ad8b4SAndroid Build Coastguard Worker #define _SIO _IO 97*f80ad8b4SAndroid Build Coastguard Worker #define _SIOR _IOR 98*f80ad8b4SAndroid Build Coastguard Worker #define _SIOW _IOW 99*f80ad8b4SAndroid Build Coastguard Worker #define _SIOWR _IOWR 100*f80ad8b4SAndroid Build Coastguard Worker #else 101*f80ad8b4SAndroid Build Coastguard Worker 102*f80ad8b4SAndroid Build Coastguard Worker /* Ioctl's have the command encoded in the lower word, 103*f80ad8b4SAndroid Build Coastguard Worker * and the size of any in or out parameters in the upper 104*f80ad8b4SAndroid Build Coastguard Worker * word. The high 2 bits of the upper word are used 105*f80ad8b4SAndroid Build Coastguard Worker * to encode the in/out status of the parameter; for now 106*f80ad8b4SAndroid Build Coastguard Worker * we restrict parameters to at most 8191 bytes. 107*f80ad8b4SAndroid Build Coastguard Worker */ 108*f80ad8b4SAndroid Build Coastguard Worker /* #define SIOCTYPE (0xff<<8) */ 109*f80ad8b4SAndroid Build Coastguard Worker #define SIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */ 110*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_VOID 0x00000000 /* no parameters */ 111*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_OUT 0x20000000 /* copy out parameters */ 112*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_IN 0x40000000 /* copy in parameters */ 113*f80ad8b4SAndroid Build Coastguard Worker #define SIOC_INOUT (SIOC_IN|SIOC_OUT) 114*f80ad8b4SAndroid Build Coastguard Worker /* the 0x20000000 is so we can distinguish new ioctl's from old */ 115*f80ad8b4SAndroid Build Coastguard Worker #define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y)) 116*f80ad8b4SAndroid Build Coastguard Worker #define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 117*f80ad8b4SAndroid Build Coastguard Worker #define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 118*f80ad8b4SAndroid Build Coastguard Worker /* this should be _SIORW, but stdio got there first */ 119*f80ad8b4SAndroid Build Coastguard Worker #define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 120*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK) 121*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_DIR(x) (x & 0xf0000000) 122*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_NONE SIOC_VOID 123*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_READ SIOC_OUT 124*f80ad8b4SAndroid Build Coastguard Worker #define _SIOC_WRITE SIOC_IN 125*f80ad8b4SAndroid Build Coastguard Worker # endif /* _IOWR */ 126*f80ad8b4SAndroid Build Coastguard Worker #endif /* !_SIOWR */ 127*f80ad8b4SAndroid Build Coastguard Worker 128*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_RESET _SIO ('Q', 0) 129*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_SYNC _SIO ('Q', 1) 130*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info) 131*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */ 132*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int) 133*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int) 134*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int) 135*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument) /* Obsolete. Don't use!!!!!! */ 136*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int) 137*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int) 138*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int) 139*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int) 140*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info) 141*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int) 142*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int) /* in=dev#, out=memsize */ 143*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int) /* in=dev# */ 144*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_PANIC _SIO ('Q',17) 145*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec) 146*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int) 147*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info) 148*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control) 149*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample) 150*f80ad8b4SAndroid Build Coastguard Worker 151*f80ad8b4SAndroid Build Coastguard Worker typedef struct synth_control 152*f80ad8b4SAndroid Build Coastguard Worker { 153*f80ad8b4SAndroid Build Coastguard Worker int devno; /* Synthesizer # */ 154*f80ad8b4SAndroid Build Coastguard Worker char data[4000]; /* Device spesific command/data record */ 155*f80ad8b4SAndroid Build Coastguard Worker }synth_control; 156*f80ad8b4SAndroid Build Coastguard Worker 157*f80ad8b4SAndroid Build Coastguard Worker typedef struct remove_sample 158*f80ad8b4SAndroid Build Coastguard Worker { 159*f80ad8b4SAndroid Build Coastguard Worker int devno; /* Synthesizer # */ 160*f80ad8b4SAndroid Build Coastguard Worker int bankno; /* MIDI bank # (0=General MIDI) */ 161*f80ad8b4SAndroid Build Coastguard Worker int instrno; /* MIDI instrument number */ 162*f80ad8b4SAndroid Build Coastguard Worker } remove_sample; 163*f80ad8b4SAndroid Build Coastguard Worker 164*f80ad8b4SAndroid Build Coastguard Worker typedef struct seq_event_rec { 165*f80ad8b4SAndroid Build Coastguard Worker unsigned char arr[8]; 166*f80ad8b4SAndroid Build Coastguard Worker } seq_event_rec; 167*f80ad8b4SAndroid Build Coastguard Worker 168*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int) 169*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_START _SIO ('T', 2) 170*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_STOP _SIO ('T', 3) 171*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_CONTINUE _SIO ('T', 4) 172*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int) 173*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int) 174*f80ad8b4SAndroid Build Coastguard Worker # define TMR_INTERNAL 0x00000001 175*f80ad8b4SAndroid Build Coastguard Worker # define TMR_EXTERNAL 0x00000002 176*f80ad8b4SAndroid Build Coastguard Worker # define TMR_MODE_MIDI 0x00000010 177*f80ad8b4SAndroid Build Coastguard Worker # define TMR_MODE_FSK 0x00000020 178*f80ad8b4SAndroid Build Coastguard Worker # define TMR_MODE_CLS 0x00000040 179*f80ad8b4SAndroid Build Coastguard Worker # define TMR_MODE_SMPTE 0x00000080 180*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int) 181*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_TMR_SELECT _SIOW ('T', 8, int) 182*f80ad8b4SAndroid Build Coastguard Worker 183*f80ad8b4SAndroid Build Coastguard Worker /* 184*f80ad8b4SAndroid Build Coastguard Worker * Some big endian/little endian handling macros 185*f80ad8b4SAndroid Build Coastguard Worker */ 186*f80ad8b4SAndroid Build Coastguard Worker 187*f80ad8b4SAndroid Build Coastguard Worker #define _LINUX_PATCHKEY_H_INDIRECT 188*f80ad8b4SAndroid Build Coastguard Worker #include <linux/patchkey.h> 189*f80ad8b4SAndroid Build Coastguard Worker #undef _LINUX_PATCHKEY_H_INDIRECT 190*f80ad8b4SAndroid Build Coastguard Worker 191*f80ad8b4SAndroid Build Coastguard Worker #if !defined(__KERNEL__) 192*f80ad8b4SAndroid Build Coastguard Worker # if defined(__BYTE_ORDER) 193*f80ad8b4SAndroid Build Coastguard Worker # if __BYTE_ORDER == __BIG_ENDIAN 194*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_S16_NE AFMT_S16_BE 195*f80ad8b4SAndroid Build Coastguard Worker # elif __BYTE_ORDER == __LITTLE_ENDIAN 196*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_S16_NE AFMT_S16_LE 197*f80ad8b4SAndroid Build Coastguard Worker # else 198*f80ad8b4SAndroid Build Coastguard Worker # error "could not determine byte order" 199*f80ad8b4SAndroid Build Coastguard Worker # endif 200*f80ad8b4SAndroid Build Coastguard Worker # endif 201*f80ad8b4SAndroid Build Coastguard Worker #endif 202*f80ad8b4SAndroid Build Coastguard Worker 203*f80ad8b4SAndroid Build Coastguard Worker /* 204*f80ad8b4SAndroid Build Coastguard Worker * Sample loading mechanism for internal synthesizers (/dev/sequencer) 205*f80ad8b4SAndroid Build Coastguard Worker * The following patch_info structure has been designed to support 206*f80ad8b4SAndroid Build Coastguard Worker * Gravis UltraSound. It tries to be universal format for uploading 207*f80ad8b4SAndroid Build Coastguard Worker * sample based patches but is probably too limited. 208*f80ad8b4SAndroid Build Coastguard Worker * 209*f80ad8b4SAndroid Build Coastguard Worker * (PBD) As Hannu guessed, the GUS structure is too limited for 210*f80ad8b4SAndroid Build Coastguard Worker * the WaveFront, but this is the right place for a constant definition. 211*f80ad8b4SAndroid Build Coastguard Worker */ 212*f80ad8b4SAndroid Build Coastguard Worker 213*f80ad8b4SAndroid Build Coastguard Worker struct patch_info { 214*f80ad8b4SAndroid Build Coastguard Worker unsigned short key; /* Use WAVE_PATCH here */ 215*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_PATCH _PATCHKEY(0x04) 216*f80ad8b4SAndroid Build Coastguard Worker #define GUS_PATCH WAVE_PATCH 217*f80ad8b4SAndroid Build Coastguard Worker #define WAVEFRONT_PATCH _PATCHKEY(0x06) 218*f80ad8b4SAndroid Build Coastguard Worker 219*f80ad8b4SAndroid Build Coastguard Worker short device_no; /* Synthesizer number */ 220*f80ad8b4SAndroid Build Coastguard Worker short instr_no; /* Midi pgm# */ 221*f80ad8b4SAndroid Build Coastguard Worker 222*f80ad8b4SAndroid Build Coastguard Worker unsigned int mode; 223*f80ad8b4SAndroid Build Coastguard Worker /* 224*f80ad8b4SAndroid Build Coastguard Worker * The least significant byte has the same format than the GUS .PAT 225*f80ad8b4SAndroid Build Coastguard Worker * files 226*f80ad8b4SAndroid Build Coastguard Worker */ 227*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_16_BITS 0x01 /* bit 0 = 8 or 16 bit wave data. */ 228*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_UNSIGNED 0x02 /* bit 1 = Signed - Unsigned data. */ 229*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_LOOPING 0x04 /* bit 2 = looping enabled-1. */ 230*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_BIDIR_LOOP 0x08 /* bit 3 = Set is bidirectional looping. */ 231*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_LOOP_BACK 0x10 /* bit 4 = Set is looping backward. */ 232*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_SUSTAIN_ON 0x20 /* bit 5 = Turn sustaining on. (Env. pts. 3)*/ 233*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_ENVELOPES 0x40 /* bit 6 = Enable envelopes - 1 */ 234*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */ 235*f80ad8b4SAndroid Build Coastguard Worker /* (use the env_rate/env_offs fields). */ 236*f80ad8b4SAndroid Build Coastguard Worker /* Linux specific bits */ 237*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_VIBRATO 0x00010000 /* The vibrato info is valid */ 238*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_TREMOLO 0x00020000 /* The tremolo info is valid */ 239*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_SCALE 0x00040000 /* The scaling info is valid */ 240*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_FRACTIONS 0x00080000 /* Fraction information is valid */ 241*f80ad8b4SAndroid Build Coastguard Worker /* Reserved bits */ 242*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_ROM 0x40000000 /* For future use */ 243*f80ad8b4SAndroid Build Coastguard Worker #define WAVE_MULAW 0x20000000 /* For future use */ 244*f80ad8b4SAndroid Build Coastguard Worker /* Other bits must be zeroed */ 245*f80ad8b4SAndroid Build Coastguard Worker 246*f80ad8b4SAndroid Build Coastguard Worker int len; /* Size of the wave data in bytes */ 247*f80ad8b4SAndroid Build Coastguard Worker int loop_start, loop_end; /* Byte offsets from the beginning */ 248*f80ad8b4SAndroid Build Coastguard Worker 249*f80ad8b4SAndroid Build Coastguard Worker /* 250*f80ad8b4SAndroid Build Coastguard Worker * The base_freq and base_note fields are used when computing the 251*f80ad8b4SAndroid Build Coastguard Worker * playback speed for a note. The base_note defines the tone frequency 252*f80ad8b4SAndroid Build Coastguard Worker * which is heard if the sample is played using the base_freq as the 253*f80ad8b4SAndroid Build Coastguard Worker * playback speed. 254*f80ad8b4SAndroid Build Coastguard Worker * 255*f80ad8b4SAndroid Build Coastguard Worker * The low_note and high_note fields define the minimum and maximum note 256*f80ad8b4SAndroid Build Coastguard Worker * frequencies for which this sample is valid. It is possible to define 257*f80ad8b4SAndroid Build Coastguard Worker * more than one samples for an instrument number at the same time. The 258*f80ad8b4SAndroid Build Coastguard Worker * low_note and high_note fields are used to select the most suitable one. 259*f80ad8b4SAndroid Build Coastguard Worker * 260*f80ad8b4SAndroid Build Coastguard Worker * The fields base_note, high_note and low_note should contain 261*f80ad8b4SAndroid Build Coastguard Worker * the note frequency multiplied by 1000. For example value for the 262*f80ad8b4SAndroid Build Coastguard Worker * middle A is 440*1000. 263*f80ad8b4SAndroid Build Coastguard Worker */ 264*f80ad8b4SAndroid Build Coastguard Worker 265*f80ad8b4SAndroid Build Coastguard Worker unsigned int base_freq; 266*f80ad8b4SAndroid Build Coastguard Worker unsigned int base_note; 267*f80ad8b4SAndroid Build Coastguard Worker unsigned int high_note; 268*f80ad8b4SAndroid Build Coastguard Worker unsigned int low_note; 269*f80ad8b4SAndroid Build Coastguard Worker int panning; /* -128=left, 127=right */ 270*f80ad8b4SAndroid Build Coastguard Worker int detuning; 271*f80ad8b4SAndroid Build Coastguard Worker 272*f80ad8b4SAndroid Build Coastguard Worker /* New fields introduced in version 1.99.5 */ 273*f80ad8b4SAndroid Build Coastguard Worker 274*f80ad8b4SAndroid Build Coastguard Worker /* Envelope. Enabled by mode bit WAVE_ENVELOPES */ 275*f80ad8b4SAndroid Build Coastguard Worker unsigned char env_rate[ 6 ]; /* GUS HW ramping rate */ 276*f80ad8b4SAndroid Build Coastguard Worker unsigned char env_offset[ 6 ]; /* 255 == 100% */ 277*f80ad8b4SAndroid Build Coastguard Worker 278*f80ad8b4SAndroid Build Coastguard Worker /* 279*f80ad8b4SAndroid Build Coastguard Worker * The tremolo, vibrato and scale info are not supported yet. 280*f80ad8b4SAndroid Build Coastguard Worker * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or 281*f80ad8b4SAndroid Build Coastguard Worker * WAVE_SCALE 282*f80ad8b4SAndroid Build Coastguard Worker */ 283*f80ad8b4SAndroid Build Coastguard Worker 284*f80ad8b4SAndroid Build Coastguard Worker unsigned char tremolo_sweep; 285*f80ad8b4SAndroid Build Coastguard Worker unsigned char tremolo_rate; 286*f80ad8b4SAndroid Build Coastguard Worker unsigned char tremolo_depth; 287*f80ad8b4SAndroid Build Coastguard Worker 288*f80ad8b4SAndroid Build Coastguard Worker unsigned char vibrato_sweep; 289*f80ad8b4SAndroid Build Coastguard Worker unsigned char vibrato_rate; 290*f80ad8b4SAndroid Build Coastguard Worker unsigned char vibrato_depth; 291*f80ad8b4SAndroid Build Coastguard Worker 292*f80ad8b4SAndroid Build Coastguard Worker int scale_frequency; 293*f80ad8b4SAndroid Build Coastguard Worker unsigned int scale_factor; /* from 0 to 2048 or 0 to 2 */ 294*f80ad8b4SAndroid Build Coastguard Worker 295*f80ad8b4SAndroid Build Coastguard Worker int volume; 296*f80ad8b4SAndroid Build Coastguard Worker int fractions; 297*f80ad8b4SAndroid Build Coastguard Worker int reserved1; 298*f80ad8b4SAndroid Build Coastguard Worker int spare[2]; 299*f80ad8b4SAndroid Build Coastguard Worker char data[1]; /* The waveform data starts here */ 300*f80ad8b4SAndroid Build Coastguard Worker }; 301*f80ad8b4SAndroid Build Coastguard Worker 302*f80ad8b4SAndroid Build Coastguard Worker struct sysex_info { 303*f80ad8b4SAndroid Build Coastguard Worker short key; /* Use SYSEX_PATCH or MAUI_PATCH here */ 304*f80ad8b4SAndroid Build Coastguard Worker #define SYSEX_PATCH _PATCHKEY(0x05) 305*f80ad8b4SAndroid Build Coastguard Worker #define MAUI_PATCH _PATCHKEY(0x06) 306*f80ad8b4SAndroid Build Coastguard Worker short device_no; /* Synthesizer number */ 307*f80ad8b4SAndroid Build Coastguard Worker int len; /* Size of the sysex data in bytes */ 308*f80ad8b4SAndroid Build Coastguard Worker unsigned char data[1]; /* Sysex data starts here */ 309*f80ad8b4SAndroid Build Coastguard Worker }; 310*f80ad8b4SAndroid Build Coastguard Worker 311*f80ad8b4SAndroid Build Coastguard Worker /* 312*f80ad8b4SAndroid Build Coastguard Worker * /dev/sequencer input events. 313*f80ad8b4SAndroid Build Coastguard Worker * 314*f80ad8b4SAndroid Build Coastguard Worker * The data written to the /dev/sequencer is a stream of events. Events 315*f80ad8b4SAndroid Build Coastguard Worker * are records of 4 or 8 bytes. The first byte defines the size. 316*f80ad8b4SAndroid Build Coastguard Worker * Any number of events can be written with a write call. There 317*f80ad8b4SAndroid Build Coastguard Worker * is a set of macros for sending these events. Use these macros if you 318*f80ad8b4SAndroid Build Coastguard Worker * want to maximize portability of your program. 319*f80ad8b4SAndroid Build Coastguard Worker * 320*f80ad8b4SAndroid Build Coastguard Worker * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events. 321*f80ad8b4SAndroid Build Coastguard Worker * (All input events are currently 4 bytes long. Be prepared to support 322*f80ad8b4SAndroid Build Coastguard Worker * 8 byte events also. If you receive any event having first byte >= 128, 323*f80ad8b4SAndroid Build Coastguard Worker * it's a 8 byte event. 324*f80ad8b4SAndroid Build Coastguard Worker * 325*f80ad8b4SAndroid Build Coastguard Worker * The events are documented at the end of this file. 326*f80ad8b4SAndroid Build Coastguard Worker * 327*f80ad8b4SAndroid Build Coastguard Worker * Normal events (4 bytes) 328*f80ad8b4SAndroid Build Coastguard Worker * There is also a 8 byte version of most of the 4 byte events. The 329*f80ad8b4SAndroid Build Coastguard Worker * 8 byte one is recommended. 330*f80ad8b4SAndroid Build Coastguard Worker */ 331*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_NOTEOFF 0 332*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_FMNOTEOFF SEQ_NOTEOFF /* Just old name */ 333*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_NOTEON 1 334*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_FMNOTEON SEQ_NOTEON 335*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_WAIT TMR_WAIT_ABS 336*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PGMCHANGE 3 337*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_FMPGMCHANGE SEQ_PGMCHANGE 338*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_SYNCTIMER TMR_START 339*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_MIDIPUTC 5 340*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DRUMON 6 /*** OBSOLETE ***/ 341*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DRUMOFF 7 /*** OBSOLETE ***/ 342*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_ECHO TMR_ECHO /* For synching programs with output */ 343*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_AFTERTOUCH 9 344*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_CONTROLLER 10 345*f80ad8b4SAndroid Build Coastguard Worker 346*f80ad8b4SAndroid Build Coastguard Worker /******************************************* 347*f80ad8b4SAndroid Build Coastguard Worker * Midi controller numbers 348*f80ad8b4SAndroid Build Coastguard Worker ******************************************* 349*f80ad8b4SAndroid Build Coastguard Worker * Controllers 0 to 31 (0x00 to 0x1f) and 350*f80ad8b4SAndroid Build Coastguard Worker * 32 to 63 (0x20 to 0x3f) are continuous 351*f80ad8b4SAndroid Build Coastguard Worker * controllers. 352*f80ad8b4SAndroid Build Coastguard Worker * In the MIDI 1.0 these controllers are sent using 353*f80ad8b4SAndroid Build Coastguard Worker * two messages. Controller numbers 0 to 31 are used 354*f80ad8b4SAndroid Build Coastguard Worker * to send the MSB and the controller numbers 32 to 63 355*f80ad8b4SAndroid Build Coastguard Worker * are for the LSB. Note that just 7 bits are used in MIDI bytes. 356*f80ad8b4SAndroid Build Coastguard Worker */ 357*f80ad8b4SAndroid Build Coastguard Worker 358*f80ad8b4SAndroid Build Coastguard Worker #define CTL_BANK_SELECT 0x00 359*f80ad8b4SAndroid Build Coastguard Worker #define CTL_MODWHEEL 0x01 360*f80ad8b4SAndroid Build Coastguard Worker #define CTL_BREATH 0x02 361*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x03 */ 362*f80ad8b4SAndroid Build Coastguard Worker #define CTL_FOOT 0x04 363*f80ad8b4SAndroid Build Coastguard Worker #define CTL_PORTAMENTO_TIME 0x05 364*f80ad8b4SAndroid Build Coastguard Worker #define CTL_DATA_ENTRY 0x06 365*f80ad8b4SAndroid Build Coastguard Worker #define CTL_MAIN_VOLUME 0x07 366*f80ad8b4SAndroid Build Coastguard Worker #define CTL_BALANCE 0x08 367*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x09 */ 368*f80ad8b4SAndroid Build Coastguard Worker #define CTL_PAN 0x0a 369*f80ad8b4SAndroid Build Coastguard Worker #define CTL_EXPRESSION 0x0b 370*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x0c */ 371*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x0d */ 372*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x0e */ 373*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x0f */ 374*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE1 0x10 375*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE2 0x11 376*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE3 0x12 377*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE4 0x13 378*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x14 - 0x1f */ 379*f80ad8b4SAndroid Build Coastguard Worker 380*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x20 */ 381*f80ad8b4SAndroid Build Coastguard Worker /* The controller numbers 0x21 to 0x3f are reserved for the */ 382*f80ad8b4SAndroid Build Coastguard Worker /* least significant bytes of the controllers 0x00 to 0x1f. */ 383*f80ad8b4SAndroid Build Coastguard Worker /* These controllers are not recognised by the driver. */ 384*f80ad8b4SAndroid Build Coastguard Worker 385*f80ad8b4SAndroid Build Coastguard Worker /* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */ 386*f80ad8b4SAndroid Build Coastguard Worker /* 0=OFF and 127=ON (intermediate values are possible) */ 387*f80ad8b4SAndroid Build Coastguard Worker #define CTL_DAMPER_PEDAL 0x40 388*f80ad8b4SAndroid Build Coastguard Worker #define CTL_SUSTAIN 0x40 /* Alias */ 389*f80ad8b4SAndroid Build Coastguard Worker #define CTL_HOLD 0x40 /* Alias */ 390*f80ad8b4SAndroid Build Coastguard Worker #define CTL_PORTAMENTO 0x41 391*f80ad8b4SAndroid Build Coastguard Worker #define CTL_SOSTENUTO 0x42 392*f80ad8b4SAndroid Build Coastguard Worker #define CTL_SOFT_PEDAL 0x43 393*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x44 */ 394*f80ad8b4SAndroid Build Coastguard Worker #define CTL_HOLD2 0x45 395*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x46 - 0x4f */ 396*f80ad8b4SAndroid Build Coastguard Worker 397*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE5 0x50 398*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE6 0x51 399*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE7 0x52 400*f80ad8b4SAndroid Build Coastguard Worker #define CTL_GENERAL_PURPOSE8 0x53 401*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x54 - 0x5a */ 402*f80ad8b4SAndroid Build Coastguard Worker #define CTL_EXT_EFF_DEPTH 0x5b 403*f80ad8b4SAndroid Build Coastguard Worker #define CTL_TREMOLO_DEPTH 0x5c 404*f80ad8b4SAndroid Build Coastguard Worker #define CTL_CHORUS_DEPTH 0x5d 405*f80ad8b4SAndroid Build Coastguard Worker #define CTL_DETUNE_DEPTH 0x5e 406*f80ad8b4SAndroid Build Coastguard Worker #define CTL_CELESTE_DEPTH 0x5e /* Alias for the above one */ 407*f80ad8b4SAndroid Build Coastguard Worker #define CTL_PHASER_DEPTH 0x5f 408*f80ad8b4SAndroid Build Coastguard Worker #define CTL_DATA_INCREMENT 0x60 409*f80ad8b4SAndroid Build Coastguard Worker #define CTL_DATA_DECREMENT 0x61 410*f80ad8b4SAndroid Build Coastguard Worker #define CTL_NONREG_PARM_NUM_LSB 0x62 411*f80ad8b4SAndroid Build Coastguard Worker #define CTL_NONREG_PARM_NUM_MSB 0x63 412*f80ad8b4SAndroid Build Coastguard Worker #define CTL_REGIST_PARM_NUM_LSB 0x64 413*f80ad8b4SAndroid Build Coastguard Worker #define CTL_REGIST_PARM_NUM_MSB 0x65 414*f80ad8b4SAndroid Build Coastguard Worker /* undefined 0x66 - 0x78 */ 415*f80ad8b4SAndroid Build Coastguard Worker /* reserved 0x79 - 0x7f */ 416*f80ad8b4SAndroid Build Coastguard Worker 417*f80ad8b4SAndroid Build Coastguard Worker /* Pseudo controllers (not midi compatible) */ 418*f80ad8b4SAndroid Build Coastguard Worker #define CTRL_PITCH_BENDER 255 419*f80ad8b4SAndroid Build Coastguard Worker #define CTRL_PITCH_BENDER_RANGE 254 420*f80ad8b4SAndroid Build Coastguard Worker #define CTRL_EXPRESSION 253 /* Obsolete */ 421*f80ad8b4SAndroid Build Coastguard Worker #define CTRL_MAIN_VOLUME 252 /* Obsolete */ 422*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_BALANCE 11 423*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_VOLMODE 12 424*f80ad8b4SAndroid Build Coastguard Worker 425*f80ad8b4SAndroid Build Coastguard Worker /* 426*f80ad8b4SAndroid Build Coastguard Worker * Volume mode decides how volumes are used 427*f80ad8b4SAndroid Build Coastguard Worker */ 428*f80ad8b4SAndroid Build Coastguard Worker 429*f80ad8b4SAndroid Build Coastguard Worker #define VOL_METHOD_ADAGIO 1 430*f80ad8b4SAndroid Build Coastguard Worker #define VOL_METHOD_LINEAR 2 431*f80ad8b4SAndroid Build Coastguard Worker 432*f80ad8b4SAndroid Build Coastguard Worker /* 433*f80ad8b4SAndroid Build Coastguard Worker * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as 434*f80ad8b4SAndroid Build Coastguard Worker * input events. 435*f80ad8b4SAndroid Build Coastguard Worker */ 436*f80ad8b4SAndroid Build Coastguard Worker 437*f80ad8b4SAndroid Build Coastguard Worker /* 438*f80ad8b4SAndroid Build Coastguard Worker * Event codes 0xf0 to 0xfc are reserved for future extensions. 439*f80ad8b4SAndroid Build Coastguard Worker */ 440*f80ad8b4SAndroid Build Coastguard Worker 441*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_FULLSIZE 0xfd /* Long events */ 442*f80ad8b4SAndroid Build Coastguard Worker /* 443*f80ad8b4SAndroid Build Coastguard Worker * SEQ_FULLSIZE events are used for loading patches/samples to the 444*f80ad8b4SAndroid Build Coastguard Worker * synthesizer devices. These events are passed directly to the driver 445*f80ad8b4SAndroid Build Coastguard Worker * of the associated synthesizer device. There is no limit to the size 446*f80ad8b4SAndroid Build Coastguard Worker * of the extended events. These events are not queued but executed 447*f80ad8b4SAndroid Build Coastguard Worker * immediately when the write() is called (execution can take several 448*f80ad8b4SAndroid Build Coastguard Worker * seconds of time). 449*f80ad8b4SAndroid Build Coastguard Worker * 450*f80ad8b4SAndroid Build Coastguard Worker * When a SEQ_FULLSIZE message is written to the device, it must 451*f80ad8b4SAndroid Build Coastguard Worker * be written using exactly one write() call. Other events cannot 452*f80ad8b4SAndroid Build Coastguard Worker * be mixed to the same write. 453*f80ad8b4SAndroid Build Coastguard Worker * 454*f80ad8b4SAndroid Build Coastguard Worker * For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the 455*f80ad8b4SAndroid Build Coastguard Worker * /dev/sequencer. Don't write other data together with the instrument structure 456*f80ad8b4SAndroid Build Coastguard Worker * Set the key field of the structure to FM_PATCH. The device field is used to 457*f80ad8b4SAndroid Build Coastguard Worker * route the patch to the corresponding device. 458*f80ad8b4SAndroid Build Coastguard Worker * 459*f80ad8b4SAndroid Build Coastguard Worker * For wave table use struct patch_info. Initialize the key field 460*f80ad8b4SAndroid Build Coastguard Worker * to WAVE_PATCH. 461*f80ad8b4SAndroid Build Coastguard Worker */ 462*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PRIVATE 0xfe /* Low level HW dependent events (8 bytes) */ 463*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_EXTENDED 0xff /* Extended events (8 bytes) OBSOLETE */ 464*f80ad8b4SAndroid Build Coastguard Worker 465*f80ad8b4SAndroid Build Coastguard Worker /* 466*f80ad8b4SAndroid Build Coastguard Worker * Record for FM patches 467*f80ad8b4SAndroid Build Coastguard Worker */ 468*f80ad8b4SAndroid Build Coastguard Worker 469*f80ad8b4SAndroid Build Coastguard Worker typedef unsigned char sbi_instr_data[32]; 470*f80ad8b4SAndroid Build Coastguard Worker 471*f80ad8b4SAndroid Build Coastguard Worker struct sbi_instrument { 472*f80ad8b4SAndroid Build Coastguard Worker unsigned short key; /* FM_PATCH or OPL3_PATCH */ 473*f80ad8b4SAndroid Build Coastguard Worker #define FM_PATCH _PATCHKEY(0x01) 474*f80ad8b4SAndroid Build Coastguard Worker #define OPL3_PATCH _PATCHKEY(0x03) 475*f80ad8b4SAndroid Build Coastguard Worker short device; /* Synth# (0-4) */ 476*f80ad8b4SAndroid Build Coastguard Worker int channel; /* Program# to be initialized */ 477*f80ad8b4SAndroid Build Coastguard Worker sbi_instr_data operators; /* Register settings for operator cells (.SBI format) */ 478*f80ad8b4SAndroid Build Coastguard Worker }; 479*f80ad8b4SAndroid Build Coastguard Worker 480*f80ad8b4SAndroid Build Coastguard Worker struct synth_info { /* Read only */ 481*f80ad8b4SAndroid Build Coastguard Worker char name[30]; 482*f80ad8b4SAndroid Build Coastguard Worker int device; /* 0-N. INITIALIZE BEFORE CALLING */ 483*f80ad8b4SAndroid Build Coastguard Worker int synth_type; 484*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_TYPE_FM 0 485*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_TYPE_SAMPLE 1 486*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_TYPE_MIDI 2 /* Midi interface */ 487*f80ad8b4SAndroid Build Coastguard Worker 488*f80ad8b4SAndroid Build Coastguard Worker int synth_subtype; 489*f80ad8b4SAndroid Build Coastguard Worker #define FM_TYPE_ADLIB 0x00 490*f80ad8b4SAndroid Build Coastguard Worker #define FM_TYPE_OPL3 0x01 491*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_TYPE_MPU401 0x401 492*f80ad8b4SAndroid Build Coastguard Worker 493*f80ad8b4SAndroid Build Coastguard Worker #define SAMPLE_TYPE_BASIC 0x10 494*f80ad8b4SAndroid Build Coastguard Worker #define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC 495*f80ad8b4SAndroid Build Coastguard Worker #define SAMPLE_TYPE_WAVEFRONT 0x11 496*f80ad8b4SAndroid Build Coastguard Worker 497*f80ad8b4SAndroid Build Coastguard Worker int perc_mode; /* No longer supported */ 498*f80ad8b4SAndroid Build Coastguard Worker int nr_voices; 499*f80ad8b4SAndroid Build Coastguard Worker int nr_drums; /* Obsolete field */ 500*f80ad8b4SAndroid Build Coastguard Worker int instr_bank_size; 501*f80ad8b4SAndroid Build Coastguard Worker unsigned int capabilities; 502*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_CAP_PERCMODE 0x00000001 /* No longer used */ 503*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_CAP_OPL3 0x00000002 /* Set if OPL3 supported */ 504*f80ad8b4SAndroid Build Coastguard Worker #define SYNTH_CAP_INPUT 0x00000004 /* Input (MIDI) device */ 505*f80ad8b4SAndroid Build Coastguard Worker int dummies[19]; /* Reserve space */ 506*f80ad8b4SAndroid Build Coastguard Worker }; 507*f80ad8b4SAndroid Build Coastguard Worker 508*f80ad8b4SAndroid Build Coastguard Worker struct sound_timer_info { 509*f80ad8b4SAndroid Build Coastguard Worker char name[32]; 510*f80ad8b4SAndroid Build Coastguard Worker int caps; 511*f80ad8b4SAndroid Build Coastguard Worker }; 512*f80ad8b4SAndroid Build Coastguard Worker 513*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_CAP_MPU401 1 /* MPU-401 intelligent mode */ 514*f80ad8b4SAndroid Build Coastguard Worker 515*f80ad8b4SAndroid Build Coastguard Worker struct midi_info { 516*f80ad8b4SAndroid Build Coastguard Worker char name[30]; 517*f80ad8b4SAndroid Build Coastguard Worker int device; /* 0-N. INITIALIZE BEFORE CALLING */ 518*f80ad8b4SAndroid Build Coastguard Worker unsigned int capabilities; /* To be defined later */ 519*f80ad8b4SAndroid Build Coastguard Worker int dev_type; 520*f80ad8b4SAndroid Build Coastguard Worker int dummies[18]; /* Reserve space */ 521*f80ad8b4SAndroid Build Coastguard Worker }; 522*f80ad8b4SAndroid Build Coastguard Worker 523*f80ad8b4SAndroid Build Coastguard Worker /******************************************** 524*f80ad8b4SAndroid Build Coastguard Worker * ioctl commands for the /dev/midi## 525*f80ad8b4SAndroid Build Coastguard Worker */ 526*f80ad8b4SAndroid Build Coastguard Worker typedef struct { 527*f80ad8b4SAndroid Build Coastguard Worker unsigned char cmd; 528*f80ad8b4SAndroid Build Coastguard Worker char nr_args, nr_returns; 529*f80ad8b4SAndroid Build Coastguard Worker unsigned char data[30]; 530*f80ad8b4SAndroid Build Coastguard Worker } mpu_command_rec; 531*f80ad8b4SAndroid Build Coastguard Worker 532*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int) 533*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int) 534*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec) 535*f80ad8b4SAndroid Build Coastguard Worker 536*f80ad8b4SAndroid Build Coastguard Worker /******************************************** 537*f80ad8b4SAndroid Build Coastguard Worker * IOCTL commands for /dev/dsp and /dev/audio 538*f80ad8b4SAndroid Build Coastguard Worker */ 539*f80ad8b4SAndroid Build Coastguard Worker 540*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_RESET _SIO ('P', 0) 541*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SYNC _SIO ('P', 1) 542*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SPEED _SIOWR('P', 2, int) 543*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_STEREO _SIOWR('P', 3, int) 544*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int) 545*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT 546*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int) 547*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS 548*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int) 549*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_POST _SIO ('P', 8) 550*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int) 551*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int) 552*f80ad8b4SAndroid Build Coastguard Worker 553*f80ad8b4SAndroid Build Coastguard Worker /* Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */ 554*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int) /* Returns a mask */ 555*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETFMT _SIOWR('P',5, int) /* Selects ONE fmt*/ 556*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_QUERY 0x00000000 /* Return current fmt */ 557*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_MU_LAW 0x00000001 558*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_A_LAW 0x00000002 559*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_IMA_ADPCM 0x00000004 560*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_U8 0x00000008 561*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/ 562*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */ 563*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_S8 0x00000040 564*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_U16_LE 0x00000080 /* Little endian U16 */ 565*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_U16_BE 0x00000100 /* Big endian U16 */ 566*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_MPEG 0x00000200 /* MPEG (2) audio */ 567*f80ad8b4SAndroid Build Coastguard Worker # define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */ 568*f80ad8b4SAndroid Build Coastguard Worker 569*f80ad8b4SAndroid Build Coastguard Worker /* 570*f80ad8b4SAndroid Build Coastguard Worker * Buffer status queries. 571*f80ad8b4SAndroid Build Coastguard Worker */ 572*f80ad8b4SAndroid Build Coastguard Worker typedef struct audio_buf_info { 573*f80ad8b4SAndroid Build Coastguard Worker int fragments; /* # of available fragments (partially usend ones not counted) */ 574*f80ad8b4SAndroid Build Coastguard Worker int fragstotal; /* Total # of fragments allocated */ 575*f80ad8b4SAndroid Build Coastguard Worker int fragsize; /* Size of a fragment in bytes */ 576*f80ad8b4SAndroid Build Coastguard Worker 577*f80ad8b4SAndroid Build Coastguard Worker int bytes; /* Available space in bytes (includes partially used fragments) */ 578*f80ad8b4SAndroid Build Coastguard Worker /* Note! 'bytes' could be more than fragments*fragsize */ 579*f80ad8b4SAndroid Build Coastguard Worker } audio_buf_info; 580*f80ad8b4SAndroid Build Coastguard Worker 581*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info) 582*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info) 583*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_NONBLOCK _SIO ('P',14) 584*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int) 585*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_REVISION 0x000000ff /* Bits for revision level (0 to 255) */ 586*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */ 587*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_REALTIME 0x00000200 /* Real time capability */ 588*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_BATCH 0x00000400 /* Device has some kind of */ 589*f80ad8b4SAndroid Build Coastguard Worker /* internal buffers which may */ 590*f80ad8b4SAndroid Build Coastguard Worker /* cause some delays and */ 591*f80ad8b4SAndroid Build Coastguard Worker /* decrease precision of timing */ 592*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_COPROC 0x00000800 /* Has a coprocessor */ 593*f80ad8b4SAndroid Build Coastguard Worker /* Sometimes it's a DSP */ 594*f80ad8b4SAndroid Build Coastguard Worker /* but usually not */ 595*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */ 596*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */ 597*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_MULTI 0x00004000 /* support multiple open */ 598*f80ad8b4SAndroid Build Coastguard Worker # define DSP_CAP_BIND 0x00008000 /* channel binding to front/rear/cneter/lfe */ 599*f80ad8b4SAndroid Build Coastguard Worker 600*f80ad8b4SAndroid Build Coastguard Worker 601*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int) 602*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int) 603*f80ad8b4SAndroid Build Coastguard Worker # define PCM_ENABLE_INPUT 0x00000001 604*f80ad8b4SAndroid Build Coastguard Worker # define PCM_ENABLE_OUTPUT 0x00000002 605*f80ad8b4SAndroid Build Coastguard Worker 606*f80ad8b4SAndroid Build Coastguard Worker typedef struct count_info { 607*f80ad8b4SAndroid Build Coastguard Worker int bytes; /* Total # of bytes processed */ 608*f80ad8b4SAndroid Build Coastguard Worker int blocks; /* # of fragment transitions since last time */ 609*f80ad8b4SAndroid Build Coastguard Worker int ptr; /* Current DMA pointer value */ 610*f80ad8b4SAndroid Build Coastguard Worker } count_info; 611*f80ad8b4SAndroid Build Coastguard Worker 612*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info) 613*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info) 614*f80ad8b4SAndroid Build Coastguard Worker 615*f80ad8b4SAndroid Build Coastguard Worker typedef struct buffmem_desc { 616*f80ad8b4SAndroid Build Coastguard Worker unsigned *buffer; 617*f80ad8b4SAndroid Build Coastguard Worker int size; 618*f80ad8b4SAndroid Build Coastguard Worker } buffmem_desc; 619*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc) 620*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc) 621*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21) 622*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22) 623*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int) 624*f80ad8b4SAndroid Build Coastguard Worker 625*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int) 626*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int) 627*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_QUERY 0x00000000 628*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_FRONT 0x00000001 629*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_SURR 0x00000002 630*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_CENTER_LFE 0x00000004 631*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_HANDSET 0x00000008 632*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_MIC 0x00000010 633*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_MODEM1 0x00000020 634*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_MODEM2 0x00000040 635*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_I2S 0x00000080 636*f80ad8b4SAndroid Build Coastguard Worker # define DSP_BIND_SPDIF 0x00000100 637*f80ad8b4SAndroid Build Coastguard Worker 638*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int) 639*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int) 640*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_PRO 0x0001 641*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_N_AUD 0x0002 642*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_COPY 0x0004 643*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_PRE 0x0008 644*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_CC 0x07f0 645*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_L 0x0800 646*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_DRS 0x4000 647*f80ad8b4SAndroid Build Coastguard Worker # define SPDIF_V 0x8000 648*f80ad8b4SAndroid Build Coastguard Worker 649*f80ad8b4SAndroid Build Coastguard Worker /* 650*f80ad8b4SAndroid Build Coastguard Worker * Application's profile defines the way how playback underrun situations should be handled. 651*f80ad8b4SAndroid Build Coastguard Worker * 652*f80ad8b4SAndroid Build Coastguard Worker * APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the 653*f80ad8b4SAndroid Build Coastguard Worker * playback buffer whenever an underrun occurs. This consumes some time 654*f80ad8b4SAndroid Build Coastguard Worker * prevents looping the existing buffer. 655*f80ad8b4SAndroid Build Coastguard Worker * APF_CPUINTENS is intended to be set by CPU intensive applications which 656*f80ad8b4SAndroid Build Coastguard Worker * are likely to run out of time occasionally. In this mode the buffer cleanup is 657*f80ad8b4SAndroid Build Coastguard Worker * disabled which saves CPU time but also let's the previous buffer content to 658*f80ad8b4SAndroid Build Coastguard Worker * be played during the "pause" after the underrun. 659*f80ad8b4SAndroid Build Coastguard Worker */ 660*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int) 661*f80ad8b4SAndroid Build Coastguard Worker #define APF_NORMAL 0 /* Normal applications */ 662*f80ad8b4SAndroid Build Coastguard Worker #define APF_NETWORK 1 /* Underruns probably caused by an "external" delay */ 663*f80ad8b4SAndroid Build Coastguard Worker #define APF_CPUINTENS 2 /* Underruns probably caused by "overheating" the CPU */ 664*f80ad8b4SAndroid Build Coastguard Worker 665*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_READ_RATE _SIOR ('P', 2, int) 666*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int) 667*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_READ_BITS _SIOR ('P', 5, int) 668*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int) 669*f80ad8b4SAndroid Build Coastguard Worker 670*f80ad8b4SAndroid Build Coastguard Worker /* Some alias names */ 671*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT 672*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED 673*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_POST SNDCTL_DSP_POST 674*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_RESET SNDCTL_DSP_RESET 675*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SYNC SNDCTL_DSP_SYNC 676*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE 677*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT 678*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS 679*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT 680*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE 681*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE 682*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK 683*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS 684*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER 685*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER 686*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO 687*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR 688*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR 689*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF 690*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF 691*f80ad8b4SAndroid Build Coastguard Worker 692*f80ad8b4SAndroid Build Coastguard Worker /* 693*f80ad8b4SAndroid Build Coastguard Worker * ioctl calls to be used in communication with coprocessors and 694*f80ad8b4SAndroid Build Coastguard Worker * DSP chips. 695*f80ad8b4SAndroid Build Coastguard Worker */ 696*f80ad8b4SAndroid Build Coastguard Worker 697*f80ad8b4SAndroid Build Coastguard Worker typedef struct copr_buffer { 698*f80ad8b4SAndroid Build Coastguard Worker int command; /* Set to 0 if not used */ 699*f80ad8b4SAndroid Build Coastguard Worker int flags; 700*f80ad8b4SAndroid Build Coastguard Worker #define CPF_NONE 0x0000 701*f80ad8b4SAndroid Build Coastguard Worker #define CPF_FIRST 0x0001 /* First block */ 702*f80ad8b4SAndroid Build Coastguard Worker #define CPF_LAST 0x0002 /* Last block */ 703*f80ad8b4SAndroid Build Coastguard Worker int len; 704*f80ad8b4SAndroid Build Coastguard Worker int offs; /* If required by the device (0 if not used) */ 705*f80ad8b4SAndroid Build Coastguard Worker 706*f80ad8b4SAndroid Build Coastguard Worker unsigned char data[4000]; /* NOTE! 4000 is not 4k */ 707*f80ad8b4SAndroid Build Coastguard Worker } copr_buffer; 708*f80ad8b4SAndroid Build Coastguard Worker 709*f80ad8b4SAndroid Build Coastguard Worker typedef struct copr_debug_buf { 710*f80ad8b4SAndroid Build Coastguard Worker int command; /* Used internally. Set to 0 */ 711*f80ad8b4SAndroid Build Coastguard Worker int parm1; 712*f80ad8b4SAndroid Build Coastguard Worker int parm2; 713*f80ad8b4SAndroid Build Coastguard Worker int flags; 714*f80ad8b4SAndroid Build Coastguard Worker int len; /* Length of data in bytes */ 715*f80ad8b4SAndroid Build Coastguard Worker } copr_debug_buf; 716*f80ad8b4SAndroid Build Coastguard Worker 717*f80ad8b4SAndroid Build Coastguard Worker typedef struct copr_msg { 718*f80ad8b4SAndroid Build Coastguard Worker int len; 719*f80ad8b4SAndroid Build Coastguard Worker unsigned char data[4000]; 720*f80ad8b4SAndroid Build Coastguard Worker } copr_msg; 721*f80ad8b4SAndroid Build Coastguard Worker 722*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_RESET _SIO ('C', 0) 723*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer) 724*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf) 725*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf) 726*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf) 727*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf) 728*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf) 729*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf) 730*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg) 731*f80ad8b4SAndroid Build Coastguard Worker #define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg) 732*f80ad8b4SAndroid Build Coastguard Worker 733*f80ad8b4SAndroid Build Coastguard Worker /********************************************* 734*f80ad8b4SAndroid Build Coastguard Worker * IOCTL commands for /dev/mixer 735*f80ad8b4SAndroid Build Coastguard Worker */ 736*f80ad8b4SAndroid Build Coastguard Worker 737*f80ad8b4SAndroid Build Coastguard Worker /* 738*f80ad8b4SAndroid Build Coastguard Worker * Mixer devices 739*f80ad8b4SAndroid Build Coastguard Worker * 740*f80ad8b4SAndroid Build Coastguard Worker * There can be up to 20 different analog mixer channels. The 741*f80ad8b4SAndroid Build Coastguard Worker * SOUND_MIXER_NRDEVICES gives the currently supported maximum. 742*f80ad8b4SAndroid Build Coastguard Worker * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells 743*f80ad8b4SAndroid Build Coastguard Worker * the devices supported by the particular mixer. 744*f80ad8b4SAndroid Build Coastguard Worker */ 745*f80ad8b4SAndroid Build Coastguard Worker 746*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_NRDEVICES 25 747*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_VOLUME 0 748*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_BASS 1 749*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_TREBLE 2 750*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_SYNTH 3 751*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PCM 4 752*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_SPEAKER 5 753*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_LINE 6 754*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_MIC 7 755*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_CD 8 756*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_IMIX 9 /* Recording monitor */ 757*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_ALTPCM 10 758*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_RECLEV 11 /* Recording level */ 759*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_IGAIN 12 /* Input gain */ 760*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_OGAIN 13 /* Output gain */ 761*f80ad8b4SAndroid Build Coastguard Worker /* 762*f80ad8b4SAndroid Build Coastguard Worker * The AD1848 codec and compatibles have three line level inputs 763*f80ad8b4SAndroid Build Coastguard Worker * (line, aux1 and aux2). Since each card manufacturer have assigned 764*f80ad8b4SAndroid Build Coastguard Worker * different meanings to these inputs, it's inpractical to assign 765*f80ad8b4SAndroid Build Coastguard Worker * specific meanings (line, cd, synth etc.) to them. 766*f80ad8b4SAndroid Build Coastguard Worker */ 767*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */ 768*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */ 769*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */ 770*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */ 771*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */ 772*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */ 773*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PHONEIN 20 /* Phone input */ 774*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PHONEOUT 21 /* Phone output */ 775*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */ 776*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_RADIO 23 /* Radio in */ 777*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */ 778*f80ad8b4SAndroid Build Coastguard Worker 779*f80ad8b4SAndroid Build Coastguard Worker /* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */ 780*f80ad8b4SAndroid Build Coastguard Worker /* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */ 781*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_ONOFF_MIN 28 782*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_ONOFF_MAX 30 783*f80ad8b4SAndroid Build Coastguard Worker 784*f80ad8b4SAndroid Build Coastguard Worker /* Note! Number 31 cannot be used since the sign bit is reserved */ 785*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_NONE 31 786*f80ad8b4SAndroid Build Coastguard Worker 787*f80ad8b4SAndroid Build Coastguard Worker /* 788*f80ad8b4SAndroid Build Coastguard Worker * The following unsupported macros are no longer functional. 789*f80ad8b4SAndroid Build Coastguard Worker * Use SOUND_MIXER_PRIVATE# macros in future. 790*f80ad8b4SAndroid Build Coastguard Worker */ 791*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE 792*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_MUTE SOUND_MIXER_NONE 793*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_LOUD SOUND_MIXER_NONE 794*f80ad8b4SAndroid Build Coastguard Worker 795*f80ad8b4SAndroid Build Coastguard Worker 796*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \ 797*f80ad8b4SAndroid Build Coastguard Worker "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \ 798*f80ad8b4SAndroid Build Coastguard Worker "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \ 799*f80ad8b4SAndroid Build Coastguard Worker "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"} 800*f80ad8b4SAndroid Build Coastguard Worker 801*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ 802*f80ad8b4SAndroid Build Coastguard Worker "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \ 803*f80ad8b4SAndroid Build Coastguard Worker "line1", "line2", "line3", "dig1", "dig2", "dig3", \ 804*f80ad8b4SAndroid Build Coastguard Worker "phin", "phout", "video", "radio", "monitor"} 805*f80ad8b4SAndroid Build Coastguard Worker 806*f80ad8b4SAndroid Build Coastguard Worker /* Device bitmask identifiers */ 807*f80ad8b4SAndroid Build Coastguard Worker 808*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_RECSRC 0xff /* Arg contains a bit for each recording source */ 809*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_DEVMASK 0xfe /* Arg contains a bit for each supported device */ 810*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_RECMASK 0xfd /* Arg contains a bit for each supported recording source */ 811*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_CAPS 0xfc 812*f80ad8b4SAndroid Build Coastguard Worker # define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */ 813*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */ 814*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_OUTSRC 0xfa /* Arg contains a bit for each input source to output */ 815*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_OUTMASK 0xf9 /* Arg contains a bit for each supported input source to output */ 816*f80ad8b4SAndroid Build Coastguard Worker 817*f80ad8b4SAndroid Build Coastguard Worker /* Device mask bits */ 818*f80ad8b4SAndroid Build Coastguard Worker 819*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME) 820*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS) 821*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE) 822*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH) 823*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM) 824*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER) 825*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE) 826*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC) 827*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_CD (1 << SOUND_MIXER_CD) 828*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX) 829*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM) 830*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV) 831*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN) 832*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN) 833*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1) 834*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2) 835*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3) 836*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1) 837*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2) 838*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3) 839*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN) 840*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT) 841*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO) 842*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO) 843*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR) 844*f80ad8b4SAndroid Build Coastguard Worker 845*f80ad8b4SAndroid Build Coastguard Worker /* Obsolete macros */ 846*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE) 847*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE) 848*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD) 849*f80ad8b4SAndroid Build Coastguard Worker 850*f80ad8b4SAndroid Build Coastguard Worker #define MIXER_READ(dev) _SIOR('M', dev, int) 851*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME) 852*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS) 853*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE) 854*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH) 855*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM) 856*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER) 857*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE) 858*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC) 859*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD) 860*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX) 861*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM) 862*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV) 863*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN) 864*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN) 865*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1) 866*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2) 867*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3) 868*f80ad8b4SAndroid Build Coastguard Worker 869*f80ad8b4SAndroid Build Coastguard Worker /* Obsolete macros */ 870*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE) 871*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE) 872*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD) 873*f80ad8b4SAndroid Build Coastguard Worker 874*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC) 875*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK) 876*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK) 877*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS) 878*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS) 879*f80ad8b4SAndroid Build Coastguard Worker 880*f80ad8b4SAndroid Build Coastguard Worker #define MIXER_WRITE(dev) _SIOWR('M', dev, int) 881*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME) 882*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS) 883*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE) 884*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH) 885*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM) 886*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER) 887*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE) 888*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC) 889*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD) 890*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX) 891*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM) 892*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV) 893*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN) 894*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN) 895*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1) 896*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2) 897*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3) 898*f80ad8b4SAndroid Build Coastguard Worker 899*f80ad8b4SAndroid Build Coastguard Worker /* Obsolete macros */ 900*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE) 901*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE) 902*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD) 903*f80ad8b4SAndroid Build Coastguard Worker 904*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC) 905*f80ad8b4SAndroid Build Coastguard Worker 906*f80ad8b4SAndroid Build Coastguard Worker typedef struct mixer_info 907*f80ad8b4SAndroid Build Coastguard Worker { 908*f80ad8b4SAndroid Build Coastguard Worker char id[16]; 909*f80ad8b4SAndroid Build Coastguard Worker char name[32]; 910*f80ad8b4SAndroid Build Coastguard Worker int modify_counter; 911*f80ad8b4SAndroid Build Coastguard Worker int fillers[10]; 912*f80ad8b4SAndroid Build Coastguard Worker } mixer_info; 913*f80ad8b4SAndroid Build Coastguard Worker 914*f80ad8b4SAndroid Build Coastguard Worker typedef struct _old_mixer_info /* Obsolete */ 915*f80ad8b4SAndroid Build Coastguard Worker { 916*f80ad8b4SAndroid Build Coastguard Worker char id[16]; 917*f80ad8b4SAndroid Build Coastguard Worker char name[32]; 918*f80ad8b4SAndroid Build Coastguard Worker } _old_mixer_info; 919*f80ad8b4SAndroid Build Coastguard Worker 920*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info) 921*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info) 922*f80ad8b4SAndroid Build Coastguard Worker 923*f80ad8b4SAndroid Build Coastguard Worker /* 924*f80ad8b4SAndroid Build Coastguard Worker * A mechanism for accessing "proprietary" mixer features. This method 925*f80ad8b4SAndroid Build Coastguard Worker * permits passing 128 bytes of arbitrary data between a mixer application 926*f80ad8b4SAndroid Build Coastguard Worker * and the mixer driver. Interpretation of the record is defined by 927*f80ad8b4SAndroid Build Coastguard Worker * the particular mixer driver. 928*f80ad8b4SAndroid Build Coastguard Worker */ 929*f80ad8b4SAndroid Build Coastguard Worker typedef unsigned char mixer_record[128]; 930*f80ad8b4SAndroid Build Coastguard Worker 931*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record) 932*f80ad8b4SAndroid Build Coastguard Worker 933*f80ad8b4SAndroid Build Coastguard Worker /* 934*f80ad8b4SAndroid Build Coastguard Worker * Two ioctls for special souncard function 935*f80ad8b4SAndroid Build Coastguard Worker */ 936*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_AGC _SIOWR('M', 103, int) 937*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_3DSE _SIOWR('M', 104, int) 938*f80ad8b4SAndroid Build Coastguard Worker 939*f80ad8b4SAndroid Build Coastguard Worker /* 940*f80ad8b4SAndroid Build Coastguard Worker * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers. 941*f80ad8b4SAndroid Build Coastguard Worker * These features can be used when accessing device specific features. 942*f80ad8b4SAndroid Build Coastguard Worker */ 943*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int) 944*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int) 945*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int) 946*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int) 947*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int) 948*f80ad8b4SAndroid Build Coastguard Worker 949*f80ad8b4SAndroid Build Coastguard Worker /* 950*f80ad8b4SAndroid Build Coastguard Worker * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used 951*f80ad8b4SAndroid Build Coastguard Worker * for querying current mixer settings from the driver and for loading 952*f80ad8b4SAndroid Build Coastguard Worker * default volume settings _prior_ activating the mixer (loading 953*f80ad8b4SAndroid Build Coastguard Worker * doesn't affect current state of the mixer hardware). These calls 954*f80ad8b4SAndroid Build Coastguard Worker * are for internal use only. 955*f80ad8b4SAndroid Build Coastguard Worker */ 956*f80ad8b4SAndroid Build Coastguard Worker 957*f80ad8b4SAndroid Build Coastguard Worker typedef struct mixer_vol_table { 958*f80ad8b4SAndroid Build Coastguard Worker int num; /* Index to volume table */ 959*f80ad8b4SAndroid Build Coastguard Worker char name[32]; 960*f80ad8b4SAndroid Build Coastguard Worker int levels[32]; 961*f80ad8b4SAndroid Build Coastguard Worker } mixer_vol_table; 962*f80ad8b4SAndroid Build Coastguard Worker 963*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table) 964*f80ad8b4SAndroid Build Coastguard Worker #define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table) 965*f80ad8b4SAndroid Build Coastguard Worker 966*f80ad8b4SAndroid Build Coastguard Worker /* 967*f80ad8b4SAndroid Build Coastguard Worker * An ioctl for identifying the driver version. It will return value 968*f80ad8b4SAndroid Build Coastguard Worker * of the SOUND_VERSION macro used when compiling the driver. 969*f80ad8b4SAndroid Build Coastguard Worker * This call was introduced in OSS version 3.6 and it will not work 970*f80ad8b4SAndroid Build Coastguard Worker * with earlier versions (returns EINVAL). 971*f80ad8b4SAndroid Build Coastguard Worker */ 972*f80ad8b4SAndroid Build Coastguard Worker #define OSS_GETVERSION _SIOR ('M', 118, int) 973*f80ad8b4SAndroid Build Coastguard Worker 974*f80ad8b4SAndroid Build Coastguard Worker /* 975*f80ad8b4SAndroid Build Coastguard Worker * Level 2 event types for /dev/sequencer 976*f80ad8b4SAndroid Build Coastguard Worker */ 977*f80ad8b4SAndroid Build Coastguard Worker 978*f80ad8b4SAndroid Build Coastguard Worker /* 979*f80ad8b4SAndroid Build Coastguard Worker * The 4 most significant bits of byte 0 specify the class of 980*f80ad8b4SAndroid Build Coastguard Worker * the event: 981*f80ad8b4SAndroid Build Coastguard Worker * 982*f80ad8b4SAndroid Build Coastguard Worker * 0x8X = system level events, 983*f80ad8b4SAndroid Build Coastguard Worker * 0x9X = device/port specific events, event[1] = device/port, 984*f80ad8b4SAndroid Build Coastguard Worker * The last 4 bits give the subtype: 985*f80ad8b4SAndroid Build Coastguard Worker * 0x02 = Channel event (event[3] = chn). 986*f80ad8b4SAndroid Build Coastguard Worker * 0x01 = note event (event[4] = note). 987*f80ad8b4SAndroid Build Coastguard Worker * (0x01 is not used alone but always with bit 0x02). 988*f80ad8b4SAndroid Build Coastguard Worker * event[2] = MIDI message code (0x80=note off etc.) 989*f80ad8b4SAndroid Build Coastguard Worker * 990*f80ad8b4SAndroid Build Coastguard Worker */ 991*f80ad8b4SAndroid Build Coastguard Worker 992*f80ad8b4SAndroid Build Coastguard Worker #define EV_SEQ_LOCAL 0x80 993*f80ad8b4SAndroid Build Coastguard Worker #define EV_TIMING 0x81 994*f80ad8b4SAndroid Build Coastguard Worker #define EV_CHN_COMMON 0x92 995*f80ad8b4SAndroid Build Coastguard Worker #define EV_CHN_VOICE 0x93 996*f80ad8b4SAndroid Build Coastguard Worker #define EV_SYSEX 0x94 997*f80ad8b4SAndroid Build Coastguard Worker /* 998*f80ad8b4SAndroid Build Coastguard Worker * Event types 200 to 220 are reserved for application use. 999*f80ad8b4SAndroid Build Coastguard Worker * These numbers will not be used by the driver. 1000*f80ad8b4SAndroid Build Coastguard Worker */ 1001*f80ad8b4SAndroid Build Coastguard Worker 1002*f80ad8b4SAndroid Build Coastguard Worker /* 1003*f80ad8b4SAndroid Build Coastguard Worker * Events for event type EV_CHN_VOICE 1004*f80ad8b4SAndroid Build Coastguard Worker */ 1005*f80ad8b4SAndroid Build Coastguard Worker 1006*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_NOTEOFF 0x80 1007*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_NOTEON 0x90 1008*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_KEY_PRESSURE 0xA0 1009*f80ad8b4SAndroid Build Coastguard Worker 1010*f80ad8b4SAndroid Build Coastguard Worker /* 1011*f80ad8b4SAndroid Build Coastguard Worker * Events for event type EV_CHN_COMMON 1012*f80ad8b4SAndroid Build Coastguard Worker */ 1013*f80ad8b4SAndroid Build Coastguard Worker 1014*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_CTL_CHANGE 0xB0 1015*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_PGM_CHANGE 0xC0 1016*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_CHN_PRESSURE 0xD0 1017*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_PITCH_BEND 0xE0 1018*f80ad8b4SAndroid Build Coastguard Worker 1019*f80ad8b4SAndroid Build Coastguard Worker #define MIDI_SYSTEM_PREFIX 0xF0 1020*f80ad8b4SAndroid Build Coastguard Worker 1021*f80ad8b4SAndroid Build Coastguard Worker /* 1022*f80ad8b4SAndroid Build Coastguard Worker * Timer event types 1023*f80ad8b4SAndroid Build Coastguard Worker */ 1024*f80ad8b4SAndroid Build Coastguard Worker #define TMR_WAIT_REL 1 /* Time relative to the prev time */ 1025*f80ad8b4SAndroid Build Coastguard Worker #define TMR_WAIT_ABS 2 /* Absolute time since TMR_START */ 1026*f80ad8b4SAndroid Build Coastguard Worker #define TMR_STOP 3 1027*f80ad8b4SAndroid Build Coastguard Worker #define TMR_START 4 1028*f80ad8b4SAndroid Build Coastguard Worker #define TMR_CONTINUE 5 1029*f80ad8b4SAndroid Build Coastguard Worker #define TMR_TEMPO 6 1030*f80ad8b4SAndroid Build Coastguard Worker #define TMR_ECHO 8 1031*f80ad8b4SAndroid Build Coastguard Worker #define TMR_CLOCK 9 /* MIDI clock */ 1032*f80ad8b4SAndroid Build Coastguard Worker #define TMR_SPP 10 /* Song position pointer */ 1033*f80ad8b4SAndroid Build Coastguard Worker #define TMR_TIMESIG 11 /* Time signature */ 1034*f80ad8b4SAndroid Build Coastguard Worker 1035*f80ad8b4SAndroid Build Coastguard Worker /* 1036*f80ad8b4SAndroid Build Coastguard Worker * Local event types 1037*f80ad8b4SAndroid Build Coastguard Worker */ 1038*f80ad8b4SAndroid Build Coastguard Worker #define LOCL_STARTAUDIO 1 1039*f80ad8b4SAndroid Build Coastguard Worker 1040*f80ad8b4SAndroid Build Coastguard Worker #if !defined(__KERNEL__) || defined(USE_SEQ_MACROS) 1041*f80ad8b4SAndroid Build Coastguard Worker /* 1042*f80ad8b4SAndroid Build Coastguard Worker * Some convenience macros to simplify programming of the 1043*f80ad8b4SAndroid Build Coastguard Worker * /dev/sequencer interface 1044*f80ad8b4SAndroid Build Coastguard Worker * 1045*f80ad8b4SAndroid Build Coastguard Worker * This is a legacy interface for applications written against 1046*f80ad8b4SAndroid Build Coastguard Worker * the OSSlib-3.8 style interface. It is no longer possible 1047*f80ad8b4SAndroid Build Coastguard Worker * to actually link against OSSlib with this header, but we 1048*f80ad8b4SAndroid Build Coastguard Worker * still provide these macros for programs using them. 1049*f80ad8b4SAndroid Build Coastguard Worker * 1050*f80ad8b4SAndroid Build Coastguard Worker * If you want to use OSSlib, it is recommended that you get 1051*f80ad8b4SAndroid Build Coastguard Worker * the GPL version of OSS-4.x and build against that version 1052*f80ad8b4SAndroid Build Coastguard Worker * of the header. 1053*f80ad8b4SAndroid Build Coastguard Worker * 1054*f80ad8b4SAndroid Build Coastguard Worker * We redefine the extern keyword so that usr/include/headers_check.pl 1055*f80ad8b4SAndroid Build Coastguard Worker * does not complain about SEQ_USE_EXTBUF. 1056*f80ad8b4SAndroid Build Coastguard Worker */ 1057*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() 1058*f80ad8b4SAndroid Build Coastguard Worker 1059*f80ad8b4SAndroid Build Coastguard Worker void seqbuf_dump(void); /* This function must be provided by programs */ 1060*f80ad8b4SAndroid Build Coastguard Worker 1061*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PM_DEFINES int __foo_bar___ 1062*f80ad8b4SAndroid Build Coastguard Worker 1063*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_LOAD_GMINSTR(dev, instr) 1064*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_LOAD_GMDRUM(dev, drum) 1065*f80ad8b4SAndroid Build Coastguard Worker 1066*f80ad8b4SAndroid Build Coastguard Worker #define _SEQ_EXTERN extern 1067*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_USE_EXTBUF() \ 1068*f80ad8b4SAndroid Build Coastguard Worker _SEQ_EXTERN unsigned char _seqbuf[]; \ 1069*f80ad8b4SAndroid Build Coastguard Worker _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr 1070*f80ad8b4SAndroid Build Coastguard Worker 1071*f80ad8b4SAndroid Build Coastguard Worker #ifndef USE_SIMPLE_MACROS 1072*f80ad8b4SAndroid Build Coastguard Worker /* Sample seqbuf_dump() implementation: 1073*f80ad8b4SAndroid Build Coastguard Worker * 1074*f80ad8b4SAndroid Build Coastguard Worker * SEQ_DEFINEBUF (2048); -- Defines a buffer for 2048 bytes 1075*f80ad8b4SAndroid Build Coastguard Worker * 1076*f80ad8b4SAndroid Build Coastguard Worker * int seqfd; -- The file descriptor for /dev/sequencer. 1077*f80ad8b4SAndroid Build Coastguard Worker * 1078*f80ad8b4SAndroid Build Coastguard Worker * void 1079*f80ad8b4SAndroid Build Coastguard Worker * seqbuf_dump () 1080*f80ad8b4SAndroid Build Coastguard Worker * { 1081*f80ad8b4SAndroid Build Coastguard Worker * if (_seqbufptr) 1082*f80ad8b4SAndroid Build Coastguard Worker * if (write (seqfd, _seqbuf, _seqbufptr) == -1) 1083*f80ad8b4SAndroid Build Coastguard Worker * { 1084*f80ad8b4SAndroid Build Coastguard Worker * perror ("write /dev/sequencer"); 1085*f80ad8b4SAndroid Build Coastguard Worker * exit (-1); 1086*f80ad8b4SAndroid Build Coastguard Worker * } 1087*f80ad8b4SAndroid Build Coastguard Worker * _seqbufptr = 0; 1088*f80ad8b4SAndroid Build Coastguard Worker * } 1089*f80ad8b4SAndroid Build Coastguard Worker */ 1090*f80ad8b4SAndroid Build Coastguard Worker 1091*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0 1092*f80ad8b4SAndroid Build Coastguard Worker #define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump() 1093*f80ad8b4SAndroid Build Coastguard Worker #define _SEQ_ADVBUF(len) _seqbufptr += len 1094*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DUMPBUF seqbuf_dump 1095*f80ad8b4SAndroid Build Coastguard Worker #else 1096*f80ad8b4SAndroid Build Coastguard Worker /* 1097*f80ad8b4SAndroid Build Coastguard Worker * This variation of the sequencer macros is used just to format one event 1098*f80ad8b4SAndroid Build Coastguard Worker * using fixed buffer. 1099*f80ad8b4SAndroid Build Coastguard Worker * 1100*f80ad8b4SAndroid Build Coastguard Worker * The program using the macro library must define the following macros before 1101*f80ad8b4SAndroid Build Coastguard Worker * using this library. 1102*f80ad8b4SAndroid Build Coastguard Worker * 1103*f80ad8b4SAndroid Build Coastguard Worker * #define _seqbuf name of the buffer (unsigned char[]) 1104*f80ad8b4SAndroid Build Coastguard Worker * #define _SEQ_ADVBUF(len) If the applic needs to know the exact 1105*f80ad8b4SAndroid Build Coastguard Worker * size of the event, this macro can be used. 1106*f80ad8b4SAndroid Build Coastguard Worker * Otherwise this must be defined as empty. 1107*f80ad8b4SAndroid Build Coastguard Worker * #define _seqbufptr Define the name of index variable or 0 if 1108*f80ad8b4SAndroid Build Coastguard Worker * not required. 1109*f80ad8b4SAndroid Build Coastguard Worker */ 1110*f80ad8b4SAndroid Build Coastguard Worker #define _SEQ_NEEDBUF(len) /* empty */ 1111*f80ad8b4SAndroid Build Coastguard Worker #endif 1112*f80ad8b4SAndroid Build Coastguard Worker 1113*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\ 1114*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ 1115*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\ 1116*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = (dev);\ 1117*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = (mode);\ 1118*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+4] = 0;\ 1119*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+5] = 0;\ 1120*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+6] = 0;\ 1121*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+7] = 0;\ 1122*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1123*f80ad8b4SAndroid Build Coastguard Worker 1124*f80ad8b4SAndroid Build Coastguard Worker /* 1125*f80ad8b4SAndroid Build Coastguard Worker * Midi voice messages 1126*f80ad8b4SAndroid Build Coastguard Worker */ 1127*f80ad8b4SAndroid Build Coastguard Worker 1128*f80ad8b4SAndroid Build Coastguard Worker #define _CHN_VOICE(dev, event, chn, note, parm) \ 1129*f80ad8b4SAndroid Build Coastguard Worker {_SEQ_NEEDBUF(8);\ 1130*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = EV_CHN_VOICE;\ 1131*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (dev);\ 1132*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = (event);\ 1133*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = (chn);\ 1134*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+4] = (note);\ 1135*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+5] = (parm);\ 1136*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+6] = (0);\ 1137*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+7] = 0;\ 1138*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1139*f80ad8b4SAndroid Build Coastguard Worker 1140*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_START_NOTE(dev, chn, note, vol) \ 1141*f80ad8b4SAndroid Build Coastguard Worker _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol) 1142*f80ad8b4SAndroid Build Coastguard Worker 1143*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_STOP_NOTE(dev, chn, note, vol) \ 1144*f80ad8b4SAndroid Build Coastguard Worker _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol) 1145*f80ad8b4SAndroid Build Coastguard Worker 1146*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \ 1147*f80ad8b4SAndroid Build Coastguard Worker _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure) 1148*f80ad8b4SAndroid Build Coastguard Worker 1149*f80ad8b4SAndroid Build Coastguard Worker /* 1150*f80ad8b4SAndroid Build Coastguard Worker * Midi channel messages 1151*f80ad8b4SAndroid Build Coastguard Worker */ 1152*f80ad8b4SAndroid Build Coastguard Worker 1153*f80ad8b4SAndroid Build Coastguard Worker #define _CHN_COMMON(dev, event, chn, p1, p2, w14) \ 1154*f80ad8b4SAndroid Build Coastguard Worker {_SEQ_NEEDBUF(8);\ 1155*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = EV_CHN_COMMON;\ 1156*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (dev);\ 1157*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = (event);\ 1158*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = (chn);\ 1159*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+4] = (p1);\ 1160*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+5] = (p2);\ 1161*f80ad8b4SAndroid Build Coastguard Worker *(short *)&_seqbuf[_seqbufptr+6] = (w14);\ 1162*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1163*f80ad8b4SAndroid Build Coastguard Worker /* 1164*f80ad8b4SAndroid Build Coastguard Worker * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits 1165*f80ad8b4SAndroid Build Coastguard Worker * sending any MIDI bytes but it's absolutely not possible. Trying to do 1166*f80ad8b4SAndroid Build Coastguard Worker * so _will_ cause problems with MPU401 intelligent mode). 1167*f80ad8b4SAndroid Build Coastguard Worker * 1168*f80ad8b4SAndroid Build Coastguard Worker * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be 1169*f80ad8b4SAndroid Build Coastguard Worker * sent by calling SEQ_SYSEX() several times (there must be no other events 1170*f80ad8b4SAndroid Build Coastguard Worker * between them). First sysex fragment must have 0xf0 in the first byte 1171*f80ad8b4SAndroid Build Coastguard Worker * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte 1172*f80ad8b4SAndroid Build Coastguard Worker * between these sysex start and end markers cannot be larger than 0x7f. Also 1173*f80ad8b4SAndroid Build Coastguard Worker * lengths of each fragments (except the last one) must be 6. 1174*f80ad8b4SAndroid Build Coastguard Worker * 1175*f80ad8b4SAndroid Build Coastguard Worker * Breaking the above rules may work with some MIDI ports but is likely to 1176*f80ad8b4SAndroid Build Coastguard Worker * cause fatal problems with some other devices (such as MPU401). 1177*f80ad8b4SAndroid Build Coastguard Worker */ 1178*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_SYSEX(dev, buf, len) \ 1179*f80ad8b4SAndroid Build Coastguard Worker {int ii, ll=(len); \ 1180*f80ad8b4SAndroid Build Coastguard Worker unsigned char *bufp=buf;\ 1181*f80ad8b4SAndroid Build Coastguard Worker if (ll>6)ll=6;\ 1182*f80ad8b4SAndroid Build Coastguard Worker _SEQ_NEEDBUF(8);\ 1183*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = EV_SYSEX;\ 1184*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (dev);\ 1185*f80ad8b4SAndroid Build Coastguard Worker for(ii=0;ii<ll;ii++)\ 1186*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+ii+2] = bufp[ii];\ 1187*f80ad8b4SAndroid Build Coastguard Worker for(ii=ll;ii<6;ii++)\ 1188*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+ii+2] = 0xff;\ 1189*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1190*f80ad8b4SAndroid Build Coastguard Worker 1191*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_CHN_PRESSURE(dev, chn, pressure) \ 1192*f80ad8b4SAndroid Build Coastguard Worker _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0) 1193*f80ad8b4SAndroid Build Coastguard Worker 1194*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_SET_PATCH SEQ_PGM_CHANGE 1195*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PGM_CHANGE(dev, chn, patch) \ 1196*f80ad8b4SAndroid Build Coastguard Worker _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) 1197*f80ad8b4SAndroid Build Coastguard Worker 1198*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_CONTROL(dev, chn, controller, value) \ 1199*f80ad8b4SAndroid Build Coastguard Worker _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value) 1200*f80ad8b4SAndroid Build Coastguard Worker 1201*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_BENDER(dev, chn, value) \ 1202*f80ad8b4SAndroid Build Coastguard Worker _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value) 1203*f80ad8b4SAndroid Build Coastguard Worker 1204*f80ad8b4SAndroid Build Coastguard Worker 1205*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\ 1206*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ 1207*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\ 1208*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = (dev);\ 1209*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = (voice);\ 1210*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+4] = (controller);\ 1211*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+5] = ((value)&0xff);\ 1212*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\ 1213*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+7] = 0;\ 1214*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1215*f80ad8b4SAndroid Build Coastguard Worker /* 1216*f80ad8b4SAndroid Build Coastguard Worker * The following 5 macros are incorrectly implemented and obsolete. 1217*f80ad8b4SAndroid Build Coastguard Worker * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead. 1218*f80ad8b4SAndroid Build Coastguard Worker */ 1219*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value) 1220*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value) 1221*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128) 1222*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100) 1223*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2) 1224*f80ad8b4SAndroid Build Coastguard Worker 1225*f80ad8b4SAndroid Build Coastguard Worker /* 1226*f80ad8b4SAndroid Build Coastguard Worker * Timing and synchronization macros 1227*f80ad8b4SAndroid Build Coastguard Worker */ 1228*f80ad8b4SAndroid Build Coastguard Worker 1229*f80ad8b4SAndroid Build Coastguard Worker #define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\ 1230*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+0] = EV_TIMING; \ 1231*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (ev); \ 1232*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = 0;\ 1233*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = 0;\ 1234*f80ad8b4SAndroid Build Coastguard Worker *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ 1235*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1236*f80ad8b4SAndroid Build Coastguard Worker 1237*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0) 1238*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0) 1239*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0) 1240*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks) 1241*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks) 1242*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key) 1243*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value) 1244*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos) 1245*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig) 1246*f80ad8b4SAndroid Build Coastguard Worker 1247*f80ad8b4SAndroid Build Coastguard Worker /* 1248*f80ad8b4SAndroid Build Coastguard Worker * Local control events 1249*f80ad8b4SAndroid Build Coastguard Worker */ 1250*f80ad8b4SAndroid Build Coastguard Worker 1251*f80ad8b4SAndroid Build Coastguard Worker #define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\ 1252*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \ 1253*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (ev); \ 1254*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = 0;\ 1255*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = 0;\ 1256*f80ad8b4SAndroid Build Coastguard Worker *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ 1257*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(8);} 1258*f80ad8b4SAndroid Build Coastguard Worker 1259*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask) 1260*f80ad8b4SAndroid Build Coastguard Worker /* 1261*f80ad8b4SAndroid Build Coastguard Worker * Events for the level 1 interface only 1262*f80ad8b4SAndroid Build Coastguard Worker */ 1263*f80ad8b4SAndroid Build Coastguard Worker 1264*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\ 1265*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\ 1266*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+1] = (byte);\ 1267*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+2] = (device);\ 1268*f80ad8b4SAndroid Build Coastguard Worker _seqbuf[_seqbufptr+3] = 0;\ 1269*f80ad8b4SAndroid Build Coastguard Worker _SEQ_ADVBUF(4);} 1270*f80ad8b4SAndroid Build Coastguard Worker 1271*f80ad8b4SAndroid Build Coastguard Worker /* 1272*f80ad8b4SAndroid Build Coastguard Worker * Patch loading. 1273*f80ad8b4SAndroid Build Coastguard Worker */ 1274*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_WRPATCH(patchx, len) \ 1275*f80ad8b4SAndroid Build Coastguard Worker {if (_seqbufptr) SEQ_DUMPBUF();\ 1276*f80ad8b4SAndroid Build Coastguard Worker if (write(seqfd, (char*)(patchx), len)==-1) \ 1277*f80ad8b4SAndroid Build Coastguard Worker perror("Write patch: /dev/sequencer");} 1278*f80ad8b4SAndroid Build Coastguard Worker #define SEQ_WRPATCH2(patchx, len) \ 1279*f80ad8b4SAndroid Build Coastguard Worker (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len)) 1280*f80ad8b4SAndroid Build Coastguard Worker 1281*f80ad8b4SAndroid Build Coastguard Worker #endif 1282*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPISOUNDCARD_H */ 1283