source: svn/newcon3bcm2_21bu/dst/dmw/src/Channel/DMW_ChannelHAL.c @ 45

Last change on this file since 45 was 45, checked in by megakiss, 11 years ago
  • Property svn:executable set to *
File size: 21.1 KB
Line 
1/*******************************************************************
2 * DMW_ChannelHAL.c
3 *
4 *
5 *
6 * Copyright 2003 Digital STREAM Technology, Inc.
7 * All Rights Reserved
8 *
9 * $Id: DMW_ChannelHAL.c,v 1.0 2003/01/00  who Exp $
10 *
11 ********************************************************************/
12
13
14
15#include "DMW_Platform.h"
16
17
18
19
20#include "DHL_OSAL.h"
21#include "DHL_FE.h"
22#include "DHL_DBG.h"
23
24#include "DMW_Config.h"
25
26#include "DMW_DebugUtil.h"
27
28// MW files
29#include "DMW_Channel.h"
30#include "DMW_Status.h"
31#include "DMW_Mutex.h"
32
33
34DHL_MODULE("$chh", 0);
35
36//-------------------------------------------------------------------
37//
38//  Define constant
39//
40
41//#define USE_DHL_API 1
42
43
44//-------------------------------------------------------------------
45//
46//  Global variables
47//
48
49
50
51//#define USE_DETAIL_TUNE_API  1
52        //
53        // RF ¹øÈ£¸¦ ÀÌ¿ëÇÑ TuningÀ» ÇÏ´Â°Ô ¾Æ´Ï¶ó Á÷Á¢ Á֯ļö °ªÀ» ÀÌ¿ëÇÏ¿© TuningÀ» ÇÑ´Ù.
54        // ¾ÕÀ¸·Î´Â ¸ðµÎ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÒ °ÍÀÌ´Ù.
55        // Å×½ºÆ®, °ËÁõÀÌ ³¡³ª±â Àü±îÁö´Â ÀÏ´Ü ¿¹Àü ÄÚµå (0) ºÎºÐÀ» À¯ÁöÇÑ´Ù.
56        // Àû´çÇÑ ½ÃÁ¡¿¡¼­ ¹Ì»ç¿ë ÄÚµå »èÁ¦ ¿¹Á¤..
57        //
58
59
60//--------------
61// ä³Î ŸÀÔ
62//
63ChannelType g_CurChannelType = ChannelType_Air;
64        //
65        // ÇöÀç ä³Î À¯Çü.  0: AIR,  1: Cable
66        // Air¿Í CableÀÌ °øÁ¸ÇÒ ¼ö´Â ¾ø´Ù. (ÇϳªÀÇ RF ¹øÈ£¸¦ ³õ°í ÇØ¼® ¹æ¹ýÀÌ ´Þ¶óÁö¹Ç·Î..)
67        //
68        // ÀÌ º¯¼ö¸¦ Á÷Á¢ ¼öÁ¤ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
69        // const typeÀ̹ǷΠÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î´Â ¼öÁ¤ÇÒ ¼ö ¾ø´Ù.
70        // ²À ÃʱâÈ­ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù.
71        //
72        // cafrii, 030323
73        // compilerÀÇ optimization ¹®Á¦·Î const¸¦ ´Ù½Ã »èÁ¦ÇÔ.
74
75//--------------
76// Á֯ļö Ç¥ÁØ
77
78tDHL_FreqStd g_CableSystem = eDHL_FREQ_AIR;
79        //
80        // ÇöÀç »ç¿ëÁßÀÎ Á֯ļö Ç¥ÁØ
81        //
82        // ÀÌ °ªÀº Áö»óÆÄ, ¶Ç´Â ÄÉÀÌºí ½Ã½ºÅÛÀ» °áÁ¤ÇÏ´Â °ªÀ̹ǷΠÄÉÀ̺í ä³Î Å×À̺íÀ» ¼±ÅÃÇÏ´Â ±âÁØÀÌ µÈ´Ù.
83        // ¶ÇÇÑ, ÀÌ °ªÀº NVM¿¡ ÀúÀåµÇ¾î¾ß ÇÑ´Ù. (Application ¸ò)
84        //
85
86
87
88
89//-------------------------------------------------------------------
90//
91//  Tuner Resource Lock Semaphores
92//
93
94
95//     Mutex = { SemID, Owner, lockCnt, FailCnt, UseOsMutex, Name, flag,        traceLvl }
96//
97DMW_MUTEX
98  tunerMutex = { 0,     0,     0,       0,       FALSE, "TunerMtx", OS_SEM_FIFO, FALSE, };
99
100static void dmw_tuner_lock_sema4(BOOL bLock)
101{
102        if (bLock)
103                DMW_LockMutex(&tunerMutex);
104        else
105                DMW_UnlockMutex(&tunerMutex);
106}
107
108
109#if 0
110_______________()
111#endif
112
113
114
115ModulationType DMW_HAL_TunerDemod2Modulation(tDHL_Demod demod)
116{
117        ModulationType mode;
118       
119        mode = 
120                demod == eDHL_DEMOD_NTSC        ? Modulation_NTSC :
121                demod == eDHL_DEMOD_8VSB        ? Modulation_8VSB :
122                demod == eDHL_DEMOD_64QAM? Modulation_64QAM :
123                demod == eDHL_DEMOD_256QAM      ? Modulation_256QAM :
124                demod == eDHL_DEMOD_QAM_AUTO    ? Modulation_QAM :
125                demod == eDHL_DEMOD_AUTODETECT ? Modulation_CableAuto :
126                                             Modulation_Invalid;
127
128        return mode;
129}
130
131tDHL_Demod DMW_HAL_Modulation2TunerDemod(ModulationType mode)
132{
133        tDHL_Demod demod;
134       
135        demod = 
136                mode == Modulation_NTSC      ? eDHL_DEMOD_NTSC :
137                mode == Modulation_8VSB      ? eDHL_DEMOD_8VSB :
138                mode == Modulation_64QAM     ? eDHL_DEMOD_64QAM :
139                mode == Modulation_256QAM    ? eDHL_DEMOD_256QAM :
140                mode == Modulation_QAM       ? eDHL_DEMOD_QAM_AUTO :
141                mode == Modulation_CableAuto ? eDHL_DEMOD_AUTODETECT :
142                                               eDHL_DEMOD_INVALID;
143                       
144        return demod;
145}
146
147
148
149#if 0
150_______________()
151#endif
152
153
154// cafrii 060630 add
155// ¸¶Áö¸· RF/Modulation °ªÀ» ±â¾ïÇÑ´Ù.
156// Modulation °ªÀº ¾ðÁ¦µçÁö Àоî¿Ã ¼ö ÀÖÀ¸¹Ç·Î ±×·¸°Ô Å« ÇÊ¿ä´Â ¾ø´Ù.
157//
158int            g_TunerRf;
159ModulationType g_TunerModulation;
160
161
162
163
164BOOL DMW_HAL_DetectAnalogVideoChannel()
165{
166        DHL_RESULT dhlResult;
167        UINT8 Lock;
168        tDHL_Demod demod;
169
170       
171        dhlResult = DHL_FE_GetLockStatus(DEFAULT_TUNER_ID, &Lock, &demod);
172       
173        return (dhlResult==DHL_OK && Lock) ? TRUE : FALSE;
174}
175
176
177// import from UCM.c
178//   Freq Standard °ü·Ã ±â´ÉÀº Channel DB¿Í´Â µ¶¸³ÀûÀÎ ÇÏÀ§ ±â´ÉÀ̹ǷΠºÐ¸®Çؼ­
179//   Tuner HAL°ú °°ÀÌ °ü¸®ÇÑ´Ù.
180//
181STATUS DMW_HAL_SetChannelStandard(tDHL_FreqStd nFreqStd)
182{
183        // ÇöÀç°¡ Air ¸ðµåÀÌ¸é ¹«½Ã.
184        //
185        // Cable SystemÀÌ ÀÌ¹Ì 'system'À̶ó¸é ¹«½Ã..
186        //
187        // ¼­·Î ´Ù¸¥ CableSystemÀ¸·Î ¼³Á¤µÇ¸é ÇöÀç DB°¡ Àǹ̰¡ ¾ø¾îÁö¹Ç·Î ´Ù Áö¿ì´Â°Ô ¸Â°ÚÁö¸¸,
188        // ApplicationÀÌ ¾Ë¾Æ¼­ Çϵµ·Ï ÇÑ´Ù.
189
190        dprint(2, "    frequency std set to %d, %s\n", nFreqStd, FreqStdString(nFreqStd));
191
192        if (nFreqStd != eDHL_FREQ_STD&& nFreqStd != eDHL_FREQ_IRC&& nFreqStd != eDHL_FREQ_HRC)
193                nFreqStd = eDHL_FREQ_AIR; // Air°¡ ±âº»..
194
195        // cafrii 060630 add
196        //  systemÀÌ º¯°æµÇ¸é last tune info¸¦ reset½ÃŲ´Ù.
197        // 
198        if (g_CableSystem != nFreqStd) {
199                g_CableSystem = nFreqStd;
200
201                dprint(2, "    reset tuner info\n");
202                g_TunerRf = 0;
203                g_TunerModulation = Modulation_Invalid;
204        }
205
206        // ÀÌÁ¦ ½ÇÁ¦ Driver layer¿¡ ¼³Á¤À» ÇÑ´Ù.
207        //
208//      DHL_FE_SetChannelStandard(DEFAULT_TUNER_ID, nFreqStd);
209
210        if (g_CableSystem == eDHL_FREQ_AIR)
211                g_CurChannelType = ChannelType_Air;
212        else
213                g_CurChannelType = ChannelType_Cable;
214
215        return statusOK;
216}
217
218
219
220
221//-------------------------------------------
222//  DMW_HAL_TunerScanSetChannel
223//
224//
225//
226STATUS DMW_HAL_TunerScanSetChannel(UINT32 ch, ModulationType type, INT32* pOffset, 
227                                                        FreqTuneMode mode, BOOL (*chkfn)())
228{
229        STATUS nReturn = statusOK;
230        UINT32 frequency;
231        UINT32 new_freq;
232        INT32 offset;
233        DHL_RESULT dhlResult;
234
235        tDHL_Demod demod;
236
237        if (pOffset == NULL)
238                return statusInvalidArgument;
239
240        demod = DMW_HAL_Modulation2TunerDemod(type);
241
242        if (demod == eDHL_DEMOD_INVALID)
243                return statusInvalidArgument;
244       
245        offset = *pOffset;
246       
247        // offset °ªÀº caller°¡ ÁöÁ¤ÇÑ frequency offset À̸ç, ÀÌ °ªÀ» ÃÖ´ëÇÑ Á¸ÁßÇÏ¿© Æ©´×À» ÇÑ´Ù.
248        //
249        // Tuning ¸ðµå¿¡ µû¶ó¼­ ³»ºÎÀûÀ¸·Î auto-search °úÁ¤À» ¼öÇà, ´Ù¸¥ Á֯ļö°¡ »õ·Î ¹ß°ßµÉ ¼ö Àִµ¥,
250        // À̶§ ¹ß°ßµÈ frequency offsetÀº *pOffset¿¡ ´Ù½Ã ÀúÀåµÇ¾î ¸®ÅϵȴÙ.
251        //
252       
253        dmw_tuner_lock_sema4(TRUE);
254
255        //---------------------- Air (Terrestrial) ---------------------
256        //
257
258        if (g_CurChannelType == ChannelType_Air)
259        {
260                DMW_HAL_SetChannelStandard(eDHL_FREQ_AIR);
261
262                frequency = FindCenterFrequency(ch, offset, eDHL_FREQ_AIR);
263               
264                if (frequency == 0) {
265                        dprint(0, "!! center frequency of rf %d, offset %d err\n", ch, offset);
266
267                        nReturn = statusInvalidArgument;
268                        goto label_exit;
269                }
270
271                dprint(2, "SetTuner, AIR, %s, rf %d, offset %d, freq %dKHz\n", 
272                                                ServiceTypeString(type), ch, offset, frequency/1000);
273
274                if (type == Modulation_NTSC)
275                {
276                        // NTSCÀÇ °æ¿ì¿¡´Â ½ÇÁ¦·Î °Ë»öµÈ frequency offsetÀ» pOffsetÀ» ÀÌ¿ëÇØ¼­ ³Ñ°ÜÁà¾ß ÇÑ´Ù.
277                        // ¸¸¾à ÃøÁ¤ÀÌ ºÒ°¡´ÉÇÒ °æ¿ì¶ó¸é ±×³É caller°¡ Á¦½ÃÇÑ offsetÀ» ±×´ë·Î »ç¿ëÇÑ´Ù.
278                        //
279                        if (mode == FREQTUNE_SHORT_SEARCH)
280                        {
281                                dprint(2, "   short search: AFC (%dKHz)\n", frequency/1000);
282                               
283                                new_freq = DMW_HAL_AfcSearchMultiple(1, &frequency, 0, NULL);
284                               
285                                // »õ·Î¿î frequency°¡ ¹ß°ßµÇ¾úÀ¸¸é º¯°æµÈ ¸¸Å­ offsetÀ» ´Ù½Ã Á¶Á¤.
286                                //
287                                if (new_freq && new_freq != frequency) {
288                                        *pOffset = *pOffset + (new_freq - frequency);
289                                        dprint(2, "     frequency adjusted to %dKHz, new offset %dKHz\n", 
290                                                                        new_freq/1000, (*pOffset)/1000);
291                                }
292                        }
293                        else // FREQTUNE_FIXED ¸ðµå
294                        {
295                                dprint(2, "   fixed mode: DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000);
296                               
297                                // FREQTUNE_FIXED¿¡´Â ±×³É caller°¡ Á¦½ÃÇÑ Á֯ļö·Î try¸¦ Çѹø ÇÑ´Ù.
298                                // pOffset À» ÅëÇØ »õ·Ó°Ô ¸®ÅϵǴ °ªÀº ¾ø´Ù..
299                               
300                                dprint(2, "   DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000);
301               
302                                dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_NTSC, NULL);
303                                // cafrii 070710 cancel bugfix
304                                //nReturn = dhlResult ? statusError : statusOK;
305                                nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled :
306                                                dhlResult ? statusError : statusOK;
307                        }
308
309                }
310                else if (type == Modulation_8VSB)
311                {
312                        dprint(2, "   DHL_FE_Start (%dKHz, VSB)\n", frequency/1000);
313       
314                        dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_8VSB, NULL);
315                        // cafrii 070710 cancel bugfix
316                        //nReturn = dhlResult ? statusError : statusOK;
317                        nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled :
318                                        dhlResult ? statusError : statusOK;
319                       
320                }
321                else 
322                {
323                        dprint(0, "!! unknown service type %d in Air channel.\n", type);
324                        nReturn = statusInvalidArgument;  // No QAM allowed!!!!
325                }
326        }
327       
328        //---------------------- Cable (STD/HRC/IRC) -------------------------
329        else
330        {
331                DMW_HAL_SetChannelStandard(g_CableSystem);
332
333                frequency = FindCenterFrequency(ch, offset, g_CableSystem);
334               
335                if (frequency == 0) {
336                        dprint(0, "!! center frequency of rf %d, offset %d err\n", ch, offset);
337                        nReturn = statusInvalidArgument;
338                        goto label_exit;
339                }
340
341                dprint(2, "SetTuner, CABLE %s, %s, rf %d, offset %d, freq %dKHz\n", 
342                                (g_CableSystem == eDHL_FREQ_IRC) ? "IRC": 
343                                (g_CableSystem == eDHL_FREQ_HRC) ? "HRC" : "STD",
344                                ServiceTypeString(type), ch, offset, frequency/1000);
345
346                if (type == Modulation_NTSC)
347                {
348                        if (mode == FREQTUNE_SHORT_SEARCH)
349                        {
350                                dprint(2, "   short search: AFC (%dKHz)\n", frequency/1000);
351                               
352                                new_freq = DMW_HAL_AfcSearchMultiple(1, &frequency, 0, NULL);
353                               
354                                // »õ·Î¿î frequency°¡ ¹ß°ßµÇ¾úÀ¸¸é º¯°æµÈ ¸¸Å­ offsetÀ» ´Ù½Ã Á¶Á¤.
355                                //
356                                if (new_freq && new_freq != frequency) {
357                                        *pOffset = *pOffset + (new_freq - frequency);
358                                        dprint(2, "     frequency adjusted to %dKHz, new offset %dKHz\n", 
359                                                                        new_freq/1000, (*pOffset)/1000);
360                                }
361                        }
362                        else   // FREQTUNE_FIXED ¸ðµå
363                        {
364                                dprint(2, "   fixed mode: DHL_FE_Start (%dKHz, NTSC)\n", frequency/1000);
365                               
366                                // DHL ³»ºÎ¿¡¼­ ÀûÀýÇÑ standard·Î ¹Ù²ï´Ù.
367                                // ¸¸¾à application option¿¡ µû¶ó standard°¡ º¯°æµÇ¾î¾ß ÇÑ´Ù¸é
368                                // º°µµÀÇ DHL API¸¦ ÀÌ¿ëÇÏ¿© presetÀ» ÇØ¾ß ÇÑ´Ù. ÇöÀç ±× ±â´ÉÀº ¹Ì±¸Çö.
369                                dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, eDHL_DEMOD_NTSC, NULL);
370                                // cafrii 070710 cancel bugfix
371                                //nReturn = dhlResult ? statusError : statusOK;
372                                nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled :
373                                                dhlResult ? statusError : statusOK;
374                       
375                        }
376
377                }
378                else 
379                {               
380                        dprint(2, "   DHL_FE_Start (%dKHz, %s)\n", frequency/1000, 
381                                                                ServiceTypeString(type));
382
383                        dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, frequency/1000, demod, NULL);
384                        // cafrii 070710 cancel bugfix
385                        //nReturn = dhlResult ? statusError : statusOK;
386                        nReturn = dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled :
387                                        dhlResult ? statusError : statusOK;
388                }
389
390        }
391
392label_exit:
393
394        // cafrii 060630 add
395        // Ç×»ó tunerÀÇ ¸¶Áö¸· »óŸ¦ tracking Çϵµ·Ï ÇÑ´Ù.
396        // ³ªÁß¿¡ lock check, ¶Ç´Â mod check¸¦ ÇÒ ¶§ g_TunerModulationÀº °áÁ¤µÈ´Ù.
397       
398        if (nReturn == statusOK)
399                g_TunerRf = ch;
400        else
401                g_TunerRf = 0;
402
403        // analogÀÇ °æ¿ì´Â º°µµ·Î lock check¸¦ ¾ÈÇÏ´Â °æ¿ìµµ Àֱ⠶§¹®¿¡
404        // PLL ¼³Á¤¸¸ ¼º°øÇϸé NTSC ¸ðµå¶ó°í º»´Ù.
405        //
406        if (nReturn == statusOK && type == Modulation_NTSC)
407                g_TunerModulation = Modulation_NTSC;
408        else
409                g_TunerModulation = Modulation_Invalid;
410
411        dmw_tuner_lock_sema4(FALSE);
412       
413        return nReturn;
414}
415
416
417
418
419//-------------------------------------------
420//   DMW_HAL_TunerSetChannel
421//
422//
423//
424STATUS DMW_HAL_TunerSetChannel(UINT32 ch, ModulationType type, INT32 offset, 
425                                                FreqTuneMode mode, BOOL (*chkfn)())
426{
427        STATUS status;
428
429        status = DMW_HAL_TunerScanSetChannel(ch, type, &offset, mode, chkfn);
430       
431        return status;
432}
433
434
435
436
437//-------------------------------------------
438//   DMW_HAL_TunerSetFrequency
439//
440//
441//  cafrii 041206 add for cable system autodetect feature..
442//
443//  cafrii 061221, analog fine tune is not supported in this function
444//
445STATUS DMW_HAL_TunerSetFrequency(UINT32 freqInKHz, ModulationType mode, BOOL (*chkfn)())
446{
447        DHL_RESULT dhlResult;
448        tDHL_Demod demod;
449
450        demod = DMW_HAL_Modulation2TunerDemod(mode);
451
452        // report Àü¿ëÀÎ °ªµéÀº »ç¿ë ºÒ°¡.
453        //
454        if (demod == eDHL_DEMOD_INVALID) {
455                dprint(0, "!! invalid modtype %d (%s)\n", mode, ServiceTypeString(mode));
456                return statusInvalidArgument;
457        }
458
459        g_TunerRf = 0; // cafrii 060714 add bugfix!
460
461        // DEMOD_AUTO_DETECT °¡ ¾Æ´Ñ ÀÌ»ó check fnÀº º°·Î ÇÊ¿äÇÏÁö´Â ¾Ê´Ù.
462        //
463        dhlResult = DHL_FE_Start(DEFAULT_TUNER_ID, freqInKHz, demod, NULL);
464
465        // cafrii 070710 cancel bugfix
466        //return (dhlResult==DHL_OK ? statusOK : statusError);
467        return (dhlResult == DHL_FAIL_CANCELLED_BY_USER ? statusCancelled :
468                                dhlResult ? statusError : statusOK);
469
470}
471
472
473BOOL DMW_HAL_DetectNIMChannel()
474{
475        DHL_RESULT dhlResult;
476        UINT8 Lock;
477        tDHL_Demod demod;
478
479        dhlResult = DHL_FE_GetLockStatus(DEFAULT_TUNER_ID, &Lock, &demod);
480
481        // cafrii 060630 add, tuner status tracking..   
482        if (dhlResult == DHL_OK && Lock) {
483                g_TunerModulation = DMW_HAL_GetModulationMode();
484                return TRUE;
485        }
486        else {
487                g_TunerModulation = Modulation_Invalid;
488                return FALSE;
489        }       
490}
491
492int DMW_HAL_GetSignalStrength()
493{
494        DHL_RESULT dhlResult;
495        int str;
496        dhlResult = DHL_FE_GetSignalStrength(DEFAULT_TUNER_ID, (UINT32 *)&str);
497        if (dhlResult)
498                str = 0;
499
500        return str;
501}
502
503float DMW_HAL_GetSNR()
504{
505        DHL_RESULT dhlResult;
506        float snr;
507        UINT32 snr1000;
508        dhlResult = DHL_FE_GetSignalStatus(DEFAULT_TUNER_ID, eDHL_SIGNAL_SNR2, &snr1000);
509        if (dhlResult)
510                snr = 0.;
511        else
512                snr = snr1000/1000.;
513        return snr;
514}
515
516
517// cafrii 060630 add
518int DMW_HAL_GetCurrentRF(void)
519{
520        return g_TunerRf;
521
522}
523
524void DMW_HAL_ResetLastRF(void)
525{
526        g_TunerRf = 0;
527}
528
529ModulationType DMW_HAL_GetModulationMode()
530{
531        DHL_RESULT dhlResult;
532        tDHL_Demod demod;
533        ModulationType mod;
534       
535        dhlResult = DHL_FE_GetModFormat(DEFAULT_TUNER_ID, &demod);
536
537        // cafrii 060630, add tuner status tracking..
538        if (dhlResult) {
539                g_TunerModulation = Modulation_Invalid;
540                return Modulation_Invalid;
541        }
542       
543        if (0);
544        else if (demod == eDHL_DEMOD_NTSC)   
545                mod = Modulation_NTSC;
546        else if (demod == eDHL_DEMOD_8VSB)   
547                mod = Modulation_8VSB;
548        else if (demod == eDHL_DEMOD_64QAM) 
549                mod = Modulation_64QAM;
550        else if (demod == eDHL_DEMOD_256QAM) 
551                mod = Modulation_256QAM;
552        else if (demod == eDHL_DEMOD_QAM_AUTO)   
553                mod = Modulation_64QAM;  // »ç½Ç ÀÌ·±°Ô ³ª¿À¸é ¾ÈµÊ..
554        else 
555                mod = Modulation_Invalid;
556
557        g_TunerModulation = mod;
558       
559        return mod;
560       
561}
562
563
564// not tested yet..
565//
566int DMW_HAL_SetTunerLockTimeout(int vsb, int q64, int q256, int ntsc)
567{
568        // ´ÜÀ§´Â 0.1 ÃÊ
569       
570        // cafrii 050413
571        // ÀÌ ÇÔ¼ö´Â ´õÀÌ»ó µ¿ÀÛÇÏÁö ¾Ê´Â´Ù..
572        //
573        /// int vsbTimeout, int qam64Timeout, int qam256Timeout, int ntscTimeout )
574        //DD_SetLockTimeout(vsb, q64, q256, ntsc);
575       
576        return statusOK;
577}
578
579
580
581//---------------------------------------------------------------------------
582//  DMW_HAL_AfcSearchMultiple
583//
584//
585//  ÁöÁ¤ÇÑ Á֯ļö ¿µ¿ª¿¡¼­ ¾Æ³¯·Î±× ½ÅÈ£ °Ë»öÀ» ÇÏ¿© ¹ß°ßµÈ Á֯ļö¸¦ ¸®ÅÏÇÑ´Ù.
586// 
587//  µå¶óÀ̹ö¿¡¼­ AFC ±â´ÉÀÌ Áö¿øµÇÁö ¾ÊÀ¸¸é Á÷Á¢ Lock check API¸¦ ÀÌ¿ëÇØ¼­
588//  Lock ¿©ºÎ·Î ÆÇ´ÜÇÑ´Ù. timeoutTick °ªÀº ÀÌ °æ¿ì¿¡¸¸ »ç¿ëÀÌ µÇ¸ç,
589//  timeoutÀ¸·Î 0ÀÇ °ªÀ» ÁöÁ¤ÇÒ °æ¿ì °¢ Frequency º°·Î 1ȸ¸¸ üũÇÑ´Ù.
590//
591
592STATUS DMW_HAL_AfcSearchMultiple(int nFreq, UINT32 *aFreq, int timeoutTick, BOOL (*ckfn)())
593{
594        // cafrii 050328 add timeoutTick param.
595        //
596        // ÇÔ¼ö ÀÎÀÚÀÇ Á֯ļö ´ÜÀ§´Â Hz.
597
598#if SUPPORT_NTSC_FINE_TUNE
599
600        int i;
601        UINT32 f2 = 0;
602       
603        AFC_SearchStart(gTuner);
604
605        for (i=0; i<nFreq; i++)
606        {
607                f2 = AFC_SearchFrequency(gTuner, aFreq[i]);
608               
609                if (f2)
610                        goto label_exit;
611                       
612                if (ckfn && ckfn()) {
613                        f2 = 0;
614                        goto label_exit;
615                }
616        }
617       
618        f2 = 0;
619
620label_exit:
621       
622        AFC_SearchEnd(gTuner);
623       
624        return f2;
625       
626
627#else // !SUPPORT_NTSC_FINE_TUNE
628
629        // cafrii 050325 add
630
631        int i;
632        BOOL bLocked;   
633        UINT32 tickStart;
634
635        UINT32 f2 = 0; 
636        //int timeoutTick = g_Timeout_AnalogSignalLock * 1000 / 1000;
637        //
638        // ÀÌ g_Timeout_AnalogSignalLock º¯¼ö´Â Á» ´õ »óÀ§ °èÃþÀÇ º¯¼öÀ̹ǷÎ
639        // ÀÌ ·¹º§¿¡¼­ ¸¶À½´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó ÂüÁ¶ÇÏÁö ¾Êµµ·Ï ÇÏÀÚ.
640
641        dmw_tuner_lock_sema4(TRUE);
642
643        for (i=0; i<nFreq; i++)
644        {
645                DHL_FE_Start(DEFAULT_TUNER_ID, aFreq[i]/1000, eDHL_DEMOD_NTSC, NULL);
646               
647                tickStart = DHL_OS_GetMsCount();
648
649                while (1)
650                {               
651                        bLocked = DMW_HAL_DetectAnalogVideoChannel();
652                       
653                        if (bLocked) {
654                                f2 = aFreq[i];
655                                dprint(2, "freq[%d] %dkHz locked\n", i, aFreq[i]/1000);
656                                goto label_exit;
657                        }
658                       
659                        if (DHL_OS_GetMsCount() - tickStart > (unsigned int)timeoutTick) 
660                                break;  // ´ÙÀ½ Á֯ļö·Î ´Ù½Ã ½Ãµµ..
661                       
662                        if (ckfn && ckfn()) {
663                                f2 = 0;
664                                dprint(2, "afc search cancelled\n");
665                                goto label_exit;
666                        }
667               
668                        DHL_OS_Delay(100);
669                }
670               
671                // ´ÙÀ½ Á֯ļö·Î ´Ù½Ã ½Ãµµ..
672               
673                dprint(3, " freq[%d] %dkHz not locked. %s\n", i, aFreq[i]/1000, 
674                                                                i==nFreq-1 ? "" : "try next..");
675        }
676       
677        f2 = 0;
678
679label_exit:
680
681        dmw_tuner_lock_sema4(FALSE);
682       
683        return f2;
684       
685#endif // SUPPORT_NTSC_FINE_TUNE
686       
687}
688
689
690
691
692
693#if 0
694_____Fdc_Tune___()
695#endif
696
697
698//-------------------
699// Driver function
700//
701
702
703
704STATUS DMW_HAL_FdcTune(unsigned long ulFrequency, unsigned short usBitRate, int nSpectrumInversion )
705{
706       
707#if SUPPORT_FDC_TUNER
708       
709        int err;
710       
711        dprint(1, "DMW_HAL_FdcTun(freq %d, bitrate %d, spectrum_inv %d\n", 
712                                                ulFrequency, usBitRate, nSpectrumInversion);
713
714        err = FDC(ulFrequency/1000, usBitRate, nSpectrumInversion);
715       
716        if (err) {
717                dprint(0, "!! FDC err %d\n", err);
718        }
719        return err;
720       
721#else
722        return statusNotImpl;
723#endif
724
725}
726
727
728int DMW_HAL_GetFDCLockStatus()
729{
730#if SUPPORT_FDC_TUNER
731        return GetFDCLockStatus();
732#else
733        return 0;
734#endif
735}
736
737int DMW_HAL_GetFDCSignalStrength()
738{
739#if SUPPORT_FDC_TUNER
740        return GetFDCSignalStrength();
741#else
742        return 0;
743#endif
744}
745
746float DMW_HAL_GetFDCSNR()
747{
748#if SUPPORT_FDC_TUNER
749        return (float) GetFDCSNR();
750#else
751        return 0;
752#endif
753}
754
755
756
757#if 0
758________________()
759#endif
760
761
762#if DMW_REGISTER_DEBUG_SYMBOL
763
764
765static DHL_SymbolTable ChannelHalSymbols[] =
766{
767        //---- functions
768       
769        DHL_FNC_SYM_ENTRY(DMW_HAL_SetChannelStandard),
770        DHL_FNC_SYM_ENTRY(DMW_HAL_TunerSetChannel),
771        DHL_FNC_SYM_ENTRY(DMW_HAL_GetSignalStrength),
772        DHL_FNC_SYM_ENTRY(DMW_HAL_GetModulationMode),
773       
774        //---- variables
775               
776        //DHL_VAR_SYM_ENTRY(g_Trace_ChannelHAL),
777       
778};
779
780#endif // DMW_REGISTER_DEBUG_SYMBOL
781
782
783void DMW_HAL_RegisterChannelHalSymbols()
784{
785       
786#if DMW_REGISTER_DEBUG_SYMBOL
787        DHL_DBG_RegisterSymbols(ChannelHalSymbols, DHL_NUMSYMBOLS(ChannelHalSymbols));
788
789#endif
790
791}
792
793
794
795
796#if 0
797________________()
798#endif
799
800
801#if 0
802
803int gSignalLockTimeoutInTick = 60;
804
805void TestSetFreq(UINT32 freq)
806{
807        int err, ret;
808        UINT32 tickStart;
809       
810       
811        dmw_tuner_lock_sema4(TRUE);
812
813        // DMW_HAL_ChangeFrequencyStandard(0); // FREQ_AIR
814        // DMW_HAL_ChangeFrequencyStandard(1); // FREQ_STD
815        // shell ¿¡¼­ Å×½ºÆ® ÇÏ·Á¸é À§¿Í °°ÀÌ ¸ÕÀú ¼³Á¤À» ÇÑ ´ÙÀ½¿¡ ½ÇÇà.....
816       
817       
818        OS_DbgPrintf("Set Frequency: %d KHz\n", freq);
819       
820        OS_DbgPrintf("** try 8VSB..\n");
821        err = TunerSetFrequency(gTuner, freq, DEMOD_8VSB);
822
823        tickStart = DHL_OS_GetMsCount();
824        while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) {
825                ret = GetLockStatus();
826                if (ret)
827                        goto labe_done;
828                DHL_OS_Delay(1000/20);
829        }
830
831
832        OS_DbgPrintf("** try 64QAM..\n");
833        err = TunerSetFrequency(gTuner, freq, DEMOD_64QAM);
834       
835        tickStart = DHL_OS_GetMsCount();
836        while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) {
837                ret = GetLockStatus();
838                if (ret)
839                        goto labe_done;
840                DHL_OS_Delay(1000/20);
841        }
842
843
844        OS_DbgPrintf("** try 256QAM..\n");
845        err = TunerSetFrequency(gTuner, freq, DEMOD_256QAM);
846       
847        tickStart = DHL_OS_GetMsCount();
848        while (DHL_OS_GetMsCount() - tickStart < gSignalLockTimeoutInTick) {
849                ret = GetLockStatus();
850                if (ret)
851                        goto labe_done;
852                DHL_OS_Delay(1000/20);
853        }
854       
855        OS_DbgPrintf("!! signal not locked\n");
856        dmw_tuner_lock_sema4(FALSE);
857        return;
858
859labe_done:
860        dmw_tuner_lock_sema4(FALSE);
861
862        OS_DbgPrintf("signal locked.\n");
863       
864        if (1) {
865                int str = DMW_HAL_GetSignalStrength();
866                float snr = DMW_HAL_GetSNR();
867       
868                OS_DbgPrintf("signal strength: %d,  SNR: %.3f\n", str, snr);   
869        }
870}
871
872#endif //0
873
874
875/********************************************************************
876        $Log: DMW_ChannelTune.c,v $
877
878        1.30 2005/3/28  DMW_HAL_AfcSearchMultiple¿¡ timeout param Ãß°¡
879        1.29 2005/3/25  DMW_HAL_AfcSearchMultiple API¸¦ AFC ¾øÀ̵µ »ç¿ë°¡´ÉÇϵµ·Ï ¼öÁ¤
880
881        1.28 2005/1/26  ScanSetChannel ¿¡¼­ ¹«Á¶°Ç STDCable·Î ¼³Á¤ÇÏ´Â ¿¹Àü ¹æ½Ä ¼öÁ¤
882                        Mocha¸¦ Á¦¿ÜÇÑ ´Ù¸¥ platform ´õÀÌ»ó Áö¿øÇÏÁö ¾ÊÀ½.
883                        ScanSetChannel/SetChannel prototype º¯°æ (ÇÔ¼ö ÀÎÀÚ º¯°æ)
884                        ScanSetChannel ÇÔ¼ö·Î ÅëÇÕ.
885                        ¾Æ³¯·Î±× carrier search¸¦ À§ÇÑ DMW_HAL_AfcSearchMultiple Ãß°¡
886                        ÀáÁ¤ÀûÀ¸·Î USE_DETAIL_TUNE_API »ç¿ë. ³ªÁß¿¡´Â ÀÌ Ç÷¡±×·Î °íÁ¤ÇÒ °ÍÀÓ
887                        µð¹ö±× ¸Þ½ÃÁö Ãâ·Â¿¡ debug level Áö¿ø
888                        FDCÂÊ »ç¿ëÇÏÁö ¾Ê´Â ÄÚµåµé ¸ðµÎ Á¦°Å
889                        Àüü ±¸Á¶ ¹× °ÅÀÇ ¸ðµç ³»¿ë ¼öÁ¤..
890       
891        1.27 2004/12/09 DMW_HAL_TunerSetChannel: dprint bugfix
892        1.26 2004/12/06 DMW_HAL_TunerSetFrequency Ãß°¡
893
894        1.25 2004/11/22 DMW_HAL_GetModulationMode ÀÇ Àӽà ÄÚµå ¼öÁ¤.
895        1.24 2004/11/10 FDC API Ãß°¡
896        1.23 2004/11/4  TunerSetChannelEx µå¶óÀ̹ö ÇÔ¼ö »ç¿ë
897                        HAL api prototype ¼öÁ¤
898
899        1.22 2004/9/20  DMW_Config µµÀÔ, config »çÇ× À̵¿
900        1.21 2004/9/3   g_Trace_TunerSema4 position moved
901        1.2  2004/8/30  ChannelType, FreqStd imported from ChannelAPI
902                        TuneChannelByUid is moved to UCM module
903
904        1.1  2004/7/26  auto fine tune *offset reset bug fix
905                    SUPPORT_NTSC_FINE_TUNE and related var added
906        1.0  2003/0/0   Initial coding from ___, based on M/W API document
907
908 ********************************************************************/
Note: See TracBrowser for help on using the repository browser.