source: cmedia/trunk/Include/ossidc.h

Last change on this file was 354, checked in by stevenhl, 17 years ago

Import untested baseline cmedia sources, work products and binaries
Binaries and work products should be deleted from repository.
once new builds are verified to work.

File size: 9.7 KB
Line 
1/* $Id: ossidc.h,v 1.5 2001/03/25 22:06:43 sandervl Exp $ */
2
3//******************************************************************************
4// Header for idc definitions & declarations
5//
6// Copyright 2000 Sander van Leeuwen (sandervl@xs4all.nl)
7//
8// This program is free software; you can redistribute it and/or
9// modify it under the terms of the GNU General Public License as
10// published by the Free Software Foundation; either version 2 of
11// the License, or (at your option) any later version.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public
19// License along with this program; if not, write to the Free
20// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
21// USA.
22//
23//******************************************************************************
24#ifndef __OSSIDC_H__
25#define __OSSIDC_H__
26
27#include <ossdefos2.h>
28#include <osssound.h>
29
30typedef BOOL (FAR48 __cdecl *IDC16_HANDLER)(ULONG cmd, ULONG param);
31
32extern IDC16_HANDLER idc16_PddHandler;
33
34//IDC communication packet
35typedef struct
36{
37 union {
38 struct {
39 ULONG handler16; //16:16 address of pdd idc handler
40 } init;
41 struct {
42 ULONG irqnr;
43 ULONG param; // Rudi
44 } irq;
45 struct {
46 ULONG streamtype;
47 } open;
48 struct {
49 ULONG streamtype;
50 ULONG streamid;
51 } close;
52 struct {
53 ULONG streamtype;
54 ULONG streamid;
55 ULONG cmd;
56 ULONG ioctl_param;
57 } ioctl;
58 struct {
59 ULONG streamtype;
60 ULONG streamid;
61 } startstop;
62 struct {
63 ULONG streamtype;
64 ULONG streamid;
65 ULONG buffer; //0:32 address of mmpm/2 buffer
66 ULONG size;
67 } buffer;
68 struct {
69 ULONG streamtype;
70 ULONG streamid;
71 ULONG cmd;
72 ULONG volume;
73 } mixer;
74 struct {
75 ULONG streamtype;
76 ULONG streamid;
77 ULONG midiByte;
78 } midiwrite;
79 struct {
80 ULONG streamtype;
81 ULONG streamid;
82 ULONG buffer;
83 ULONG bufsize;
84 } midiread;
85 struct {
86 ULONG streamtype;
87 ULONG streamid;
88 } getspace;
89 struct {
90 ULONG param1;
91 ULONG param2;
92 ULONG param3;
93 ULONG param4;
94 ULONG fileid;
95 };
96
97 struct {
98 ULONG chipno;
99 ULONG command;
100 ULONG param1;
101 ULONG param2;
102 } info;
103 };
104} IDC32_PACKET, NEAR *PIDC32_PACKET;
105
106typedef struct
107{
108 union {
109 struct {
110 ULONG devid;
111 ULONG pResource; //16:16 resource structure pointer
112 } finddev;
113 struct {
114 ULONG irqnr;
115 ULONG param; // Rudi
116 } irq;
117 struct {
118 ULONG size;
119 } malloc;
120 struct {
121 ULONG addr; //16:16 address returned by malloc at start of memory block
122 } free;
123 struct {
124 ULONG type;
125 ULONG streamid;
126 } process;
127 struct {
128 ULONG param1;
129 ULONG param2;
130 };
131 };
132} IDC16_PACKET;
133
134//IDC commands (16->32 bits)
135#define IDC32_INIT 0
136#define IDC32_EXIT 1
137#define IDC32_IRQ 2
138#define IDC32_STREAM_OPEN 3
139#define IDC32_STREAM_CLOSE 4
140#define IDC32_STREAM_ADDBUFFER 5
141#define IDC32_STREAM_START 6
142#define IDC32_STREAM_STOP 7
143#define IDC32_STREAM_RESET 8
144#define IDC32_STREAM_PAUSE 9
145#define IDC32_STREAM_IOCTL 10
146#define IDC32_STREAM_MIXER 11
147#define IDC32_MIDI_WRITE 12
148#define IDC32_MIDI_READ 13
149#define IDC32_STREAM_GETSPACE 14
150#define IDC32_DEVESCAPE 15
151
152#define MIX_SETMASTERVOL 0
153#define MIX_SETWAVEVOL 1
154#define MIX_SETMIDIVOL 2
155#define MIX_SETINPUTSRC 3
156#define MIX_SETINPUTGAIN 4
157#define MIX_SETLINEINVOL 5
158#define MIX_SETLINEINMUTE 6
159#define MIX_SETMICVOL 7
160#define MIX_SETMICMUTE 8
161#define MIX_SETCDVOL 9
162#define MIX_SETCDMUTE 10
163#define MIX_SETSPDIFVOL 11
164#define MIX_SETSPDIFMUTE 12
165#define MIX_SETBASS 13
166#define MIX_SETTREBLE 14
167#define MIX_SETVIDEOVOL 15
168#define MIX_SETVIDEOMUTE 16
169#define MIX_SETAUXVOL 17
170#define MIX_SETAUXMUTE 18
171#define MIX_SETPCMVOL 19
172#define MIX_SETPCMMUTE 20
173#define MIX_SETSPKVOL 21
174#define MIX_SETSPKMUTE 22
175
176
177#define MAKE_VOLUME_LR(l, r) ((r << 8) | l)
178
179#define GET_VOLUME_R(vol) ((vol >> 8) & 0xff)
180#define GET_VOLUME_L(vol) (vol & 0xff)
181
182#define MIX_RECSRC_MIC 0
183#define MIX_RECSRC_CD 1
184#define MIX_RECSRC_LINE 2
185#define MIX_RECSRC_VIDEO 3
186#define MIX_RECSRC_MIXER 4
187#define MIX_RECSRC_AUX 5
188#define MIX_RECSRC_SPDIF1 6
189#define MIX_RECSRC_SPDIF2 7
190
191
192#define IDC16_INIT 0
193#define IDC16_EXIT 1
194#define IDC16_SETIRQ 2
195#define IDC16_FREEIRQ 3
196#define IDC16_WAVEOUT_BUFFER_DONE 4
197#define IDC16_WAVEIN_BUFFER_DONE 5
198#define IDC16_FIND_PCIDEVICE 6
199#define IDC16_FIND_PNPDEVICE 7
200#define IDC16_MALLOC 8
201#define IDC16_FREE 9
202#define IDC16_VMALLOC 10
203#define IDC16_VMFREE 11
204#define IDC16_PROCESS 12
205
206#define IDC16_WAVEIN_IRQ 0
207#define IDC16_WAVEOUT_IRQ 1
208#define IDC16_MIDI_IRQ 2
209
210#define MAX_RES_IRQ 2
211#define MAX_RES_DMA 2
212#define MAX_RES_IO 8
213#define MAX_RES_MEM 4
214
215#define SOUND_MIXER_VOLUME 0
216#define SOUND_MIXER_BASS 1
217#define SOUND_MIXER_TREBLE 2
218#define SOUND_MIXER_SYNTH 3
219#define SOUND_MIXER_PCM 4
220#define SOUND_MIXER_SPEAKER 5
221#define SOUND_MIXER_LINE 6
222#define SOUND_MIXER_MIC 7
223#define SOUND_MIXER_CD 8
224#define SOUND_MIXER_IMIX 9 /* Recording monitor */
225#define SOUND_MIXER_ALTPCM 10
226#define SOUND_MIXER_RECLEV 11 /* Recording level */
227#define SOUND_MIXER_IGAIN 12 /* Input gain */
228#define SOUND_MIXER_OGAIN 13 /* Output gain */
229#define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */
230#define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */
231#define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */
232#define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */
233#define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */
234#define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */
235#define SOUND_MIXER_PHONEIN 20 /* Phone input */
236#define SOUND_MIXER_PHONEOUT 21 /* Phone output */
237#define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */
238#define SOUND_MIXER_RADIO 23 /* Radio in */
239#define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */
240#define SOUND_MIXER_NRDEVICES 25
241
242typedef struct
243{
244 USHORT irq[MAX_RES_IRQ];
245 USHORT dma[MAX_RES_DMA];
246 USHORT io[MAX_RES_IO];
247 USHORT iolength[MAX_RES_IO];
248 ULONG mem[MAX_RES_MEM];
249 ULONG memlength[MAX_RES_MEM];
250} IDC_RESOURCE;
251
252typedef struct {
253 ULONG ulSampleRate;
254 ULONG ulBitsPerSample;
255 ULONG ulNumChannels;
256 ULONG ulDataType;
257} FORMAT_INFO;
258
259#define IOCTL_SETFORMAT 0
260#define IOCTL_GETPOS 1
261#define IOCTL_SETFRAGMENT 2
262
263#ifdef __cplusplus
264extern "C" {
265#endif
266
267//32 bits IDC procedures
268//16 bits pdd calls this during init. OSS_InitDriver calls init_module
269BOOL OSS32_InitDriver();
270void OSS32_RemoveDriver();
271BOOL OSS32_SetIrq(int irq, ULONG handler);
272BOOL OSS32_FreeIrq(int irq);
273
274ULONG OSS32_StreamOpen(ULONG streamtype);
275ULONG OSS32_StreamClose(ULONG streamtype, ULONG streamid);
276ULONG OSS32_StreamTrigger(ULONG streamtype, ULONG streamid, ULONG __near *fStart);
277ULONG OSS32_StreamReset(ULONG streamtype, ULONG streamid);
278ULONG OSS32_StreamIOCtl(ULONG streamtype, ULONG streamid, ULONG cmd, char __near *buffer);
279ULONG OSS32_StreamSetFormat(ULONG streamtype, ULONG streamid, ULONG cmd, FORMAT_INFO __near *pFormatInfo);
280ULONG OSS32_StreamAddBuffer(ULONG streamtype, ULONG streamid, ULONG buffer, ULONG size);
281ULONG OSS32_SetVolume(ULONG streamtype, ULONG streamid, ULONG cmd, ULONG volume);
282ULONG OSS32_StreamMidiWrite(ULONG streamid, ULONG midiByte);
283ULONG OSS32_StreamMidiRead(ULONG streamid, char NEAR *buffer, ULONG bufsize);
284ULONG OSS32_StreamGetSpace(ULONG streamtype, ULONG streamid);
285
286ULONG OSS32_DevEscape(ULONG uChipNo, ULONG ulCommand, ULONG ulParam1, ULONG ulParam2);
287
288//Sets file id in current task structure
289ULONG OSS32_SetFileId(ULONG fileid);
290
291#ifdef TARGET_OS216
292BOOL OSS16_StartStream(STREAM *stream);
293BOOL OSS16_PauseStream(STREAM *stream);
294BOOL OSS16_StopStream(STREAM *stream);
295BOOL OSS16_StreamReset(STREAM *stream);
296BOOL OSS16_StreamSetFormat(STREAM *stream, ULONG param1);
297ULONG OSS16_StreamAddBuffer(STREAM *stream, ULONG buffer, ULONG size);
298BOOL OSS16_StreamGetPos(STREAM *stream, ULONG FAR *pos);
299
300BOOL OSS16_SetVolume(STREAM *stream, USHORT line, ULONG volume);
301#define OSS16_SetWaveOutVol(s, v) OSS16_SetVolume(s, MIX_SETWAVEVOL, v)
302#define OSS16_SetMidiOutVol(s, v) OSS16_SetVolume(s, MIX_SETMIDIVOL, v)
303
304BOOL OSS16_SetGlobalVol(USHORT usSysFileNum, USHORT line, ULONG volume);
305
306BOOL OSS16_StreamSetFragment(STREAM *stream, ULONG fragsize);
307ULONG OSS16_StreamGetSpace(STREAM *stream);
308BOOL OSS16_AttachToPdd();
309void OSS16_DetachFromPdd();
310ULONG OSS16_OpenStream(STREAM *stream);
311void OSS16_CloseStream(STREAM *stream);
312typedef enum {
313 MIDI_RECEIVE = 0,
314 MIDI_SEND
315} MIDITYPE;
316ULONG OSS16_OpenMidiStream(MIDITYPE midiType);
317void OSS16_CloseMidiStream(MIDITYPE midiType, ULONG streamid);
318BOOL OSS16_WriteMidiByte(ULONG streamid, BYTE midiByte);
319int OSS16_ReadMidiBytes(ULONG streamid, char far *buffer, int bufsize);
320ULONG OSS16_DevEscape(USHORT usChipNo,
321 USHORT usCommand, ULONG ulParam1, ULONG ulParam2);
322#endif //TARGET_OS216
323
324//16 bits IDC procedures
325BOOL CallOSS16(ULONG cmd, ULONG param1, ULONG param2);
326
327//Used to call into the 32 bits OSS driver
328ULONG CallOSS32(USHORT cmd, USHORT fileid, ULONG param1, ULONG param2, ULONG param3, ULONG param4);
329
330#ifdef __cplusplus
331}
332#endif
333
334#endif
Note: See TracBrowser for help on using the repository browser.