source: svn/trunk/zas_dstar/devices/Tuner/Oren_Cascade2B/Cascade2C.c @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
File size: 42.8 KB
Line 
1/****************************************************************************
2 * Module:      DTF8640
3 *
4 * Description: Tuner Driver for DTF8640 Main Routines
5 *
6 * Notes: 20041019/hwatk
7 *
8 * TO DO
9 *
10 *              ChannelChange() ¿¡ ´ëÇÑ ÀÎÀÚ¸¦ ´Ù½ÃÈ®ÀÎÇÏÀÚ.
11 *
12 ************************************************************************^^*/
13
14#include "dsthalcommon.h"
15#include "dstconfig.h"
16
17#include "Cas2BGeneralDefinitions.h"
18#include "TdquTuner.h"
19#include "TunerDTT7611.h"
20#include "Cascade2C.h"
21
22#ifdef DMALLOC
23#include <dmalloc.h>
24#endif
25
26extern DS_U32 gdhlExtDbgLvl;
27
28/*==================================================================
29        Configuration Section
30       
31        - USE_CODE_SWITCH : 2B / 2C Switch Code »ç¿ë ¿©ºÎ
32        - USE_2B          : 2B / 2C »ç¿ë ¿©ºÎ
33 ==================================================================*/
34
35#define USE_CODE_SWITCH 0
36
37#define DELAY_CHANNEL_TUNE      1
38
39//#define TDA9885_ADDR  0x84
40
41//#define I2C_NIM_TDA9885               ((I2C_BUS1<<12) | I2C_100_KHZ_SETTING | I2C_08_SUB_TYPE | 0x86)
42//#define I2C_NIM_TDA9885       I2C_DEVICE_INFO(DTT7611_SLAVE_ADDRESS,NIM_I2C_BUS,I2C_08_SUB_TYPE,I2C_100_KHZ_SETTING)
43#if (NIMTN_TYPE==NIMTN_DTT7611)
44        #define I2C_NIM_TDA9885         0x86
45        //DTT7611_SLAVE_ADDRESS
46#elif (NIMTN_TYPE==NIMTN_DTT7612)
47        #define I2C_NIM_TDA9885         DTT7612_SLAVE_ADDRESS
48#endif
49
50#if ((NIMTN_TYPE==NIMTN_DTT7611)||(NIMTN_TYPE==NIMTN_DTT7612))
51int DTT7611_NTSC_AGC = (int)TUNERDTT7611_AGC_WIDE_BAND_OFF;
52int DTT7611_DTV_AGC = (int)TUNERDTT7611_AGC_93;
53#endif
54
55CAS_2B_TYPE_RECEIVER_MODE g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC;
56//static CAS_2B_TYPE_RECEIVER_MODE g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_A2_KOREA;
57
58extern unsigned char codeDSP[];
59extern unsigned int  codeDSPSize;
60extern unsigned char dataDSP[];
61extern unsigned int  dataDSPSize;
62int g_ChannelChangeCount = 0;
63
64#include "SnrCalcTable.h"
65#include "Cas2BRoutines.h"
66#include "TunerDTT7611.h"
67#include "TdquTuner.h"
68#include "iicComm.h"
69
70typedef struct tag_CAS2C_info {
71        OS_SEMAPHORE_ID Mutex; 
72        DS_U32          OrenI2cAddr;
73/*      DS_U16          Tda9885Addr;    */
74/*      DS_U16          TunerAddr;      TunerAddrÀº »ç¿ëµÇÁö ¾ÊÀ½. -- OREN DemodulatorÀÇ I2C¿¡ ¹°·ÁÀÖÀ½. */
75        /* Current FAT channel information. */
76        DS_U32                  FATFreq;
77        TunerDemod      CurFATDemod;
78        DS_U8                   *pMicroCode;
79        DS_U16                  microCodeLen;
80        DS_U32                  bInitialized;
81        DS_U8                   isNtsc;
82} *P_CAS2C_INFO, CAS2C_INFO;
83
84CAS2C_INFO g_CAS2C_info;
85P_CAS2C_INFO pCAS2C = &g_CAS2C_info;
86CAS_2B_AUDIO_MESSAGE_PARAMETERS g_AudioParameters;
87
88DS_U16 GetHwVer(void);
89DS_U32 GetCodeVer(void);
90
91int CAS2C_GetVersion( DS_U32 *pVersion )
92{
93    DS_U32 version;
94   
95    version = 0x00000001;
96   
97        *pVersion = version;
98       
99        return 0;
100}
101
102int CAS2C_Initialize(void)
103{
104        int retVal = 0;
105        int result;
106        int piError;
107        INT32 retry_cnt=5;
108        CAS_2B_CODE_VERSION stCodeVersion;
109        static char sem_initialized = 0;
110
111        //
112        // ¿ì¼± 400kHz·Î º¯°æ!
113        //
114        DHL_SYS_SetI2CSpeed( 0, 400000 );
115
116        DHL_SYS_SetGPIO( GPIO_OREN_RESET, 0 );
117        OS_Delay(100); 
118        DHL_SYS_SetGPIO( GPIO_OREN_RESET, 1 );
119       
120        stCodeVersion.usaVector[0]=0;
121        stCodeVersion.usaVector[1]=0;
122        stCodeVersion.usaVector[2]=0;
123        stCodeVersion.usaVector[3]=0;
124        stCodeVersion.usaVector[4]=0;
125        stCodeVersion.usaVector[5]=0;
126
127        if ( sem_initialized == 0 ) {
128                pCAS2C->Mutex = OS_CreateBinarySemaphore( "CAS2C_Sema4", 0, 1 );
129                if ( pCAS2C->Mutex == (OS_SEMAPHORE_ID)0 ) {
130                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT, "ERROR: OS_CreateMutexSemaphore\n");
131                        retVal = -1;
132                        goto done;
133                }
134                pCAS2C->OrenI2cAddr = CASCADE_WRITE_ADDRESS;
135                sem_initialized = 1;
136        }
137       
138        /* Reset the Checksum register */
139        //ResetChecksum();
140
141        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"HW Ver = 0x%x\n", GetHwVer() );
142
143        /* Load the DSP code and data files */
144        result = SendCodeAndData(codeDSP,codeDSPSize,dataDSP,dataDSPSize);
145        if ( result != CAS_2B_API_SUCCESS ) {
146#if 1
147                //BKNOTE: ½ÇÆÐÇßÀ» °æ¿ì (resetÇϰí) õõÈ÷ ¸î ¹ø ´õ ½ÃµµÇØ º»´Ù.
148                while((result!=CAS_2B_API_SUCCESS)&&retry_cnt--)
149                {
150                        DHL_DbgPrintf(0,DHLDBG_EXT,"Retry to initialize OREN. line=%d\n",__LINE__);
151
152                        //BKTODO: À̰÷¿¡ Oren demodÀÇ GPIO HW reset³ÖÀ» °Í
153                        DHL_SYS_SetGPIO( GPIO_OREN_RESET, 0 );
154                        OS_Delay(100); 
155                        DHL_SYS_SetGPIO( GPIO_OREN_RESET, 1 );
156
157                        OS_mDelay(10);
158                        ResetChecksum();
159                        OS_mDelay(10);
160                        result = SendCodeAndData(codeDSP,codeDSPSize,dataDSP,dataDSPSize);
161                }
162#endif
163                if(result!=CAS_2B_API_SUCCESS)
164                {
165                        DHL_DbgPrintf(0,DHLDBG_EXT,"Can not Load DSP Data. (%dline result = 0x%x)\n", __LINE__, (unsigned int)result );
166                        retVal = -1;
167                        goto done;
168                }
169        }
170
171#if 0
172    /* Check the Checksum result for the code and data load */
173        piError = 0;
174        checksumResult = GetChecksumFlag(&piError);
175        if (checksumResult != CHECKSUM_STATUS_CORRECT)
176        {
177                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT, "Checksum is not correct \n");
178                return(-1);
179        }
180
181        /* Start the DSP RUN_FLAG */
182    result = SendCas2BRunFlag();
183        if (result != 0)
184        {
185                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT, "Can not Start the Cascade2B DSP. result=%d... Check for proper code and data load\n", (int)result);
186                return(-1);
187        }
188#endif
189
190    OS_mDelay(15);/* 15ms deley */
191       
192        InitAudioMessageStructToDefault( &g_AudioParameters );
193        g_AudioParameters.iMasterSlaveMode = TYPE_AUDIO_MASTER_MODE;
194        g_AudioParameters.iIisMode = TYPE_IIS_MODE_IIS;
195
196        /* Check the DSP Firmware Version ID Code */
197        stCodeVersion = GetDSPFirmwareVersion(&piError);
198        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"DSP Firmware Version ID = %.4x,%.4x,%.4x,%.4x,%.4x,%.4x\n",
199                        (int)stCodeVersion.usaVector[0],(int)stCodeVersion.usaVector[1],(int)stCodeVersion.usaVector[2],(int)stCodeVersion.usaVector[3],(int)stCodeVersion.usaVector[4],(int)stCodeVersion.usaVector[5]);
200
201        //
202        // ÀÌ ½ÃÁ¡ ÀÌÈĺÎÅÍ 100kHz·Î º¯°æ!
203        //
204        DHL_SYS_SetI2CSpeed( 0, 100000 );
205#if(( NIMTN_TYPE==NIMTN_DTT7611)||(NIMTN_TYPE==NIMTN_DTT7612))
206        retVal = CAS2C_InitTDA9885();
207        if(retVal){
208                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"TDA9985 Initialize failed!\n");
209        }else{
210                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"TDA9985 Init |success|\n");
211        }
212#endif
213
214done:
215        return retVal;
216
217}
218
219/****************************************************************************
220       
221        CAS2C_Start()
222
223                Summary : Start Oren demodulator.
224                Returns : 0 on success, others on failure.
225               
226 ************************************************************************^^*/
227int CAS2C_Start( TunerDemod Demod, int Ntsc, int Cable )
228{
229        int retVal = 0;
230        DS_U32 semErr;
231//      int casResult;
232        unsigned int uResult;
233        int needChannelChange;
234       
235        CAS_2B_TUNER_PARAMETERS TunerParam;
236        CAS_2B_CHANNEL_CHANGE_PARAMETERS ChannelParam;
237        CAS_2B_TYPE_RECEIVER_MODE rMode;
238       
239        /* Take Mutex. */
240        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
241        if ( semErr != 0 )
242                return -1;
243       
244        needChannelChange = (Ntsc != pCAS2C->isNtsc) || (Ntsc);
245       
246#if (NIMTN_TYPE==NIMTN_FQD1236)
247        TunerParam.iTunerType   = (TUNER_TYPE)TUNER_FQD1236;
248#elif (NIMTN_TYPE==NIMTN_DTT7611)
249        TunerParam.iTunerType   = (TUNER_TYPE)TUNER_DTT7611;
250#elif (NIMTN_TYPE== NIMTN_TDQU)
251        TunerParam.iTunerType   = (TUNER_TYPE)TUNER_TDQU;
252#else
253        #error Need to define NIMTN_TYPE
254#endif
255        TunerParam.iTunerSet    = TUNER_SET_CENTER_FREQUENCY_KHZ;
256        TunerParam.ulSetValue   = pCAS2C->FATFreq;
257        if ( Cable )
258                TunerParam.iChannelTableType = NA_CATV;
259        else
260                TunerParam.iChannelTableType = NA_TERRESTRIAL;
261        if ( Ntsc == 0 )
262                TunerParam.iAgcMode = TUNER_AGC_MODE_INTERNAL_DIGITAL;
263        else
264                TunerParam.iAgcMode = TUNER_AGC_MODE_INTERNAL_ANALOG;
265
266        if(Cable)
267                TunerParam.iInputSelection = TUNER_INPUT_SELECTION_CABLE;       
268        else
269                TunerParam.iInputSelection = TUNER_INPUT_SELECTION_TERRESTRIAL;
270
271        switch ( Demod ) {
272                case DEMOD_8VSB:        rMode = CAS_2B_RECEIVER_MODE_VSB_8_TR; break;
273                case DEMOD_64QAM:       rMode = CAS_2B_RECEIVER_MODE_ITUB_64; break;
274                case DEMOD_256QAM:      rMode = CAS_2B_RECEIVER_MODE_ITUB_256; break;
275                case DEMOD_QAM:         rMode = CAS_2B_RECEIVER_MODE_ITUB_AUTO_DETECT; break;
276                case DEMOD_NTSC:        rMode = g_Ntsc_Mode; break;     /* NTSC Mode°¡ µû·Î ¾øÀ½. */
277//              case DEMOD_NTSC:        rMode = CAS_2B_RECEIVER_MODE_VSB_8_TR; break;   /* NTSC Mode°¡ µû·Î ¾øÀ½. */
278                default:
279                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"|%s| error, line = %d, Demod = %d\n", __LINE__, Demod );
280                        retVal = -1;
281                        goto done;
282        }
283        pCAS2C->CurFATDemod = Demod;
284       
285        ChannelParam.iCarrierAcquisition        = CARRIER_ACQUISITION_NORMAL;
286        ChannelParam.iInverseSpectrum           = INVERSE_SPECTRUM_OFF;
287        ChannelParam.iReceiverMode                      = rMode;
288        if ( Ntsc == 0 )
289                ChannelParam.iNtscSignalDetection       = NORMAL_VSB;
290        else 
291                ChannelParam.iNtscSignalDetection       = NTSC_SIGNAL_DETECTION;
292
293        uResult = SetChannel( TunerParam, DELAY_CHANNEL_TUNE, &ChannelParam );
294        if ( uResult != IIC_COM_SUCCESS ) {
295                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"|%s| line = %d, result = 0x%x\n", __LINE__, uResult );
296                retVal = -1;
297                goto done;
298        }
299
300#if 0
301                uResult = SendVsbMessage( VSB_CHANNEL_CONDITION_AUTO,
302                                                                        VSB_NTSC_REJECTION_FILTER_AUTO,//BK<-VSB_NTSC_REJECTION_FILTER_ON,
303                                                                        //MPEG_OUTPUT_MODE_PARALLEL,
304                                                                        //MPEG_OUTPUT_MODE_CONTROLED_BY_PRM_PINS,
305                                                                        MPEG_OUTPUT_MODE_SERIAL,
306                                                                        TUNER_PHASE_NOISE_NORMAL );
307                if ( uResult != IIC_COM_SUCCESS ) {
308                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"|%s| line = %d, result = 0x%x\n", __LINE__, uResult );
309                        retVal = -1;
310                        goto done;
311                }
312#endif
313       
314        if ( Demod == DEMOD_NTSC ) {
315                uResult = SendAudioMessage( 1, g_AudioParameters );
316                if ( uResult != CAS_2B_API_SUCCESS ) {
317                        DHL_DbgPrintf(0,DHLDBG_EXT,"line = %d, result = 0x%x\n", __LINE__, uResult );
318                        retVal = -1;
319                        goto done;
320                }
321               
322                uResult = SendAudioMessage( 2, g_AudioParameters );
323                if ( uResult != CAS_2B_API_SUCCESS ) {
324                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"line = %d, result = 0x%x\n", __LINE__, uResult );
325                        retVal = -1;
326                        goto done;
327                }
328               
329                uResult = SendAudioMessage( 3, g_AudioParameters );
330                if ( uResult != CAS_2B_API_SUCCESS ) {
331                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"line = %d, result = 0x%x\n", __LINE__, uResult );
332                        retVal = -1;
333                        goto done;
334                }
335        }
336
337        g_ChannelChangeCount++;
338       
339        pCAS2C->isNtsc = Ntsc;
340done:
341        /* Give Mutex. */
342        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
343        if ( semErr != 0 )
344                retVal = -1;
345
346        if (!retVal)
347                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"success.\n");
348        else
349                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"failure.\n");
350
351        return retVal;
352}
353
354/****************************************************************************
355       
356        CAS2C_Stop()
357
358                Summary : Stop the Oren demodulator.
359                Returns : 0 on success, others on failure.
360               
361 ************************************************************************^^*/
362int CAS2C_Stop(void)
363{
364        int retVal = 0;
365        DS_U32 semErr;
366
367        /* Take Mutex. */
368        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
369        if ( semErr != 0 )
370                return -1;
371       
372        /* DO NOTHING. */       
373       
374        /* Give Mutex. */
375        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
376        if ( semErr != 0 )
377                retVal = -1;
378
379        return retVal;
380}
381
382
383/****************************************************************************
384       
385        CAS2C_Close()
386
387                Summary : Close the Oren demodulator.
388                Returns : 0 on success, others on failure.
389               
390 ************************************************************************^^*/
391int CAS2C_Close(void)
392{
393        int retVal = 0;
394        DS_U32 semErr;
395
396        /* Take Mutex. */
397        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
398        if ( semErr != 0 )
399                return -1;
400       
401
402        /* DO NOTHING */
403        goto done;
404       
405done:
406        /* Give Mutex. */
407        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
408        if ( semErr != 0 )
409                retVal = -1;
410
411        return retVal;
412}
413
414/****************************************************************************
415       
416        CAS2C_Reset()
417
418                Summary : Reset the Oren demodulator.
419                Returns : 0 on success, others on failure.
420               
421 ************************************************************************^^*/
422int CAS2C_Reset(void)
423{
424        int retVal = 0;
425        DS_U32 semErr;
426        unsigned int stat;
427        DS_U8 buff[2] = {0x66, 0xc0};
428
429        /* Take Mutex. */
430        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
431        if ( semErr != 0 )
432                return -1;
433       
434        stat = OrenIicTransmit(0x2a, &buff[0], 2);
435        if(stat != 0){
436                DHL_DbgPrintf(0,DHLDBG_EXT," Reset Failed Error!, %d\n",__LINE__);
437                return -1;
438        }
439
440        /* Give Mutex. */
441        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
442        if ( semErr != 0 )
443                retVal = -1;
444
445        return retVal;
446}
447
448/****************************************************************************
449       
450        CAS2C_SetFrequency()
451
452                Summary : Set Frequency
453                Returns : 0 on success, others on failure.
454               
455 ************************************************************************^^*/
456int CAS2C_SetFrequencyDTV( DS_U32 dMHz )
457{
458        int retVal = 0;
459        DS_U32 semErr;
460        DS_U32 freq;
461        int casResult;
462       
463        /* Take Mutex. */
464        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
465        if ( semErr != 0 )
466                return -1;
467       
468        freq = (DS_U32)dMHz;
469        pCAS2C->FATFreq = freq;
470        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"dMHz = %d\n", (int)freq );
471
472#if (NIMTN_TYPE==NIMTN_DTT7611)
473    /* hwatk/050427, ½ÇÁ¦·Î TuningÇϵµ·Ï... */
474        casResult = TunerDTT7611SendFreq( dMHz, TUNERDTT7611_REF_DIVIDER_RATIO_62_5, (TYPE_TUNERDTT7611_AGC)DTT7611_DTV_AGC/*TUNERDTT7611_AGC_WIDE_BAND_OFF*/, TUNER_AGC_MODE_INTERNAL_ANALOG, TUNERDTT7611_CHARGE_PUMP_60, TUNERDTT7611_AGC_TIME_CONSTANT_2_SEC );
475        if ( casResult != DTT7611_SUCCESS ) {
476                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line=%d, casResult = %d\n", __LINE__, casResult );
477        }
478#elif (NIMTN_TYPE==NIMTN_TDQU)
479        casResult = TunerTdquSendCenterFrequency( dMHz, TUNER_TDQU_REF_DIVIDER_RATIO_62_5, TUNER_TDQU_CHARGE_PUMP_300, TUNER_TDQU_AGST_0);
480        if ( casResult != TDQU_SUCCESS ) {
481                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line=%d, casResult = %d\n", __LINE__, casResult );
482        }
483        //TunerTdquPrintLockStatus();
484#endif
485
486        goto done;
487       
488done:
489        /* Give Mutex. */
490        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
491        if ( semErr != 0 )
492                retVal = -1;
493
494        return retVal;
495}
496
497int CAS2C_SetFrequencyNTSC( DS_U32 dMHz )
498{
499        int retVal = 0;
500        DS_U32 semErr;
501        DS_U32 freq;
502        int casResult;
503       
504        /* Take Mutex. */
505        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
506        if ( semErr != 0 )
507                return -1;
508       
509        freq = (DS_U32)dMHz;
510        pCAS2C->FATFreq = freq;
511        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"dMHz = %d\n", (int)freq );
512#if NIMTN_TYPE==NIMTN_DTT7611
513    /* hwatk/050427, ½ÇÁ¦·Î TuningÇϵµ·Ï... */
514        casResult = TunerDTT7611SendFreq( dMHz, TUNERDTT7611_REF_DIVIDER_RATIO_62_5, (TYPE_TUNERDTT7611_AGC)DTT7611_NTSC_AGC/*TUNERDTT7611_AGC_WIDE_BAND_OFF*/, /*TUNER_AGC_MODE_INTERNAL_ANALOG*/2, TUNERDTT7611_CHARGE_PUMP_60, TUNERDTT7611_AGC_TIME_CONSTANT_2_SEC );
515        if ( casResult != DTT7611_SUCCESS ) {
516                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: line=%d, casResult = %d\n", __LINE__, casResult );
517                retVal = -1;
518        }
519#elif NIMTN_TYPE==NIMTN_TDQU
520
521                casResult = TunerTdquSendCenterFrequency( dMHz,  TUNER_TDQU_REF_DIVIDER_RATIO_62_5,
522                         TUNERDTT7611_CHARGE_PUMP_60, TUNER_TDQU_AGST_0 ); // by Zhong Yang.
523                if ( casResult != TDQU_SUCCESS ) {
524                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: line=%d, casResult = %d\n", __LINE__, casResult );
525                        retVal = -1;
526        }
527
528#else
529        casResult=0;
530#endif
531
532        /* Give Mutex. */
533        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
534        if ( semErr != 0 )
535                retVal = -1;
536
537        return retVal;
538}
539
540//
541// Tuner Á¦¾îÇÏÁö ¾Ê°í, ³»ºÎÀûÀ¸·Î TuningÇÒ Á֯ļö¸¦ ¸í½ÃÇÏ´Â ÇÔ¼ö.
542// ¼³Á¤µÈ Á֯ļö´Â ´ÙÀ½ CAS2C_Start() È£Ã⠽ÿ¡ Àû¿ëµÊ.
543//
544int CAS2C_SetFrequency( DS_U32 dMHz )
545{
546        int retVal = 0;
547        DS_U32 semErr;
548        DS_U32 freq;
549       
550        /* Take Mutex. */
551        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
552        if ( semErr != 0 )
553                return -1;
554       
555        freq = (DS_U32)dMHz;
556        pCAS2C->FATFreq = freq;
557        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"dMHz = %d\n", (int)freq );
558
559        /* Give Mutex. */
560        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
561        if ( semErr != 0 )
562                retVal = -1;
563
564        return retVal;
565}
566
567DS_U32 CAS2C_GetFrequency(void)
568{
569        return pCAS2C->FATFreq;
570}
571
572/****************************************************************************
573       
574        CAS2C_GetLockStatus()
575
576                Summary : Set Frequency
577                Returns : 0 on success, others on failure.
578               
579 ************************************************************************^^*/
580int CAS2C_GetLockStatus( int *pLockStatus )
581{
582        int retVal = 0;
583        DS_U32 semErr;
584        int err;
585        LOCK_STATUS lockStatus, fecLock;
586        TunerDemod demod;
587//      long offset;
588//      int SQI;
589       
590        /* Take Mutex. */
591        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
592        if ( semErr != 0 )
593                return -1;
594
595        *pLockStatus = 0;
596
597        lockStatus = IsLocked( &err );
598        if ( err != CAS_2B_API_SUCCESS ) {
599                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
600                retVal = -1;
601                goto done;
602        }
603       
604        fecLock = IsFECLocked( &err );
605        if ( err != CAS_2B_API_SUCCESS ) {
606                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
607                retVal = -1;
608                goto done;
609        }
610
611#if 1
612        //
613        // Workaround.
614        // ù¹øÂ° QAM ä³Î Àüȯ ½Ã ½ÅÈ£°¡ ³·À½.
615        //
616        if ( pCAS2C->CurFATDemod == DEMOD_QAM || pCAS2C->CurFATDemod == DEMOD_256QAM || pCAS2C->CurFATDemod == DEMOD_64QAM ) {
617                if ( fecLock == LOCKED && lockStatus == UNLOCKED && g_ChannelChangeCount <= 1 ) {
618                        /* Give Mutex. */
619                        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
620                        if ( semErr != 0 )
621                                retVal = -1;
622
623                        printf("%s| force tune!\n", __FUNCTION__);
624                        demod = pCAS2C->CurFATDemod;
625                        CAS2C_Start( DEMOD_NTSC, 1, 0 );
626                        CAS2C_Start( demod, 0, 1 );
627                       
628                        *pLockStatus = 0;
629                       
630                        return retVal;
631                }
632        }
633#else
634        demod = 0;
635#endif
636
637        if ( lockStatus == LOCKED )
638                *pLockStatus = 1;
639        else
640                *pLockStatus = 0;
641               
642done:
643        /* Give Mutex. */
644        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
645        if ( semErr != 0 )
646                retVal = -1;
647
648        return retVal;
649}
650
651int CAS2C_GetLockStatusNTSC( int *pLockStatus )
652{
653        int retVal = 0;
654        DS_U32 semErr;
655//      long offset;
656        DS_U8 tdaData;
657#if NIMTN_TYPE==NIMTN_TDQU
658        DS_U8 H_Sync_Status;
659        DS_U8 AFT_Status;
660#endif
661//      int SQI;
662       
663        /* Take Mutex. */
664        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
665        if ( semErr != 0 )
666                return -1;
667
668        *pLockStatus = 0;
669
670#if 0
671        ntscLockStatus = IsNtscChannelDetected( &err );
672        if ( err != CAS_2B_API_SUCCESS ) {
673                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
674                retVal = -1;
675                goto done;
676        }
677       
678        *pLockStatus = ntscLockStatus;
679        goto done;
680#endif
681
682#if NIMTN_TYPE==NIMTN_DTT7611   
683        if ( !TunerDTT7611BeforeSendBytes() ) {
684                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
685                retVal = -1;
686                goto done;
687        }
688    OS_mDelay(1);                       /* 1 ms */
689
690        if ( DHL_SYS_I2cRead( I2C_NIM_TDA9885,FALSE, 0, &tdaData, 1 ) )  {
691                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
692                retVal = -1;
693        }               
694
695        if ( !TunerDTT7611AfterSendBytes() ) {
696                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
697                retVal = -1;
698                goto done;
699        }
700        tdaData = ( tdaData >> 1 ) & 0x0F;
701        if ( tdaData == 0x07 || tdaData == 0x08 ) {
702                *pLockStatus = 0;
703        } else {
704                *pLockStatus = 1;              /* hwatk/050427, TDA9885 Data¸¸À¸·Î ÆÇ´Ü */
705        }       
706#elif NIMTN_TYPE==NIMTN_TDQU
707
708        if(FALSE == BeforeTunerSendBytes())
709        {
710                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
711                retVal = -1;
712                goto done;
713        }
714       
715        OS_mDelay(50); 
716       
717        if ( DHL_SYS_I2cRead( I2C_TDQU_READ_ADDR,FALSE, 0, &tdaData, 1 ) )  {
718                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
719                retVal = -1;
720        }
721       
722        if(tdaData==0x7B)// ||tdaData==0x7A||tdaData==0x79)//tdadata == 1/2/3 || tdaData==0x79
723                AFT_Status = 1;
724        else
725                AFT_Status = 0;
726
727        DHL_FE_AnalogGetLockStatus(TUNER_FAT, &H_Sync_Status);
728        DHL_DbgPrintf(0,DHLDBG_EXT,"====DETERMINE: H_Sync_Status=%d\n",H_Sync_Status);
729
730        if(tdaData==0x7B)//||tdaData==0x7A)// ||tdaData==0x79)//tdadata == 1/2/3 || tdaData==0x79 / ZhongYang
731                AFT_Status = 1;
732        else
733                AFT_Status = 0;
734        DHL_DbgPrintf(0,DHLDBG_EXT,"====DETERMINE: AFT_Status=0x%x\n",tdaData);
735       
736        if(FALSE == AfterTunerSendBytes())
737        {
738                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
739                retVal = -1;
740                goto done;
741        }
742       
743#if 0
744        if(tdaData==0x7B&&H_Sync_Status==0)
745        {
746                OS_mDelay(4);
747                                DHL_FE_AnalogGetLockStatus(TUNER_FAT, &H_Sync_Status);
748                                DHL_DbgPrintf(0,DHLDBG_EXT,"====DETERMINE 2: H_Sync_Status=%d\n",H_Sync_Status);
749                                }
750
751#endif
752        if(H_Sync_Status==1&&AFT_Status==1)
753                *pLockStatus = 1;   
754        else
755                *pLockStatus = 0; 
756#endif
757
758done:
759        /* Give Mutex. */
760        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
761        if ( semErr != 0 )
762                retVal = -1;
763
764        return retVal;
765}
766
767
768/****************************************************************************
769       
770        CAS2C_GetSignalStrength()
771
772                Summary : Get signal strength from demodulator.
773                Returns : 0 on success, others on failure.
774               
775 ************************************************************************^^*/
776int CAS2C_GetSignalStrength( int *pSQI )
777{
778        int retVal = 0;
779        DS_U32 semErr;
780        DS_U8 sqi;
781        int err;
782        CAS_2B_TYPE_RECEIVER_MODE rMode;
783        int minVal, maxVal, Val;
784        DS_U16 snr;
785
786        if ( pCAS2C->CurFATDemod == DEMOD_NTSC ) {
787                *pSQI = 0;
788                return 0;
789        }
790
791        /* Take Mutex. */
792        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
793        if ( semErr != 0 )
794                return -1;
795
796        switch ( pCAS2C->CurFATDemod ) {
797                case DEMOD_8VSB:        rMode = CAS_2B_RECEIVER_MODE_VSB_8_TR; break;
798                case DEMOD_64QAM:       rMode = CAS_2B_RECEIVER_MODE_ITUB_64; break;
799                case DEMOD_256QAM:      rMode = CAS_2B_RECEIVER_MODE_ITUB_256; break;
800                case DEMOD_QAM:         rMode = CAS_2B_RECEIVER_MODE_ITUB_AUTO_DETECT; break;
801                case DEMOD_NTSC:        rMode = g_Ntsc_Mode; break;     /* NTSC Mode°¡ µû·Î ¾øÀ½. */
802                default:
803                        DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d, Demod = %d\n", __LINE__, pCAS2C->CurFATDemod);
804                        retVal = -1;
805                        goto done;
806        }
807
808#if 0
809        sqi = GetSignalQuality( rMode, &err );
810        if ( err != CAS_2B_API_SUCCESS ) {
811                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d, err = %d\n", __LINE__, err );
812                retVal = -1;
813                goto done;
814        }
815#else
816        switch ( pCAS2C->CurFATDemod ) {
817                case DEMOD_8VSB:        minVal = 10; maxVal = 32; break;
818                case DEMOD_64QAM:       minVal = 15; maxVal = 35; break;
819                case DEMOD_256QAM:      minVal = 18; maxVal = 35; break;
820                case DEMOD_QAM:         minVal = 15; maxVal = 35; break;
821                case DEMOD_NTSC:        minVal = 10; maxVal = 32; break;
822                default:
823                        DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d, Demod = %d\n", __LINE__, pCAS2C->CurFATDemod);
824                        retVal = -1;
825                        goto done;
826        }
827        snr = GetSnrAfterEqualization( rMode, &err );
828        if ( err != IIC_COM_SUCCESS ) {
829                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d, err = %d\n", __LINE__, err );
830                retVal = -1;
831                goto done;
832        }
833       
834        Val = (snr-minVal)*100;
835        Val /= (maxVal-minVal);
836        if ( Val > 100 )
837                Val = 100;
838        if ( Val < 0 )
839                Val = 0;
840        sqi = Val;
841#endif
842        *pSQI = sqi;       
843
844done:                   
845        /* Give Mutex. */
846        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
847        if ( semErr != 0 )
848                retVal = -1;
849
850        return retVal;
851}
852
853
854int CAS2C_GetSignalPower( int *pPower )
855{
856        int retVal = 0;
857        DS_U32 semErr;
858        DS_U8 sqi;
859        int Val;
860        int err;
861        NUMERATOR_DENOMINATOR stResult;
862
863        /* Take Mutex. */
864        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
865        if ( semErr != 0 )
866                return -1;
867       
868//      sqi = GetSignalStrength( &err, TYPE_AGC_AMPLIFIER_UPC3217 );
869//      sqi = GetSignalStrength( &err, TYPE_AGC_AMPLIFIER_UPC3219 );
870        err = 0;
871        stResult = GetAgcIfCommand( &err );
872        if ( err != 0 ) {
873                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: piError = %d\n", (unsigned int)err );
874                retVal = -1;
875                goto done;
876        }
877        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"IF AGC = %d, %f\n", (int)stResult.Numerator.lNumerator, (float)stResult.Denominator.lDenominator );
878        Val = (int)(stResult.Numerator.lNumerator - 3000) * 100;
879        Val /= (19000-300);
880        if ( Val > 100 )
881                Val = 100;
882        if ( Val < 0 )
883                Val = 0;
884
885        sqi = Val;
886        *pPower = sqi;
887
888done:
889        /* Give Mutex. */
890        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
891        if ( semErr != 0 )
892                retVal = -1;
893
894        return retVal;
895}
896       
897/****************************************************************************
898       
899        CAS2C_GetSNR
900
901                Summary : Get signal strength from demodulator.
902                Returns : 0 on success, others on failure.
903               
904 ************************************************************************^^*/
905int CAS2C_GetSNR( float *pSNR )
906{
907        int retVal = 0;
908        DS_U32 semErr;
909        DS_U16 snr;
910        int err;
911        float SNR;
912        CAS_2B_TYPE_RECEIVER_MODE rMode;
913
914        /* Take Mutex. */
915        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
916        if ( semErr != 0 )
917                return -1;
918       
919        if ( pCAS2C->isNtsc ) {
920                *pSNR = (float)6;
921        } else {
922                err = IIC_COM_SUCCESS;
923               
924                switch ( pCAS2C->CurFATDemod ) {
925                        case DEMOD_8VSB:        rMode = CAS_2B_RECEIVER_MODE_VSB_8_TR; break;
926                        case DEMOD_64QAM:       rMode = CAS_2B_RECEIVER_MODE_ITUB_64; break;
927                        case DEMOD_256QAM:      rMode = CAS_2B_RECEIVER_MODE_ITUB_256; break;
928                        case DEMOD_QAM:         rMode = CAS_2B_RECEIVER_MODE_ITUB_AUTO_DETECT; break;
929                        case DEMOD_NTSC:        rMode = g_Ntsc_Mode; break;     /* NTSC Mode°¡ µû·Î ¾øÀ½. */
930                        default:
931                                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line = %d, Demod = %d\n", __LINE__, pCAS2C->CurFATDemod );
932                                retVal = -1;
933                                goto done;
934                }
935               
936                snr = GetSnrAfterEqualization( rMode, &err );
937                if ( err != IIC_COM_SUCCESS ) {
938                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line = %d, err = %d\n", __LINE__, err );
939                        retVal = -1;
940                        goto done;
941                }
942               
943                SNR = (float)snr;
944                *pSNR = SNR;
945        }
946       
947done:
948        /* Give Mutex. */
949        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
950        if ( semErr != 0 )
951                retVal = -1;
952
953        return retVal;
954}
955
956
957/****************************************************************************
958       
959        CAS2C_GetModFormat
960
961                Summary : Get signal strength from demodulator.
962                Returns : 0 on success, others on failure.
963               
964 ************************************************************************^^*/
965int CAS2C_GetModFormat( TunerDemod *mode )
966{
967        int retVal = 0;
968        int err;
969        DS_U32 semErr;
970        CAS_2B_TYPE_RECEIVER_MODE iRMode;
971        /* Take Mutex. */
972        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
973        if ( semErr != 0 )
974                return -1;
975
976#if 0
977        if ( pCAS2C->isNtsc == 1 )
978                *mode = DEMOD_NTSC;
979        else
980                *mode = DEMOD_8VSB;
981#else
982        if ( pCAS2C->CurFATDemod == DEMOD_QAM ) {
983                iRMode = GetReceiveMode( &err );
984                if ( err != IIC_COM_SUCCESS ) {
985                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: line = %d, err = %d\n", __LINE__, err );
986                        retVal = -1;
987                        goto done;
988                }
989
990                switch (iRMode) {               
991                        case CAS_2B_RECEIVER_MODE_VSB_8_TR: *mode = DEMOD_8VSB; break;
992                        case CAS_2B_RECEIVER_MODE_ITUB_64: *mode = DEMOD_64QAM; break;
993                        case CAS_2B_RECEIVER_MODE_ITUB_256: *mode =DEMOD_256QAM; break;
994                        default:
995                                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR, LINE=%d\n", __LINE__);
996                }
997        } else {
998                *mode = pCAS2C->CurFATDemod;
999        }
1000#endif
1001
1002done:
1003        /* Give Mutex. */
1004        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1005        if ( semErr != 0 )
1006                retVal = -1;
1007
1008        return retVal;
1009}
1010
1011
1012/****************************************************************************
1013       
1014        CAS2C_GetErrCount
1015
1016                Summary : Get signal strength from demodulator.
1017                Returns : 0 on success, others on failure.
1018               
1019 ************************************************************************^^*/
1020int CAS2C_GetErrCount( DS_U32 *pRSErrCnt )
1021{
1022        int retVal = 0;
1023        DS_U32 semErr;
1024        int err;
1025        DS_U8 ser;
1026       
1027        /* Take Mutex. */
1028        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1029        if ( semErr != 0 )
1030                return -1;
1031       
1032        ser = Get1SecSer( &err );
1033        if ( err != IIC_COM_SUCCESS ) {
1034                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: line = %d, err = %d\n", __LINE__, err );
1035                retVal = -1;
1036                goto done;
1037        }
1038               
1039        *pRSErrCnt = ser;
1040       
1041done:
1042        /* Give Mutex. */
1043        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1044        if ( semErr != 0 )
1045                retVal = -1;
1046
1047        return retVal;
1048}
1049
1050
1051/****************************************************************************
1052       
1053        CAS2C_GetTDA9885Reg
1054
1055                Summary :
1056                Returns : 0 on success, others on failure.
1057               
1058 ************************************************************************^^*/
1059
1060int CAS2C_GetTDA9885Reg( DS_U8 *pStatus )
1061{
1062#if(( NIMTN_TYPE==NIMTN_DTT7611)||(NIMTN_TYPE==NIMTN_DTT7612))
1063
1064        int retVal = 0;
1065        DS_U32 semErr;
1066        DS_U8 data;
1067
1068        /* Take Mutex. */
1069        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1070        if ( semErr != 0 )
1071                return -1;
1072#if NIMTN_TYPE==NIMTN_DTT7611
1073        if ( !TunerDTT7611BeforeSendBytes() ) {
1074                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1075                retVal = -1;
1076                goto done;
1077        }
1078#endif
1079    OS_mDelay(1);                       /* 1 ms */
1080
1081        if ( DHL_SYS_I2cRead( I2C_NIM_TDA9885 | 0x01, FALSE, 0, &data, 1 ) )  {
1082                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1083                retVal = -1;
1084                goto done;
1085        }               
1086
1087        *pStatus = data;
1088        //*pStatus = (data<<2);
1089#if NIMTN_TYPE==NIMTN_DTT7611
1090        if ( !TunerDTT7611AfterSendBytes() ) {
1091                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1092                retVal = -1;
1093                goto done;
1094        }
1095#endif
1096done:
1097        /* Give Mutex. */
1098        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1099        if ( semErr != 0 )
1100                retVal = -1;
1101
1102        return retVal;
1103#else
1104        return 1;
1105#endif
1106}
1107
1108int CAS2C_GetTdquAFTReg( DS_U8 *pStatus )
1109{
1110        int retVal = 0;
1111        DS_U32 semErr;
1112        DS_U8 data;
1113
1114        /* Take Mutex. */
1115        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1116        if ( semErr != 0 )
1117                return -1;
1118
1119
1120        if(FALSE == BeforeTunerSendBytes())
1121        {
1122                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1123                retVal = -1;
1124                goto done;
1125}
1126
1127        if ( DHL_SYS_I2cRead( I2C_TDQU_READ_ADDR,FALSE, 0, &data, 1 ) )  {
1128                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1129                retVal = -1;
1130        }
1131#if 0
1132        if(data==0x7B)
1133                *pStatus =3;
1134        else if(data==0x78)
1135                *pStatus =0;
1136        else if(data==0x79)
1137                *pStatus =1;
1138        else if(data==0x7A)
1139                *pStatus =2;
1140        else if(data==0x7C)
1141                *pStatus =4;
1142        else
1143                *pStatus=5;
1144#else
1145        *pStatus = (data & 0x7);
1146#endif
1147        if(FALSE == AfterTunerSendBytes())
1148        {
1149                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1150                retVal = -1;
1151                goto done;
1152        }
1153
1154       
1155done:
1156        /* Give Mutex. */
1157        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1158        if ( semErr != 0 )
1159                retVal = -1;
1160
1161        return retVal;
1162
1163}
1164
1165/****************************************************************************
1166       
1167        CAS2C_WriteTDA9885Reg
1168
1169                Summary :
1170                Returns : 0 on success, others on failure.
1171               
1172 ************************************************************************^^*/
1173int CAS2C_WriteTDA9885Reg( DS_U8 *pData, int Len )
1174{
1175#if(( NIMTN_TYPE==NIMTN_DTT7611)||(NIMTN_TYPE==NIMTN_DTT7612))
1176
1177        int retVal = 0;
1178        DS_U32 semErr;
1179
1180        /* Take Mutex. */
1181        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1182        if ( semErr != 0 )
1183                return -1;
1184#if NIMTN_TYPE==NIMTN_DTT7611
1185        if ( !TunerDTT7611BeforeSendBytes() ) {
1186                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1187                retVal = -1;
1188        }
1189#endif
1190        if( DHL_SYS_I2cWrite(I2C_NIM_TDA9885, TRUE, 0, pData, Len)) {
1191                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"!! Error Tda9885_WriteReg(): Check if IF section is enabled or not. \n");
1192                retVal = -1;
1193        }
1194
1195#if 0
1196        if ( IicTransmit( TDA9885_ADDR, data, Len ) != IIC_COM_SUCCESS )
1197                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1198#endif
1199#if NIMTN_TYPE==NIMTN_DTT7611
1200        if ( !TunerDTT7611AfterSendBytes() ) {
1201                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1202                retVal = -1;
1203        }
1204#endif
1205
1206//done:
1207        /* Give Mutex. */
1208        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1209        if ( semErr != 0 )
1210                retVal = -1;
1211
1212        return retVal;
1213#else
1214        return 1;
1215
1216#endif
1217
1218}
1219
1220#if 0
1221int gettda()
1222{
1223        DS_U8 data;
1224        CAS2C_GetTDA9885Reg( &data );
1225       
1226        return data;
1227}
1228
1229
1230int writetda(int b, int c, int d)
1231{
1232        DS_U8 tdaData[3];
1233       
1234        tdaData[0] = b & 0xFF;
1235        tdaData[1] = c & 0xFF;
1236        tdaData[2] = d & 0xFF;
1237       
1238        return CAS2C_WriteTDA9885Reg( tdaData, 3 );
1239}
1240#endif
1241
1242typedef struct tag_NTSCStatus
1243{
1244        DS_U32  NtscCarrierOffset;
1245        DS_BOOL isStereo;
1246        DS_BOOL isSAP;
1247        DS_U32  AudioStandard; 
1248} NTSC_STATUS, *P_NTSC_STATUS;
1249
1250typedef struct tag_NTSCExtStatus
1251{
1252        DS_BOOL isMaster;
1253        DS_U32  IISMode;
1254        DS_U32  IISOutRate;
1255        DS_U32  SCL_WS_Ratio;
1256} NTSC_EXT_STATUS, *P_NTSC_EXT_STATUS;
1257
1258int CAS2C_GetNTSCStatus( NTSC_STATUS *pNTSCStat )
1259{
1260        long ntscCarrierOffset;
1261        DS_BOOLEAN isStereo;
1262        DS_BOOLEAN isSAP;
1263        TYPE_AUDIO_STANDARD audioStandard;
1264        int iError;
1265        int err = 0;
1266       
1267        ntscCarrierOffset = GetNtscCarrierOffset( CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC, &iError );
1268        if ( iError != CAS_2B_API_SUCCESS ) {
1269                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1270                err = -1;
1271                goto done;
1272        }
1273       
1274        isStereo = IsStereoDetected( &iError );
1275        if ( iError != CAS_2B_API_SUCCESS ) {
1276                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1277                err = -1;
1278                goto done;
1279        }
1280       
1281        isSAP = IsBilingualSapDetected( &iError );
1282        if ( iError != CAS_2B_API_SUCCESS ) {
1283                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1284                err = -1;
1285                goto done;
1286        }
1287
1288        audioStandard = AUDIO_STANDARD_BTSC;
1289        audioStandard = GetAudioStandard( &iError );
1290#if 0
1291        if ( iError != CAS_2B_API_SUCCESS || iError != RECEIVED_UNDEFINED_AUDIO_STANDARD ) {
1292                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1293                err = -1;
1294                goto done;
1295        }
1296#endif
1297
1298        if ( pNTSCStat ) {
1299                pNTSCStat->NtscCarrierOffset = ntscCarrierOffset;
1300                pNTSCStat->isStereo = isStereo;
1301                pNTSCStat->isSAP = isSAP;
1302                pNTSCStat->AudioStandard = audioStandard;
1303        }       
1304       
1305        printf("\n\n\n *** NTSC Status ***\n");
1306       
1307        printf("   NTSC Carrier Offset: %d\n", (int)ntscCarrierOffset);
1308        printf("   Audio Mode: %s - %s\n", isStereo ? "Stereo" : "Mono", isSAP ? "SAP" : "NO-SAP" );
1309        printf("   Audio Standard: %s\n", 
1310                audioStandard == AUDIO_STANDARD_BTSC ? "BTSC" :
1311                audioStandard == AUDIO_STANDARD_KOREA ? "A2-KOREA" :
1312                audioStandard == AUDIO_STANDARD_RADIO_FM ? "RADIO-FM" : "Unknown" );
1313
1314done:
1315        return err;
1316}
1317
1318//
1319// Notes: Standard ÁöÁ¤Çϸé, ´ÙÀ½ Æ©´× ¶§¿¡ Àû¿ëµÊ.
1320//
1321int CAS2C_SetAudioStandard( DS_U32 AudioStandard)
1322{
1323        int err = 0;
1324
1325        switch( (FEAudioStandard_t)AudioStandard ) {
1326                case FE_AUDIO_BTSC:
1327                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC;
1328                        break; 
1329                case FE_DUALFM:
1330                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_A2_KOREA;
1331                        break;
1332                default:
1333                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_A2_KOREA;
1334        }
1335       
1336        return err;
1337}
1338
1339void set_ntsc_vol(int vol)
1340{
1341        int iError = CAS_2B_API_SUCCESS;
1342
1343        g_AudioParameters.usLeftOutputGain = vol;
1344        g_AudioParameters.usRightOutputGain = vol;
1345
1346        iError = SendAudioMessage( 2, g_AudioParameters );
1347        if ( iError != IIC_COM_SUCCESS ) {
1348                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1349        }
1350}       
1351
1352int CAS2C_SetAudioMode( DS_U32 AudioMode )
1353{
1354        int err = 0;
1355        int iError = CAS_2B_API_SUCCESS;
1356       
1357        switch( AudioMode ) {
1358                case 0: /* Mono */
1359                        g_AudioParameters.bAudioForcedMonoMode = TRUE;
1360                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_STEREO;
1361                        g_AudioParameters.usLeftOutputGain = 65;
1362                        g_AudioParameters.usRightOutputGain = 65;
1363                        break;
1364               
1365                case 1: /* Stereo */
1366                        g_AudioParameters.bAudioForcedMonoMode = FALSE;
1367                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_STEREO;
1368                        g_AudioParameters.usLeftOutputGain = 65;
1369                        g_AudioParameters.usRightOutputGain = 65;
1370                        break;
1371
1372                case 2:
1373                case 3: /* SAP */
1374                        g_AudioParameters.bAudioForcedMonoMode = FALSE;
1375                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_SAP;
1376                        g_AudioParameters.usLeftOutputGain = 50;
1377                        g_AudioParameters.usRightOutputGain = 50;
1378                        break;
1379               
1380                default:
1381                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Invalid Audio Mode %d\n", (int)AudioMode );
1382        }
1383       
1384        iError = SendAudioMessage( 1, g_AudioParameters );
1385        if ( iError != IIC_COM_SUCCESS ) {
1386                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1387                err = -1;
1388                goto done;
1389        }
1390       
1391        iError = SendAudioMessage( 2, g_AudioParameters );
1392        if ( iError != IIC_COM_SUCCESS ) {
1393                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1394                err = -1;
1395                goto done;
1396        }
1397       
1398done:
1399        return err;
1400}
1401
1402int CAS2C_GetAudioMode( DS_U32 *pAudioMode )
1403{
1404        int err = 0;
1405        DS_BOOLEAN isStereo, isSAP;
1406        int iError;
1407       
1408        isStereo = IsStereoDetected( &iError );
1409        if ( iError != CAS_2B_API_SUCCESS ) {
1410                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1411                err = -1;
1412                goto done;
1413        }
1414       
1415        isSAP = IsBilingualSapDetected( &iError );
1416        if ( iError != CAS_2B_API_SUCCESS ) {
1417                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1418                err = -1;
1419                goto done;
1420        }
1421       
1422        if ( isStereo ) {
1423                if ( isSAP )
1424                        *pAudioMode = (DS_U32)FE_AUDIO_SAP;                     /* Stereo and SAP */
1425                else
1426                        *pAudioMode = (DS_U32)FE_AUDIO_STEREO;          /* Stereo and no SAP */
1427        } else {
1428                if ( isSAP )
1429                        *pAudioMode = (DS_U32)FE_AUDIO_MONO_SAP;        /* Mono and SAP */
1430                else
1431                        *pAudioMode = (DS_U32)FE_AUDIO_MONO;            /* Mono and no SAP */
1432        }
1433
1434done:
1435        return err;
1436}
1437
1438int CAS2C_GetAudioStandard( DS_U32 *pAudioStandard )
1439{
1440        switch(g_Ntsc_Mode){
1441                case CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC:
1442                        *pAudioStandard = FE_AUDIO_BTSC;                       
1443                        break; 
1444                case CAS_2B_RECEIVER_MODE_AUDIO_A2_KOREA:
1445                        *pAudioStandard = FE_DUALFM;                   
1446                        break;
1447                default:
1448                        *pAudioStandard = FE_AUDIO_BTSC;
1449        }       
1450       
1451        //*pAudioStandard = (DS_U32)g_Ntsc_Mode;
1452       
1453        return 0;
1454}
1455
1456int CAS2C_GetNTSCExtStatus( NTSC_EXT_STATUS *pExt )
1457{
1458        int err = 0;
1459        TYPE_AUDIO_MASTER_SLAVE_MODE isMaster;
1460        TYPE_SCL_TO_WS_RATIO scl_ws_ratio;
1461        TYPE_IIS_OUT_RATE iisRate;
1462        TYPE_IIS_MODE iisMode;
1463        NUMERATOR_DENOMINATOR leftGain;
1464        NUMERATOR_DENOMINATOR rightGain;
1465       
1466        int iError = CAS_2B_API_SUCCESS;
1467       
1468       
1469        isMaster = GetMasterSlaveMode( &iError );
1470        if ( iError != CAS_2B_API_SUCCESS ) {
1471                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1472                err = -1;
1473                goto done;
1474        }
1475       
1476        scl_ws_ratio = GetSclToWsRatio( &iError );
1477        if ( iError != CAS_2B_API_SUCCESS ) {
1478                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1479                err = -1;
1480                goto done;
1481        }
1482       
1483        iisRate = GetIISOuputRate( &iError );
1484        if ( iError != CAS_2B_API_SUCCESS ) {
1485                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1486                err = -1;
1487                goto done;
1488        }
1489
1490        iisMode = GetIISMode( &iError );
1491        if ( iError != CAS_2B_API_SUCCESS ) {
1492                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1493                err = -1;
1494                goto done;
1495        }
1496       
1497        leftGain = GetSoundLeftOutputGain( &iError );
1498        if ( iError != CAS_2B_API_SUCCESS ) {
1499                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1500                err = -1;
1501                goto done;
1502        }
1503       
1504        rightGain = GetSoundRightOutputGain( &iError );
1505        if ( iError != CAS_2B_API_SUCCESS ) {
1506                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Line=%d\n", __LINE__);
1507                err = -1;
1508                goto done;
1509        }
1510       
1511        printf("\n\n\n *** NTSC Ext. Status ***\n");
1512       
1513        printf("   I2S Master/Slave: %s\n", 
1514                isMaster == TYPE_AUDIO_SLAVE_MODE ? "SLAVE" :
1515                isMaster == TYPE_AUDIO_MASTER_MODE ? "MASTER" : "Unknown" );
1516
1517        printf("   SCL/WS Ratio: %s\n",
1518                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_32 ? "32" :
1519                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_48 ? "48" :
1520                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_64 ? "64" : "Unknown" );
1521       
1522        printf("   IIS Rate: %s\n",
1523                iisRate == TYPE_IIS_OUT_RATE_48 ? "48KHz" :
1524                iisRate == TYPE_IIS_OUT_RATE_96 ? "96KHz" :
1525                iisRate == TYPE_IIS_OUT_RATE_44_1 ? "44.1KHz" :
1526                iisRate == TYPE_IIS_OUT_RATE_88_2 ? "88.2KHz" :
1527                iisRate == TYPE_IIS_OUT_RATE_32 ? "32KHz" : "Unknown" );
1528       
1529        printf("   I2S Mode: %s\n",
1530                iisMode == TYPE_IIS_MODE_IIS ? "I2S" :
1531                iisMode == TYPE_IIS_MODE_LJ ? "Left-justified" :
1532                iisMode == TYPE_IIS_MODE_RJ ? "Right-justified" : "Unknown" );
1533       
1534        printf("   Left  Audio Gain: %d\n", (int)leftGain.Numerator.lNumerator );
1535        printf("   Right Audio Gain: %d\n", (int)rightGain.Numerator.lNumerator );
1536
1537done:
1538        return err;
1539}
1540
1541//int __stdcall SendAudioMessage(unsigned char ucReceiveRegisterNumber, CAS_2B_AUDIO_MESSAGE_PARAMETERS stAudiomessageParameters)
1542//void __stdcall InitAudioMessageStructToDefault(CAS_2B_AUDIO_MESSAGE_PARAMETERS* pstAudiomessageParameters)
1543
1544
1545
1546/****************************************************************************
1547       
1548        CAS2C_InitTDA9885Reg
1549
1550                Summary :
1551                Returns : 0 on success, others on failure.
1552               
1553 ************************************************************************^^*/
1554int CAS2C_InitTDA9885(void)
1555{
1556#if(( NIMTN_TYPE==NIMTN_DTT7611)||(NIMTN_TYPE==NIMTN_DTT7612))
1557
1558        int retVal = 0;
1559        DS_U32 semErr;
1560        DS_U8 data[3] = { 0xD4, 0x30, 0x04 };
1561       
1562        /* Take Mutex. */
1563        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1564        if ( semErr != 0 )
1565                return -1;
1566
1567#if (NIMTN_TYPE==NIMTN_DTT7611)
1568        if ( !TunerDTT7611BeforeSendBytes() )
1569                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1570#endif
1571
1572        if( DHL_SYS_I2cWrite(I2C_NIM_TDA9885, TRUE, 0, &data[0], 3)) {
1573                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: Tda9885_WriteReg(): Check if IF section is enabled or not. %d\n",__LINE__);
1574                retVal = -1;
1575        }
1576       
1577#if NIMTN_TYPE==NIMTN_DTT7611
1578        if ( !TunerDTT7611AfterSendBytes() ) {
1579                DHL_DbgPrintf(0,DHLDBG_EXT,"ERROR: line = %d\n", __LINE__);
1580                retVal = -1;
1581        }
1582#endif
1583
1584//done:
1585        /* Give Mutex. */
1586        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1587        if ( semErr != 0 )
1588                retVal = -1;
1589
1590        return retVal;
1591#else
1592        return 1;
1593#endif
1594
1595}
1596
1597DS_U16 GetHwVer(void)
1598{
1599        DS_U8 data;
1600        int err;
1601       
1602        data = GetHardwareVersion( &err );
1603        if ( data == 0 ) {
1604                if ( err == SEND_HOST_CONTROL_FUNCTION_FAILED ) {
1605                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: host control function failed.\n");
1606                        return 0;
1607                }
1608        }
1609       
1610        return data;
1611}
1612
1613DS_U32 GetCodeVer(void)
1614{
1615        CAS_2B_CODE_VERSION ver;
1616
1617        DS_U32 version;
1618        int err;
1619
1620        ver.usaVector[0]=0;
1621        ver.usaVector[1]=0;
1622        ver.usaVector[2]=0;
1623        ver.usaVector[3]=0;
1624        ver.usaVector[4]=0;
1625        ver.usaVector[5]=0;
1626       
1627        ver = GetDSPFirmwareVersion( &err );
1628        if ( err != IIC_COM_SUCCESS ) {
1629                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: i2c communication.\n");
1630                return (DS_U32)-1;
1631        }
1632       
1633        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"Version = 0x%x / 0x%x / 0x%x / 0x%x / 0x%x / 0x%x\n", 
1634                (unsigned int)ver.usaVector[0], (unsigned int)ver.usaVector[1], (unsigned int)ver.usaVector[2], (unsigned int)ver.usaVector[3], (unsigned int)ver.usaVector[4], (unsigned int)ver.usaVector[5] );
1635
1636        version  = ver.usaVector[0] << 16;
1637        version |= ver.usaVector[1];
1638//      version |= ver.usaVector[2] << 8;
1639//      version |= ver.usaVector[3];
1640       
1641        return version;
1642}
1643
1644unsigned char CAS2C_GetMode()
1645{
1646        int err;
1647        int semErr;
1648        unsigned char retVal;
1649        unsigned short reg;
1650       
1651        /* Take Mutex. */
1652        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1653        if ( semErr != 0 )
1654                return -1;
1655
1656        retVal = GetMode(&err);
1657        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"Mode = 0x%x\n", (unsigned int)retVal );
1658
1659        reg = GetStatusReg(&err);
1660        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"Reg = 0x%x\n", (unsigned int)reg );
1661
1662        reg = GetChecksum(&err);
1663        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"Checksum = 0x%x\n", (unsigned int)reg );
1664
1665        /* Give Mutex. */
1666        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1667        if ( semErr != 0 )
1668                retVal = -1;
1669
1670        return retVal;
1671}
1672
1673DS_U8 CAS2C_GetTunerStatus(void)
1674{
1675        return 0x40;
1676}
1677
1678void get_ifagc()
1679{
1680        NUMERATOR_DENOMINATOR stResult;
1681        int piError;
1682       
1683        piError = 0;
1684        stResult = GetAgcIfCommand( &piError );
1685        if ( piError != 0 ) {
1686                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: piError = %d\n", (unsigned int)piError );
1687                return;
1688        }
1689       
1690        printf("IF AGC = %d, %f\n", (int)stResult.Numerator.lNumerator, (float)stResult.Denominator.lDenominator );
1691}
1692
1693void get_ifagc2()
1694{
1695       
1696        NUMERATOR_DENOMINATOR stResult;
1697        int piError;
1698       
1699        piError = 0;
1700        stResult = GetAGCSensor( &piError );
1701        if ( piError != 0 ) {
1702                DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"ERROR: piError = %d\n", (unsigned int)piError );
1703                return;
1704        }
1705       
1706        printf("IF AGC Sensor = %d\n", (int)stResult.Numerator.lNumerator );
1707}
1708
1709void dump_ntsc_status(void)
1710{
1711        static NTSC_STATUS nt;
1712        static NTSC_EXT_STATUS ent;
1713
1714        CAS2C_GetNTSCStatus ( &nt );
1715        CAS2C_GetNTSCExtStatus ( &ent );
1716}
1717
1718#if 0
1719typedef union{
1720        struct{
1721                unsigned        AFCWIN  :1;
1722                unsigned        VIFL    :1;
1723                unsigned        FMIFL   :1;
1724                signed          AFC             :4;     // AFC4, AFC3, AFC2, AFC1
1725                unsigned        PONR    :1;
1726               
1727        }                               Part;                   // ±¸Á¶Ã¼ ¸É¹ö Á¢±Ù
1728        DS_U8                   Byte;                   // ¹ÙÀÌÆ® Á¢±Ù
1729}UTda9885ReadReg;
1730
1731static int bStart = 1;
1732void tAutoFreqTune(void)
1733{
1734        UTda9885ReadReg tdadata;
1735        int afc_status;
1736        DS_U32 frequency;
1737        DS_U8 isNtsc;
1738       
1739        int bLoop = 1;
1740       
1741        while ( bLoop )
1742        {
1743                /* Delay 500 msec */
1744                OS_Delay(30);
1745
1746                if ( bStart == 0 )
1747                        continue;
1748                       
1749                isNtsc = pCAS2C->isNtsc;
1750                frequency = pCAS2C->FATFreq;
1751               
1752                if ( CAS2C_GetTDA9885Reg( &tdadata.Byte ) == 0 ) {
1753                        afc_status = tdadata.Part.AFC;
1754                        switch (afc_status)
1755                        {
1756                                // TUV1236D - AFC Status ÂüÁ¶
1757                                //
1758                                case  7 :   frequency += 188; break;
1759                                case  6 :       frequency += 162; break;
1760                                case  5 :       frequency += 137; break;
1761                                case  4 :       frequency += 112; break;
1762                                case  3 :       frequency +=  87; break;
1763                                case  2 :       frequency +=  62; break;
1764                               
1765                                case  1 :
1766                                case  0 :
1767                                case -1 :
1768                                case -2 :       
1769                                                break;                         
1770                               
1771                                case -3 :       frequency -=  62; break;
1772                                case -4 :       frequency -=  87; break;
1773                                case -5 :       frequency -= 112; break;
1774                                case -6 :       frequency -= 137; break;
1775                                case -7 :       frequency -= 162; break;
1776                                case -8 :   frequency -= 188; break;
1777                               
1778                        }               
1779                }
1780               
1781                if ( pCAS2C->FATFreq != frequency ) {
1782                        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"new frequency = %d (old=%d)\n", frequency, pCAS2C->FATFreq );
1783                        CAS2C_SetFrequencyNTSC( frequency );
1784                }
1785        }
1786}
1787
1788
1789void go_aft(void)
1790{
1791        OS_TASK_ID taskId;
1792       
1793        taskId = OS_SpawnTask( tAutoFreqTune, "tAFT", 120, 4096, 0 );
1794        bStart = 1;
1795               
1796        DHL_DbgPrintf(gdhlExtDbgLvl,DHLDBG_EXT,"Creation of tAFT, id=0x%x\n", taskId );
1797}
1798
1799void stop_aft(void)
1800{
1801        bStart = 0;
1802}
1803#endif
Note: See TracBrowser for help on using the repository browser.