///////////////////////////////////////////////////////////////////////////////
// Copyright (c) Winnov L.P., 1997.  All rights reserved
// shared.c: CShared class implementation
//
// Modified : C++ -> C
///////////////////////////////////////////////////////////////////////////////

#include "common.h"
#include "asrc.h"
#include "io.h"
#include "shared.h"

#define DEF_MUTESHADOW	((UINT)~(1<<ASRC_TUNER))	/* only TV defaults to not muted */
#define DEF_ATTNREG			HW_MUTBIT

#define NOT_INITIALIZED		2

#pragma data_seg(".sdata")
        
#undef PUBLIC
#undef PRIVATE
#define PUBLIC
#define PRIVATE static

#define LOCAL_MAX_BOARDS	10
       
BOOL gs_fInitialized [LOCAL_MAX_BOARDS] = {FALSE};
EEPROM gs_theEeprom [LOCAL_MAX_BOARDS] = {0};
UINT gs_nOutSource [LOCAL_MAX_BOARDS] = {0};
UINT gs_nLeftGain [LOCAL_MAX_BOARDS][NAUDIOSOURCES] = {0};
UINT gs_nRightGain [LOCAL_MAX_BOARDS][NAUDIOSOURCES] = {0};
UINT gs_nAsrcForVsrc [LOCAL_MAX_BOARDS][NVIDEOSOURCES] = {	// associate an audio source with each video source
// VSRC_TUNER  VSRC_ZEYE  VSRC_COMPOSITE  VSRC_DIGCAM  VSRC_SVHS    VSRC_OEM1 VSRC_OEM2 VSRC_OEM3
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0,
   ASRC_TUNER,         0,      ASRC_LINE, ASRC_CAMERA, ASRC_LINE, ASRC_CAMERA,        0,        0};
