/*++ Copyright (c) Microsoft Corporation All Rights Reserved Module Name: hw.cpp Abstract: Implementation of SYSVAD HW class. SYSVAD HW has an array for storing mixer and volume settings for the topology. --*/ #include #include "hw.h" //============================================================================= // CSYSVADHW //============================================================================= //============================================================================= #pragma code_seg("PAGE") CSYSVADHW::CSYSVADHW() : m_ulMux(0), m_bDevSpecific(FALSE), m_iDevSpecific(0), m_uiDevSpecific(0) /*++ Routine Description: Constructor for SYSVADHW. Arguments: Return Value: void --*/ { PAGED_CODE(); MixerReset(); } // CSYSVADHW #pragma code_seg() //============================================================================= BOOL CSYSVADHW::bGetDevSpecific() /*++ Routine Description: Gets the HW (!) Device Specific info Arguments: N/A Return Value: True or False (in this example). --*/ { return m_bDevSpecific; } // bGetDevSpecific //============================================================================= void CSYSVADHW::bSetDevSpecific ( _In_ BOOL bDevSpecific ) /*++ Routine Description: Sets the HW (!) Device Specific info Arguments: fDevSpecific - true or false for this example. Return Value: void --*/ { m_bDevSpecific = bDevSpecific; } // bSetDevSpecific //============================================================================= INT CSYSVADHW::iGetDevSpecific() /*++ Routine Description: Gets the HW (!) Device Specific info Arguments: N/A Return Value: int (in this example). --*/ { return m_iDevSpecific; } // iGetDevSpecific //============================================================================= void CSYSVADHW::iSetDevSpecific ( _In_ INT iDevSpecific ) /*++ Routine Description: Sets the HW (!) Device Specific info Arguments: fDevSpecific - true or false for this example. Return Value: void --*/ { m_iDevSpecific = iDevSpecific; } // iSetDevSpecific //============================================================================= UINT CSYSVADHW::uiGetDevSpecific() /*++ Routine Description: Gets the HW (!) Device Specific info Arguments: N/A Return Value: UINT (in this example). --*/ { return m_uiDevSpecific; } // uiGetDevSpecific //============================================================================= void CSYSVADHW::uiSetDevSpecific ( _In_ UINT uiDevSpecific ) /*++ Routine Description: Sets the HW (!) Device Specific info Arguments: uiDevSpecific - int for this example. Return Value: void --*/ { m_uiDevSpecific = uiDevSpecific; } // uiSetDevSpecific //============================================================================= BOOL CSYSVADHW::GetMixerMute ( _In_ ULONG ulNode, _In_ ULONG ulChannel ) /*++ Routine Description: Gets the HW (!) mute levels for SYSVAD Arguments: ulNode - topology node id ulChannel - which channel are we reading? Return Value: mute setting --*/ { UNREFERENCED_PARAMETER(ulChannel); if (ulNode < MAX_TOPOLOGY_NODES) { return m_MuteControls[ulNode]; } return 0; } // GetMixerMute //============================================================================= ULONG CSYSVADHW::GetMixerMux() /*++ Routine Description: Return the current mux selection Arguments: Return Value: ULONG --*/ { return m_ulMux; } // GetMixerMux //============================================================================= LONG CSYSVADHW::GetMixerVolume ( _In_ ULONG ulNode, _In_ ULONG ulChannel ) /*++ Routine Description: Gets the HW (!) volume for SYSVAD. Arguments: ulNode - topology node id ulChannel - which channel are we reading? Return Value: LONG - volume level --*/ { UNREFERENCED_PARAMETER(ulChannel); if (ulNode < MAX_TOPOLOGY_NODES) { return m_VolumeControls[ulNode]; } return 0; } // GetMixerVolume //============================================================================= LONG CSYSVADHW::GetMixerPeakMeter ( _In_ ULONG ulNode, _In_ ULONG ulChannel ) /*++ Routine Description: Gets the HW (!) peak meter for SYSVAD. Arguments: ulNode - topology node id ulChannel - which channel are we reading? Return Value: LONG - sample peak meter level --*/ { UNREFERENCED_PARAMETER(ulChannel); if (ulNode < MAX_TOPOLOGY_NODES) { return m_PeakMeterControls[ulNode]; } return 0; } // GetMixerVolume //============================================================================= #pragma code_seg("PAGE") void CSYSVADHW::MixerReset() /*++ Routine Description: Resets the mixer registers. Arguments: Return Value: void --*/ { PAGED_CODE(); RtlFillMemory(m_VolumeControls, sizeof(LONG) * MAX_TOPOLOGY_NODES, 0xFF); // Endpoints are not muted by default. RtlZeroMemory(m_MuteControls, sizeof(BOOL) * MAX_TOPOLOGY_NODES); for (ULONG i=0; i