Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
ntddmix.h
Abstract:
This include file defines all constants and types for accessing a Windows NT sound mixer device.
Author:
Robin Speed (RobinSp) - 14-Sep-1993
Revision History:
--*/
#ifndef _NTDDMIX_ #define _NTDDMIX_
#if _MSC_VER > 1000 #pragma once #endif
#include <ntddsnd.h> // general sound stuff
#ifdef __cplusplus extern "C" { #endif
#define IOCTL_MIX_BASE 0x0180
// // Device Name - this string is the name of the device. It is the name // that when added to the name of the root of the device tree and with // the device number appended, gives the name of the device required for // a call to NtOpenFile. // So for example, if the root is \Device and the Device type is // MMMix and the device number is 2, the full name is \Device\MMMix2 //
#define DD_MIX_DEVICE_NAME "\\Device\\MMMix" #define DD_MIX_DEVICE_NAME_U L"\\Device\\MMMix"
// // Mixer device driver IOCTL set // No caps call - the caps are dumped to the registry on load which saves // some code and time. //
#define IOCTL_MIX_GET_CONFIGURATION CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_GET_CONTROL_DATA CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_GET_LINE_DATA CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_REQUEST_NOTIFY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIX_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
// // mix structures //
// // IOCTL_MIX_GET_LINE_DATA and // IOCTL_MIX_GET_CONTROL_DATA // // Line structure (NB LineID is implicit from location in array) //
typedef struct { ULONG Id; // Either Line or control ID } MIXER_DD_READ_DATA, *PMIXER_DD_READ_DATA;
// // Variable line data //
typedef struct { ULONG fdwLine; } MIXER_DD_LINE_DATA;
typedef struct { UCHAR Destination; // Destination UCHAR Source; // Source (relative to destination) UCHAR cChannels; UCHAR cConnections; // Redundant UCHAR cControls; // NB - redundant - could be deduced // from the control set. ULONG dwUser; // settable? SHORT ShortNameStringId; SHORT LongNameStringId; ULONG dwComponentType; // SRC and DEST types
// // Target information //
USHORT Type; USHORT wPid; // No USHORT !!! SHORT PnameStringId; // Target product name
} MIXER_DD_LINE_CONFIGURATION_DATA, *PMIXER_DD_LINE_CONFIGURATION_DATA;
// // Control structure (NB Control ID is implicit from location in array) //
typedef struct { ULONG dwControlType; ULONG fdwControl; UCHAR LineID; UCHAR cMultipleItems; SHORT ShortNameStringId; SHORT LongNameStringId;
union { struct { LONG lMinimum; // signed minimum for this control LONG lMaximum; // signed maximum for this control }; struct { ULONG dwMinimum; // unsigned minimum for this control ULONG dwMaximum; // unsigned maximum for this control }; ULONG dwReserved[6]; } Bounds; union { ULONG cSteps; // # of steps between min & max ULONG cbCustomData; // size in bytes of custom data ULONG dwReserved[6]; // !!! needed? we have cbStruct.... } Metrics;
ULONG TextDataOffset; // Offset to strings if any (or 0) // Each string is indexed by a string id. } MIXER_DD_CONTROL_CONFIGURATION_DATA, *PMIXER_DD_CONTROL_CONFIGURATION_DATA;
typedef struct { ULONG dwParam1; ULONG dwParam2; SHORT SubControlTextStringId; USHORT ControlId; // Debug cross reference. } MIXER_DD_CONTROL_LISTTEXT, *PMIXER_DD_CONTROL_LISTTEXT;
// // Capabilities data (using string id) //
typedef struct { USHORT wMid; // manufacturer id USHORT wPid; // product id MMVERSION vDriverVersion; // version of the driver ULONG PnameStringId; // product name ULONG fdwSupport; // misc. support bits ULONG cDestinations; // count of destinations } MIXER_DD_CAPS; // // The data dumped into the registry. // The two counts are followed immediately by the appropriate number of // // MIXER_DD_LINE_CONFIGURATION_DATA and // // MIXER_DD_CONTROL_CONFIGURATION_DATA structures // // Next is the set of // // MIXER_DD_CONTROL_LISTTEXT structures ordered by control id. // // The MIXER_DD_LINE_CONFIGURATION_DATA structures must be ordered // dest lines first (ie the destination lines have the lowest ids). // The source lines must be ordered so that their destination lines // either increase and stay the same - ie the sources for the first // destination are first etc etc. //
typedef struct { ULONG cbSize; // Total size including this field MIXER_DD_CAPS DeviceCaps; // Mixer device capabilities ULONG NumberOfLines; ULONG NumberOfControls; } MIXER_DD_CONFIGURATION_DATA, *PMIXER_DD_CONFIGURATION_DATA; // // // IOCTL_MIX_REQUEST_NOTIFY - use same data for input and output // This request will continue to be completed until either // SetCurrentLogicalTime is set or // // CurrentLogicalTime = Logical time of last change to mixer // controls or lines. // // It will next be completed either when the device is closed or the // next change is made to a control or line. //
typedef struct { LARGE_INTEGER CurrentLogicalTime; // Used by driver BOOLEAN Initialized; // Set to 0 on first use USHORT Message; // What sort of thing changed? USHORT Id; // Id of thing that changed } MIXER_DD_REQUEST_NOTIFY, *PMIXER_DD_REQUEST_NOTIFY;
// // Data returned by IOCTL_MIX_GET_CAPABILITIES is MIXCAPSW structure // defined in mmsystem.h //
#ifdef __cplusplus } #endif
#endif // _NTDDMIX_
|