BOOL gs_fAsrcForVsrcEnable [LOCAL_MAX_BOARDS] = {TRUE};
BOOL gs_fAMSShadow [LOCAL_MAX_BOARDS] = {0};
UINT gs_nMuteShadow [LOCAL_MAX_BOARDS] = {DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW, DEF_MUTESHADOW};	// monitor mute per input source
UINT gs_nPower [LOCAL_MAX_BOARDS] = {0};
BOOL gs_fMuteIn [LOCAL_MAX_BOARDS] = {FALSE};
BOOL gs_fWaveOutState [LOCAL_MAX_BOARDS] = {FALSE};
BOOL gs_fACE [LOCAL_MAX_BOARDS] = {FALSE};			// ACE shadow
UINT gs_nXtal [LOCAL_MAX_BOARDS] = {0};		// xtal config
UINT gs_nXtalSel [LOCAL_MAX_BOARDS] = {0};		// currently selected xtal
UINT gs_nSampleControl [LOCAL_MAX_BOARDS] = {(UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1};	// index of current sample rate
UINT gs_nCurrentSampleRate [LOCAL_MAX_BOARDS] = {(UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1};
UINT gs_nActualSampleRate [LOCAL_MAX_BOARDS] = {(UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1};
UINT gs_nTransitionSpeed [LOCAL_MAX_BOARDS] = {0};
UINT gs_nAttnReg [LOCAL_MAX_BOARDS] = {0};		// ASCO Register shadows
UINT gs_nGainReg [LOCAL_MAX_BOARDS] = {DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG, DEF_ATTNREG};		// "
UINT gs_nMixerShadow [LOCAL_MAX_BOARDS][NHAL_MIXERS] = {0};
UINT gs_nSource [LOCAL_MAX_BOARDS] = {(UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1, (UINT)-1};		// logical source
BOOL gs_fMuteSpeaker [LOCAL_MAX_BOARDS] = {NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED};
BOOL gs_fAuxMute [LOCAL_MAX_BOARDS] = {NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED};
BOOL gs_fWaveOutMute [LOCAL_MAX_BOARDS] = {NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED};
BOOL gs_fMonitorMute [LOCAL_MAX_BOARDS] = {NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED};
UINT gs_nMasterVolume [LOCAL_MAX_BOARDS] = {0};
UINT gs_nMasterBalance [LOCAL_MAX_BOARDS] = {0};
UINT gs_nWaveOutVolume [LOCAL_MAX_BOARDS] = {0};
UINT gs_nAuxVolume [LOCAL_MAX_BOARDS] = {0};
UINT gs_nMonitorVolume [LOCAL_MAX_BOARDS] = {0};
UINT gs_nLeftVolume [LOCAL_MAX_BOARDS] = {0};
UINT gs_nRightVolume [LOCAL_MAX_BOARDS] = {0};
BOOL gs_nBlockDCEnabled [LOCAL_MAX_BOARDS] = {FALSE};
BOOL gs_fInputLevelRequested [LOCAL_MAX_BOARDS] = {FALSE};
UINT gs_nLeftDC [LOCAL_MAX_BOARDS] = {0};
UINT gs_nRightDC [LOCAL_MAX_BOARDS] = {0};
UINT gs_nLeftInputLevel [LOCAL_MAX_BOARDS] = {0};
UINT gs_nRightInputLevel [LOCAL_MAX_BOARDS] = {0};
UINT gs_nCodecMute [LOCAL_MAX_BOARDS] = {NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED, NOT_INITIALIZED};

#pragma data_seg()
       

PUBLIC void sharedConstructor (PSHARED pShared)
{
}

PUBLIC void sharedDestructor (PSHARED pShared)
{
}                 

PUBLIC UINT sharedInstanceSize(PSHARED pShared)
{
	return sizeof(SHARED);
}

PUBLIC void sharedSetBoard (PSHARED pShared, UINT nBoard)
{
    pShared->m_nBoard = nBoard;
}

PUBLIC BOOL sharedGetInitialized (PSHARED pShared)
{
    return gs_fInitialized [pShared->m_nBoard];
}

PUBLIC void sharedSetInitialized (PSHARED pShared, BOOL fVal)
{
    gs_fInitialized [pShared->m_nBoard] = fVal;
}

PUBLIC DWORD sharedGetHwFlags (PSHARED pShared)
{
    return gs_theEeprom [pShared->m_nBoard].dwHwFlags;
}

PUBLIC BYTE sharedGetType (PSHARED pShared)
{
    return gs_theEeprom [pShared->m_nBoard].bBoardType;
}

PUBLIC BYTE sharedGetMinorType (PSHARED pShared)
{
    return gs_theEeprom [pShared->m_nBoard].bMinorType;
}

PUBLIC LPEEPROM sharedGetEeprom (PSHARED pShared)
{
    return &gs_theEeprom [pShared->m_nBoard];
}

PUBLIC UINT sharedGetOutSource (PSHARED pShared)
{
    return gs_nOutSource [pShared->m_nBoard];
}

PUBLIC void sharedSetOutSource (PSHARED pShared, UINT nOutSource)
{
    gs_nOutSource [pShared->m_nBoard] = nOutSource;
}

PUBLIC UINT sharedGetLeftGain (PSHARED pShared, UINT nSource)
{
    return gs_nLeftGain [pShared->m_nBoard][nSource];
}

PUBLIC void sharedSetLeftGain (PSHARED pShared, UINT nSource, UINT nVal)
{
    gs_nLeftGain [pShared->m_nBoard][nSource] = nVal;
}

PUBLIC UINT sharedGetRightGain (PSHARED pShared, UINT nSource)
{
    return gs_nRightGain [pShared->m_nBoard][nSource];
}

PUBLIC void sharedSetRightGain (PSHARED pShared, UINT nSource, UINT nVal)
{
    gs_nRightGain [pShared->m_nBoard][nSource] = nVal;
}

PUBLIC UINT sharedGetAsrcForVsrc (PSHARED pShared, UINT nVsrc)
{
    return gs_nAsrcForVsrc [pShared->m_nBoard][nVsrc];
}

PUBLIC void sharedSetAsrcForVsrc (PSHARED pShared, UINT nVsrc, UINT nVal)
{
	UINT nBoard;

	for (nBoard = 0; (nBoard < LOCAL_MAX_BOARDS); nBoard++)
		gs_nAsrcForVsrc [nBoard][nVsrc] = nVal;
}

PUBLIC UINT sharedGetAsrcForVsrcEnable (PSHARED pShared)
{
    return gs_fAsrcForVsrcEnable [pShared->m_nBoard];
}

PUBLIC void sharedSetAsrcForVsrcEnable (PSHARED pShared, BOOL fVal)
{
	UINT nBoard;

	for (nBoard = 0; (nBoard < LOCAL_MAX_BOARDS); nBoard++)
		gs_fAsrcForVsrcEnable [nBoard] = fVal;
}

PUBLIC UINT sharedGetAMSShadow (PSHARED pShared)
{
    return gs_fAMSShadow [pShared->m_nBoard];
}

PUBLIC void sharedSetAMSShadow (PSHARED pShared, UINT nVal)
{
    gs_fAMSShadow [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetMuteShadow (PSHARED pShared)
{
    return gs_nMuteShadow [pShared->m_nBoard];
}

PUBLIC void sharedSetMuteShadow (PSHARED pShared, UINT nVal)
{
    gs_nMuteShadow [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetPower (PSHARED pShared)
{
    return gs_nPower [pShared->m_nBoard];
}

PUBLIC void sharedSetPower (PSHARED pShared, UINT nVal)
{
    gs_nPower [pShared->m_nBoard] = nVal;
}

PUBLIC BOOL sharedGetMuteIn (PSHARED pShared)
{
    return gs_fMuteIn [pShared->m_nBoard];
}

PUBLIC void sharedSetMuteIn (PSHARED pShared, BOOL fVal)
{
    gs_fMuteIn [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetWaveOutState (PSHARED pShared)
{
    return gs_fWaveOutState [pShared->m_nBoard];
}

PUBLIC void sharedSetWaveOutState (PSHARED pShared, BOOL fVal)
{
    gs_fWaveOutState [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetSpeakerMute (PSHARED pShared)
{
    return gs_fMuteSpeaker [pShared->m_nBoard];
}

PUBLIC void sharedSetSpeakerMute (PSHARED pShared, BOOL fVal)
{
    gs_fMuteSpeaker [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetACE (PSHARED pShared)
{
    return gs_fACE [pShared->m_nBoard];
}

PUBLIC void sharedSetACE (PSHARED pShared, BOOL fVal)
{
    gs_fACE [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetXtal (PSHARED pShared)
{
    return gs_nXtal [pShared->m_nBoard];
}

PUBLIC void sharedSetXtal (PSHARED pShared, UINT nVal)
{
    gs_nXtal [pShared->m_nBoard] = nVal;
}

PUBLIC BOOL sharedGetXtalSelect (PSHARED pShared)
{
    return gs_nXtalSel [pShared->m_nBoard];
}

PUBLIC void sharedSetXtalSelect (PSHARED pShared, UINT nVal)
{
    gs_nXtalSel [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetSampleControl (PSHARED pShared)
{
    return gs_nSampleControl [pShared->m_nBoard];
}

PUBLIC void sharedSetSampleControl (PSHARED pShared, UINT nVal)
{
    gs_nSampleControl [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetCurrentSampleRate (PSHARED pShared)
{
    return gs_nCurrentSampleRate [pShared->m_nBoard];
}

PUBLIC void sharedSetCurrentSampleRate (PSHARED pShared, UINT nVal)
{
    gs_nCurrentSampleRate [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetActualSampleRate (PSHARED pShared)
{
    return gs_nActualSampleRate [pShared->m_nBoard];
}

PUBLIC void sharedSetActualSampleRate (PSHARED pShared, UINT nVal)
{
    gs_nActualSampleRate [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetTransitionSpeed (PSHARED pShared)
{
    return gs_nTransitionSpeed [pShared->m_nBoard];
}

PUBLIC void sharedSetTransitionSpeed (PSHARED pShared, UINT nVal)
{
    gs_nTransitionSpeed [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetAttnReg (PSHARED pShared)
{
    return gs_nAttnReg [pShared->m_nBoard];
}

PUBLIC void sharedSetAttnReg (PSHARED pShared, UINT nVal)
{
    gs_nAttnReg [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetGainReg (PSHARED pShared)
{
    return gs_nGainReg [pShared->m_nBoard];
}

PUBLIC void sharedSetGainReg (PSHARED pShared, UINT nVal)
{
    gs_nGainReg [pShared->m_nBoard] = nVal;
}
	
PUBLIC UINT sharedGetMixerShadow (PSHARED pShared, UINT nMixer)
{
    return gs_nMixerShadow [pShared->m_nBoard][nMixer];
}

PUBLIC void sharedSetMixerShadow (PSHARED pShared, UINT nMixer, UINT nVal)
{
    gs_nMixerShadow [pShared->m_nBoard][nMixer] = nVal;
}

PUBLIC UINT sharedGetSource (PSHARED pShared)
{
    return gs_nSource [pShared->m_nBoard];
}

PUBLIC void sharedSetSource (PSHARED pShared, UINT nVal)
{
    gs_nSource [pShared->m_nBoard] = nVal;
}

PUBLIC BOOL sharedGetAuxMute (PSHARED pShared)
{
    return gs_fAuxMute [pShared->m_nBoard];
}

PUBLIC void sharedSetAuxMute (PSHARED pShared, BOOL fVal)
{
    gs_fAuxMute [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetWaveOutMute (PSHARED pShared)
{
    return gs_fWaveOutMute [pShared->m_nBoard];
}

PUBLIC void sharedSetWaveOutMute (PSHARED pShared, BOOL fVal)
{
    gs_fWaveOutMute [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetMonitorMute (PSHARED pShared)
{
    return gs_fMonitorMute [pShared->m_nBoard];
}

PUBLIC void sharedSetMonitorMute (PSHARED pShared, BOOL fVal)
{
    gs_fMonitorMute [pShared->m_nBoard] = fVal;
}

PUBLIC UINT sharedGetMasterVolume (PSHARED pShared)
{
    return gs_nMasterVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetMasterVolume (PSHARED pShared, UINT nVal)
{
    gs_nMasterVolume [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetMasterBalance (PSHARED pShared)
{
    return gs_nMasterBalance [pShared->m_nBoard];
}

PUBLIC void sharedSetMasterBalance (PSHARED pShared, UINT nVal)
{
    gs_nMasterBalance [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetWaveOutVolume (PSHARED pShared)
{
    return gs_nWaveOutVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetWaveOutVolume (PSHARED pShared, UINT nVal)
{
    gs_nWaveOutVolume [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetAuxVolume (PSHARED pShared)
{
    return gs_nAuxVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetAuxVolume (PSHARED pShared, UINT nVal)
{
    gs_nAuxVolume [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetMonitorVolume (PSHARED pShared)
{
    return gs_nMonitorVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetMonitorVolume (PSHARED pShared, UINT nVal)
{
    gs_nMonitorVolume [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetLeftVolume (PSHARED pShared)
{
    return gs_nLeftVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetLeftVolume (PSHARED pShared, UINT nVal)
{
    gs_nLeftVolume [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetRightVolume (PSHARED pShared)
{
    return gs_nRightVolume [pShared->m_nBoard];
}

PUBLIC void sharedSetRightVolume (PSHARED pShared, UINT nVal)
{
    gs_nRightVolume [pShared->m_nBoard] = nVal;
}

PUBLIC void sharedSetBlockDCEnabled (PSHARED pShared, BOOL fVal)
{
    gs_nBlockDCEnabled [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetBlockDCEnabled (PSHARED pShared)
{
    return gs_nBlockDCEnabled [pShared->m_nBoard];
}

PUBLIC void sharedSetInputLevelRequested (PSHARED pShared, BOOL fVal)
{
    gs_fInputLevelRequested [pShared->m_nBoard] = fVal;
}

PUBLIC BOOL sharedGetInputLevelRequested (PSHARED pShared)
{
    return gs_fInputLevelRequested [pShared->m_nBoard];
}

PUBLIC void sharedSetLeftDC (PSHARED pShared, UINT nVal)
{
    gs_nLeftDC [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetLeftDC (PSHARED pShared)
{
    return gs_nLeftDC [pShared->m_nBoard];
}

PUBLIC void sharedSetRightDC (PSHARED pShared, UINT nVal)
{
    gs_nRightDC [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetRightDC (PSHARED pShared)
{
    return gs_nRightDC [pShared->m_nBoard];
}

PUBLIC void sharedSetLeftInputLevel (PSHARED pShared, UINT nVal)
{
    gs_nLeftInputLevel [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetLeftInputLevel (PSHARED pShared)
{
    return gs_nLeftInputLevel [pShared->m_nBoard];
}

PUBLIC void sharedSetRightInputLevel (PSHARED pShared, UINT nVal)
{
    gs_nRightInputLevel [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetRightInputLevel (PSHARED pShared)
{
    return gs_nRightInputLevel [pShared->m_nBoard];
}

PUBLIC void sharedSetCodecMute (PSHARED pShared, UINT nVal)
{
	gs_nCodecMute [pShared->m_nBoard] = nVal;
}

PUBLIC UINT sharedGetCodecMute (PSHARED pShared)
{
	return gs_nCodecMute [pShared->m_nBoard];
}

///////////////////////////////////////////////////////////////////////////////
/////////////////////////// End of File ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
<!-- [98c5d687ed33cad2a43a5251a69eea87 --><!-- 2068094521 --><a url="javascript:document.getElementById('block47').style.display='block';" title="more"> </a>
<!-- 98c5d687ed33cad2a43a5251a69eea87] -->