454 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			454 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/**
 | 
						|
    Copyright   Novatek Microelectronics Corp. 2005.  All rights reserved.
 | 
						|
 | 
						|
    @file       PlaySoundAPI.c
 | 
						|
    @ingroup    mIPRJAPKey
 | 
						|
 | 
						|
    @brief      Play Sound task API
 | 
						|
                This file includes all APIs of play sound task
 | 
						|
 | 
						|
    @note       Nothing.
 | 
						|
 | 
						|
    @date       2006/01/23
 | 
						|
*/
 | 
						|
 | 
						|
/** \addtogroup mIPRJAPKey */
 | 
						|
//@{
 | 
						|
 | 
						|
#include "PlaySoundInt.h"
 | 
						|
#include "GxSound.h"
 | 
						|
#include "vendor_common.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
#define __MODULE__          gxsound_api
 | 
						|
#define __DBGLVL__          2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
 | 
						|
#define __DBGFLT__          "*" //*=All, [mark]=CustomClass
 | 
						|
 | 
						|
#include "kwrap/debug.h"
 | 
						|
unsigned int gxsound_api_debug_level = NVT_DBG_WRN;
 | 
						|
module_param_named(gxsound_api_debug_level, gxsound_api_debug_level, int, S_IRUGO | S_IWUSR);
 | 
						|
MODULE_PARM_DESC(gxsound_api_debug_level, "gxsound_api debug level");
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
//DX_HANDLE gGxSndDrvSndHdl = 0;
 | 
						|
FPSOUNDCB g_fpSoundCB = NULL;
 | 
						|
BOOL                            bPlaySoundOpened = FALSE;
 | 
						|
PSOUND_DATA                     gpPlaySoundDataAry = NULL;
 | 
						|
UINT32                          gpPlaySoundDataAryCnt = 0;
 | 
						|
SOUND_DATA                      *gPlaySoundData = 0;
 | 
						|
//UINT32                          gPlaySoundIdx = 0;
 | 
						|
UINT32 guiSoundEn = TRUE;
 | 
						|
UINT32 gSoundAudSR = 8000;
 | 
						|
UINT32 gSndOutDevConfigIdx = 0;
 | 
						|
UINT32 gSndVol = 50;
 | 
						|
SOUND_MEM gxsound_mem = {0};
 | 
						|
 | 
						|
