///////////////////////////////////////////////////////////////////////////////
// Copyright (c) Winnov L.P., 1997.  All rights reserved
// get.c: CAsrc class get methods implementation.
//
// Modified : C++ -> C
///////////////////////////////////////////////////////////////////////////////

#include "common.h"
#include "wnvasrc.h"
#include "asrc.h"   
#include "asrcpriv.h"
#include "io.h"
                      
                      
#undef PUBLIC
#undef PRIVATE
#define PUBLIC
#define PRIVATE


///////////////////////////////////////////////////////////////////////////////

PRIVATE BOOL asrcGetMonitorMuteShadow (PASRC pAsrc, UINT nSource)
{
    if (nSource >= NAUDIOSOURCES) return TRUE;
    return (sharedGetMuteShadow (pAsrc->m_pShared) & (1 << nSource))?TRUE:FALSE;
}
    
PRIVATE DWORD asrcGetVersion (PASRC pAsrc)
{
    return WNVASRC_LAST;
}

PRIVATE DWORD asrcGetSampleRate (PASRC pAsrc)
{
    return (DWORD)halGetSampleRate (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetDefaultSampleRate (PASRC pAsrc)
{
    return (DWORD)halGetDefaultSampleRate (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetACE (PASRC pAsrc)
{
    return (DWORD)halGetACE (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetAMS (PASRC pAsrc)
{
    return (DWORD)sharedGetAMSShadow (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetAPE (PASRC pAsrc)
{
    return (DWORD)((asrcReadReg (pAsrc, HW_PORT_FREQ) & HW_APEBIT)?TRUE:FALSE);
}

PRIVATE DWORD asrcGetPtr (PASRC pAsrc)
{
    return 0;
}

PRIVATE DWORD asrcGetIsPlaying (PASRC pAsrc)
{
    return (DWORD)(asrcGetACE (pAsrc) && !asrcGetMuteOut (pAsrc));
}

PRIVATE DWORD asrcGetWaveOutState (PASRC pAsrc)
{
    return (DWORD)codecGetWaveOutState (&pAsrc->m_codec);
}

PRIVATE DWORD asrcGetLeftGainCurrentSource (PASRC pAsrc)
{
    return asrcGetLeftGainPerSource (pAsrc, (UINT)asrcGetSource (pAsrc));       
}

PRIVATE DWORD asrcGetRightGainCurrentSource (PASRC pAsrc)
{
    return asrcGetRightGainPerSource (pAsrc, (UINT)asrcGetSource (pAsrc));
}

PRIVATE DWORD asrcGetLeftGainPerSource (PASRC pAsrc, UINT nSource)
{
    return (DWORD)(sharedGetLeftGain (pAsrc->m_pShared, nSource) & 0xff);
}

PRIVATE DWORD asrcGetRightGainPerSource (PASRC pAsrc, UINT nSource)
{
    return (DWORD)(sharedGetRightGain (pAsrc->m_pShared, nSource) & 0xff);
}

PRIVATE DWORD asrcGetSource (PASRC pAsrc)
{
    return (DWORD)halGetSource (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetLine2Source (PASRC pAsrc)
{
    return asrcGetSource (pAsrc);
}

PRIVATE DWORD asrcGetOutputSource (PASRC pAsrc)
{
    return (DWORD)sharedGetOutSource (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetMuteOut (PASRC pAsrc)
{
    return (DWORD)halGetMuteOut (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetMuteIn (PASRC pAsrc)
{
    return (DWORD)codecGetMuteIn (&pAsrc->m_codec);
}

PRIVATE DWORD asrcGetAuxMute (PASRC pAsrc)
{
    return (DWORD)halGetAuxMute (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetWaveOutMute (PASRC pAsrc)
{
    return (DWORD)halGetWaveOutMute (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetMonitorMute (PASRC pAsrc)
{
    return (DWORD)halGetMonitorMute (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetVolume (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_MASTER_VOLUME);
}

PRIVATE DWORD asrcGetBalance (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_MASTER_BALANCE);
}

PRIVATE DWORD asrcGetLeftVolume (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_LEFTVOLUME);
}

PRIVATE DWORD asrcGetRightVolume (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_RIGHTVOLUME);
}

PRIVATE DWORD asrcGetWaveVolume (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_WAVEOUT_VOLUME);
}

PRIVATE DWORD asrcGetAuxVolume (PASRC pAsrc)
{
    if (sharedGetType (pAsrc->m_pShared) == TYPE_ALARIS) return 0;
    return halGetVolume (&pAsrc->m_hal, HAL_AUX_VOLUME);
}

PRIVATE DWORD asrcGetMonitorVolume (PASRC pAsrc)
{
    return halGetVolume (&pAsrc->m_hal, HAL_MONITOR_VOLUME);
}

PRIVATE DWORD asrcGetLine1Volume (PASRC pAsrc)
{
    if (sharedGetType (pAsrc->m_pShared) != TYPE_ALARIS) return 0;
    return halGetMixer (&pAsrc->m_hal, HAL_LINE1_VOLUME);
}

PRIVATE DWORD asrcGetLine2Volume (PASRC pAsrc)
{
    if (sharedGetType (pAsrc->m_pShared) != TYPE_ALARIS) return 0;
    return halGetMixer (&pAsrc->m_hal, HAL_LINE2_VOLUME);
}      

PRIVATE DWORD asrcGetMicVolume (PASRC pAsrc)
{
    if (sharedGetType (pAsrc->m_pShared) != TYPE_ALARIS) return 0;
    return halGetMixer (&pAsrc->m_hal, HAL_MIC_VOLUME);
}

PRIVATE DWORD asrcGetSourceAssociation (PASRC pAsrc, UINT nVideoSource)
{
    if (nVideoSource < NVIDEOSOURCES)
    	return sharedGetAsrcForVsrc (pAsrc->m_pShared, nVideoSource);
    else
    	return 0;	// fail (invalid source)
}

PRIVATE DWORD asrcGetAudioWithVideo (PASRC pAsrc)
{
    return 0;	// is write only
}

PRIVATE DWORD asrcGetVideoSource (PASRC pAsrc)
{
    return 0;	// is write only
}

PRIVATE DWORD asrcGetSourceAssociationEnable (PASRC pAsrc)
{
    return sharedGetAsrcForVsrcEnable (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetBlockDCEnabled (PASRC pAsrc)
{
    return (DWORD)sharedGetBlockDCEnabled (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetLeftDC (PASRC pAsrc)
{
    sharedSetInputLevelRequested (pAsrc->m_pShared, TRUE);
    return (DWORD)sharedGetLeftDC (pAsrc->m_pShared);
}                                  
    
PRIVATE DWORD asrcGetRightDC (PASRC pAsrc)
{
    sharedSetInputLevelRequested (pAsrc->m_pShared, TRUE);   
    return (DWORD)sharedGetRightDC (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetRightInputLevel (PASRC pAsrc)
{
    sharedSetInputLevelRequested (pAsrc->m_pShared, TRUE);
    return (DWORD)sharedGetLeftInputLevel (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetLeftInputLevel (PASRC pAsrc)
{
    sharedSetInputLevelRequested (pAsrc->m_pShared, TRUE);
    return (DWORD)sharedGetRightInputLevel (pAsrc->m_pShared);
}

PRIVATE DWORD asrcGetIsWimp (PASRC pAsrc)
{
    return (DWORD)halIsWimp (&pAsrc->m_hal);
}

PRIVATE DWORD asrcGetCodecMute (PASRC pAsrc)
{
	return (DWORD)sharedGetCodecMute (pAsrc->m_pShared);
}
