source: cmedia/trunk/Include/ioctl90.h@ 354

Last change on this file since 354 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.8 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 SPDIFSET 0x48 // new !
187#define BASSTREBLESET 0x4B
188#define THREEDSET 0x4C
189#define STREAMVOLSET 0x4D
190#define RECORDSRCSET 0x4E
191#define RECORDGAINSET 0x4F
192
193#define MONOINQUERY 0x60 // Query functions in the 0x60 range
194#define PHONEQUERY 0x61
195#define MICQUERY 0x62
196#define LINEQUERY 0x63
197#define CDQUERY 0x64
198#define VIDEOQUERY 0x65
199#define AUXQUERY 0x66
200#define SPDIFQUERY 0x68 // new !
201#define BASSTREBLEQUERY 0x6B
202#define THREEDQUERY 0x6C
203#define STREAMVOLQUERY 0x6D
204#define RECORDSRCQUERY 0x6E
205#define RECORDGAINQUERY 0x6F
206
207#define APILEVELQUERY 0x80
208#define GETAPIMAP 0x81 // Get 256 byte BOOL list of supported IOCTLs
209#define CALLBACKREG 0x82 // Provide HEV for mixer change callbacks
210#define MSGBUF 0x83 // Get PDD error log message buffer
211
212// RECORDSRCSET
213// Support mixer application override of record gain values.
214// Only use the global values when a mixer app has instructed to do so.
215// This allows override of settings from MMPM/2 applications.
216
217#define I90SRC_BASE 0x00000010 // 0..F are reserved (MMPM/2 space)
218#define I90SRC_MIC 0x00000010
219#define I90SRC_CD 0x00000020
220#define I90SRC_VIDEO 0x00000040
221#define I90SRC_AUX 0x00000080
222#define I90SRC_LINE 0x00000100
223#define I90SRC_LOOPBACK 0x00000200 // new !
224#define I90SRC_SPDIF 0x00000400 // new !
225#define I90SRC_PHONE 0x00000800
226
227
228
229
230// In first release, the APILEVELQUERY function returns a ULONG, 0x01.
231// As significant changes are made to the ioctlmix API, the return value
232// of this function will be incremented.
233
234// GETAPIMAP
235// To help an application know what APIs are supported by this device driver,
236// return an array of booleans (BYTES). TRUE => Supported.
237// The array must be declared as 256 bytes. This is larger than necessary as
238// the first 64 entries, range 0x00..0x39, are guaranteed to be zero.
239// The extra bytes allows the array to be indexed using the IOCTL function
240// defines in this file.
241//
242// Notice that a FALSE value in an array position (for example "video set")
243// can be used to inform the mixer application that this device driver does
244// not support a "video" connection to the audio device.
245// Where a device driver is called for an input that it does not support, the
246// DosDevIOCTL will fail with return code RPGENFAIL.
247
Note: See TracBrowser for help on using the repository browser.