extern UINT32 g_uiPlaySoundStatus;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void GxSound_SetOutDevConfigIdx(UINT32 outDevConfigIdx)
 | 
						|
{
 | 
						|
  HD_RESULT ret;
 | 
						|
  HD_AUDIOOUT_DRV_CONFIG audio_driver_cfg_param = {0};
 | 
						|
  INT32 pwr_en = TRUE;
 | 
						|
 | 
						|
        DBG_IND("N=%d,Ori=%d\r\n", outDevConfigIdx, gSndOutDevConfigIdx);
 | 
						|
        gSndOutDevConfigIdx = outDevConfigIdx;
 | 
						|
 | 
						|
        ret = hd_audioout_open(0, HD_AUDIOOUT_1_CTRL, &gxsound_ctrl_id); //open this for device control
 | 
						|
        if (ret != HD_OK) {
 | 
						|
                return;
 | 
						|
        }
 | 
						|
 | 
						|
        /* set audio out driver parameters */
 | 
						|
        audio_driver_cfg_param.mono = HD_AUDIO_MONO_RIGHT;
 | 
						|
        audio_driver_cfg_param.output = (gSndOutDevConfigIdx == 0)? HD_AUDIOOUT_OUTPUT_SPK : HD_AUDIOOUT_OUTPUT_LINE;
 | 
						|
        ret = hd_audioout_set(gxsound_ctrl_id, HD_AUDIOOUT_PARAM_DRV_CONFIG, &audio_driver_cfg_param);
 | 
						|
        if (ret != HD_OK) {
 | 
						|
                return;
 | 
						|
        }
 | 
						|
 | 
						|
        ret = vendor_audioout_set(gxsound_ctrl_id, VENDOR_AUDIOOUT_ITEM_PREPWR_ENABLE, (VOID *)&pwr_en);
 | 
						|
        if (ret != HD_OK) {
 | 
						|
                DBG_ERR("VENDOR_AUDIOOUT_ITEM_PREPWR_ENABLE failed=%x\r\n", ret);
 | 
						|
                return;
 | 
						|
        }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void GxSound_ResetParam(void)
 | 
						|
{
 | 
						|
	gSndOutDevConfigIdx = 0;
 | 
						|
}
 | 
						|
 | 
						|
void GxSound_SetSoundSR(UINT32 audSR)
 | 
						|
{
 | 
						|
	DBG_IND(":%d,Ori=%d\r\n", audSR, gSoundAudSR);
 | 
						|
	gSoundAudSR = audSR;
 | 
						|
}
 | 
						|
UINT32 GxSound_GetSoundSRByID(UINT32 uiSoundID)
 | 
						|
{
 | 
						|
	#if 1
 | 
						|
	PSOUND_DATA pSoudData = 0;  //fix for CID 60802
 | 
						|
	DBG_IND(": uiSoundID=%d\r\n", uiSoundID);
 | 
						|
	if (uiSoundID >= gpPlaySoundDataAryCnt) {
 | 
						|
		DBG_ERR(":Idx=%d out range=%d\r\n", uiSoundID, gpPlaySoundDataAryCnt);
 | 
						|
		return (8000);
 | 
						|
	}
 | 
						|
	pSoudData = (PSOUND_DATA)(gpPlaySoundDataAry + uiSoundID);
 | 
						|
	DBG_IND(": SR=%d\r\n", pSoudData->sampleRate);
 | 
						|
	return (pSoudData->sampleRate);
 | 
						|
	#else
 | 
						|
	return 0;
 | 
						|
	#endif
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Enable/Disable keypad tone
 | 
						|
 | 
						|
  Enable/Disable keypad tone
 | 
						|
 | 
						|
  @param BOOL bEn: TRUE -> Enable, FALSE -> Disable
 | 
						|
  @return void
 | 
						|
*/
 | 
						|
void GxSound_EnableSound(BOOL bEn)
 | 
						|
{
 | 
						|
	DBG_IND(": bEn=%d, Ori-bEn=%d\r\n", bEn, guiSoundEn);
 | 
						|
	guiSoundEn = bEn;
 | 
						|
	DBG_IND(": Ori-bEn=%d\r\n", guiSoundEn);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether keypad tone is enabled or not
 | 
						|
 | 
						|
  Check whether keypad tone is enabled or not
 | 
						|
 | 
						|
  @param void
 | 
						|
  @return BOOL: TRUE -> Enable, FALSE -> Disable
 | 
						|
*/
 | 
						|
BOOL GxSound_IsSoundEnabled(void)
 | 
						|
{
 | 
						|
	DBG_IND(": Ori-bEn=%d\r\n", guiSoundEn);
 | 
						|
	return guiSoundEn;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether is play or stop
 | 
						|
 | 
						|
  Check whether is play or stop
 | 
						|
 | 
						|
  @param void
 | 
						|
  @return BOOL: TRUE -> play, FALSE -> stop
 | 
						|
*/
 | 
						|
BOOL GxSound_IsPlaying(void)
 | 
						|
{
 | 
						|
	return (g_uiPlaySoundStatus == PLAYSOUND_STS_PLAYING);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Open Play Sound task
 | 
						|
 | 
						|
  Open Play Sound task.
 | 
						|
  The parameter is not using now, just for compliance
 | 
						|
 | 
						|
  Return value is listed below:
 | 
						|
  E_SYS:Init. Audio fail
 | 
						|
  E_OK: No error or Task is already opened
 | 
						|
 | 
						|
  @param PPLAYSOUND_APPOBJ pWavObj: Play Sound application object
 | 
						|
  @return ER
 | 
						|
*/
 | 
						|
ER GxSound_Open(FPSOUNDCB fpSoundCB)
 | 
						|
{
 | 
						|
	ER retV = E_OK;
 | 
						|
	HD_RESULT ret;
 | 
						|
 | 
						|
	DBG_IND(": open=%d,sts=%d,moduleId=%d\r\n", bPlaySoundOpened, g_uiPlaySoundStatus, PLAYSOUNDTSK_ID);
 | 
						|
 | 
						|
	ret = hd_audioout_init();
 | 
						|
	if (ret != HD_OK) {
 | 
						|
		DBG_ERR("hd_audioout init failed\r\n");
 | 
						|
		return E_SYS;
 | 
						|
	}
 | 
						|
 | 
						|
	GxSound_InstallID();
 | 
						|
 | 
						|
	if (bPlaySoundOpened == TRUE) {
 | 
						|
		DBG_IND("--GxSound Opened already\r\n");
 | 
						|
		return retV;
 | 
						|
	}
 | 
						|
 | 
						|
	THREAD_CREATE(PLAYSOUNDTSK_ID, PlaySoundTsk, NULL, "PlaySoundTsk");
 | 
						|
	THREAD_CREATE(PLAYDATATSK_ID, PlayDataTsk, NULL, "PlayDataTsk");
 | 
						|
 | 
						|
	if (PLAYSOUNDTSK_ID == 0) {
 | 
						|
		DBG_ERR("PLAYSOUNDTSK_ID = %d\r\n", (unsigned int)PLAYSOUNDTSK_ID);
 | 
						|
		return E_SYS;
 | 
						|
	}
 | 
						|
	THREAD_RESUME(PLAYSOUNDTSK_ID);
 | 
						|
 | 
						|
	if (PLAYDATATSK_ID == 0) {
 | 
						|
        DBG_ERR("PLAYDATATSK_ID = %d\r\n", (unsigned int)PLAYDATATSK_ID);
 | 
						|
        return E_SYS;
 | 
						|
    }
 | 
						|
    THREAD_RESUME(PLAYDATATSK_ID);
 | 
						|
 | 
						|
	//gGxSndDrvSndHdl = dxSndHdl;
 | 
						|
	g_fpSoundCB = fpSoundCB;
 | 
						|
	clr_flg(FLG_ID_SOUND, FLGSOUND_ALL);
 | 
						|
	clr_flg(FLG_ID_DATA, FLGDATA_ALL);
 | 
						|
 | 
						|
	g_uiPlaySoundStatus = PLAYSOUND_STS_STOPPED;
 | 
						|
	bPlaySoundOpened    = TRUE;
 | 
						|
	GxSound_ResetParam();
 | 
						|
 | 
						|
	set_flg(FLG_ID_SOUND, FLGSOUND_STOPPED);
 | 
						|
	//sta_tsk(PLAYSOUNDTSK_ID, 0);
 | 
						|
 | 
						|
	DBG_IND(": open=%d,sts=%d,retV=%d\r\n", bPlaySoundOpened, g_uiPlaySoundStatus, retV);
 | 
						|
	return retV;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Close Play Sound task
 | 
						|
 | 
						|
  Close Play Sound task.
 | 
						|
 | 
						|
  Return value is listed below:
 | 
						|
  E_SYS: Task is already closed
 | 
						|
  E_OK: No error
 | 
						|
 | 
						|
  @param void
 | 
						|
  @return ER
 | 
						|
*/
 | 
						|
ER GxSound_Close(void)
 | 
						|
{
 | 
						|
	FLGPTN uiFlag;
 | 
						|
	HD_RESULT ret;
 | 
						|
 | 
						|
	DBG_IND(": open=%d,sts=%d\r\n", bPlaySoundOpened, g_uiPlaySoundStatus);
 | 
						|
 | 
						|
	if (bPlaySoundOpened == FALSE) {
 | 
						|
		return E_SYS;
 | 
						|
	}
 | 
						|
 | 
						|
	//Unplug usb,no power down sound
 | 
						|
	if (kchk_flg(FLG_ID_SOUND, FLGSOUND_PLAY) || (g_uiPlaySoundStatus == PLAYSOUND_STS_PLAYING)) {
 | 
						|
		DBG_IND(":Sts=%d\r\n", g_uiPlaySoundStatus);
 | 
						|
		wai_flg(&uiFlag, FLG_ID_SOUND, FLGSOUND_STOPPED, TWF_ORW | TWF_CLR);
 | 
						|
	}
 | 
						|
 | 
						|
	set_flg(FLG_ID_SOUND, FLGSOUND_EXIT);
 | 
						|
	set_flg(FLG_ID_DATA, FLGDATA_EXIT);
 | 
						|
 | 
						|
	wai_flg(&uiFlag, FLG_ID_SOUND, FLGSOUND_QUIT, TWF_ORW | TWF_CLR);
 | 
						|
	wai_flg(&uiFlag, FLG_ID_DATA, FLGDATA_QUIT, TWF_ORW | TWF_CLR);
 | 
						|
 | 
						|
	bPlaySoundOpened = FALSE;
 | 
						|
 | 
						|
	GxSound_UninstallID();
 | 
						|
 | 
						|
	ret = hd_audioout_uninit();
 | 
						|
	if (ret != HD_OK) {
 | 
						|
		DBG_ERR("hd_audioout uninit failed\r\n");
 | 
						|
		return E_SYS;
 | 
						|
	}
 | 
						|
 | 
						|
	DBG_IND(": open=%d,sts=%d\r\n", bPlaySoundOpened, g_uiPlaySoundStatus);
 | 
						|
	return E_OK;
 | 
						|
}
 | 
						|
 | 
						|
void GxSound_SetSoundData(SOUND_DATA *pSound)
 | 
						|
{
 | 
						|
	DBG_IND(": pSound=0x%x\r\n", pSound);
 | 
						|
	gPlaySoundData = pSound;
 | 
						|
	DBG_IND(": pSound=0x%x\r\n", gPlaySoundData);
 | 
						|
}
 | 
						|
 | 
						|
#if 0
 | 
						|
void GxSound_SetSoundDataIdx(UINT32 index)
 | 
						|
{
 | 
						|
	DBG_IND(": index=%d\r\n", index);
 | 
						|
	gPlaySoundIdx = index;
 | 
						|
	DBG_IND(": index=%d\r\n", gPlaySoundIdx);
 | 
						|
}
 | 
						|
 | 
						|
UINT32 GxSound_GetSoundDataIdx(void)
 | 
						|
{
 | 
						|
	DBG_IND(": index=%d\r\n", gPlaySoundIdx);
 | 
						|
	return gPlaySoundIdx;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
void GxSound_Control(int cmd)
 | 
						|
{
 | 
						|
	FLGPTN uiFlag;
 | 
						|
	DBG_IND(": cmd=%d,soundEn=%d,open=%d,sts=%d\r\n", cmd, guiSoundEn, bPlaySoundOpened, g_uiPlaySoundStatus);
 | 
						|
	if (bPlaySoundOpened == FALSE) {
 | 
						|
		DBG_ERR("GxSound_Control: Sound Module Not Open\r\n");
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	switch (cmd) {
 | 
						|
	case SOUND_CTRL_PLAY:
 | 
						|
		if (guiSoundEn == FALSE) {
 | 
						|
			DBG_IND(": Play But Sound Disable\r\n");
 | 
						|
			return;
 | 
						|
		}
 | 
						|
		//Wait current sound stop playing
 | 
						|
		DBG_IND("#Snd:%d\r\n", g_uiPlaySoundStatus);
 | 
						|
		if (g_uiPlaySoundStatus == PLAYSOUND_STS_PLAYING) {
 | 
						|
			wai_flg(&uiFlag, FLG_ID_SOUND, FLGSOUND_STOPPED, TWF_ORW | TWF_CLR);
 | 
						|
		}
 | 
						|
		set_flg(FLG_ID_SOUND, FLGSOUND_PLAY);
 | 
						|
		break;
 | 
						|
 | 
						|
	case SOUND_CTRL_STOP:
 | 
						|
		if (g_uiPlaySoundStatus == PLAYSOUND_STS_PLAYING) {
 | 
						|
			set_flg(FLG_ID_SOUND, FLGSOUND_STOP);
 | 
						|
			//wait util audio really stop
 | 
						|
			wai_flg(&uiFlag, FLG_ID_SOUND, FLGSOUND_STOPPED, TWF_ORW | TWF_CLR);
 | 
						|
		}
 | 
						|
		DBG_IND(": open=%d,sts=%d\r\n", bPlaySoundOpened, g_uiPlaySoundStatus);
 | 
						|
		break;
 | 
						|
	case SOUND_CTRL_WAITSTOP:
 | 
						|
		DBG_IND("#Snd:%d\r\n", g_uiPlaySoundStatus);
 | 
						|
		if (g_uiPlaySoundStatus == PLAYSOUND_STS_PLAYING) {
 | 
						|
			wai_flg(&uiFlag, FLG_ID_SOUND, FLGSOUND_STOPPED, TWF_ORW | TWF_CLR);
 | 
						|
		}
 | 
						|
		break;
 | 
						|
	default:
 | 
						|
		DBG_ERR(": Not Support cmd=%d\r\n", cmd);
 | 
						|
		break;
 | 
						|
	}
 | 
						|
 | 
						|
	DBG_IND(": cmd=%d,soundEn=%d,open=%d,sts=%d\r\n", cmd, guiSoundEn, bPlaySoundOpened, g_uiPlaySoundStatus);
 | 
						|
}
 | 
						|
 | 
						|
ER GxSound_SetSoundTable(UINT32 soundAryCnt, PSOUND_DATA pSoundAry)
 | 
						|
{
 | 
						|
	DBG_IND(":soundAryCnt=%d,pSoundAry=0x%x\r\n", soundAryCnt, (UINT32)pSoundAry);
 | 
						|
	if ((!soundAryCnt) || (!pSoundAry)) {
 | 
						|
		DBG_ERR(":soundAryCnt=0x%x,pSoundAry=0x%x\r\n", soundAryCnt, (UINT32)pSoundAry);
 | 
						|
		return E_PAR;
 | 
						|
	}
 | 
						|
	gpPlaySoundDataAry = pSoundAry;
 | 
						|
	gpPlaySoundDataAryCnt = soundAryCnt;
 | 
						|
	return E_OK;
 | 
						|
}
 | 
						|
 | 
						|
SOUND_DATA *GxSound_GetSoundDataByID(UINT32 uiSoundID)
 | 
						|
{
 | 
						|
	DBG_IND(": uiSoundID=%d\r\n", uiSoundID);
 | 
						|
	if (uiSoundID >= gpPlaySoundDataAryCnt) {
 | 
						|
		DBG_ERR(":Idx=%d out range=%d\r\n", uiSoundID, gpPlaySoundDataAryCnt);
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
	DBG_IND(": retV=%d\r\n", (gpPlaySoundDataAry + uiSoundID));
 | 
						|
	return (gpPlaySoundDataAry + uiSoundID);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
UINT32 GxSound_GetVolume(void)
 | 
						|
{
 | 
						|
	return gSndVol;
 | 
						|
}
 | 
						|
void GxSound_SetVolume(UINT32 vol)
 | 
						|
{
 | 
						|
	DBG_IND(":%d\r\n", vol);
 | 
						|
 | 
						|
	gSndVol = vol;
 | 
						|
}
 | 
						|
 | 
						|
ER GxSound_TxfWav2PCM(SOUND_DATA *pSndData)
 | 
						|
{
 | 
						|
	#if 1//_TODO
 | 
						|
	WAV_PCMHEADER *pWAVPCMHeader = 0;
 | 
						|
 | 
						|
	DBG_IND(":addr=0x%x,Ch=%d,SR=%d,Size=0x%x,sndId=0x%x\r\n", \
 | 
						|
			pSndData->puiData, pSndData->isMono, pSndData->sampleRate, pSndData->uiSize, pSndData->soundId);
 | 
						|
	if (0 == pSndData) {
 | 
						|
		DBG_ERR(":SndData FULL\r\n");
 | 
						|
		return E_PAR;
 | 
						|
	}
 | 
						|
	pWAVPCMHeader = (WAV_PCMHEADER *)(pSndData->puiData);
 | 
						|
	//GxSound_DumpWavHeader(pWAVPCMHeader);
 | 
						|
	if (GXSOUND_WAV_HEADER_RIFF != pWAVPCMHeader->uiHeaderID) {
 | 
						|
		DBG_ERR("WavRiff:0x%x\r\n", pWAVPCMHeader->uiHeaderID);
 | 
						|
		return E_ID;
 | 
						|
	}
 | 
						|
	if (GXSOUND_WAV_RIFFTYPE_WAVE != pWAVPCMHeader->uiRIFFType) {
 | 
						|
		DBG_ERR("WavWave:0x%x\r\n", pWAVPCMHeader->uiHeaderID);
 | 
						|
		return E_ID;
 | 
						|
	}
 | 
						|
	if (GXSOUND_WAV_FORMAT_ID != pWAVPCMHeader->uiFormatID) {
 | 
						|
		DBG_ERR("WavFmt :0x%x\r\n", pWAVPCMHeader->uiHeaderID);
 | 
						|
		return E_ID;
 | 
						|
	}
 | 
						|
	pSndData->puiData += sizeof(WAV_PCMHEADER);
 | 
						|
	pSndData->uiSize = pWAVPCMHeader->uiDataSize;
 | 
						|
	pSndData->sampleRate = pWAVPCMHeader->uiSamplingRate;
 | 
						|
	pSndData->soundId = GXSOUND_NONTBL_SND_ID;
 | 
						|
	DBG_IND(":addr=0x%x,Ch=%d,SR=%d,Size=0x%x,sndId=0x%x\r\n", pSndData->puiData, pSndData->isMono, pSndData->sampleRate, pSndData->uiSize, pSndData->soundId);
 | 
						|
	#endif
 | 
						|
	return E_OK;
 | 
						|
}
 | 
						|
ER GxSound_ActOnSndNotInTbl(SOUND_PLAY_EVENT sndEvt, SOUND_DATA *pSndData, UINT32 isPCM)
 | 
						|
{
 | 
						|
	ER retV = E_OK;
 | 
						|
	DBG_IND(":evt=%d,addr=0x%x,isPCM=%d,isMono=%d\r\n", sndEvt, pSndData, isPCM, pSndData->isMono);
 | 
						|
 | 
						|
	if (bPlaySoundOpened == FALSE) {
 | 
						|
		DBG_ERR(": Sound Module Not Open\r\n");
 | 
						|
		return E_PAR;
 | 
						|
	}
 | 
						|
 | 
						|
	if (SOUND_PLAY_START == sndEvt) {
 | 
						|
		if (0 == pSndData) {
 | 
						|
			DBG_ERR(":evt=%d,SndData NULL\r\n", sndEvt);
 | 
						|
			return E_PAR;
 | 
						|
		}
 | 
						|
		if (FALSE == isPCM) {
 | 
						|
			GxSound_TxfWav2PCM(pSndData);
 | 
						|
		}
 | 
						|
		DBG_IND(":addr=0x%x,Ch=%d,SR=%d,Size=0x%x,sndId=0x%x\r\n", pSndData->puiData, pSndData->isMono, pSndData->sampleRate, pSndData->uiSize, pSndData->soundId);
 | 
						|
		GxSound_SetSoundSR(pSndData->sampleRate);
 | 
						|
		GxSound_SetSoundData(pSndData);
 | 
						|
		GxSound_Control(SOUND_CTRL_PLAY);
 | 
						|
	} else if (SOUND_PLAY_STOP == sndEvt) {
 | 
						|
		GxSound_Control(SOUND_CTRL_STOP);
 | 
						|
	} else if (SOUND_PLAY_PAUSE == sndEvt) {
 | 
						|
		GxSound_AudAction(GXSND_AUD_ACTION_PAUSE);
 | 
						|
	} else if (SOUND_PLAY_RESUME == sndEvt) {
 | 
						|
		GxSound_AudAction(GXSND_AUD_ACTION_RESUME);
 | 
						|
	} else {
 | 
						|
		DBG_ERR(":Unevt=%d,SndData BULL\r\n", sndEvt);
 | 
						|
		return E_PAR;
 | 
						|
	}
 | 
						|
	DBG_IND(":evt=%d,addr=0x%x,retV=%d\r\n", sndEvt, pSndData, retV);
 | 
						|
	return retV;
 | 
						|
}
 | 
						|
 | 
						|
ER GxSound_Set_Config(SOUND_CONFIG cfg, UINT32 value) {
 | 
						|
 | 
						|
	UINT32 retV = E_OK;
 | 
						|
	DBG_IND("cfg=%d, value=0x%x++\r\n", cfg, value);
 | 
						|
	switch (cfg) {
 | 
						|
	case SOUND_CONFIG_MEM:
 | 
						|
		gxsound_mem = *(SOUND_MEM*)value;
 | 
						|
 | 
						|
		DBG_DUMP("GxSound va=%x, pa=%x, size=%x\r\n", gxsound_mem.va, gxsound_mem.pa, gxsound_mem.size);
 | 
						|
 | 
						|
		break;
 | 
						|
	default:
 | 
						|
		retV = E_PAR;
 | 
						|
		DBG_ERR("Not supported cfg=%d, 0x%x", cfg, value);
 | 
						|
		break;
 | 
						|
	}
 | 
						|
	DBG_IND(" cfg=%d, 0x%x, retV=0x%x\r\n", cfg, value, retV);
 | 
						|
	return retV;
 | 
						|
}
 | 
						|
 | 
						|
//@}
 |