/******************************************************************** DHL_FE.c PHOENIX Driver HAL library FrontEnd (Tuner/Demodulator) functions implementation Copyright 2006 Digital STREAM Technology, Inc. All Rights Reserved $Id: DHL_FE.c v1.00 2006/04 cafrii Exp $ ********************************************************************/ #include "DHL_OSAL.h" #include "DHL_DBG.h" #include "DHL_FE.h" #include "DHL_FE_Priv.h" #include "DHL_FE_FreqTable.h" #include "DHL_SYS.h" //DHL_MODULE("*FE", 0); #define TEST_FE_FUNCTION 0 #if TEST_FE_FUNCTION void DHL_FE_TestInit(); void tune(UINT32 ch, UINT32 cable); #endif #if COMMENT ____local____(){} #endif static DHL_OS_SEMA_ID p_fe_mtx; static void p_lock(BOOL lock) { lock?DHL_OS_TakeSemaphore(p_fe_mtx, 1):DHL_OS_GiveSemaphore(p_fe_mtx); } #if COMMENT ____API____(){} #endif DHL_RESULT DHL_FE_Init() { DHL_RESULT result = DHL_OK; static BOOL is_inited=FALSE; DHL_BOARD_REV pVer; DHL_BOARD_TYPE pType; //dprint(3, "%s\n", __func__); if(is_inited) return DHL_OK; p_fe_mtx=DHL_OS_CreateMutexSemaphore("fe_mtx"); result = dhl_fe_init(); if(result == DHL_OK) { is_inited=TRUE; } else { DHL_OS_Printf("error: dhl_fe_init fail\n"); } #if TEST_FE_FUNCTION tune(17,0); #endif return result; } DHL_RESULT DHL_FE_Open(tDHL_TunerID id) { #if 0//BKNOTE: DHL_FE_Init¿¡¼­ ¼öÇàÇÔ. »ç¿ëÇÏÁö ¾Ê´Â API (Áߺ¹) DHL_RESULT result; p_lock(TRUE); result=dhl_fe_open(id); p_lock(FALSE); return result; #else DHL_OS_Printf("error: DHL_FE_Open fail\n"); return DHL_FAIL; #endif } DHL_RESULT DHL_FE_Close(tDHL_TunerID id) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_close(id); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_GetDeviceInfo( tDHL_TunerID id, tDHL_TunerDeviceInfo selector, void *pValue) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_get_device_info(id, selector, pValue); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_Start(tDHL_TunerID id, UINT32 freqKHz, tDHL_Demod demod, tDHL_DemodExtSettings *settings) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_start(id, freqKHz, demod, settings); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_Stop(tDHL_TunerID id) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_stop(id); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_GetSignalStatus( tDHL_TunerID id, tDHL_SignalStatus selector, UINT32 *pValue) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_get_sig_info(id, selector, pValue); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_GetModFormat(tDHL_TunerID id, tDHL_Demod *pDemod) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_get_demod_type(id, pDemod); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_GetSignalStrength(tDHL_TunerID id, UINT32 *pstrength) { DHL_RESULT result; p_lock(TRUE); result=dhl_fe_get_sig_info(id, eDHL_SIGNAL_STRENGTH, pstrength); p_lock(FALSE); return result; } DHL_RESULT DHL_FE_GetLockStatus(tDHL_TunerID id, BOOL *pbLock, tDHL_Demod *pDemod) { DHL_RESULT result; UINT32 value; p_lock(TRUE); result=dhl_fe_get_demod_type(id, pDemod); if(result!=DHL_OK) { *pbLock=FALSE; } else { result=dhl_fe_get_sig_info(id, eDHL_SIGNAL_LOCK, &value); if(result!=DHL_OK) { *pbLock=FALSE; } else { *pbLock=value?TRUE:FALSE; } } p_lock(FALSE); return result; } UINT32 DHL_FE_ChannelToFrequency(int ch, tDHL_FreqStd freqTbl) { UINT32 freq=0; BOOL isValid=TRUE; /* air,cable Á¦ÇÑ Á¶°Ç */ if(freqTbl==eDHL_FREQ_AIR) { if(chFE_MAX_FAT_AIR_CH) isValid=FALSE; } else { if(chFE_MAX_FAT_CBL_CH) isValid=FALSE; } if(!isValid) return 0; switch ( freqTbl ) { case eDHL_FREQ_AIR: freq = Air_Freq[ch]; break; case eDHL_FREQ_STD: freq = Cable_Freq[ch]; break; case eDHL_FREQ_IRC: freq = Cable_Freq_IRC[ch]; break; case eDHL_FREQ_HRC: freq = Cable_Freq_HRC[ch]; break; default: //dprint(0, "!! Error with Channel = %lu, FreqStd = %d\n", ch, freqTbl); freq=0; } return freq; } #if COMMENT __Test_Func__(){} #endif #if TEST_FE_FUNCTION void tune(UINT32 ch, UINT32 cable) { DHL_RESULT dhr; UINT32 freqKHz; if (cable) { freqKHz = DHL_FE_ChannelToFrequency(ch, eDHL_FREQ_STD); } else { freqKHz = DHL_FE_ChannelToFrequency(ch, eDHL_FREQ_AIR); } if (freqKHz == 0) { DHL_OS_Printf("!! get freq err\n"); return; } dhr = DHL_FE_Start(0, freqKHz, eDHL_DEMOD_8VSB, NULL); if (dhr != DHL_OK) { DHL_OS_Printf("!! tune freq err\n"); return; } } static void get_fe_info(void) { DHL_RESULT ret; char str[FE_VENDOR_NAME_LEN]; UINT32 val; ret = DHL_FE_GetDeviceInfo(0, eDHL_FE_DEV_VENDOR_NAME, (void *)str); if (ret == DHL_OK) { DHL_OS_Printf("vendor : %s\n", str); } else { DHL_OS_Printf("get err...\n"); } ret = DHL_FE_GetDeviceInfo(0, eDHL_FE_DEV_MODEL_NAME, (void *)str); if (ret == DHL_OK) { DHL_OS_Printf("model : %s\n", (void *)str); } else { DHL_OS_Printf("get err...\n"); } ret = DHL_FE_GetDeviceInfo(0, eDHL_FE_DEV_CAPABILITY_1, (void *)&val); if (ret == DHL_OK) { DHL_OS_Printf("capability : 0x%x\n", val); } else { DHL_OS_Printf("get err...\n"); } } static void get_dem(void) { DHL_RESULT ret; tDHL_Demod demod; ret = DHL_FE_GetModFormat(0, &demod); if (ret == DHL_OK) { DHL_OS_Printf("demod : 0x%x\n", demod); } else { DHL_OS_Printf("get err...\n"); } } static void get_snr(void) { DHL_RESULT ret; UINT32 snr; ret = DHL_FE_GetSignalStatus(0, eDHL_SIGNAL_SNR, &snr); if (ret == DHL_OK) { DHL_OS_Printf("snr : %d\n", snr); } else { DHL_OS_Printf("get err...\n"); } } static void get_sig(void) { DHL_RESULT ret; UINT32 sig; ret = DHL_FE_GetSignalStrength(0, &sig); if (ret == DHL_OK) { DHL_OS_Printf("sig : %d\n", sig); } else { DHL_OS_Printf("get err...\n"); } } static void get_lock(void) { DHL_RESULT ret; BOOL lock; tDHL_Demod demod; ret = DHL_FE_GetLockStatus(0, &lock, &demod); if (ret == DHL_OK) { DHL_OS_Printf("demod : 0x%x\n", demod); DHL_OS_Printf("lock : %x\n", lock); } else { DHL_OS_Printf("get err...\n"); } } #include "DHL_DBG.h" static DHL_SymbolTable DHL_FE_TestSymbols[] = { //---- functions DHL_FNC_SYM_ENTRY(tune), DHL_FNC_SYM_ENTRY(get_fe_info), DHL_FNC_SYM_ENTRY(get_dem), DHL_FNC_SYM_ENTRY(get_snr), DHL_FNC_SYM_ENTRY(get_sig), DHL_FNC_SYM_ENTRY(get_lock), }; void DHL_FE_TestInit() { DHL_DBG_RegisterSymbols(DHL_FE_TestSymbols, DHL_NUMSYMBOLS(DHL_FE_TestSymbols)); } #endif