00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef SOUNDCARD_H
00016 #define SOUNDCARD_H
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #if defined(__cplusplus)
00030 #define EXTERNC extern "C"
00031 #else
00032 #define EXTERNC extern
00033 #endif
00034
00035 #define OSS_VERSION 0x040100
00036
00037 #define SOUND_VERSION OSS_VERSION
00038 #define OPEN_SOUND_SYSTEM
00039
00040 #if defined(__hpux) && !defined(_HPUX_SOURCE)
00041 # error "-D_HPUX_SOURCE must be used when compiling OSS applications"
00042 #endif
00043
00044 #ifdef __hpux
00045 #include <sys/ioctl.h>
00046 #endif
00047
00048 #ifdef linux
00049
00050 #include <linux/ioctl.h>
00051 #else
00052 # ifdef __FreeBSD__
00053 # include <sys/ioccom.h>
00054 # else
00055 # include <sys/ioctl.h>
00056 # endif
00057 #endif
00058
00059 #ifndef __SIOWR
00060 #if defined(__hpux) || (defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__INCioctlh) && !defined(__Lynx__))))
00061
00062
00063
00064
00065
00066 #define SIOCPARM_MASK IOCPARM_MASK
00067 #define SIOC_VOID IOC_VOID
00068 #define SIOC_OUT IOC_OUT
00069 #define SIOC_IN IOC_IN
00070 #define SIOC_INOUT IOC_INOUT
00071 #define __SIOC_SIZE _IOC_SIZE
00072 #define __SIOC_DIR _IOC_DIR
00073 #define __SIOC_NONE _IOC_NONE
00074 #define __SIOC_READ _IOC_READ
00075 #define __SIOC_WRITE _IOC_WRITE
00076 #define __SIO _IO
00077 #define __SIOR _IOR
00078 #define __SIOW _IOW
00079 #define __SIOWR _IOWR
00080
00081
00082 #elif defined(__minix)
00083
00084 #define SIOCPARM_MASK _IOCPARM_MASK
00085 #define SIOC_VOID _IOC_VOID
00086 #define SIOC_OUT _IOC_OUT
00087 #define SIOC_IN _IOC_IN
00088 #define SIOC_INOUT _IOC_INOUT
00089 #define __SIOC_SIZE _MINIX_IOCTL_SIZE
00090 #define __SIOC_DIR(x) (x & 0xf0000000)
00091 #define __SIOC_NONE _IOC_VOID
00092 #define __SIOC_READ _IOC_READ
00093 #define __SIOC_WRITE _IOC_WRITE
00094 #define __SIO _IO
00095 #define __SIOR _IOR
00096 #define __SIOW _IOW
00097 #define __SIOWR _IORW
00098
00099
00100 #else
00101
00102
00103 #define SIOCPARM_MASK 0x1fff
00104 #define SIOC_VOID 0x00000000
00105 #define SIOC_OUT 0x20000000
00106 #define SIOC_IN 0x40000000
00107 #define SIOC_INOUT (SIOC_IN|SIOC_OUT)
00108
00109 #define __SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
00110 #define __SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
00111 #define __SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
00112 #define __SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
00113 #define __SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
00114 #define __SIOC_DIR(x) (x & 0xf0000000)
00115 #define __SIOC_NONE SIOC_VOID
00116 #define __SIOC_READ SIOC_OUT
00117 #define __SIOC_WRITE SIOC_IN
00118 # endif
00119 #endif
00120
00121 #define OSS_LONGNAME_SIZE 64
00122 #define OSS_LABEL_SIZE 16
00123 #define OSS_DEVNODE_SIZE 32
00124 #define OSS_DEVNAME_SIZE 64
00125 #define OSS_CMD_SIZE 64
00126 #define OSS_ID_SIZE 16
00127 #define OSS_HANDLE_SIZE 32
00128 typedef char oss_longname_t[OSS_LONGNAME_SIZE];
00129 typedef char oss_label_t[OSS_LABEL_SIZE];
00130 typedef char oss_devnode_t[OSS_DEVNODE_SIZE];
00131 typedef char oss_devname_t[OSS_DEVNAME_SIZE];
00132 typedef char oss_cmd_t[OSS_CMD_SIZE];
00133 typedef char oss_id_t[OSS_ID_SIZE];
00134 typedef char oss_handle_t[OSS_HANDLE_SIZE];
00135
00136 #ifndef DISABLE_SEQUENCER
00137
00138
00139
00140
00141
00142
00143
00144 #define SNDCTL_SEQ_RESET __SIO ('Q', 0)
00145 #define SNDCTL_SEQ_SYNC __SIO ('Q', 1)
00146 #define SNDCTL_SYNTH_INFO __SIOWR('Q', 2, struct synth_info)
00147 #define SNDCTL_SEQ_CTRLRATE __SIOWR('Q', 3, int)
00148 #define SNDCTL_SEQ_GETOUTCOUNT __SIOR ('Q', 4, int)
00149 #define SNDCTL_SEQ_GETINCOUNT __SIOR ('Q', 5, int)
00150 #define SNDCTL_SEQ_PERCMODE __SIOW ('Q', 6, int)
00151 #define SNDCTL_FM_LOAD_INSTR __SIOW ('Q', 7, struct sbi_instrument)
00152 #define SNDCTL_SEQ_TESTMIDI __SIOW ('Q', 8, int)
00153 #define SNDCTL_SEQ_RESETSAMPLES __SIOW ('Q', 9, int)
00154 #define SNDCTL_SEQ_NRSYNTHS __SIOR ('Q',10, int)
00155 #define SNDCTL_SEQ_NRMIDIS __SIOR ('Q',11, int)
00156 #define SNDCTL_MIDI_INFO __SIOWR('Q',12, struct midi_info)
00157 #define SNDCTL_SEQ_THRESHOLD __SIOW ('Q',13, int)
00158 #define SNDCTL_SYNTH_MEMAVL __SIOWR('Q',14, int)
00159 #define SNDCTL_FM_4OP_ENABLE __SIOW ('Q',15, int)
00160 #define SNDCTL_SEQ_PANIC __SIO ('Q',17)
00161 #define SNDCTL_SEQ_OUTOFBAND __SIOW ('Q',18, struct seq_event_rec)
00162 #define SNDCTL_SEQ_GETTIME __SIOR ('Q',19, int)
00163 #define SNDCTL_SYNTH_ID __SIOWR('Q',20, struct synth_info)
00164 #define SNDCTL_SYNTH_CONTROL __SIOWR('Q',21, struct synth_control)
00165 #define SNDCTL_SYNTH_REMOVESAMPLE __SIOWR('Q',22, struct remove_sample)
00166 #define SNDCTL_SEQ_TIMING_ENABLE __SIO ('Q', 23)
00167 #define SNDCTL_SEQ_ACTSENSE_ENABLE __SIO ('Q', 24)
00168 #define SNDCTL_SEQ_RT_ENABLE __SIO ('Q', 25)
00169
00170 typedef struct synth_control
00171 {
00172 int devno;
00173 char data[4000];
00174 } synth_control;
00175
00176 typedef struct remove_sample
00177 {
00178 int devno;
00179 int bankno;
00180 int instrno;
00181 } remove_sample;
00182
00183 typedef struct seq_event_rec
00184 {
00185 unsigned char arr[8];
00186 } seq_event_rec;
00187
00188 #define SNDCTL_TMR_TIMEBASE __SIOWR('T', 1, int)
00189 #define SNDCTL_TMR_START __SIO ('T', 2)
00190 #define SNDCTL_TMR_STOP __SIO ('T', 3)
00191 #define SNDCTL_TMR_CONTINUE __SIO ('T', 4)
00192 #define SNDCTL_TMR_TEMPO __SIOWR('T', 5, int)
00193 #define SNDCTL_TMR_SOURCE __SIOWR('T', 6, int)
00194 # define TMR_INTERNAL 0x00000001
00195 # define TMR_EXTERNAL 0x00000002
00196 # define TMR_MODE_MIDI 0x00000010
00197 # define TMR_MODE_FSK 0x00000020
00198 # define TMR_MODE_CLS 0x00000040
00199 # define TMR_MODE_SMPTE 0x00000080
00200 #define SNDCTL_TMR_METRONOME __SIOW ('T', 7, int)
00201 #define SNDCTL_TMR_SELECT __SIOW ('T', 8, int)
00202
00203
00204
00205
00206
00207
00208 struct patch_info
00209 {
00210 unsigned short key;
00211 #define WAVE_PATCH _PATCHKEY(0x04)
00212 #define GUS_PATCH WAVE_PATCH
00213 #define WAVEFRONT_PATCH _PATCHKEY(0x06)
00214
00215 short device_no;
00216 short instr_no;
00217
00218 unsigned int mode;
00219
00220
00221
00222
00223 #define WAVE_16_BITS 0x01
00224 #define WAVE_UNSIGNED 0x02
00225 #define WAVE_LOOPING 0x04
00226 #define WAVE_BIDIR_LOOP 0x08
00227 #define WAVE_LOOP_BACK 0x10
00228 #define WAVE_SUSTAIN_ON 0x20
00229 #define WAVE_ENVELOPES 0x40
00230 #define WAVE_FAST_RELEASE 0x80
00231
00232
00233 #define WAVE_VIBRATO 0x00010000
00234 #define WAVE_TREMOLO 0x00020000
00235 #define WAVE_SCALE 0x00040000
00236 #define WAVE_FRACTIONS 0x00080000
00237
00238 #define WAVE_ROM 0x40000000
00239 #define WAVE_MULAW 0x20000000
00240
00241
00242 int len;
00243 int loop_start, loop_end;
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261 unsigned int base_freq;
00262 unsigned int base_note;
00263 unsigned int high_note;
00264 unsigned int low_note;
00265 int panning;
00266 int detuning;
00267
00268
00269 unsigned char env_rate[6];
00270 unsigned char env_offset[6];
00271
00272
00273
00274
00275
00276
00277
00278 unsigned char tremolo_sweep;
00279 unsigned char tremolo_rate;
00280 unsigned char tremolo_depth;
00281
00282 unsigned char vibrato_sweep;
00283 unsigned char vibrato_rate;
00284 unsigned char vibrato_depth;
00285
00286 int scale_frequency;
00287 unsigned int scale_factor;
00288
00289 int volume;
00290 int fractions;
00291 int reserved1;
00292 int spare[2];
00293 char data[1];
00294 };
00295
00296 struct sysex_info
00297 {
00298 short key;
00299 #define SYSEX_PATCH _PATCHKEY(0x05)
00300 #define MAUI_PATCH _PATCHKEY(0x06)
00301 short device_no;
00302 int len;
00303 unsigned char data[1];
00304 };
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330 #define SEQ_NOTEOFF 0
00331 #define SEQ_FMNOTEOFF SEQ_NOTEOFF
00332 #define SEQ_NOTEON 1
00333 #define SEQ_FMNOTEON SEQ_NOTEON
00334 #define SEQ_WAIT TMR_WAIT_ABS
00335 #define SEQ_PGMCHANGE 3
00336 #define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
00337 #define SEQ_SYNCTIMER TMR_START
00338 #define SEQ_MIDIPUTC 5
00339 #define SEQ_DRUMON 6
00340 #define SEQ_DRUMOFF 7
00341 #define SEQ_ECHO TMR_ECHO
00342 #define SEQ_AFTERTOUCH 9
00343 #define SEQ_CONTROLLER 10
00344 #define SEQ_BALANCE 11
00345 #define SEQ_VOLMODE 12
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360 #define CTL_BANK_SELECT 0x00
00361 #define CTL_MODWHEEL 0x01
00362 #define CTL_BREATH 0x02
00363
00364 #define CTL_FOOT 0x04
00365 #define CTL_PORTAMENTO_TIME 0x05
00366 #define CTL_DATA_ENTRY 0x06
00367 #define CTL_MAIN_VOLUME 0x07
00368 #define CTL_BALANCE 0x08
00369
00370 #define CTL_PAN 0x0a
00371 #define CTL_EXPRESSION 0x0b
00372
00373
00374
00375
00376 #define CTL_GENERAL_PURPOSE1 0x10
00377 #define CTL_GENERAL_PURPOSE2 0x11
00378 #define CTL_GENERAL_PURPOSE3 0x12
00379 #define CTL_GENERAL_PURPOSE4 0x13
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389 #define CTL_DAMPER_PEDAL 0x40
00390 #define CTL_SUSTAIN 0x40
00391 #define CTL_HOLD 0x40
00392 #define CTL_PORTAMENTO 0x41
00393 #define CTL_SOSTENUTO 0x42
00394 #define CTL_SOFT_PEDAL 0x43
00395
00396 #define CTL_HOLD2 0x45
00397
00398
00399 #define CTL_GENERAL_PURPOSE5 0x50
00400 #define CTL_GENERAL_PURPOSE6 0x51
00401 #define CTL_GENERAL_PURPOSE7 0x52
00402 #define CTL_GENERAL_PURPOSE8 0x53
00403
00404 #define CTL_EXT_EFF_DEPTH 0x5b
00405 #define CTL_TREMOLO_DEPTH 0x5c
00406 #define CTL_CHORUS_DEPTH 0x5d
00407 #define CTL_DETUNE_DEPTH 0x5e
00408 #define CTL_CELESTE_DEPTH 0x5e
00409 #define CTL_PHASER_DEPTH 0x5f
00410 #define CTL_DATA_INCREMENT 0x60
00411 #define CTL_DATA_DECREMENT 0x61
00412 #define CTL_NONREG_PARM_NUM_LSB 0x62
00413 #define CTL_NONREG_PARM_NUM_MSB 0x63
00414 #define CTL_REGIST_PARM_NUM_LSB 0x64
00415 #define CTL_REGIST_PARM_NUM_MSB 0x65
00416
00417
00418
00419
00420 #define CTRL_PITCH_BENDER 255
00421 #define CTRL_PITCH_BENDER_RANGE 254
00422 #define CTRL_EXPRESSION 253
00423 #define CTRL_MAIN_VOLUME 252
00424
00425
00426
00427
00428
00429 #define VOL_METHOD_ADAGIO 1
00430 #define VOL_METHOD_LINEAR 2
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441 #define SEQ_FULLSIZE 0xfd
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462 #define SEQ_PRIVATE 0xfe
00463 #define SEQ_EXTENDED 0xff
00464
00465
00466
00467
00468
00469 typedef unsigned char sbi_instr_data[32];
00470
00471 struct sbi_instrument
00472 {
00473 unsigned short key;
00474 #define FM_PATCH _PATCHKEY(0x01)
00475 #define OPL3_PATCH _PATCHKEY(0x03)
00476 short device;
00477 int channel;
00478 sbi_instr_data operators; /* Register settings for operator cells (.SBI format) */
00479 };
00480
00481 struct synth_info
00482 {
00483 char name[30];
00484 int device;
00485 int synth_type;
00486 #define SYNTH_TYPE_FM 0
00487 #define SYNTH_TYPE_SAMPLE 1
00488 #define SYNTH_TYPE_MIDI 2
00489
00490 int synth_subtype;
00491 #define FM_TYPE_ADLIB 0x00
00492 #define FM_TYPE_OPL3 0x01
00493 #define MIDI_TYPE_MPU401 0x401
00494
00495 #define SAMPLE_TYPE_BASIC 0x10
00496 #define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
00497 #define SAMPLE_TYPE_WAVEFRONT 0x11
00498
00499 int perc_mode;
00500 int nr_voices;
00501 int nr_drums;
00502 int instr_bank_size;
00503 unsigned int capabilities;
00504 #define SYNTH_CAP_PERCMODE 0x00000001
00505 #define SYNTH_CAP_OPL3 0x00000002
00506 #define SYNTH_CAP_INPUT 0x00000004
00507 int dummies[19];
00508 };
00509
00510 struct sound_timer_info
00511 {
00512 char name[32];
00513 int caps;
00514 };
00515
00516 struct midi_info
00517 {
00518 char name[30];
00519 int device;
00520 unsigned int capabilities;
00521 int dev_type;
00522 int dummies[18];
00523 };
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543 #define EV_SEQ_LOCAL 0x80
00544 #define EV_TIMING 0x81
00545 #define EV_CHN_COMMON 0x92
00546 #define EV_CHN_VOICE 0x93
00547 #define EV_SYSEX 0x94
00548 #define EV_SYSTEM 0x95
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558 #define MIDI_NOTEOFF 0x80
00559 #define MIDI_NOTEON 0x90
00560 #define MIDI_KEY_PRESSURE 0xA0
00561
00562
00563
00564
00565
00566 #define MIDI_CTL_CHANGE 0xB0
00567 #define MIDI_PGM_CHANGE 0xC0
00568 #define MIDI_CHN_PRESSURE 0xD0
00569 #define MIDI_PITCH_BEND 0xE0
00570
00571 #define MIDI_SYSTEM_PREFIX 0xF0
00572
00573
00574
00575
00576 #define TMR_WAIT_REL 1
00577 #define TMR_WAIT_ABS 2
00578 #define TMR_STOP 3
00579 #define TMR_START 4
00580 #define TMR_CONTINUE 5
00581 #define TMR_TEMPO 6
00582 #define TMR_ECHO 8
00583 #define TMR_CLOCK 9
00584 #define TMR_SPP 10
00585 #define TMR_TIMESIG 11
00586
00587
00588
00589
00590 #define LOCL_STARTAUDIO 1
00591 #define LOCL_STARTAUDIO2 2
00592 #define LOCL_STARTAUDIO3 3
00593 #define LOCL_STARTAUDIO4 4
00594
00595 #if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS)
00596
00597
00598
00599
00600
00601
00602 #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
00603
00604 void seqbuf_dump (void);
00605
00606 EXTERNC int OSS_init (int seqfd, int buflen);
00607 EXTERNC void OSS_seqbuf_dump (int fd, unsigned char *buf, int buflen);
00608 EXTERNC void OSS_seq_advbuf (int len, int fd, unsigned char *buf, int buflen);
00609 EXTERNC void OSS_seq_needbuf (int len, int fd, unsigned char *buf,
00610 int buflen);
00611 EXTERNC void OSS_patch_caching (int dev, int chn, int patch, int fd,
00612 unsigned char *buf, int buflen);
00613 EXTERNC void OSS_drum_caching (int dev, int chn, int patch, int fd,
00614 unsigned char *buf, int buflen);
00615 EXTERNC void OSS_write_patch (int fd, unsigned char *buf, int len);
00616 EXTERNC int OSS_write_patch2 (int fd, unsigned char *buf, int len);
00617
00618 #define SEQ_PM_DEFINES int __foo_bar___
00619 #ifdef OSSLIB
00620 # define SEQ_USE_EXTBUF() \
00621 EXTERNC unsigned char *_seqbuf; \
00622 EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
00623 # define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
00624 # define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
00625 # define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
00626 # define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
00627
00628 # define SEQ_LOAD_GMINSTR(dev, instr) \
00629 OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
00630 # define SEQ_LOAD_GMDRUM(dev, drum) \
00631 OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
00632 #else
00633
00634 # define SEQ_LOAD_GMINSTR(dev, instr)
00635 # define SEQ_LOAD_GMDRUM(dev, drum)
00636
00637 # define SEQ_USE_EXTBUF() \
00638 EXTERNC unsigned char _seqbuf[]; \
00639 EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
00640
00641 #ifndef USE_SIMPLE_MACROS
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661 #define SEQ_DEFINEBUF(len) \
00662 unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
00663 #define _SEQ_NEEDBUF(len) \
00664 if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
00665 #define _SEQ_ADVBUF(len) _seqbufptr += len
00666 #define SEQ_DUMPBUF seqbuf_dump
00667 #else
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682 #define _SEQ_NEEDBUF(len)
00683 #endif
00684 #endif
00685
00686 #define SEQ_VOLUME_MODE(dev, mode) \
00687 {_SEQ_NEEDBUF(8);\
00688 _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
00689 _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
00690 _seqbuf[_seqbufptr+2] = (dev);\
00691 _seqbuf[_seqbufptr+3] = (mode);\
00692 _seqbuf[_seqbufptr+4] = 0;\
00693 _seqbuf[_seqbufptr+5] = 0;\
00694 _seqbuf[_seqbufptr+6] = 0;\
00695 _seqbuf[_seqbufptr+7] = 0;\
00696 _SEQ_ADVBUF(8);}
00697
00698
00699
00700
00701
00702 #define _CHN_VOICE(dev, event, chn, note, parm) \
00703 {_SEQ_NEEDBUF(8);\
00704 _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
00705 _seqbuf[_seqbufptr+1] = (dev);\
00706 _seqbuf[_seqbufptr+2] = (event);\
00707 _seqbuf[_seqbufptr+3] = (chn);\
00708 _seqbuf[_seqbufptr+4] = (note);\
00709 _seqbuf[_seqbufptr+5] = (parm);\
00710 _seqbuf[_seqbufptr+6] = (0);\
00711 _seqbuf[_seqbufptr+7] = 0;\
00712 _SEQ_ADVBUF(8);}
00713
00714 #define SEQ_START_NOTE(dev, chn, note, vol) \
00715 _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
00716
00717 #define SEQ_STOP_NOTE(dev, chn, note, vol) \
00718 _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
00719
00720 #define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
00721 _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
00722
00723
00724
00725
00726
00727 #define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
00728 {_SEQ_NEEDBUF(8);\
00729 _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
00730 _seqbuf[_seqbufptr+1] = (dev);\
00731 _seqbuf[_seqbufptr+2] = (event);\
00732 _seqbuf[_seqbufptr+3] = (chn);\
00733 _seqbuf[_seqbufptr+4] = (p1);\
00734 _seqbuf[_seqbufptr+5] = (p2);\
00735 *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
00736 _SEQ_ADVBUF(8);}
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752 #define SEQ_SYSEX(dev, buf, len) \
00753 {int ii, ll=(len); \
00754 unsigned char *bufp=buf;\
00755 if (ll>6)ll=6;\
00756 _SEQ_NEEDBUF(8);\
00757 _seqbuf[_seqbufptr] = EV_SYSEX;\
00758 _seqbuf[_seqbufptr+1] = (dev);\
00759 for(ii=0;ii<ll;ii++)\
00760 _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
00761 for(ii=ll;ii<6;ii++)\
00762 _seqbuf[_seqbufptr+ii+2] = 0xff;\
00763 _SEQ_ADVBUF(8);}
00764
00765 #define SEQ_CHN_PRESSURE(dev, chn, pressure) \
00766 _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
00767
00768 #define SEQ_SET_PATCH SEQ_PGM_CHANGE
00769 #ifdef OSSLIB
00770 # define SEQ_PGM_CHANGE(dev, chn, patch) \
00771 {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \
00772 _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
00773 #else
00774 # define SEQ_PGM_CHANGE(dev, chn, patch) \
00775 _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
00776 #endif
00777
00778 #define SEQ_CONTROL(dev, chn, controller, value) \
00779 _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
00780
00781 #define SEQ_BENDER(dev, chn, value) \
00782 _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
00783
00784 #define SEQ_V2_X_CONTROL(dev, voice, controller, value) \
00785 {_SEQ_NEEDBUF(8);\
00786 _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
00787 _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
00788 _seqbuf[_seqbufptr+2] = (dev);\
00789 _seqbuf[_seqbufptr+3] = (voice);\
00790 _seqbuf[_seqbufptr+4] = (controller);\
00791 _seqbuf[_seqbufptr+5] = ((value)&0xff);\
00792 _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
00793 _seqbuf[_seqbufptr+7] = 0;\
00794 _SEQ_ADVBUF(8);}
00795
00796
00797
00798
00799 #define SEQ_PITCHBEND(dev, voice, value) \
00800 SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
00801 #define SEQ_BENDER_RANGE(dev, voice, value) \
00802 SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
00803 #define SEQ_EXPRESSION(dev, voice, value) \
00804 SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
00805 #define SEQ_MAIN_VOLUME(dev, voice, value) \
00806 SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
00807 #define SEQ_PANNING(dev, voice, pos) \
00808 SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
00809
00810
00811
00812
00813
00814 #define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
00815 _seqbuf[_seqbufptr+0] = EV_TIMING; \
00816 _seqbuf[_seqbufptr+1] = (ev); \
00817 _seqbuf[_seqbufptr+2] = 0;\
00818 _seqbuf[_seqbufptr+3] = 0;\
00819 *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
00820 _SEQ_ADVBUF(8);}
00821
00822 #define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
00823 #define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
00824 #define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
00825 #define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
00826 #define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
00827 #define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
00828 #define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
00829 #define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
00830 #define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
00831
00832
00833
00834
00835
00836 #define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
00837 _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
00838 _seqbuf[_seqbufptr+1] = (ev); \
00839 _seqbuf[_seqbufptr+2] = 0;\
00840 _seqbuf[_seqbufptr+3] = 0;\
00841 *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
00842 _SEQ_ADVBUF(8);}
00843
00844 #define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
00845 #define SEQ_PLAYAUDIO2(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO2, devmask)
00846 #define SEQ_PLAYAUDIO3(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO3, devmask)
00847 #define SEQ_PLAYAUDIO4(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO4, devmask)
00848
00849
00850
00851
00852 #define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\
00853 _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
00854 _seqbuf[_seqbufptr+1] = (byte);\
00855 _seqbuf[_seqbufptr+2] = (device);\
00856 _seqbuf[_seqbufptr+3] = 0;\
00857 _SEQ_ADVBUF(4);}
00858
00859
00860
00861
00862 #ifdef OSSLIB
00863 # define SEQ_WRPATCH(patchx, len) \
00864 OSS_write_patch(seqfd, (char*)(patchx), len)
00865 # define SEQ_WRPATCH2(patchx, len) \
00866 OSS_write_patch2(seqfd, (char*)(patchx), len)
00867 #else
00868 # define SEQ_WRPATCH(patchx, len) \
00869 {if (_seqbufptr) SEQ_DUMPBUF();\
00870 if (write(seqfd, (char*)(patchx), len)==-1) \
00871 perror("Write patch: /dev/sequencer");}
00872 # define SEQ_WRPATCH2(patchx, len) \
00873 (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
00874 #endif
00875
00876 #endif
00877 #endif
00878
00879
00880
00881
00882
00883 #define SNDCTL_MIDI_PRETIME __SIOWR('m', 0, int)
00884
00885 #if 0
00886
00887
00888
00889
00890
00891
00892
00893 typedef struct
00894 {
00895 unsigned char cmd;
00896 char nr_args, nr_returns;
00897 unsigned char data[30];
00898 } mpu_command_rec;
00899
00900 #define SNDCTL_MIDI_MPUMODE __SIOWR('m', 1, int)
00901 #define SNDCTL_MIDI_MPUCMD __SIOWR('m', 2, mpu_command_rec)
00902 #endif
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923 #define SNDCTL_MIDI_MTCINPUT __SIOWR('m', 3, int)
00924
00925
00926
00927
00928 typedef struct
00929 {
00930 unsigned char hours, minutes, seconds, frames, qframes;
00931 char direction;
00932 #define MTC_DIR_STOPPED 0
00933 #define MTC_DIR_FORWARD 1
00934 #define MTC_DIR_BACKWARD -1
00935 unsigned char time_code_type;
00936 unsigned int flags;
00937 } oss_mtc_data_t;
00938
00939 #define SNDCTL_MIDI_SETMODE __SIOWR('m', 6, int)
00940 # define MIDI_MODE_TRADITIONAL 0
00941 # define MIDI_MODE_TIMED 1
00942 # define MIDI_MODE_TIMED_ABS 2
00943
00944
00945
00946
00947 #ifdef OSS_NO_LONG_LONG
00948 typedef unsigned long oss_midi_time_t;
00949 #else
00950 typedef unsigned long long oss_midi_time_t;
00951 #endif
00952
00953 typedef struct
00954 {
00955 int magic;
00956 #define MIDI_HDR_MAGIC -1
00957 unsigned short event_type;
00958 #define MIDI_EV_WRITE 0
00959 #define MIDI_EV_TEMPO 1
00960 #define MIDI_EV_ECHO 2
00961 #define MIDI_EV_START 3
00962 #define MIDI_EV_STOP 4
00963 #define MIDI_EV_CONTINUE 5
00964 #define MIDI_EV_XPRESSWRITE 6
00965 #define MIDI_EV_TIMEBASE 7
00966 #define MIDI_EV_DEVCTL 8
00967 unsigned short options;
00968 #define MIDI_OPT_NONE 0x0000
00969 #define MIDI_OPT_TIMED 0x0001
00970 #define MIDI_OPT_CONTINUATION 0x0002
00971 #define MIDI_OPT_USECTIME 0x0004
00972 #define MIDI_OPT_BUSY 0x0008
00973 oss_midi_time_t time;
00974 #ifdef OSS_NO_LONG_LONG
00975
00976 int budding;
00977 #endif
00978 int parm;
00979 int filler[4];
00980 } midi_packet_header_t;
00981
00982
00983
00984
00985
00986 #define MIDI_PAYLOAD_SIZE 1000
00987
00988 typedef struct
00989 {
00990 midi_packet_header_t hdr;
00991 unsigned char payload[MIDI_PAYLOAD_SIZE];
00992 } midi_packet_t;
00993
00994 #define SNDCTL_MIDI_TIMEBASE __SIOWR('m', 7, int)
00995 #define SNDCTL_MIDI_TEMPO __SIOWR('m', 8, int)
00996
00997
00998
00999
01000
01001
01002
01003
01004 #define SNDCTL_MIDI_SET_LATENCY __SIOW ('m', 9, int)
01005
01006
01007
01008
01009
01010 #define SNDCTL_DSP_HALT __SIO ('P', 0)
01011 #define SNDCTL_DSP_RESET SNDCTL_DSP_HALT
01012 #define SNDCTL_DSP_SYNC __SIO ('P', 1)
01013 #define SNDCTL_DSP_SPEED __SIOWR('P', 2, int)
01014
01015
01016 #define SNDCTL_DSP_STEREO __SIOWR('P', 3, int)
01017
01018
01019 #define SNDCTL_DSP_GETBLKSIZE __SIOWR('P', 4, int)
01020 #define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
01021 #define SNDCTL_DSP_CHANNELS __SIOWR('P', 6, int)
01022 #define SNDCTL_DSP_POST __SIO ('P', 8)
01023 #define SNDCTL_DSP_SUBDIVIDE __SIOWR('P', 9, int)
01024 #define SNDCTL_DSP_SETFRAGMENT __SIOWR('P',10, int)
01025
01026
01027 #define SNDCTL_DSP_GETFMTS __SIOR ('P',11, int)
01028 #define SNDCTL_DSP_SETFMT __SIOWR('P',5, int)
01029 # define AFMT_QUERY 0x00000000
01030 # define AFMT_MU_LAW 0x00000001
01031 # define AFMT_A_LAW 0x00000002
01032 # define AFMT_IMA_ADPCM 0x00000004
01033 # define AFMT_U8 0x00000008
01034 # define AFMT_S16_LE 0x00000010
01035 # define AFMT_S16_BE 0x00000020
01036 # define AFMT_S8 0x00000040
01037 # define AFMT_U16_LE 0x00000080
01038 # define AFMT_U16_BE 0x00000100
01039 # define AFMT_MPEG 0x00000200
01040
01041
01042 # define AFMT_AC3 0x00000400
01043
01044 # define AFMT_VORBIS 0x00000800
01045
01046
01047 # define AFMT_S32_LE 0x00001000
01048 # define AFMT_S32_BE 0x00002000
01049
01050
01051 # define AFMT_FLOAT 0x00004000
01052
01053
01054 # define AFMT_S24_LE 0x00008000
01055 # define AFMT_S24_BE 0x00010000
01056
01057
01058
01059
01060
01061
01062
01063
01064 # define AFMT_SPDIF_RAW 0x00020000
01065
01066
01067 # define AFMT_S24_PACKED 0x00040000
01068
01069
01070
01071
01072
01073
01074
01075
01076 #if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__hppa) || defined(PPC) || defined(__powerpc__) && !defined(i386) && !defined(__i386) && !defined(__i386__)
01077
01078
01079 # define _PATCHKEY(id) (0xfd00|id)
01080 # define AFMT_S16_NE AFMT_S16_BE
01081 # define AFMT_U16_NE AFMT_U16_BE
01082 # define AFMT_S32_NE AFMT_S32_BE
01083 # define AFMT_S24_NE AFMT_S24_BE
01084 # define AFMT_S16_OE AFMT_S16_LE
01085 # define AFMT_S32_OE AFMT_S32_LE
01086 # define AFMT_S24_OE AFMT_S24_LE
01087 #else
01088 # define _PATCHKEY(id) ((id<<8)|0xfd)
01089 # define AFMT_S16_NE AFMT_S16_LE
01090 # define AFMT_U16_NE AFMT_U16_LE
01091 # define AFMT_S32_NE AFMT_S32_LE
01092 # define AFMT_S24_NE AFMT_S24_LE
01093 # define AFMT_S16_OE AFMT_S16_BE
01094 # define AFMT_S32_OE AFMT_S32_BE
01095 # define AFMT_S24_OE AFMT_S24_BE
01096 #endif
01097
01098
01099
01100 typedef struct audio_buf_info
01101 {
01102 int fragments;
01103 int fragstotal;
01104 int fragsize;
01105 int bytes;
01106
01107 } audio_buf_info;
01108
01109 #define SNDCTL_DSP_GETOSPACE __SIOR ('P',12, audio_buf_info)
01110 #define SNDCTL_DSP_GETISPACE __SIOR ('P',13, audio_buf_info)
01111 #define SNDCTL_DSP_GETCAPS __SIOR ('P',15, int)
01112 # define PCM_CAP_REVISION 0x000000ff
01113 # define PCM_CAP_DUPLEX 0x00000100
01114 # define PCM_CAP_REALTIME 0x00000200
01115 # define PCM_CAP_BATCH 0x00000400
01116
01117
01118
01119 # define PCM_CAP_COPROC 0x00000800
01120
01121
01122 # define PCM_CAP_TRIGGER 0x00001000
01123 # define PCM_CAP_MMAP 0x00002000
01124 # define PCM_CAP_MULTI 0x00004000
01125 # define PCM_CAP_BIND 0x00008000
01126 # define PCM_CAP_INPUT 0x00010000
01127 # define PCM_CAP_OUTPUT 0x00020000
01128 # define PCM_CAP_VIRTUAL 0x00040000
01129
01130
01131
01132 # define PCM_CAP_ANALOGOUT 0x00100000
01133 # define PCM_CAP_ANALOGIN 0x00200000
01134 # define PCM_CAP_DIGITALOUT 0x00400000
01135 # define PCM_CAP_DIGITALIN 0x00800000
01136 # define PCM_CAP_ADMASK 0x00f00000
01137
01138
01139
01140
01141
01142
01143
01144 # define PCM_CAP_SPECIAL 0x01000000
01145 # define PCM_CAP_SHADOW 0x00000000
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160 # define DSP_CH_MASK 0x06000000
01161 # define DSP_CH_ANY 0x00000000
01162 # define DSP_CH_MONO 0x02000000
01163 # define DSP_CH_STEREO 0x04000000
01164 # define DSP_CH_MULTI 0x06000000
01165
01166 # define PCM_CAP_HIDDEN 0x08000000
01167 # define PCM_CAP_FREERATE 0x10000000
01168 # define PCM_CAP_MODEM 0x20000000
01169 # define PCM_CAP_DEFAULT 0x40000000
01170
01171
01172
01173
01174
01175 #define DSP_CAP_ADMASK PCM_CAP_ADMASK
01176 #define DSP_CAP_ANALOGIN PCM_CAP_ANALOGIN
01177 #define DSP_CAP_ANALOGOUT PCM_CAP_ANALOGOUT
01178 #define DSP_CAP_BATCH PCM_CAP_BATCH
01179 #define DSP_CAP_BIND PCM_CAP_BIND
01180 #define DSP_CAP_COPROC PCM_CAP_COPROC
01181 #define DSP_CAP_DEFAULT PCM_CAP_DEFAULT
01182 #define DSP_CAP_DIGITALIN PCM_CAP_DIGITALIN
01183 #define DSP_CAP_DIGITALOUT PCM_CAP_DIGITALOUT
01184 #define DSP_CAP_DUPLEX PCM_CAP_DUPLEX
01185 #define DSP_CAP_FREERATE PCM_CAP_FREERATE
01186 #define DSP_CAP_HIDDEN PCM_CAP_HIDDEN
01187 #define DSP_CAP_INPUT PCM_CAP_INPUT
01188 #define DSP_CAP_MMAP PCM_CAP_MMAP
01189 #define DSP_CAP_MODEM PCM_CAP_MODEM
01190 #define DSP_CAP_MULTI PCM_CAP_MULTI
01191 #define DSP_CAP_OUTPUT PCM_CAP_OUTPUT
01192 #define DSP_CAP_REALTIME PCM_CAP_REALTIME
01193 #define DSP_CAP_REVISION PCM_CAP_REVISION
01194 #define DSP_CAP_SHADOW PCM_CAP_SHADOW
01195 #define DSP_CAP_TRIGGER PCM_CAP_TRIGGER
01196 #define DSP_CAP_VIRTUAL PCM_CAP_VIRTUAL
01197
01198 #define SNDCTL_DSP_GETTRIGGER __SIOR ('P',16, int)
01199 #define SNDCTL_DSP_SETTRIGGER __SIOW ('P',16, int)
01200 # define PCM_ENABLE_INPUT 0x00000001
01201 # define PCM_ENABLE_OUTPUT 0x00000002
01202
01203 typedef struct count_info
01204 {
01205 unsigned int bytes;
01206 int blocks;
01207 int ptr;
01208 } count_info;
01209
01210 #define SNDCTL_DSP_GETIPTR __SIOR ('P',17, count_info)
01211 #define SNDCTL_DSP_GETOPTR __SIOR ('P',18, count_info)
01212
01213 typedef struct buffmem_desc
01214 {
01215 unsigned *buffer;
01216 int size;
01217 } buffmem_desc;
01218 #define SNDCTL_DSP_SETSYNCRO __SIO ('P', 21)
01219 #define SNDCTL_DSP_SETDUPLEX __SIO ('P', 22)
01220
01221 #define SNDCTL_DSP_PROFILE __SIOW ('P', 23, int)
01222 #define APF_NORMAL 0
01223 #define APF_NETWORK 1
01224 #define APF_CPUINTENS 2
01225
01226 #define SNDCTL_DSP_GETODELAY __SIOR ('P', 23, int)
01227
01228 typedef struct audio_errinfo
01229 {
01230 int play_underruns;
01231 int rec_overruns;
01232 unsigned int play_ptradjust;
01233 unsigned int rec_ptradjust;
01234 int play_errorcount;
01235 int rec_errorcount;
01236 int play_lasterror;
01237 int rec_lasterror;
01238 int play_errorparm;
01239 int rec_errorparm;
01240 int filler[16];
01241 } audio_errinfo;
01242
01243 #define SNDCTL_DSP_GETPLAYVOL __SIOR ('P', 24, int)
01244 #define SNDCTL_DSP_SETPLAYVOL __SIOWR('P', 24, int)
01245 #define SNDCTL_DSP_GETERROR __SIOR ('P', 25, audio_errinfo)
01246
01247
01248
01249
01250
01251 typedef struct oss_digital_control
01252 {
01253 unsigned int caps;
01254 #define DIG_CBITIN_NONE 0x00000000
01255 #define DIG_CBITIN_LIMITED 0x00000001
01256 #define DIG_CBITIN_DATA 0x00000002
01257 #define DIG_CBITIN_BYTE0 0x00000004
01258 #define DIG_CBITIN_FULL 0x00000008
01259 #define DIG_CBITIN_MASK 0x0000000f
01260 #define DIG_CBITOUT_NONE 0x00000000
01261 #define DIG_CBITOUT_LIMITED 0x00000010
01262 #define DIG_CBITOUT_BYTE0 0x00000020
01263 #define DIG_CBITOUT_FULL 0x00000040
01264 #define DIG_CBITOUT_DATA 0x00000080
01265 #define DIG_CBITOUT_MASK 0x000000f0
01266 #define DIG_UBITIN 0x00000100
01267 #define DIG_UBITOUT 0x00000200
01268 #define DIG_VBITOUT 0x00000400
01269 #define DIG_OUTRATE 0x00000800
01270 #define DIG_INRATE 0x00001000
01271 #define DIG_INBITS 0x00002000
01272 #define DIG_OUTBITS 0x00004000
01273 #define DIG_EXACT 0x00010000
01274 #define DIG_PRO 0x00020000
01275 #define DIG_CONSUMER 0x00040000
01276 #define DIG_PASSTHROUGH 0x00080000
01277 #define DIG_OUTSEL 0x00100000
01278
01279 unsigned int valid;
01280 #define VAL_CBITIN 0x00000001
01281 #define VAL_UBITIN 0x00000002
01282 #define VAL_CBITOUT 0x00000004
01283 #define VAL_UBITOUT 0x00000008
01284 #define VAL_ISTATUS 0x00000010
01285 #define VAL_IRATE 0x00000020
01286 #define VAL_ORATE 0x00000040
01287 #define VAL_INBITS 0x00000080
01288 #define VAL_OUTBITS 0x00000100
01289 #define VAL_REQUEST 0x00000200
01290 #define VAL_OUTSEL 0x00000400
01291
01292 #define VAL_OUTMASK (VAL_CBITOUT|VAL_UBITOUT|VAL_ORATE|VAL_OUTBITS|VAL_OUTSEL)
01293
01294 unsigned int request, param;
01295 #define SPD_RQ_PASSTHROUGH 1
01296
01297 unsigned char cbitin[24];
01298 unsigned char ubitin[24];
01299 unsigned char cbitout[24];
01300 unsigned char ubitout[24];
01301
01302 unsigned int outsel;
01303 #define OUTSEL_DIGITAL 1
01304 #define OUTSEL_ANALOG 2
01305 #define OUTSEL_BOTH (OUTSEL_DIGITAL|OUTSEL_ANALOG)
01306
01307 int in_data;
01308 #define IND_UNKNOWN 0
01309 #define IND_AUDIO 1
01310 #define IND_DATA 2
01311
01312 int in_locked;
01313 #define LOCK_NOT_INDICATED 0
01314 #define LOCK_UNLOCKED 1
01315 #define LOCK_LOCKED 2
01316
01317 int in_quality;
01318 #define IN_QUAL_NOT_INDICATED 0
01319 #define IN_QUAL_POOR 1
01320 #define IN_QUAL_GOOD 2
01321
01322 int in_vbit, out_vbit;
01323 #define VBIT_NOT_INDICATED 0
01324 #define VBIT_OFF 1
01325 #define VBIT_ON 2
01326
01327 unsigned int in_errors;
01328 #define INERR_CRC 0x0001
01329 #define INERR_QCODE_CRC 0x0002
01330 #define INERR_PARITY 0x0004
01331 #define INERR_BIPHASE 0x0008
01332
01333 int srate_in, srate_out;
01334 int bits_in, bits_out;
01335
01336 int filler[32];
01337 } oss_digital_control;
01338
01339 #define SNDCTL_DSP_READCTL __SIOWR('P', 26, oss_digital_control)
01340 #define SNDCTL_DSP_WRITECTL __SIOWR('P', 27, oss_digital_control)
01341
01342
01343
01344
01345
01346 typedef struct oss_syncgroup
01347 {
01348 int id;
01349 int mode;
01350 int filler[16];
01351 } oss_syncgroup;
01352
01353 #define SNDCTL_DSP_SYNCGROUP __SIOWR('P', 28, oss_syncgroup)
01354 #define SNDCTL_DSP_SYNCSTART __SIOW ('P', 29, int)
01355
01356
01357
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01370 #define SNDCTL_DSP_COOKEDMODE __SIOW ('P', 30, int)
01371
01372
01373
01374
01375
01376
01377
01378 #define SNDCTL_DSP_SILENCE __SIO ('P', 31)
01379 #define SNDCTL_DSP_SKIP __SIO ('P', 32)
01380
01381
01382
01383
01384 #define SNDCTL_DSP_HALT_INPUT __SIO ('P', 33)
01385 #define SNDCTL_DSP_RESET_INPUT SNDCTL_DSP_HALT_INPUT
01386 #define SNDCTL_DSP_HALT_OUTPUT __SIO ('P', 34)
01387 #define SNDCTL_DSP_RESET_OUTPUT SNDCTL_DSP_HALT_OUTPUT
01388
01389
01390
01391
01392 #define SNDCTL_DSP_LOW_WATER __SIOW ('P', 34, int)
01393
01394
01395
01396
01397
01398
01399 #ifndef OSS_NO_LONG_LONG
01400 typedef struct
01401 {
01402 long long samples;
01403 int fifo_samples;
01404 int filler[32];
01405 } oss_count_t;
01406
01407 #define SNDCTL_DSP_CURRENT_IPTR __SIOR ('P', 35, oss_count_t)
01408 #define SNDCTL_DSP_CURRENT_OPTR __SIOR ('P', 36, oss_count_t)
01409 #endif
01410
01411
01412
01413
01414
01415 #define SNDCTL_DSP_GET_RECSRC_NAMES __SIOR ('P', 37, oss_mixer_enuminfo)
01416 #define SNDCTL_DSP_GET_RECSRC __SIOR ('P', 38, int)
01417 #define SNDCTL_DSP_SET_RECSRC __SIOWR('P', 38, int)
01418
01419 #define SNDCTL_DSP_GET_PLAYTGT_NAMES __SIOR ('P', 39, oss_mixer_enuminfo)
01420 #define SNDCTL_DSP_GET_PLAYTGT __SIOR ('P', 40, int)
01421 #define SNDCTL_DSP_SET_PLAYTGT __SIOWR('P', 40, int)
01422 #define SNDCTL_DSP_GETRECVOL __SIOR ('P', 41, int)
01423 #define SNDCTL_DSP_SETRECVOL __SIOWR('P', 41, int)
01424
01425
01426
01427
01428
01429
01430 #ifndef OSS_NO_LONG_LONG
01431 #define SNDCTL_DSP_GET_CHNORDER __SIOR ('P', 42, unsigned long long)
01432 #define SNDCTL_DSP_SET_CHNORDER __SIOWR('P', 42, unsigned long long)
01433 # define CHID_UNDEF 0
01434 # define CHID_L 1
01435 # define CHID_R 2
01436 # define CHID_C 3
01437 # define CHID_LFE 4
01438 # define CHID_LS 5
01439 # define CHID_RS 6
01440 # define CHID_LR 7
01441 # define CHID_RR 8
01442 #define CHNORDER_UNDEF 0x0000000000000000ULL
01443 #define CHNORDER_NORMAL 0x0000000087654321ULL
01444 #endif
01445
01446 #define MAX_PEAK_CHANNELS 128
01447 typedef unsigned short oss_peaks_t[MAX_PEAK_CHANNELS];
01448 #define SNDCTL_DSP_GETIPEAKS __SIOR('P', 43, oss_peaks_t)
01449 #define SNDCTL_DSP_GETOPEAKS __SIOR('P', 44, oss_peaks_t)
01450
01451 #define SNDCTL_DSP_POLICY __SIOW('P', 45, int)
01452
01453
01454
01455
01456
01457
01458 #define SNDCTL_DSP_GETCHANNELMASK __SIOWR('P', 64, int)
01459 #define SNDCTL_DSP_BIND_CHANNEL __SIOWR('P', 65, int)
01460 # define DSP_BIND_QUERY 0x00000000
01461 # define DSP_BIND_FRONT 0x00000001
01462 # define DSP_BIND_SURR 0x00000002
01463 # define DSP_BIND_CENTER_LFE 0x00000004
01464 # define DSP_BIND_HANDSET 0x00000008
01465 # define DSP_BIND_MIC 0x00000010
01466 # define DSP_BIND_MODEM1 0x00000020
01467 # define DSP_BIND_MODEM2 0x00000040
01468 # define DSP_BIND_I2S 0x00000080
01469 # define DSP_BIND_SPDIF 0x00000100
01470 # define DSP_BIND_REAR 0x00000200
01471
01472 #ifdef sun
01473
01474 #define X_SADA_GET_PLAYTGT_MASK __SIOR ('P', 66, int)
01475 #define X_SADA_GET_PLAYTGT __SIOR ('P', 67, int)
01476 #define X_SADA_SET_PLAYTGT __SIOWR('P', 68, int)
01477 #endif
01478
01479 #ifndef NO_LEGACY_MIXER
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491
01492
01493
01494
01495 #define SOUND_MIXER_NRDEVICES 28
01496 #define SOUND_MIXER_VOLUME 0
01497 #define SOUND_MIXER_BASS 1
01498 #define SOUND_MIXER_TREBLE 2
01499 #define SOUND_MIXER_SYNTH 3
01500 #define SOUND_MIXER_PCM 4
01501 #define SOUND_MIXER_SPEAKER 5
01502 #define SOUND_MIXER_LINE 6
01503 #define SOUND_MIXER_MIC 7
01504 #define SOUND_MIXER_CD 8
01505 #define SOUND_MIXER_IMIX 9
01506 #define SOUND_MIXER_ALTPCM 10
01507 #define SOUND_MIXER_RECLEV 11
01508 #define SOUND_MIXER_IGAIN 12
01509 #define SOUND_MIXER_OGAIN 13
01510
01511
01512
01513
01514
01515
01516 #define SOUND_MIXER_LINE1 14
01517 #define SOUND_MIXER_LINE2 15
01518 #define SOUND_MIXER_LINE3 16
01519 #define SOUND_MIXER_DIGITAL1 17
01520 #define SOUND_MIXER_DIGITAL2 18
01521 #define SOUND_MIXER_DIGITAL3 19
01522 #define SOUND_MIXER_PHONE 20
01523 #define SOUND_MIXER_MONO 21
01524 #define SOUND_MIXER_VIDEO 22
01525 #define SOUND_MIXER_RADIO 23
01526 #define SOUND_MIXER_DEPTH 24
01527 #define SOUND_MIXER_REARVOL 25
01528 #define SOUND_MIXER_CENTERVOL 26
01529 #define SOUND_MIXER_SIDEVOL 27
01530
01531
01532
01533
01534
01535
01536 #define SOUND_MIXER_SURRVOL SOUND_MIXER_SIDEVOL
01537
01538
01539
01540 #define SOUND_ONOFF_MIN 28
01541 #define SOUND_ONOFF_MAX 30
01542
01543
01544 #define SOUND_MIXER_NONE 31
01545
01546
01547
01548
01549
01550 #define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
01551 #define SOUND_MIXER_MUTE SOUND_MIXER_NONE
01552 #define SOUND_MIXER_LOUD SOUND_MIXER_NONE
01553
01554 #define SOUND_DEVICE_LABELS \
01555 {"Vol ", "Bass ", "Treble", "Synth", "Pcm ", "Speaker ", "Line ", \
01556 "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \
01557 "Aux1", "Aux2", "Aux3", "Digital1", "Digital2", "Digital3", \
01558 "Phone", "Mono", "Video", "Radio", "Depth", \
01559 "Rear", "Center", "Side"}
01560
01561 #define SOUND_DEVICE_NAMES \
01562 {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
01563 "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
01564 "aux1", "aux2", "aux3", "dig1", "dig2", "dig3", \
01565 "phone", "mono", "video", "radio", "depth", \
01566 "rear", "center", "side"}
01567
01568
01569
01570 #define SOUND_MIXER_RECSRC 0xff
01571 #define SOUND_MIXER_DEVMASK 0xfe
01572 #define SOUND_MIXER_RECMASK 0xfd
01573 #define SOUND_MIXER_CAPS 0xfc
01574 # define SOUND_CAP_EXCL_INPUT 0x00000001
01575 # define SOUND_CAP_NOLEGACY 0x00000004
01576 # define SOUND_CAP_NORECSRC 0x00000008
01577 #define SOUND_MIXER_STEREODEVS 0xfb
01578
01579
01580 #define SOUND_MIXER_OUTSRC 0xfa
01581 #define SOUND_MIXER_OUTMASK 0xf9
01582
01583
01584
01585
01586 #define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
01587 #define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
01588 #define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
01589 #define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
01590 #define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
01591 #define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
01592 #define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
01593 #define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
01594 #define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
01595 #define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
01596 #define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
01597 #define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
01598 #define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
01599 #define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
01600 #define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
01601 #define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
01602 #define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
01603 #define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
01604 #define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
01605 #define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
01606 #define SOUND_MASK_MONO (1 << SOUND_MIXER_MONO)
01607 #define SOUND_MASK_PHONE (1 << SOUND_MIXER_PHONE)
01608 #define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
01609 #define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
01610 #define SOUND_MASK_DEPTH (1 << SOUND_MIXER_DEPTH)
01611 #define SOUND_MASK_REARVOL (1 << SOUND_MIXER_REARVOL)
01612 #define SOUND_MASK_CENTERVOL (1 << SOUND_MIXER_CENTERVOL)
01613 #define SOUND_MASK_SIDEVOL (1 << SOUND_MIXER_SIDEVOL)
01614
01615
01616 #define SOUND_MASK_SURRVOL (1 << SOUND_MIXER_SIDEVOL)
01617
01618
01619 #define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
01620 #define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
01621 #define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
01622
01623 #define MIXER_READ(dev) __SIOR('M', dev, int)
01624 #define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
01625 #define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
01626 #define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
01627 #define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
01628 #define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
01629 #define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
01630 #define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
01631 #define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
01632 #define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
01633 #define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
01634 #define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
01635 #define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
01636 #define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
01637 #define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
01638 #define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
01639 #define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
01640 #define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
01641
01642
01643 #define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
01644 #define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
01645 #define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
01646
01647 #define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
01648 #define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
01649 #define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
01650 #define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
01651 #define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
01652
01653 #define MIXER_WRITE(dev) __SIOWR('M', dev, int)
01654 #define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
01655 #define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
01656 #define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
01657 #define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
01658 #define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
01659 #define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
01660 #define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
01661 #define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
01662 #define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
01663 #define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
01664 #define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
01665 #define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
01666 #define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
01667 #define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
01668 #define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
01669 #define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
01670 #define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
01671
01672
01673 #define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
01674 #define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
01675 #define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
01676
01677 #define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
01678
01679 typedef struct mixer_info
01680 {
01681 char id[16];
01682 char name[32];
01683 int modify_counter;
01684 int fillers[10];
01685 } mixer_info;
01686
01687
01688 #define SOUND_MIXER_INFO __SIOR ('M', 101, mixer_info)
01689
01690
01691
01692
01693 #define SOUND_MIXER_AGC _SIOWR('M', 103, int)
01694 #define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
01695
01696
01697
01698
01699 #define SOUND_MIXER_PRIVATE1 __SIOWR('M', 111, int)
01700 #define SOUND_MIXER_PRIVATE2 __SIOWR('M', 112, int)
01701 #define SOUND_MIXER_PRIVATE3 __SIOWR('M', 113, int)
01702 #define SOUND_MIXER_PRIVATE4 __SIOWR('M', 114, int)
01703 #define SOUND_MIXER_PRIVATE5 __SIOWR('M', 115, int)
01704
01705
01706 #define SOUND_MIXER_READ_MAINVOL __SIOR ('M', 116, int)
01707 #define SOUND_MIXER_WRITE_MAINVOL __SIOWR('M', 116, int)
01708
01709
01710
01711
01712
01713
01714
01715
01716
01717 typedef struct mixer_vol_table
01718 {
01719 int num;
01720 char name[32];
01721 int levels[32];
01722 } mixer_vol_table;
01723
01724 #define SOUND_MIXER_GETLEVELS __SIOWR('M', 116, mixer_vol_table)
01725 #define SOUND_MIXER_SETLEVELS __SIOWR('M', 117, mixer_vol_table)
01726
01727 #define OSS_GETVERSION __SIOR ('M', 118, int)
01728
01729
01730
01731
01732
01733
01734
01735
01736
01737
01738 #define SOUND_MIXER_READ_RECGAIN __SIOR ('M', 119, int)
01739 #define SOUND_MIXER_WRITE_RECGAIN __SIOWR('M', 119, int)
01740 #define SOUND_MIXER_READ_MONGAIN __SIOR ('M', 120, int)
01741 #define SOUND_MIXER_WRITE_MONGAIN __SIOWR('M', 120, int)
01742
01743
01744
01745
01746 typedef unsigned char oss_reserved_t[512];
01747 #define SOUND_MIXER_RESERVED __SIOWR('M', 121, oss_reserved_t)
01748 #endif
01749
01750
01751
01752
01753
01754
01755
01756
01757
01758
01759
01760 typedef struct oss_sysinfo
01761 {
01762 char product[32];
01763 char version[32];
01764 int versionnum;
01765 char options[128];
01766
01767 int numaudios;
01768 int openedaudio[8];
01769
01770 int numsynths;
01771 int nummidis;
01772 int numtimers;
01773 int nummixers;
01774
01775 int openedmidi[8];
01776 int numcards;
01777 int numaudioengines;
01778 char license[16];
01779 char revision_info[256];
01780 int filler[172];
01781 } oss_sysinfo;
01782
01783 typedef struct oss_mixext
01784 {
01785 int dev;
01786 int ctrl;
01787 int type;
01788 # define MIXT_DEVROOT 0
01789 # define MIXT_GROUP 1
01790 # define MIXT_ONOFF 2
01791 # define MIXT_ENUM 3
01792 # define MIXT_MONOSLIDER 4
01793 # define MIXT_STEREOSLIDER 5
01794 # define MIXT_MESSAGE 6
01795 # define MIXT_MONOVU 7
01796 # define MIXT_STEREOVU 8
01797 # define MIXT_MONOPEAK 9
01798 # define MIXT_STEREOPEAK 10
01799 # define MIXT_RADIOGROUP 11
01800 # define MIXT_MARKER 12
01801 # define MIXT_VALUE 13
01802 # define MIXT_HEXVALUE 14
01803 # define MIXT_MONODB 15
01804 # define MIXT_STEREODB 16
01805 # define MIXT_SLIDER 17
01806 # define MIXT_3D 18
01807
01808
01809
01810
01811 # define MIXT_MONOSLIDER16 19
01812 # define MIXT_STEREOSLIDER16 20
01813 # define MIXT_MUTE 21
01814
01815
01816
01817
01818
01819 int maxvalue;
01820 int minvalue;
01821
01822 int flags;
01823 # define MIXF_READABLE 0x00000001
01824 # define MIXF_WRITEABLE 0x00000002
01825 # define MIXF_POLL 0x00000004
01826 # define MIXF_HZ 0x00000008
01827 # define MIXF_STRING 0x00000010
01828 # define MIXF_DYNAMIC 0x00000010
01829 # define MIXF_OKFAIL 0x00000020
01830 # define MIXF_FLAT 0x00000040
01831 # define MIXF_LEGACY 0x00000080
01832 # define MIXF_CENTIBEL 0x00000100
01833 # define MIXF_DECIBEL 0x00000200
01834 # define MIXF_MAINVOL 0x00000400
01835 # define MIXF_PCMVOL 0x00000800
01836 # define MIXF_RECVOL 0x00001000
01837 # define MIXF_MONVOL 0x00002000
01838 # define MIXF_WIDE 0x00004000
01839 # define MIXF_DESCR 0x00008000
01840 oss_id_t id;
01841 int parent;
01842
01843 int dummy;
01844
01845 int timestamp;
01846
01847 char data[64];
01848 unsigned char enum_present[32];
01849 int control_no;
01850
01851
01852
01853
01854
01855
01856 unsigned int desc;
01857 #define MIXEXT_SCOPE_MASK 0x0000003f
01858 #define MIXEXT_SCOPE_OTHER 0x00000000
01859 #define MIXEXT_SCOPE_INPUT 0x00000001
01860 #define MIXEXT_SCOPE_OUTPUT 0x00000002
01861 #define MIXEXT_SCOPE_MONITOR 0x00000003
01862 #define MIXEXT_SCOPE_RECSWITCH 0x00000004
01863
01864 char extname[32];
01865 int update_counter;
01866 int rgbcolor;
01867 int filler[6];
01868 } oss_mixext;
01869
01870
01871
01872
01873
01874 #define OSS_RGB_BLUE 0x7aabde
01875 #define OSS_RGB_GREEN 0xb3c98c
01876 #define OSS_RGB_PINK 0xe88c99
01877 #define OSS_RGB_GRAY 0xd1ccc4
01878 #define OSS_RGB_BLACK 0x2b2926
01879 #define OSS_RGB_ORANGE 0xe89e47
01880 #define OSS_RGB_RED 0xff0000
01881 #define OSS_RGB_YELLOW 0xffff00
01882 #define OSS_RGB_PURPLE 0x800080
01883 #define OSS_RGB_WHITE 0xf8f8ff
01884
01885 typedef struct oss_mixext_root
01886 {
01887 oss_id_t id;
01888 char name[48];
01889 } oss_mixext_root;
01890
01891 typedef struct oss_mixer_value
01892 {
01893 int dev;
01894 int ctrl;
01895 int value;
01896 int flags;
01897 int timestamp;
01898 int filler[8];
01899 } oss_mixer_value;
01900
01901 #define OSS_ENUM_MAXVALUE 255
01902 #define OSS_ENUM_STRINGSIZE 3000
01903 typedef struct oss_mixer_enuminfo
01904 {
01905 int dev;
01906 int ctrl;
01907 int nvalues;
01908 int version;
01909 short strindex[OSS_ENUM_MAXVALUE];
01910 char strings[OSS_ENUM_STRINGSIZE];
01911 } oss_mixer_enuminfo;
01912
01913 #define OPEN_READ PCM_ENABLE_INPUT
01914 #define OPEN_WRITE PCM_ENABLE_OUTPUT
01915 #define OPEN_READWRITE (OPEN_READ|OPEN_WRITE)
01916
01917 typedef struct oss_audioinfo
01918 {
01919 int dev;
01920 oss_devname_t name;
01921 int busy;
01922 int pid;
01923 int caps;
01924 int iformats, oformats;
01925 int magic;
01926 oss_cmd_t cmd;
01927 int card_number;
01928 int port_number;
01929 int mixer_dev;
01930 int legacy_device;
01931 int enabled;
01932 int flags;
01933 int min_rate, max_rate;
01934 int min_channels, max_channels;
01935 int binding;
01936 int rate_source;
01937 oss_handle_t handle;
01938 #define OSS_MAX_SAMPLE_RATES 20
01939 unsigned int nrates, rates[OSS_MAX_SAMPLE_RATES];
01940 oss_longname_t song_name;
01941 oss_label_t label;
01942 int latency;
01943 oss_devnode_t devnode;
01944 int next_play_engine;
01945 int next_rec_engine;
01946 int filler[184];
01947 } oss_audioinfo;
01948
01949 typedef struct oss_mixerinfo
01950 {
01951 int dev;
01952 oss_id_t id;
01953 char name[32];
01954 int modify_counter;
01955 int card_number;
01956 int port_number;
01957 oss_handle_t handle;
01958 int magic;
01959 int enabled;
01960 int caps;
01961 #define MIXER_CAP_VIRTUAL 0x00000001
01962 #define MIXER_CAP_LAYOUT_B 0x00000002
01963 #define MIXER_CAP_NARROW 0x00000004
01964 int flags;
01965 int nrext;
01966
01967
01968
01969
01970
01971
01972 int priority;
01973 oss_devnode_t devnode;
01974 int legacy_device;
01975 int filler[245];
01976 } oss_mixerinfo;
01977
01978 typedef struct oss_midi_info
01979 {
01980 int dev;
01981 oss_devname_t name;
01982 int busy;
01983 int pid;
01984 oss_cmd_t cmd;
01985 int caps;
01986 #define MIDI_CAP_MPU401 0x00000001
01987 #define MIDI_CAP_INPUT 0x00000002
01988 #define MIDI_CAP_OUTPUT 0x00000004
01989 #define MIDI_CAP_INOUT (MIDI_CAP_INPUT|MIDI_CAP_OUTPUT)
01990 #define MIDI_CAP_VIRTUAL 0x00000008
01991 #define MIDI_CAP_MTCINPUT 0x00000010
01992 #define MIDI_CAP_CLIENT 0x00000020
01993 #define MIDI_CAP_SERVER 0x00000040
01994 #define MIDI_CAP_INTERNAL 0x00000080
01995 #define MIDI_CAP_EXTERNAL 0x00000100
01996 #define MIDI_CAP_PTOP 0x00000200
01997 #define MIDI_CAP_MTC 0x00000400
01998 int magic;
01999 int card_number;
02000 int port_number;
02001 int enabled;
02002 int flags;
02003 oss_handle_t handle;
02004 oss_longname_t song_name;
02005 oss_label_t label;
02006 int latency;
02007 oss_devnode_t devnode;
02008 int legacy_device;
02009 int filler[235];
02010 } oss_midi_info;
02011
02012 typedef struct oss_card_info
02013 {
02014 int card;
02015 char shortname[16];
02016 char longname[128];
02017 int flags;
02018 char hw_info[400];
02019 int intr_count, ack_count;
02020 int filler[154];
02021 } oss_card_info;
02022
02023 #define SNDCTL_SYSINFO __SIOR ('X', 1, oss_sysinfo)
02024 #define OSS_SYSINFO SNDCTL_SYSINFO
02025
02026 #define SNDCTL_MIX_NRMIX __SIOR ('X', 2, int)
02027 #define SNDCTL_MIX_NREXT __SIOWR('X', 3, int)
02028 #define SNDCTL_MIX_EXTINFO __SIOWR('X', 4, oss_mixext)
02029 #define SNDCTL_MIX_READ __SIOWR('X', 5, oss_mixer_value)
02030 #define SNDCTL_MIX_WRITE __SIOWR('X', 6, oss_mixer_value)
02031
02032 #define SNDCTL_AUDIOINFO __SIOWR('X', 7, oss_audioinfo)
02033 #define SNDCTL_MIX_ENUMINFO __SIOWR('X', 8, oss_mixer_enuminfo)
02034 #define SNDCTL_MIDIINFO __SIOWR('X', 9, oss_midi_info)
02035 #define SNDCTL_MIXERINFO __SIOWR('X',10, oss_mixerinfo)
02036 #define SNDCTL_CARDINFO __SIOWR('X',11, oss_card_info)
02037 #define SNDCTL_ENGINEINFO __SIOWR('X',12, oss_audioinfo)
02038 #define SNDCTL_AUDIOINFO_EX __SIOWR('X',13, oss_audioinfo)
02039
02040 #define SNDCTL_MIX_DESCRIPTION __SIOWR('X',14, oss_mixer_enuminfo)
02041
02042
02043
02044
02045
02046
02047
02048
02049
02050
02051
02052
02053
02054
02055
02056
02057
02058 typedef struct
02059 {
02060 int secret;
02061 int source, target;
02062 int function;
02063 int value;
02064 int options[16];
02065 } oss_mixermatrix_t;
02066
02067 #define SNDCTL_MIX_MATRIX_WRITE __SIOWR('X',15, oss_mixermatrix_t)
02068 #define SNDCTL_MIX_MATRIX_READ __SIOWR('X',16, oss_mixermatrix_t)
02069
02070
02071
02072
02073
02074
02075 #define SNDCTL_SETSONG __SIOW ('Y', 2, oss_longname_t)
02076 #define SNDCTL_GETSONG __SIOR ('Y', 2, oss_longname_t)
02077 #define SNDCTL_SETNAME __SIOW ('Y', 3, oss_longname_t)
02078 #define SNDCTL_SETLABEL __SIOW ('Y', 4, oss_label_t)
02079 #define SNDCTL_GETLABEL __SIOR ('Y', 4, oss_label_t)
02080
02081
02082
02083
02084
02085
02086
02087
02088
02089
02090
02091
02092 #ifdef OSSLIB
02093 extern int osslib_open (const char *path, int flags, int dummy);
02094 extern void osslib_close (int fd);
02095 extern int osslib_write (int fd, const void *buf, int count);
02096 extern int osslib_read (int fd, void *buf, int count);
02097 extern int osslib_ioctl (int fd, unsigned int request, void *arg);
02098 #else
02099 # define osslib_open open
02100 # define osslib_close close
02101 # define osslib_write write
02102 # define osslib_read read
02103 # define osslib_ioctl ioctl
02104 #endif
02105
02106 #if 1
02107 #define SNDCTL_DSP_NONBLOCK __SIO ('P',14)
02108 #endif
02109
02110 #if 1
02111
02112
02113
02114 #define SOUND_PCM_READ_RATE SOUND_PCM_READ_RATE_is_obsolete
02115 #define SOUND_PCM_READ_BITS SOUND_PCM_READ_BITS_is_obsolete
02116 #define SOUND_PCM_READ_CHANNELS SOUND_PCM_READ_CHANNELS_is_obsolete
02117 #define SOUND_PCM_WRITE_RATE SOUND_PCM_WRITE_RATE_is_obsolet_use_SNDCTL_DSP_SPEED_instead
02118 #define SOUND_PCM_WRITE_CHANNELS SOUND_PCM_WRITE_CHANNELS_is_obsolete_use_SNDCTL_DSP_CHANNELS_instead
02119 #define SOUND_PCM_WRITE_BITS SOUND_PCM_WRITE_BITS_is_obsolete_use_SNDCTL_DSP_SETFMT_instead
02120 #define SOUND_PCM_POST SOUND_PCM_POST_is_obsolete_use_SNDCTL_DSP_POST_instead
02121 #define SOUND_PCM_RESET SOUND_PCM_RESET_is_obsolete_use_SNDCTL_DSP_HALT_instead
02122 #define SOUND_PCM_SYNC SOUND_PCM_SYNC_is_obsolete_use_SNDCTL_DSP_SYNC_instead
02123 #define SOUND_PCM_SUBDIVIDE SOUND_PCM_SUBDIVIDE_is_obsolete_use_SNDCTL_DSP_SUBDIVIDE_instead
02124 #define SOUND_PCM_SETFRAGMENT SOUND_PCM_SETFRAGMENT_is_obsolete_use_SNDCTL_DSP_SETFRAGMENT_instead
02125 #define SOUND_PCM_GETFMTS SOUND_PCM_GETFMTS_is_obsolete_use_SNDCTL_DSP_GETFMTS_instead
02126 #define SOUND_PCM_SETFMT SOUND_PCM_SETFMT_is_obsolete_use_SNDCTL_DSP_SETFMT_instead
02127 #define SOUND_PCM_GETOSPACE SOUND_PCM_GETOSPACE_is_obsolete_use_SNDCTL_DSP_GETOSPACE_instead
02128 #define SOUND_PCM_GETISPACE SOUND_PCM_GETISPACE_is_obsolete_use_SNDCTL_DSP_GETISPACE_instead
02129 #define SOUND_PCM_NONBLOCK SOUND_PCM_NONBLOCK_is_obsolete_use_SNDCTL_DSP_NONBLOCK_instead
02130 #define SOUND_PCM_GETCAPS SOUND_PCM_GETCAPS_is_obsolete_use_SNDCTL_DSP_GETCAPS_instead
02131 #define SOUND_PCM_GETTRIGGER SOUND_PCM_GETTRIGGER_is_obsolete_use_SNDCTL_DSP_GETTRIGGER_instead
02132 #define SOUND_PCM_SETTRIGGER SOUND_PCM_SETTRIGGER_is_obsolete_use_SNDCTL_DSP_SETTRIGGER_instead
02133 #define SOUND_PCM_SETSYNCRO SOUND_PCM_SETSYNCRO_is_obsolete_use_SNDCTL_DSP_SETSYNCRO_instead
02134 #define SOUND_PCM_GETIPTR SOUND_PCM_GETIPTR_is_obsolete_use_SNDCTL_DSP_GETIPTR_instead
02135 #define SOUND_PCM_GETOPTR SOUND_PCM_GETOPTR_is_obsolete_use_SNDCTL_DSP_GETOPTR_instead
02136 #define SOUND_PCM_MAPINBUF SOUND_PCM_MAPINBUF_is_obsolete_use_SNDCTL_DSP_MAPINBUF_instead
02137 #define SOUND_PCM_MAPOUTBUF SOUND_PCM_MAPOUTBUF_is_obsolete_use_SNDCTL_DSP_MAPOUTBUF_instead
02138 #endif
02139
02140 #endif