source: sbliveos2/trunk/include/ioctl90.h@ 198

Last change on this file since 198 was 146, checked in by sandervl, 25 years ago

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.5 KB
Line 
1//-----------------------------------------------------------------------------
2// Freeware. This file may be used freely to promote the ioctl90 mixer API.
3//
4//-----------------------------------------------------------------------------
5// File: ioctl90.h Date Created: 10/14/98
6// Description: prototypes for cat 90 mixer IOCTLs Last Update : 11/16/99
7//-----------------------------------------------------------------------------
8//
9// Crystal Semiconductor defined category 0x90 OS/2 mixer IOCTLS.
10//
11// STATUS: (Drivers known to implement this API)
12// Crystal Semiconductor ISA Mode 3 driver version 2.08.
13// Crystal Semiconductor PCI driver version 3.02.
14//
15//-----------------------------------------------------------------------------
16//
17// This header file contains application usable defines for calls to
18// Crystal Semiconductor device driver to manage hardware mixer.
19// It is primarily used to adjust the listening level of
20// mixer inputs (CD-ROM, Aux, Line, Phone...). The API also allows
21// adjustment to the record gain as an override to MMPM/2 stream
22// specific API.
23//
24// API is modeled off of AC97 mixer. This does not mean that the device
25// uses an AC97 mixer. Being a relatively low-function device, the model
26// should be usable on most hardware architectures.
27//
28// For information on AC97 hardware architecuture, consult data book
29// for the CS4297 databook:
30// Crystal Clear(tm) SoundFusion(tm) Audio Codec '97 (CS4297)
31// Available from http://www.cirrus.com/
32//
33//
34// API DEFINITION
35// --------------
36//
37// Architecture notes:
38// - All volumes sent to the device driver are range 0..100.
39// - Mute is a boolean stored in a ULONG (range 0..1)
40// - All APIs effect the device on GLOBAL basis (not per-stream).
41// - API does not control master volume or per-stream volume.
42// These are controlled by MMPM/2 MCI and AUDIODD IOCTLS (category 0x80).
43// - API does permit override of MMPM/2 record gain. The value sent is
44// global and will only be used by the device driver if the master
45// gain is set via this API. Once set, the global value will be used
46// in preference to the MMPM/2 per-stream setting, until next reboot.
47//
48// IOCTL Category 0x90, functions:
49// 40 - MonoInSet 60 - MonoInQuery
50// 41 - PhoneSet 61 - PhoneQuery
51// 42 - MicSet 62 - MicQuery
52// 43 - LineSet 63 - LineQuery
53// 44 - CDSet 64 - CDQuery
54// 45 - VideoSet 65 - VideoQuery
55// 46 - AuxSet 66 - AuxQuery
56// 4C - ThreeDSet 6C - ThreeDQuery
57// 4D - StreamVolSet 6D - StreamVolQuery
58// 4E - RecordSrcSet 6E - RecordSrcQuery
59// 4F - RecordGainSet 6F - RecordGainQuery
60// 80 - ApiLevelQuery
61// 81 - GetApiMap
62// 82 - CallbackReg
63//
64// Application passes a structure (ioctl data buffer)
65// which contains:
66// ULONG Mute; // UnMute==0, Mute==1
67// ULONG ulVolL; // Left volume in percent 0..100
68// ULONG ulVolR; // Right volume in percent 0..100
69//
70// With the exception of the record gain APIs, these APIs effect
71// what you hear (output bus connections).
72//
73//-----------------------------------------------------------------------------
74//
75// Calling code should query the device driver name by calling
76// MMPM/2 MCI APIs to get the PDD name for the "WaveAudio" MCI device.
77// Application should then issue DosOpen on the device followed
78// by DosDevIOCTLs to perform operations.
79//
80// Here is sample code for DosOpen and DosDevIOCTL
81//
82// Driver name in call to the open function should include "\\DEV\\"
83// Example: hPdd = DevOpen ("\\DEV\\BSAUD1$"); or
84// Example: hPdd = DevOpen ("\\DEV\\CWCAUD1$");
85//
86// HFILE DevOpen (char *ddName)
87// {
88// ULONG ulRC;
89// ULONG OpenFlags;
90// ULONG OpenMode;
91// ULONG ulFileSize = 0;
92// ULONG ulFileAttribute = 0;
93// ULONG ulActionTaken = 0;
94// HFILE hPdd = NULL;
95//
96// OpenFlags = OPEN_ACTION_OPEN_IF_EXISTS; // Do not create file
97//
98// OpenMode = OPEN_ACCESS_READWRITE + // Read/Write file
99// OPEN_SHARE_DENYNONE + // Non-exclusive access
100// OPEN_FLAGS_FAIL_ON_ERROR; // No system popups on errors
101//
102// ulRC = DosOpen (ddName, // in
103// &hPdd, // out (handle)
104// &ulActionTaken, // out
105// ulFileSize, // in
106// ulFileAttribute, // in
107// OpenFlags, // in
108// OpenMode, // in
109// NULL); // in
110//
111// printf ("DosOpen RC = %x\n", ulRC);
112//
113// if (ulRC != 0)
114// hPdd = NULL;
115//
116// return (hPdd);
117// }
118//
119// ULONG SendIOCTL (HFILE hPdd, ULONG ulFunc, PMIXSTRUCT pMix)
120// {
121// ULONG ulRC;
122// ULONG ulSizeOfStruct = = sizeof (MixStruct);
123//
124// ulRC = DosDevIOCtl
125// (hPdd, // Device Handle
126// 0x90, // Category (user defined >= 0x80)
127// ulFunc, // Function Use defines in this .H file
128// NULL, // in Address of parm data (not used)
129// 0, // in Max size of parm data structure
130// NULL, // in out Actual size of parm data structure
131// pMix, // in Address of command data
132// ulSizeOfStruct, // in Maximum size of command data
133// &ulSizeOfStruct); // in out Size of command data
134//
135// printf ("DosDevIOCtl ulRC = %d\n", ulRC);
136//
137// return (ulRC);
138// }
139//
140// MODIFICATION HISTORY
141// 14-Oct-98 Joe Nord Create (Crystal Semiconductor, Inc).
142// 05-Mar-99 Joe Nord Added version query and API map query ioctls (80, 81)
143// First release, Crystal PCI 3.02
144// 13-Apr-99 Joe Nord Added support for global record gain set and query
145// 15-Jul-99 Joe Nord Add callback semaphore support
146// 10-Nov-99 Joe Nord Added support for 3D sound effect set and query
147// 15-Nov-99 Joe Nord Added support for stream volume override
148// 16-Nov-99 Joe Nord Added support for message buffer return
149//-----------------------------------------------------------------------------
150
151// This prototype is used in the device driver only (common header)
152//USHORT ioctlmixMain (USHORT Function,
153// USHORT SysFileNum,
154// ULONG ulpvData,
155// USHORT usDLength);
156
157// This structure is passed to the device driver using DosDevIOCTL.
158typedef struct
159{
160 ULONG Mute; // UnMute==0, Mute==1
161 ULONG VolumeL; // 0..100 percent
162 ULONG VolumeR; // 0..100 percent
163} MIXSTRUCT, *PMIXSTRUCT;
164
165typedef struct
166{
167 ULONG pBuffer; // Application linear address to message buffer (in)
168 ULONG ulSize; // Size of buffer (in). Count of chars (out).
169 ULONG fClear; // PDD should clear buffer after copy (in)
170 ULONG fError; // Message buffer includes error message (out)
171 ULONG fNewInfo; // Message buffer has new text since last read (out)
172 ULONG ulCharsLost; // Messages lost - circular queue wrap around (out)
173} MIXMSGBUF, *PMIXMSGBUF;
174
175
176//
177// Defines for use by applications
178//
179#define MONOINSET 0x40 // SET functions in the 0x40 range
180#define PHONESET 0x41
181#define MICSET 0x42
182#define LINESET 0x43
183#define CDSET 0x44
184#define VIDEOSET 0x45
185#define AUXSET 0x46
186#define BASSTREBLESET 0x4B
187#define THREEDSET 0x4C
188#define STREAMVOLSET 0x4D
189#define RECORDSRCSET 0x4E
190#define RECORDGAINSET 0x4F
191
192#define MONOINQUERY 0x60 // Query functions in the 0x60 range
193#define PHONEQUERY 0x61
194#define MICQUERY 0x62
195#define LINEQUERY 0x63
196#define CDQUERY 0x64
197#define VIDEOQUERY 0x65
198#define AUXQUERY 0x66
199#define BASSTREBLEQUERY 0x6B
200#define THREEDQUERY 0x6C
201#define STREAMVOLQUERY 0x6D
202#define RECORDSRCQUERY 0x6E
203#define RECORDGAINQUERY 0x6F
204
205#define APILEVELQUERY 0x80
206#define GETAPIMAP 0x81 // Get 256 byte BOOL list of supported IOCTLs
207#define CALLBACKREG 0x82 // Provide HEV for mixer change callbacks
208#define MSGBUF 0x83 // Get PDD error log message buffer
209
210// RECORDSRCSET
211// Support mixer application override of record gain values.
212// Only use the global values when a mixer app has instructed to do so.
213// This allows override of settings from MMPM/2 applications.
214
215#define I90SRC_BASE 0x00000010 // 0..F are reserved (MMPM/2 space)
216#define I90SRC_MIC 0x00000010
217#define I90SRC_CD 0x00000020
218#define I90SRC_VIDEO 0x00000040
219#define I90SRC_AUX 0x00000080
220#define I90SRC_LINE 0x00000100
221#define I90SRC_RES5 0x00000200
222#define I90SRC_RES6 0x00000400
223#define I90SRC_PHONE 0x00000800
224
225
226// In first release, the APILEVELQUERY function returns a ULONG, 0x01.
227// As significant changes are made to the ioctlmix API, the return value
228// of this function will be incremented.
229
230// GETAPIMAP
231// To help an application know what APIs are supported by this device driver,
232// return an array of booleans (BYTES). TRUE => Supported.
233// The array must be declared as 256 bytes. This is larger than necessary as
234// the first 64 entries, range 0x00..0x39, are guaranteed to be zero.
235// The extra bytes allows the array to be indexed using the IOCTL function
236// defines in this file.
237//
238// Notice that a FALSE value in an array position (for example "video set")
239// can be used to inform the mixer application that this device driver does
240// not support a "video" connection to the audio device.
241// Where a device driver is called for an input that it does not support, the
242// DosDevIOCTL will fail with return code RPGENFAIL.
243
Note: See TracBrowser for help on using the repository browser.