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;
 | |
| }
 | |
| 
 | |
| //@}
 | 
