//--------------------------------------------------------------------------- // // Module: mixer.h // // Description: // // Contains the declarations for the mixer line user api handlers. // // //@@BEGIN_MSINTERNAL // Development Team: // D. Baumberger // // History: Date Author Comment // //@@END_MSINTERNAL // //--------------------------------------------------------------------------- // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (C) Microsoft Corporation, 1997 - 1998 All Rights Reserved. // //--------------------------------------------------------------------------- #ifndef _KMXLUSER_H_INCLUDED_ #define _KMXLUSER_H_INCLUDED_ typedef struct tag_MIXERDEVICE* PMIXERDEVICE; #ifdef DEBUG #define NOTIFICATION_SIGNATURE 'ETON' // NOTE #define CONTROLLINK_SIGNATURE 'KLTC' // CTLK #endif #define UNUSED_DEVICE ((ULONG) -1) #define MIXER_FLAG_SCALE 0x1 #define MIXER_FLAG_PERSIST 0x2 #define MIXER_FLAG_NONCACHED 0x4 #define MIXER_FLAG_NOCALLBACK 0x8 #define MIXER_CONTROL_CALLBACK 0x01 #define MIXER_LINE_CALLBACK 0x02 #define MIXER_KEY_NAME L"Mixer" #define VALID_MULTICHANNEL_MIXER_VALUE_NAME L"Valid Multichannel Mixer Settings" #define LINE_COUNT_VALUE_NAME L"Line Count" #define LINE_ID_VALUE_NAME L"LineId" #define CONTROL_COUNT_VALUE_NAME L"Control Count" #define SOURCE_ID_VALUE_NAME L"SourceId" #define DEST_ID_VALUE_NAME L"DestId" #define CONTROLS_KEY_NAME L"Controls" #define CONTROL_TYPE_VALUE_NAME L"Control Type" #define CHANNEL_COUNT_VALUE_NAME L"Channel Count" #define CONTROL_MINVAL_VALUE_NAME L"Minimum Value" #define CONTROL_MAXVAL_VALUE_NAME L"Maximum Value" #define CONTROL_STEPS_VALUE_NAME L"Steps" #define CONTROL_MULTIPLEITEMS_VALUE_NAME L"Multiple Items" #define LINE_KEY_NAME_FORMAT L"%X" #define CONTROL_KEY_NAME_FORMAT L"%X" #define CHANNEL_VALUE_NAME_FORMAT L"Channel%d" #define MULTIPLEITEM_VALUE_NAME_FORMAT L"Item%d" #define KMXL_TRACELEVEL_FATAL_ERROR 0x10 #define KMXL_TRACELEVEL_ERROR 0x20 #define KMXL_TRACELEVEL_WARNING 0x30 #define KMXL_TRACELEVEL_TRACE 0x40 #define DEFAULT_RANGE_MIN ( -96 * 65536 ) // -96 dB #define DEFAULT_RANGE_MAX ( 0 ) // 0 dB #define DEFAULT_RANGE_STEPS ( 48 ) // 2 dB steps #define DEFAULT_STATICBOUNDS_MIN ( 0 ) #define DEFAULT_STATICBOUNDS_MAX ( 65535 ) #define DEFAULT_STATICMETRICS_CSTEPS ( 192 ) /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // M I X E R A P I H A N D L E R S // // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // kmxlInitializeMixer // // Initializes or re-initializes the mixer driver. // // NTSTATUS kmxlInitializeMixer( PWDMACONTEXT pWdmaContext, PCWSTR DeviceInterface, ULONG cDevices ); /////////////////////////////////////////////////////////////////////// // // kmxlInitHandler // // Handles the MXDM_INIT message. // // NTSTATUS kmxlInitHandler( IN LPDEVICEINFO DeviceInfo // Device Input Parameters ); /////////////////////////////////////////////////////////////////////// // // kmxlOpenHandler // // Handles the MXDM_OPEN message. // // NTSTATUS kmxlOpenHandler( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer // Flat pointer to open desc ); /////////////////////////////////////////////////////////////////////// // // kmxlCloseHandler // // Handles the MXDM_CLOSE message. // // NTSTATUS kmxlCloseHandler( IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer // UNUSED ); /////////////////////////////////////////////////////////////////////// // // kmxlGetLineInfoHandler // // Handles the MXDM_GETLINEINFO message. // // NTSTATUS kmxlGetLineInfoHandler( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer // Mapped MIXERLINE structure ); /////////////////////////////////////////////////////////////////////// // // kmxlGetLineControlsHandler // // Handles the MXDM_GETLINECONTROLS message. // // NTSTATUS kmxlGetLineControlsHandler( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer, // Mapped MIXERLINECONTROLS structure IN LPVOID pamxctrl // Mapped MIXERCONTROL array ); /////////////////////////////////////////////////////////////////////// // // kmxlGetControlDetailsHandler // // Handles the MXDM_GETLINECONTROLS message. // // NTSTATUS kmxlGetControlDetailsHandler( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Info Structure IN LPVOID DataBuffer, // MIXERCONTROLDETAILS structure IN LPVOID paDetails // Flat pointer to details struct(s) ); /////////////////////////////////////////////////////////////////////// // // kmxlSetControlDetailsHandler // // Handles the MXDM_SetControlDetailsHandler // // NTSTATUS kmxlSetControlDetailsHandler( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer, // Mapped MIXERCONTROLDETAILS struct. IN LPVOID paDetails, // Mapped array of DETAILS structures. IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // H E L P E R F U N C T I O N S // // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // kmxlFindControl // // For the given control ID, kmxlFindControl will find the matching // MXLCONTROL structure. // // PMXLCONTROL kmxlFindControl( IN PMIXERDEVICE pmxd, // The mixer instance to search IN DWORD dwControlID // The control ID to find ); /////////////////////////////////////////////////////////////////////// // // kmxlFindLine // // For the given line ID, kmxlFindLine will find the matching // MXLLINE structure for it. // // PMXLLINE kmxlFindLine( IN PMIXERDEVICE pmxd, // The mixer to search IN DWORD dwLineID // The line ID to find ); /////////////////////////////////////////////////////////////////////// // // kmxlGetLineInfoByID // // Finds a line that matches the given source and destination line // ids. // // NTSTATUS kmxlGetLineInfoByID( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer, // Mapped MIXERLINE structure IN WORD Source, // Source line Id IN WORD Destination // Destination line Id ); /////////////////////////////////////////////////////////////////////// // // kmxlGetLineInfoByType // // Finds a line that matches the given target type. // // NTSTATUS kmxlGetLineInfoByType( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer, // Mapped MIXERLINE structure IN DWORD dwType // The line target type to find ); /////////////////////////////////////////////////////////////////////// // // kmxlGetLineInfoByComponent // // Finds a line that matches the given component type. // // NTSTATUS kmxlGetLineInfoByComponent( IN PWDMACONTEXT pWdmaContext, IN LPDEVICEINFO DeviceInfo, // Device Input Parameters IN LPVOID DataBuffer, // Mapped MIXERLINE structure IN DWORD dwComponentType // The compontent type to match ); /////////////////////////////////////////////////////////////////////// // // kmxlGetNumDestinations // // Returns the number of destinations on the given device number. // // DWORD kmxlGetNumDestinations( IN PMIXERDEVICE pMixerDevice // The device to query ); /////////////////////////////////////////////////////////////////////// // // kmxlConvertMixerLineWto16 // // Converts a UNICODE MIXERLINE structure to ANSI, optionally copying // the Target structure. // // VOID kmxlConvertMixerLineWto16( IN LPMIXERLINE pMixerLineW, IN OUT LPMIXERLINE16 pMixerLine16, IN BOOL bCopyTarget ); /////////////////////////////////////////////////////////////////////// // // kmxlConvertMixerControlWto16 // // Converts a UNICODE MIXERCONTROL structure to ANSI. // // VOID kmxlConvertMixerControlWto16( IN LPMIXERCONTROL pMixerControlW, IN OUT LPMIXERCONTROL16 pMixerControl16 ); /////////////////////////////////////////////////////////////////////// // // kmxlConvertMixerControlDetails_ListTextWto16 // // Converts an UNICODE MIXERCONTROLDETAILS_LISTTEXT structure to ANSI. // // VOID kmxlConvertMixerControlDetails_ListTextWto16( IN LPMIXERCONTROLDETAILS_LISTTEXT pListTextW, IN OUT LPMIXERCONTROLDETAILS_LISTTEXT16 pListText16 ); /////////////////////////////////////////////////////////////////////// // // Instance list handling routines // DWORD kmxlUniqueInstanceId( VOID ); PMIXERDEVICE kmxlReferenceMixerDevice( IN PWDMACONTEXT pWdmaContext, IN OUT LPDEVICEINFO DeviceInfo // Device Information ); /////////////////////////////////////////////////////////////////////// // // kmxlNotifyLineChange // // Notifies all mixer line clients on a line status change. // // VOID kmxlNotifyLineChange( OUT LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLLINE pLine, IN LPMIXERCONTROLDETAILS_UNSIGNED paDetails ); /////////////////////////////////////////////////////////////////////// // // kmxlNotifyControlChange // // Notifies all mixer line clients on a control change. // // VOID kmxlNotifyControlChange( OUT LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl ); /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // G E T / S E T D E T A I L H A N D L E R S // // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // kmxlHandleGetUnsigned // // Handles the get property for all 32-bit sized values: UNSIGNED, // SIGNED, and BOOLEAN. // // NTSTATUS kmxlHandleGetUnsigned( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN ULONG ulProperty, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// // // kmxlHandleSetUnsigned // // Handles the gSt property for all 32-bit sized values: UNSIGNED, // SIGNED, and BOOLEAN. // // NTSTATUS kmxlHandleSetUnsigned( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN ULONG ulProperty, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// // // kmxlHandleGetMuteFromSuperMix // // NTSTATUS kmxlHandleGetMuteFromSuperMix( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// // // kmxlHandleSetMuteFromSuperMix // // NTSTATUS kmxlHandleSetMuteFromSuperMix( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// // // kmxlHandleGetVolumeFromSuperMix // // NTSTATUS kmxlHandleGetVolumeFromSuperMix( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// // // kmxlHandleSetVolumeFromSuperMix // // NTSTATUS kmxlHandleSetVolumeFromSuperMix( IN LPDEVICEINFO DeviceInfo, IN PMIXERDEVICE pmxd, IN PMXLCONTROL pControl, IN LPMIXERCONTROLDETAILS pmcd, IN OUT LPMIXERCONTROLDETAILS_UNSIGNED paDetails, IN ULONG Flags ); /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // // P E R S I S T A N C E F U N C T I O N S // // // /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // kmxlPersistAll // // NTSTATUS kmxlPersistAll( IN PFILE_OBJECT pfo, // The instance to persist IN PMIXERDEVICE pmxd // The mixer device data ); /////////////////////////////////////////////////////////////////////// // // kmxlRetrieveAll // // NTSTATUS kmxlRetrieveAll( IN PFILE_OBJECT pfo, // The instance to retrieve IN PMIXERDEVICE pmxd // The mixer device data ); /////////////////////////////////////////////////////////////////////// // // kmxlPersistControl // // NTSTATUS kmxlPersistControl( IN PFILE_OBJECT pfo, // The instance to retrieve IN PMIXERDEVICE pmxd, // Mixer device info IN PMXLCONTROL pControl, // The control to persist IN PVOID paDetails // The channel values to persist ); /////////////////////////////////////////////////////////////////////// // // kmxlFindLineForControl // // PMXLLINE kmxlFindLineForControl( IN PMXLCONTROL pControl, IN LINELIST listLines ); /////////////////////////////////////////////////////////////////////// // // mixerGetControlDetails // // MMRESULT WINAPI kmxlGetControlDetails( PWDMACONTEXT pWdmaContext, PCWSTR DeviceInterface, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails ); /////////////////////////////////////////////////////////////////////// // // mixerGetLineControls // // MMRESULT WINAPI kmxlGetLineControls( PWDMACONTEXT pWdmaContext, PCWSTR DeviceInterface, LPMIXERLINECONTROLS pmxlc, DWORD fdwControls ); /////////////////////////////////////////////////////////////////////// // // mixerGetLineInfo // // MMRESULT WINAPI kmxlGetLineInfo( PWDMACONTEXT pWdmaContext, PCWSTR DeviceInterface, LPMIXERLINE pmxl, DWORD fdwInfo ); /////////////////////////////////////////////////////////////////////// // // mixerSetControlDetails // // MMRESULT WINAPI kmxlSetControlDetails( PWDMACONTEXT pWdmaContext, PCWSTR DeviceInterface, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails ); VOID EnableHardwareCallbacks( IN PFILE_OBJECT pfo, // Handle of the topology driver instance IN PMIXERDEVICE pMixer); VOID DisableHardwareCallbacks( IN PFILE_OBJECT pfo, // Handle of the topology driver instance IN PMIXERDEVICE pMixer); #endif // _KMXLUSER_H_INCLUDED