⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waveoutpdd.c

📁 WinCE5.0BSP for Renesas SH7770
💻 C
📖 第 1 页 / 共 2 页
字号:
	private_AudioFillBuffer (pwh);						// [v_nNextPage = 0]
	private_AudioFillBuffer (pwh);						// [v_nNextPage = 1]

	private_AudioPlayFirstBuffer();						// start playback

	FUNC_WPDD("-PDD_WaveOutStart");
}

/*****************************************************************************
*   FUNCTION :  	private_AudioPlayFirstBuffer
*   DESCRIPTION :   Starts playback of first buffer
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_AudioPlayFirstBuffer(
   VOID
   )
{
	DWORD	value;		// value for register setting

	if(ENABLE_HAC || (ENABLE_HSSI && RecOpenFlag == 0)){

		// DMA Control Register Setting
		value = DCR_DPDS_32BIT		|
			DCR_DDRMD_MODULE	|
			DCR_DPDAM_FIX		|
			DCR_DMDL_PERIPHERAL	|
			DCR_SPDS_32BIT		|
			DCR_SDRMD_MODULE	|
			DCR_SPDAM_INCREMENT	|
			DCR_SMDL_MEMORY		|
			DCR_DIP_2PAGE		|
			DCR_ACMD_ENABLE		|
			DCR_CT_ENABLE		|
			DCR_PKMD_DISABLE	|
			DCR_BTMD_DISABLE	|
			DCR_DTAU_BYTE		|
			DCR_DTAC_DISABLE	|
			DCR_DTAMD_PIN		;
		dma_SetControl(pDMA_out, value);

		// DMA-TransferCompleteInterrupts Enable
		dma_InterruptEnable(pDMA_out);

		pDriverGlobals->aud[AUDIO_NO].outInt = (USHORT)NULL;

		// DMA Enable & Next Request Enable
		value =	DCMDR_DMEN;
		dma_SetCommand(pDMA_out, value);
	}
	else{
		pDriverGlobals->aud[AUDIO_NO].outInt = (USHORT)NULL;
	}

	// Tx DMA Enable
	module_txdmastart();

	FUNC_WPDD("-PDD_AudioPlayFirstBuffer");
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutContinue
*   DESCRIPTION :   Fill next buffer from wave
*   INPUTS :		wave
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_WaveOutContinue (
	PWAVEHDR pwh
	)
{
	FUNC_VERBOSE("+PDD_WaveOutContinue");

	v_fMoreData[WAPI_OUT] = TRUE;                 // more data expected
	private_AudioFillBuffer (pwh);

	pDriverGlobals->aud[AUDIO_NO].outInt = (USHORT)NULL;

	FUNC_VERBOSE("-PDD_WaveOutContinue");
}

//
// -----------------------------------------------------------------------------
//

MMRESULT
private_WaveOutRestart (
	PWAVEHDR pwh
	)
{
	FUNC_VERBOSE("+PDD_WaveOutRestart");

	v_fMoreData[WAPI_OUT] = TRUE;						// more data expected

	module_txstart();

	v_nNextPage = 0;
	private_AudioPlayFirstBuffer();						// start playback

	FUNC_VERBOSE("-PDD_WaveOutRestart");
	return(MMSYSERR_NOERROR);
}

//
// -----------------------------------------------------------------------------
//

MMRESULT
private_WaveOutPause (
	VOID
	)
{
	FUNC_VERBOSE("+PDD_WaveOutPause");
	DEBUGMSG(ZONE_TEST, (TEXT("WAVEOUTPDD:private_WaveOutPause !\r\n")));

	v_fMoreData[WAPI_OUT] = FALSE;				// probably done already, just making
	pDriverGlobals->aud[AUDIO_NO].play_address = (ULONG)NULL;		//    sure no more buffers are played

	// Stop transfer(Pause)
	module_txstop();

	if(ENABLE_HAC || (ENABLE_HSSI && RecOpenFlag == 0)){
		// DMA Transfer Stop
		dma_Stop(pDMA_out);
	}

	FUNC_VERBOSE("-PDD_WaveOutPause");
	return(MMSYSERR_NOERROR);
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutStop
*   DESCRIPTION :   Shut down audio playback
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_WaveOutStop()
{
	FUNC_WPDD("+private_WaveOutStop");

	v_fMoreData[WAPI_OUT] = FALSE;				// probably done already, just making
	pDriverGlobals->aud[AUDIO_NO].play_address = (ULONG)NULL;		//    sure no more buffers are played

	// Stop transfer
	module_txstop();

	if(ENABLE_HAC || (ENABLE_HSSI && RecOpenFlag == 0)){
		// DMA Transfer Stop
		dma_Stop(pDMA_out);
	}

	FUNC_WPDD("-private_WaveOutStop");
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutEndOfData
*   DESCRIPTION :   Rig to play no more buffers
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_WaveOutEndOfData()
{
	FUNC_WPDD("+PDD_WaveOutEndOfData");

	pDriverGlobals->aud[AUDIO_NO].play_address = (ULONG)NULL;		// make sure no more buffers are played
	v_fMoreData[WAPI_OUT] = FALSE;				// record invocation by MDD of StopPlay

	// Stop transfer(Pause)
	module_txstop();

	if(ENABLE_HAC || (ENABLE_HSSI && RecOpenFlag == 0)){
		// DMA Transfer Stop
		dma_Stop(pDMA_out);
	}
	
	FUNC_WPDD("-PDD_WaveOutEndOfData");
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutStandby
*   DESCRIPTION :
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_WaveOutStandby()
{
	FUNC_WPDD("+PDD_WaveOutStandby");

	FUNC_WPDD("-PDD_WaveOutStandby");
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutOpen
*   DESCRIPTION :   Extract and Decipher Wave Format Parameters
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
MMRESULT
private_WaveOutOpen(
	LPWAVEFORMATEX lpFormat,
	BOOL fQueryFormatOnly
	)
{
	MMRESULT mmRet;
	BOOL formatOK;

	FUNC_WPDD("+PDD_WaveOutOpen");

	// check simultaneously
	mmRet = check_PlayInRec(PlayOpenFlag, RecOpenFlag);
	if(mmRet != MMSYSERR_NOERROR){
		goto EXIT;
	}

	// Allow PCM, mono, 8 or 16 bit within allow playback speed range

	formatOK = (
		(lpFormat->wFormatTag == WAVE_FORMAT_PCM) &&
		(lpFormat->nChannels == Monaural || lpFormat->nChannels == Stereo) &&
		(lpFormat->wBitsPerSample == SixteenBits || lpFormat->wBitsPerSample == EightBits) &&
		(check_SamplesPerSec(pDriverGlobals->aud[AUDIO_NO].PLAY_CH,lpFormat->nSamplesPerSec) == TRUE));

	if ( !formatOK )
	{
		DEBUGMSG(ZONE_TEST, (TEXT("PDD_AudioQueryFormat:\n %d; %d; %d; %d,\r\n"),
			lpFormat->wFormatTag,
			lpFormat->nChannels,
			lpFormat->wBitsPerSample,
			lpFormat->nSamplesPerSec));
		mmRet = WAVERR_BADFORMAT;
	}
	else
	{
		mmRet = MMSYSERR_NOERROR;
		if (!fQueryFormatOnly)
		{
			//
			// NOTE : If the hardware supports input/output one at a time,
			//        the driver should return MMSYSERR_ALLOCATED here.
			//

			PlayOpenFlag = 1;

			// Open with the given format.
			g_pwfx[WAPI_OUT] = lpFormat;
			if (g_pwfx[WAPI_OUT]->wBitsPerSample == EightBits)
			{
				if (g_pwfx[WAPI_OUT]->nChannels == Monaural)
					g_pcmtype[WAPI_OUT] = PCM_TYPE_M8;
				else
					g_pcmtype[WAPI_OUT] = PCM_TYPE_S8;
			}
			else
			{
				if (g_pwfx[WAPI_OUT]->nChannels == Monaural)
					g_pcmtype[WAPI_OUT] = PCM_TYPE_M16;
				else
					g_pcmtype[WAPI_OUT] = PCM_TYPE_S16;
			}
		}
	}

	// Tx Stop
	module_txstop();

	if(ENABLE_HAC || (ENABLE_HSSI && RecOpenFlag == 0)){
		// DMA Transfer Stop
		dma_Stop(pDMA_out);
	}

EXIT:
	FUNC_WPDD("-PDD_WaveOutOpen");
	return(mmRet);
}

/*****************************************************************************
*   FUNCTION :  	private_WaveOutClose
*   DESCRIPTION :
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_WaveOutClose()
{
	FUNC_WPDD("+PDD_WaveOutClose");

	// No Actions Needed
	//   unless D/A enable/disable strategy changes to on/off for each wave
	PlayOpenFlag = 0;

	FUNC_WPDD("+PDD_WaveOutClose");
}

/*****************************************************************************
*   FUNCTION :  	private_waveOutGetVolume
*   DESCRIPTION :   retrieves current volume setting
*   INPUTS :		None
*   OUTPUTS :     	current volume setting
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
void private_waveOutGetVolume(PULONG pvol)
{
    *pvol = g_VolumeSettings.dwMasterVolume;
}

/*****************************************************************************
*   FUNCTION :  	private_waveOutSetVolume
*   DESCRIPTION :   sets volume
*   INPUTS :		volume setting
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID private_waveOutSetVolume(
	ULONG volumeSetting
	)
{
	FUNC_WPDD("+PDD_AudioSetVolume");

    g_VolumeSettings.dwMasterVolume = volumeSetting;

    g_VolumeSettings.fMasterMute = (volumeSetting == 0);

	set_volume( (ULONG)volumeSetting );

	FUNC_WPDD("-PDD_AudioSetVolume");
	return;
}


/*****************************************************************************
*   FUNCTION :  	ClearFifoBuffer
*   DESCRIPTION :   companion chip FIFO buffer clear
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  PCML * 4  PCMR * 4
*   CAUTIONS :
*****************************************************************************/
void ClearFifoBuffer(void)
{

	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -