/******************************************************************* * DMW_ChannelHAL.c * * * * Copyright 2003 Digital STREAM Technology, Inc. * All Rights Reserved * * $Id: DMW_ChannelHAL.c,v 1.0 2003/01/00 who Exp $ * ********************************************************************/ #include "DMW_Platform.h" #include "DHL_OSAL.h" #include "DHL_FE.h" #include "DHL_DBG.h" #include "DMW_Config.h" #include "DMW_DebugUtil.h" // MW files #include "DMW_Channel.h" #include "DMW_Status.h" #include "DMW_Mutex.h" DHL_MODULE("$chh", 0); //------------------------------------------------------------------- // // Define constant // //#define USE_DHL_API 1 //------------------------------------------------------------------- // // Global variables // //#define USE_DETAIL_TUNE_API 1 // // RF ¹øÈ£¸¦ ÀÌ¿ëÇÑ TuningÀ» ÇÏ´Â°Ô ¾Æ´Ï¶ó Á÷Á¢ Á֯ļö °ªÀ» ÀÌ¿ëÇÏ¿© TuningÀ» ÇÑ´Ù. // ¾ÕÀ¸·Î´Â ¸ðµÎ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. // Å×½ºÆ®, °ËÁõÀÌ ³¡³ª±â Àü±îÁö´Â ÀÏ´Ü ¿¹Àü ÄÚµå (0) ºÎºÐÀ» À¯ÁöÇÑ´Ù. // Àû´çÇÑ ½ÃÁ¡¿¡¼­ ¹Ì»ç¿ë ÄÚµå »èÁ¦ ¿¹Á¤.. // //-------------- // ä³Î ŸÀÔ // ChannelType g_CurChannelType = ChannelType_Air; // // ÇöÀç ä³Î À¯Çü. 0: AIR, 1: Cable // Air¿Í CableÀÌ °øÁ¸ÇÒ ¼ö´Â ¾ø´Ù. (ÇϳªÀÇ RF ¹øÈ£¸¦ ³õ°í ÇØ¼® ¹æ¹ýÀÌ ´Þ¶óÁö¹Ç·Î..) // // ÀÌ º¯¼ö¸¦ Á÷Á¢ ¼öÁ¤ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. // const typeÀ̹ǷΠÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î´Â ¼öÁ¤ÇÒ ¼ö ¾ø´Ù. // ²À ÃʱâÈ­ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù. // // cafrii, 030323 // compilerÀÇ optimization ¹®Á¦·Î const¸¦ ´Ù½Ã »èÁ¦ÇÔ. //-------------- // Á֯ļö Ç¥ÁØ tDHL_FreqStd g_CableSystem = eDHL_FREQ_AIR; // // ÇöÀç »ç¿ëÁßÀÎ Á֯ļö Ç¥ÁØ // // ÀÌ °ªÀº Áö»óÆÄ, ¶Ç´Â ÄÉÀÌºí ½Ã½ºÅÛÀ» °áÁ¤ÇÏ´Â °ªÀ̹ǷΠÄÉÀ̺í ä³Î Å×À̺íÀ» ¼±ÅÃÇÏ´Â ±âÁØÀÌ µÈ´Ù. // ¶ÇÇÑ, ÀÌ °ªÀº NVM¿¡ ÀúÀåµÇ¾î¾ß ÇÑ´Ù. (Application ¸ò) // //------------------------------------------------------------------- // // Tuner Resource Lock Semaphores // // Mutex = { SemID, Owner, lockCnt, FailCnt, UseOsMutex, Name, flag, traceLvl } // DMW_MUTEX tunerMutex = { 0, 0, 0, 0, FALSE, "TunerMtx", OS_SEM_FIFO, FALSE, }; static void dmw_tuner_lock_sema4(BOOL bLock) { if (bLock) DMW_LockMutex(&tunerMutex); else DMW_UnlockMutex(&tunerMutex); } #if 0 _______________() #endif ModulationType DMW_HAL_TunerDemod2Modulation(tDHL_Demod demod) { ModulationType mode; mode = demod == eDHL_DEMOD_NTSC ? Modulation_NTSC : demod == eDHL_DEMOD_8VSB ? Modulation_8VSB : demod == eDHL_DEMOD_64QAM? Modulation_64QAM : demod == eDHL_DEMOD_256QAM ? Modulation_256QAM : demod == eDHL_DEMOD_QAM_AUTO ? Modulation_QAM : demod == eDHL_DEMOD_AUTODETECT ? Modulation_CableAuto : Modulation_Invalid; return mode; } tDHL_Demod DMW_HAL_Modulation2TunerDemod(ModulationType mode) { tDHL_Demod demod; demod = mode == Modulation_NTSC ? eDHL_DEMOD_NTSC : mode == Modulation_8VSB ? eDHL_DEMOD_8VSB : mode == Modulation_64QAM ? eDHL_DEMOD_64QAM : mode == Modulation_256QAM ? eDHL_DEMOD_256QAM : mode == Modulation_QAM ? eDHL_DEMOD_QAM_AUTO : mode == Modulation_CableAuto ? eDHL_DEMOD_AUTODETECT : eDHL_DEMOD_INVALID; return demod; } #if 0 _______________() #endif // cafrii 060630 add // ¸¶Áö¸· RF/Modulation °ªÀ» ±â¾ïÇÑ´Ù. // Modulation °ªÀº ¾ðÁ¦µçÁö Àоî¿Ã ¼ö ÀÖÀ¸¹Ç·Î ±×·¸°Ô Å« ÇÊ¿ä´Â ¾ø´Ù. // int g_TunerRf; ModulationType g_TunerModulation; BOOL DMW_HAL_DetectAnalogVideoChannel() { DHL_RESULT dhlResult; UINT8 Lock; tDHL_Demod demod; dhlResult = DHL_FE_GetLockStatus(DEFAULT_TUNER_ID, &Lock, &demod); return (dhlResult==DHL_OK && Lock) ? TRUE : FALSE; } // import from UCM.c // Freq Standard °ü·Ã ±â´ÉÀº Channel DB¿Í´Â µ¶¸³ÀûÀÎ ÇÏÀ§ ±â´ÉÀ̹ǷΠºÐ¸®Çؼ­ // Tuner HAL°ú °°ÀÌ °ü¸®ÇÑ´Ù. // STATUS DMW_HAL_SetChannelStandard(tDHL_FreqStd nFreqStd) { // ÇöÀç°¡ Air ¸ðµåÀÌ¸é ¹«½Ã. // // Cable SystemÀÌ ÀÌ¹Ì 'system'À̶ó¸é ¹«½Ã.. // // ¼­·Î ´Ù¸¥ CableSystemÀ¸·Î ¼³Á¤µÇ¸é ÇöÀç DB°¡ Àǹ̰¡ ¾ø¾îÁö¹Ç·Î ´Ù Áö¿ì´Â°Ô ¸Â°ÚÁö¸¸, // ApplicationÀÌ ¾Ë¾Æ¼­ Çϵµ·Ï ÇÑ´Ù. dprint(2, " frequency std set to %d, %s\n", nFreqStd, FreqStdString(nFreqStd)); if (nFreqStd != eDHL_FREQ_STD&& nFreqStd != eDHL_FREQ_IRC&& nFreqStd != eDHL_FREQ_HRC) nFreqStd = eDHL_FREQ_AIR; // Air°¡ ±âº».. // cafrii 060630 add // systemÀÌ º¯°æµÇ¸é last tune info¸¦ reset½ÃŲ´Ù. // if (g_CableSystem != nFreqStd) { g_CableSystem = nFreqStd; dprint(2, " reset tuner info\n"); g_TunerRf = 0; g_TunerModulation = Modulation_Invalid; } // ÀÌÁ¦ ½ÇÁ¦ Driver layer¿¡ ¼³Á¤À» ÇÑ´Ù. // // DHL_FE_SetChannelStandard(DEFAULT_TUNER_ID, nFreqStd); if (g_CableSystem == eDHL_FREQ_AIR) g_CurChannelType = ChannelType_Air; else g_CurChannelType = ChannelType_Cable; return statusOK; } //------------------------------------------- // DMW_HAL_TunerScanSetChannel // // // STATUS DMW_HAL_TunerScanSetChannel(UINT32 ch, ModulationType type, INT32* pOffset, FreqTuneMode mode, BOOL (*chkfn)()) { STATUS nReturn = statusOK; UINT32 frequency; UINT32 new_freq; INT32 offset; DHL_RESULT dhlResult; tDHL_Demod demod; if (pOffset == NULL) return statusInvalidArgument; demod = DMW_HAL_Modulation2TunerDemod(type); if (demod == eDHL_DEMOD_INVALID) return statusInvalidArgument; offset = *pOffset; // offset °ªÀº caller°¡ ÁöÁ¤ÇÑ frequency offset À̸ç, ÀÌ °ªÀ» ÃÖ´ëÇÑ Á¸ÁßÇÏ¿© Æ©´×À» ÇÑ´Ù. // // Tuning ¸ðµå¿¡ µû¶ó¼­ ³»ºÎÀûÀ¸·Î auto-search °úÁ¤À» ¼öÇà, ´Ù¸¥ Á֯ļö°¡ »õ·Î ¹ß°ßµÉ ¼ö Àִµ¥, // À̶§ ¹ß°ßµÈ frequency offsetÀº *pOffset¿¡ ´Ù½Ã ÀúÀåµÇ¾î ¸®ÅϵȴÙ. // dmw_tuner_lock_sema4(TRUE); //---------------------- Air (Terrestrial) --------------------- // if (g_CurChannelType == ChannelType_Air) { DMW_HAL_SetChannelStandard(eDHL_FREQ_AIR); frequency = FindCenterFrequency(ch, offset, eDHL_FREQ_AIR); if (frequency == 0) { dprint(0, "!! center frequency of rf %d, offset %d err\n", ch, offset); nReturn = statusInvalidArgument; goto label_exit; } dprint(2, "SetTuner, AIR, %s, rf %d, offset %d, freq %dKHz\n", ServiceTypeString(type), ch, offset, frequency/1000); if (type == Modulation_NTSC) { // NTSCÀÇ °æ¿ì¿¡´Â ½ÇÁ¦·Î °Ë»öµÈ frequency offsetÀ» pOffsetÀ» ÀÌ¿ëÇØ¼­ ³Ñ°ÜÁà¾ß ÇÑ´Ù. // ¸¸¾à ÃøÁ¤ÀÌ ºÒ°¡´ÉÇÒ °æ¿ì¶ó¸é ±×³É caller°¡ Á¦½ÃÇÑ offsetÀ» ±×´ë·Î »ç¿ëÇÑ´Ù. // if (mode == FREQTUNE_SHORT_SEARCH) { dprint(2, " short search: AFC (%dKHz)\n", frequency/1000); new_freq = DMW_HAL_AfcSearchMultiple(1, &frequency, 0, NULL); // »õ·Î¿î frequency°¡ ¹ß°ßµÇ¾úÀ¸¸é º¯°æµÈ ¸¸Å­ offsetÀ» ´Ù½Ã Á¶Á¤. // if (new_freq && new_freq != frequency) { *pOffset = *pOffset + (new_freq - frequency); dprint(2, " frequency adjusted to %dKHz, new offset %dKHz\n", new_freq/1000, (*pOffset)/1000); } } else // FREQTUNE_FIXED ¸ðµå { dprint(2, " fixed mode: DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000); // FREQTUNE_FIXED¿¡´Â ±×³É caller°¡ Á¦½ÃÇÑ Á֯ļö·Î try¸¦ Çѹø ÇÑ´Ù. // pOffset À» ÅëÇØ »õ·Ó°Ô ¸®ÅϵǴ °ªÀº ¾ø´Ù.. dprint(2, " DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000); dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_NTSC, NULL); // cafrii 070710 cancel bugfix //nReturn = dhlResult ? statusError : statusOK; nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled : dhlResult ? statusError : statusOK; } } else if (type == Modulation_8VSB) { dprint(2, " DHL_FE_Start (%dKHz, VSB)\n", frequency/1000); dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_8VSB, NULL); // cafrii 070710 cancel bugfix //nReturn = dhlResult ? statusError : statusOK; nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled : dhlResult ? statusError : statusOK; } else { dprint(0, "!! unknown service type %d in Air channel.\n", type); nReturn = statusInvalidArgument; // No QAM allowed!!!! } } //---------------------- Cable (STD/HRC/IRC) ------------------------- else { DMW_HAL_SetChannelStandard(g_CableSystem); frequency = FindCenterFrequency(ch, offset, g_CableSystem); if (frequency == 0) { dprint(0, "!! center frequency of rf %d, offset %d err\n", ch, offset); nReturn = statusInvalidArgument; goto label_exit; } dprint(2, "SetTuner, CABLE %s, %s, rf %d, offset %d, freq %dKHz\n", (g_CableSystem == eDHL_FREQ_IRC) ? "IRC": (g_CableSystem == eDHL_FREQ_HRC) ? "HRC" : "STD", ServiceTypeString(type), ch, offset, frequency/1000); if (type == Modulation_NTSC) { if (mode == FREQTUNE_SHORT_SEARCH) { dprint(2, " short search: AFC (%dKHz)\n", frequency/1000); new_freq = DMW_HAL_AfcSearchMultiple(1, &frequency, 0, NULL); // »õ·Î¿î frequency°¡ ¹ß°ßµÇ¾úÀ¸¸é º¯°æµÈ ¸¸Å­ offsetÀ» ´Ù½Ã Á¶Á¤. // if (new_freq && new_freq != frequency) { *pOffset = *pOffset + (new_freq - frequency); dprint(2, " frequency adjusted to %dKHz, new offset %dKHz\n", new_freq/1000, (*pOffset)/1000); } } else // FREQTUNE_FIXED ¸ðµå { dprint(2, " fixed mode: DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000); // DHL ³»ºÎ¿¡¼­ ÀûÀýÇÑ standard·Î ¹Ù²ï´Ù. // ¸¸¾à application option¿¡ µû¶ó standard°¡ º¯°æµÇ¾î¾ß ÇÑ´Ù¸é // º°µµÀÇ DHL API¸¦ ÀÌ¿ëÇÏ¿© presetÀ» ÇØ¾ß ÇÑ´Ù. ÇöÀç ±× ±â´ÉÀº ¹Ì±¸Çö. dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_NTSC, NULL); // cafrii 070710 cancel bugfix //nReturn = dhlResult ? statusError : statusOK; nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled : dhlResult ? statusError : statusOK; } } else { dprint(2, " DHL_FE_Start (%dKHz, %s)\n", frequency/1000, ServiceTypeString(type)); dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, demod, NULL); // cafrii 070710 cancel bugfix //nReturn = dhlResult ? statusError : statusOK; nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled : dhlResult ? statusError : statusOK; } } label_exit: // cafrii 060630 add // Ç×»ó tunerÀÇ ¸¶Áö¸· »óŸ¦ tracking Çϵµ·Ï ÇÑ´Ù. // ³ªÁß¿¡ lock check, ¶Ç´Â mod check¸¦ ÇÒ ¶§ g_TunerModulationÀº °áÁ¤µÈ´Ù. if (nReturn == statusOK) g_TunerRf = ch; else g_TunerRf = 0; // analogÀÇ °æ¿ì´Â º°µµ·Î lock check¸¦ ¾ÈÇÏ´Â °æ¿ìµµ Àֱ⠶§¹®¿¡ // PLL ¼³Á¤¸¸ ¼º°øÇϸé NTSC ¸ðµå¶ó°í º»´Ù. // if (nReturn == statusOK && type == Modulation_NTSC) g_TunerModulation = Modulation_NTSC; else g_TunerModulation = Modulation_Invalid; dmw_tuner_lock_sema4(FALSE); return nReturn; } //------------------------------------------- // DMW_HAL_TunerSetChannel // // // STATUS DMW_HAL_TunerSetChannel(UINT32 ch, ModulationType type, INT32 offset, FreqTuneMode mode, BOOL (*chkfn)()) { STATUS status; status = DMW_HAL_TunerScanSetChannel(ch, type, &offset, mode, chkfn); return status; } //------------------------------------------- // DMW_HAL_TunerSetFrequency // // // cafrii 041206 add for cable system autodetect feature.. // // cafrii 061221, analog fine tune is not supported in this function // STATUS DMW_HAL_TunerSetFrequency(UINT32 freqInKHz, ModulationType mode, BOOL (*chkfn)()) { DHL_RESULT dhlResult; tDHL_Demod demod; demod = DMW_HAL_Modulation2TunerDemod(mode); // report Àü¿ëÀÎ °ªµéÀº »ç¿ë ºÒ°¡. // if (demod == eDHL_DEMOD_INVALID) { dprint(0, "!! invalid modtype %d (%s)\n", mode, ServiceTypeString(mode)); return statusInvalidArgument; } g_TunerRf = 0; // cafrii 060714 add bugfix! // DEMOD_AUTO_DETECT °¡ ¾Æ´Ñ ÀÌ»ó check fnÀº º°·Î ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. // dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, freqInKHz, demod, NULL); // cafrii 070710 cancel bugfix //return (dhlResult==DHL_OK ? statusOK : statusError); return (dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled : dhlResult ? statusError : statusOK); } BOOL DMW_HAL_DetectNIMChannel() { DHL_RESULT dhlResult; UINT8 Lock; tDHL_Demod demod; dhlResult = DHL_FE_GetLockStatus(DEFAULT_TUNER_ID, &Lock, &demod); // cafrii 060630 add, tuner status tracking.. if (dhlResult == DHL_OK && Lock) { g_TunerModulation = DMW_HAL_GetModulationMode(); return TRUE; } else { g_TunerModulation = Modulation_Invalid; return FALSE; } } int DMW_HAL_GetSignalStrength() { DHL_RESULT dhlResult; int str; dhlResult = DHL_FE_GetSignalStrength(DEFAULT_TUNER_ID, (UINT32 *)&str); if (dhlResult) str = 0; return str; } float DMW_HAL_GetSNR() { DHL_RESULT dhlResult; float snr; UINT32 snr1000; dhlResult = DHL_FE_GetSignalStatus(DEFAULT_TUNER_ID, eDHL_SIGNAL_SNR2, &snr1000); if (dhlResult) snr = 0.; else snr = snr1000/1000.; return snr; } // cafrii 060630 add int DMW_HAL_GetCurrentRF(void) { return g_TunerRf; } void DMW_HAL_ResetLastRF(void) { g_TunerRf = 0; } ModulationType DMW_HAL_GetModulationMode() { DHL_RESULT dhlResult; tDHL_Demod demod; ModulationType mod; dhlResult = DHL_FE_GetModFormat(DEFAULT_TUNER_ID, &demod); // cafrii 060630, add tuner status tracking.. if (dhlResult) { g_TunerModulation = Modulation_Invalid; return Modulation_Invalid; } if (0); else if (demod == eDHL_DEMOD_NTSC) mod = Modulation_NTSC; else if (demod == eDHL_DEMOD_8VSB) mod = Modulation_8VSB; else if (demod == eDHL_DEMOD_64QAM) mod = Modulation_64QAM; else if (demod == eDHL_DEMOD_256QAM) mod = Modulation_256QAM; else if (demod == eDHL_DEMOD_QAM_AUTO) mod = Modulation_64QAM; // »ç½Ç ÀÌ·±°Ô ³ª¿À¸é ¾ÈµÊ.. else mod = Modulation_Invalid; g_TunerModulation = mod; return mod; } // not tested yet.. // int DMW_HAL_SetTunerLockTimeout(int vsb, int q64, int q256, int ntsc) { // ´ÜÀ§´Â 0.1 ÃÊ // cafrii 050413 // ÀÌ ÇÔ¼ö´Â ´õÀÌ»ó µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.. // /// int vsbTimeout, int qam64Timeout, int qam256Timeout, int ntscTimeout ) //DD_SetLockTimeout(vsb, q64, q256, ntsc); return statusOK; } //--------------------------------------------------------------------------- // DMW_HAL_AfcSearchMultiple // // // ÁöÁ¤ÇÑ Á֯ļö ¿µ¿ª¿¡¼­ ¾Æ³¯·Î±× ½ÅÈ£ °Ë»öÀ» ÇÏ¿© ¹ß°ßµÈ Á֯ļö¸¦ ¸®ÅÏÇÑ´Ù. // // µå¶óÀ̹ö¿¡¼­ AFC ±â´ÉÀÌ Áö¿øµÇÁö ¾ÊÀ¸¸é Á÷Á¢ Lock check API¸¦ ÀÌ¿ëÇØ¼­ // Lock ¿©ºÎ·Î ÆÇ´ÜÇÑ´Ù. timeoutTick °ªÀº ÀÌ °æ¿ì¿¡¸¸ »ç¿ëÀÌ µÇ¸ç, // timeoutÀ¸·Î 0ÀÇ °ªÀ» ÁöÁ¤ÇÒ °æ¿ì °¢ Frequency º°·Î 1ȸ¸¸ üũÇÑ´Ù. // STATUS DMW_HAL_AfcSearchMultiple(int nFreq, UINT32 *aFreq, int timeoutTick, BOOL (*ckfn)()) { // cafrii 050328 add timeoutTick param. // // ÇÔ¼ö ÀÎÀÚÀÇ Á֯ļö ´ÜÀ§´Â Hz. #if SUPPORT_NTSC_FINE_TUNE int i; UINT32 f2 = 0; AFC_SearchStart(gTuner); for (i=0; i (unsigned int)timeoutTick) break; // ´ÙÀ½ Á֯ļö·Î ´Ù½Ã ½Ãµµ.. if (ckfn && ckfn()) { f2 = 0; dprint(2, "afc search cancelled\n"); goto label_exit; } DHL_OS_Delay(100); } // ´ÙÀ½ Á֯ļö·Î ´Ù½Ã ½Ãµµ.. dprint(3, " freq[%d] %dkHz not locked. %s\n", i, aFreq[i]/1000, i==nFreq-1 ? "" : "try next.."); } f2 = 0; label_exit: dmw_tuner_lock_sema4(FALSE); return f2; #endif // SUPPORT_NTSC_FINE_TUNE } #if 0 _____Fdc_Tune___() #endif //------------------- // Driver function // STATUS DMW_HAL_FdcTune(unsigned long ulFrequency, unsigned short usBitRate, int nSpectrumInversion ) { #if SUPPORT_FDC_TUNER int err; dprint(1, "DMW_HAL_FdcTun(freq %d, bitrate %d, spectrum_inv %d\n", ulFrequency, usBitRate, nSpectrumInversion); err = FDC(ulFrequency/1000, usBitRate, nSpectrumInversion); if (err) { dprint(0, "!! FDC err %d\n", err); } return err; #else return statusNotImpl; #endif } int DMW_HAL_GetFDCLockStatus() { #if SUPPORT_FDC_TUNER return GetFDCLockStatus(); #else return 0; #endif } int DMW_HAL_GetFDCSignalStrength() { #if SUPPORT_FDC_TUNER return GetFDCSignalStrength(); #else return 0; #endif } float DMW_HAL_GetFDCSNR() { #if SUPPORT_FDC_TUNER return (float) GetFDCSNR(); #else return 0; #endif } #if 0 ________________() #endif #if DMW_REGISTER_DEBUG_SYMBOL static DHL_SymbolTable ChannelHalSymbols[] = { //---- functions DHL_FNC_SYM_ENTRY(DMW_HAL_SetChannelStandard), DHL_FNC_SYM_ENTRY(DMW_HAL_TunerSetChannel), DHL_FNC_SYM_ENTRY(DMW_HAL_GetSignalStrength), DHL_FNC_SYM_ENTRY(DMW_HAL_GetModulationMode), //---- variables //DHL_VAR_SYM_ENTRY(g_Trace_ChannelHAL), }; #endif // DMW_REGISTER_DEBUG_SYMBOL void DMW_HAL_RegisterChannelHalSymbols() { #if DMW_REGISTER_DEBUG_SYMBOL DHL_DBG_RegisterSymbols(ChannelHalSymbols, DHL_NUMSYMBOLS(ChannelHalSymbols)); #endif } #if 0 ________________() #endif #if 0 int gSignalLockTimeoutInTick = 60; void TestSetFreq(UINT32 freq) { int err, ret; UINT32 tickStart; dmw_tuner_lock_sema4(TRUE); // DMW_HAL_ChangeFrequencyStandard(0); // FREQ_AIR // DMW_HAL_ChangeFrequencyStandard(1); // FREQ_STD // shell ¿¡¼­ Å×½ºÆ® ÇÏ·Á¸é À§¿Í °°ÀÌ ¸ÕÀú ¼³Á¤À» ÇÑ ´ÙÀ½¿¡ ½ÇÇà..... OS_DbgPrintf("Set Frequency: %d KHz\n", freq); OS_DbgPrintf("** try 8VSB..\n"); err = TunerSetFrequency(gTuner, freq, DEMOD_8VSB); tickStart = DHL_OS_GetMsCount(); while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) { ret = GetLockStatus(); if (ret) goto labe_done; DHL_OS_Delay(1000/20); } OS_DbgPrintf("** try 64QAM..\n"); err = TunerSetFrequency(gTuner, freq, DEMOD_64QAM); tickStart = DHL_OS_GetMsCount(); while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) { ret = GetLockStatus(); if (ret) goto labe_done; DHL_OS_Delay(1000/20); } OS_DbgPrintf("** try 256QAM..\n"); err = TunerSetFrequency(gTuner, freq, DEMOD_256QAM); tickStart = DHL_OS_GetMsCount(); while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) { ret = GetLockStatus(); if (ret) goto labe_done; DHL_OS_Delay(1000/20); } OS_DbgPrintf("!! signal not locked\n"); dmw_tuner_lock_sema4(FALSE); return; labe_done: dmw_tuner_lock_sema4(FALSE); OS_DbgPrintf("signal locked.\n"); if (1) { int str = DMW_HAL_GetSignalStrength(); float snr = DMW_HAL_GetSNR(); OS_DbgPrintf("signal strength: %d, SNR: %.3f\n", str, snr); } } #endif //0 /******************************************************************** $Log: DMW_ChannelTune.c,v $ 1.30 2005/3/28 DMW_HAL_AfcSearchMultiple¿¡ timeout param Ãß°¡ 1.29 2005/3/25 DMW_HAL_AfcSearchMultiple API¸¦ AFC ¾øÀ̵µ »ç¿ë°¡´ÉÇϵµ·Ï ¼öÁ¤ 1.28 2005/1/26 ScanSetChannel ¿¡¼­ ¹«Á¶°Ç STDCable·Î ¼³Á¤ÇÏ´Â ¿¹Àü ¹æ½Ä ¼öÁ¤ Mocha¸¦ Á¦¿ÜÇÑ ´Ù¸¥ platform ´õÀÌ»ó Áö¿øÇÏÁö ¾ÊÀ½. ScanSetChannel/SetChannel prototype º¯°æ (ÇÔ¼ö ÀÎÀÚ º¯°æ) ScanSetChannel ÇÔ¼ö·Î ÅëÇÕ. ¾Æ³¯·Î±× carrier search¸¦ À§ÇÑ DMW_HAL_AfcSearchMultiple Ãß°¡ ÀáÁ¤ÀûÀ¸·Î USE_DETAIL_TUNE_API »ç¿ë. ³ªÁß¿¡´Â ÀÌ Ç÷¡±×·Î °íÁ¤ÇÒ °ÍÀÓ µð¹ö±× ¸Þ½ÃÁö Ãâ·Â¿¡ debug level Áö¿ø FDCÂÊ »ç¿ëÇÏÁö ¾Ê´Â ÄÚµåµé ¸ðµÎ Á¦°Å Àüü ±¸Á¶ ¹× °ÅÀÇ ¸ðµç ³»¿ë ¼öÁ¤.. 1.27 2004/12/09 DMW_HAL_TunerSetChannel: dprint bugfix 1.26 2004/12/06 DMW_HAL_TunerSetFrequency Ãß°¡ 1.25 2004/11/22 DMW_HAL_GetModulationMode ÀÇ Àӽà ÄÚµå ¼öÁ¤. 1.24 2004/11/10 FDC API Ãß°¡ 1.23 2004/11/4 TunerSetChannelEx µå¶óÀ̹ö ÇÔ¼ö »ç¿ë HAL api prototype ¼öÁ¤ 1.22 2004/9/20 DMW_Config µµÀÔ, config »çÇ× À̵¿ 1.21 2004/9/3 g_Trace_TunerSema4 position moved 1.2 2004/8/30 ChannelType, FreqStd imported from ChannelAPI TuneChannelByUid is moved to UCM module 1.1 2004/7/26 auto fine tune *offset reset bug fix SUPPORT_NTSC_FINE_TUNE and related var added 1.0 2003/0/0 Initial coding from ___, based on M/W API document ********************************************************************/