source: svn/trunk/zas_dstar/devices/Tuner/Oren_Cascade2B/org_Cascade2C.c

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

first commit

File size: 32.2 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 "TLCommon.h"
15#include "DST_CONFIG.h"
16#include "tuner.h"
17#include "../dsthal/include/dsthalcommon.h"
18
19#include "Cas2BGeneralDefinitions.h"
20#include "Cascade2C.h"
21
22/*==================================================================
23        Configuration Section
24       
25        - USE_CODE_SWITCH : 2B / 2C Switch Code »ç¿ë ¿©ºÎ
26        - USE_2B          : 2B / 2C »ç¿ë ¿©ºÎ
27 ==================================================================*/
28
29#define USE_CODE_SWITCH 0
30
31#define DELAY_CHANNEL_TUNE      500
32
33#define TDA9885_ADDR    0x84
34
35//#define I2C_NIM_TDA9885               ((I2C_BUS1<<12) | I2C_100_KHZ_SETTING | I2C_08_SUB_TYPE | 0x86)
36#define I2C_NIM_TDA9885 I2C_DEVICE_INFO(DTT7611_SLAVE_ADDRESS,I2C_BUS0,I2C_NO_SUB_TYPE,I2C_400_KHZ_SETTING)
37       
38static CAS_2B_TYPE_RECEIVER_MODE g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC;
39
40
41extern unsigned char codeDSP[];
42extern unsigned int  codeDSPSize;
43extern unsigned char dataDSP[];
44extern unsigned int  dataDSPSize;
45
46
47#include "SnrCalcTable.h"
48#include "Cas2BRoutines.h"
49#include "TunerDTT7611.h"
50#include "iicComm.h"
51
52typedef struct tag_CAS2C_info {
53        OS_SEMAPHORE_ID Mutex; 
54        UINT32          OrenI2cAddr;
55/*      UINT16          Tda9885Addr;    */
56/*      UINT16          TunerAddr;      TunerAddrÀº »ç¿ëµÇÁö ¾ÊÀ½. -- OREN DemodulatorÀÇ I2C¿¡ ¹°·ÁÀÖÀ½. */
57        /* Current FAT channel information. */
58        UINT32                  FATFreq;
59        Modulation_t    CurFATDemod;
60        UINT8                   *pMicroCode;
61        UINT16                  microCodeLen;
62        UINT32                  bInitialized;
63        UINT8                   isNtsc;
64} *P_CAS2C_INFO, CAS2C_INFO;
65
66CAS2C_INFO g_CAS2C_info;
67P_CAS2C_INFO pCAS2C = &g_CAS2C_info;
68CAS_2B_AUDIO_MESSAGE_PARAMETERS g_AudioParameters;
69
70UINT16 GetHwVer(void);
71UINT32 GetCodeVer(void);
72
73ErrCode CAS2C_GetVersion( UINT32 *pVersion )
74{
75    UINT32 version;
76   
77    version = 0x00000001;
78   
79        *pVersion = version;
80       
81        return noError;
82}
83
84ErrCode CAS2C_Initialize(void)
85{
86        ErrCode retVal = noError;
87        INT32 piError;
88        INT32 result;
89        INT32 retry_cnt=3;
90        CHECKSUM_STATUS checksumResult;
91        CAS_2B_CODE_VERSION stCodeVersion;
92        static char sem_initialized = 0;
93       
94        stCodeVersion.usaVector[0]=0;
95        stCodeVersion.usaVector[1]=0;
96        stCodeVersion.usaVector[2]=0;
97        stCodeVersion.usaVector[3]=0;
98        stCodeVersion.usaVector[4]=0;
99        stCodeVersion.usaVector[5]=0;
100
101        if ( sem_initialized == 0 ) {
102                pCAS2C->Mutex = OS_CreateBinarySemaphore( "CAS2C_Sema4", OS_SEM_FIFO, 1 );
103                if ( pCAS2C->Mutex == (OS_SEMAPHORE_ID)0 ) {
104                        OS_DbgPrintf( "%s : OS_CreateMutexSemaphore\n", __FUNCTION__ );
105                        retVal = outOfOSResourcesError;
106                        goto done;
107                }
108                pCAS2C->OrenI2cAddr = TLSys_DemodulatorI2CAddress(I2CWRITE);
109                sem_initialized = 1;
110        }
111       
112        /* Reset the Checksum register */
113        ResetChecksum();
114
115        /* Load the DSP code and data files */
116        result = SendCodeAndData(codeDSP,codeDSPSize,dataDSP,dataDSPSize);
117        if ( result != CAS_2B_API_SUCCESS ) {
118                //BKNOTE: ½ÇÆÐÇßÀ» °æ¿ì (resetÇϰí) õõÈ÷ ¸î ¹ø ´õ ½ÃµµÇØ º»´Ù.
119                while((result!=CAS_2B_API_SUCCESS)&&retry_cnt--)
120                {
121                        //BKTODO: À̰÷¿¡ Oren demodÀÇ GPIO HW reset³ÖÀ» °Í
122                        //
123                        OS_Delay(10);
124                        ResetChecksum();
125                        OS_Delay(10);
126                        result = SendCodeAndData(codeDSP,codeDSPSize,dataDSP,dataDSPSize);
127                }
128                if(result!=CAS_2B_API_SUCCESS)
129                {
130                        OS_DbgPrintf("|%s| Can not Load DSP Data. (%dline result = 0x%x)\n", __FUNCTION__, __LINE__, result );
131                        retVal = deviceError;
132                        goto done;
133                }
134        }
135    /* Check the Checksum result for the code and data load */
136        piError = 0;
137        checksumResult = GetChecksumFlag(&piError);
138        if (checksumResult != CHECKSUM_STATUS_CORRECT)
139        {
140                OS_DbgPrintf ("Checksum is not correct \n");
141                return(badChecksumError);
142        }
143
144        /* Start the DSP RUN_FLAG */
145    result = SendCas2BRunFlag();
146        if (result != 0)
147        {
148                OS_DbgPrintf ("Can not Start the Cascade2B DSP. result=%d... Check for proper code and data load\n",result);
149                return(deviceError);
150        }
151
152    Demux_STCDelay(1350);/* 15ms deley */
153       
154        InitAudioMessageStructToDefault( &g_AudioParameters );
155        g_AudioParameters.iIisMode = TYPE_IIS_MODE_IIS;
156
157        /* Check the DSP Firmware Version ID Code */
158        stCodeVersion = GetDSPFirmwareVersion(&piError);
159        OS_DbgPrintf("DSP Firmware Version ID = %.4x,%.4x,%.4x,%.4x,%.4x,%.4x\n",
160                        (int)stCodeVersion.usaVector[0],(int)stCodeVersion.usaVector[1],(int)stCodeVersion.usaVector[2],(int)stCodeVersion.usaVector[3],(int)stCodeVersion.usaVector[4],(int)stCodeVersion.usaVector[5]);
161done:
162        return retVal;
163
164}
165
166/****************************************************************************
167       
168        CAS2C_Start()
169
170                Summary : Start Oren demodulator.
171                Returns : noError on success, others on failure.
172               
173 ************************************************************************^^*/
174ErrCode CAS2C_Start( Modulation_t Demod, int Ntsc, int Cable )
175{
176        ErrCode retVal = noError;
177        STATUS semErr;
178//      int casResult;
179        unsigned int uResult;
180        int needChannelChange;
181       
182        CAS_2B_TUNER_PARAMETERS TunerParam;
183        CAS_2B_CHANNEL_CHANGE_PARAMETERS ChannelParam;
184        CAS_2B_TYPE_RECEIVER_MODE rMode;
185       
186        /* Take Mutex. */
187        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
188        if ( semErr != OK )
189                return generalError;
190       
191        needChannelChange = (Ntsc != pCAS2C->isNtsc) || (Ntsc);
192       
193#if (NIMTN_TYPE==NIMTN_FQD1236)
194        TunerParam.iTunerType   = (TUNER_TYPE)TUNER_FQD1236;
195#elif (NIMTN_TYPE==NIMTN_DTT7611)
196        TunerParam.iTunerType   = (TUNER_TYPE)TUNER_DTT7611;
197#else
198        #error Need to define NIMTN_TYPE
199#endif
200        TunerParam.iTunerSet    = TUNER_SET_CENTER_FREQUENCY_KHZ;
201        TunerParam.ulSetValue   = pCAS2C->FATFreq;
202        if ( Cable )
203                TunerParam.iChannelTableType = NA_CATV;
204        else
205                TunerParam.iChannelTableType = NA_TERRESTRIAL;
206        if ( Ntsc == 0 )
207                TunerParam.iAgcMode = TUNER_AGC_MODE_INTERNAL_DIGITAL;
208        else
209                TunerParam.iAgcMode = TUNER_AGC_MODE_INTERNAL_ANALOG;
210
211        if(Cable)
212                TunerParam.iInputSelection = TUNER_INPUT_SELECTION_CABLE;       
213        else
214                TunerParam.iInputSelection = TUNER_INPUT_SELECTION_TERRESTRIAL;
215
216        switch ( Demod ) {
217                case DEMOD_8VSB:        rMode = CAS_2B_RECEIVER_MODE_VSB_8_TR; break;
218                case DEMOD_64QAM:       rMode = CAS_2B_RECEIVER_MODE_ITUB_64; break;
219                case DEMOD_256QAM:      rMode = CAS_2B_RECEIVER_MODE_ITUB_256; break;
220                case DEMOD_QAM:                         rMode = CAS_2B_RECEIVER_MODE_ITUB_AUTO_DETECT; break;
221//              case DEMOD_NTSC:        rMode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC; break;      /* NTSC Mode°¡ µû·Î ¾øÀ½. */
222                case DEMOD_NTSC:        rMode = g_Ntsc_Mode; break;     /* NTSC Mode°¡ µû·Î ¾øÀ½. */
223                default:
224                        OS_DbgPrintf("|%s| error, line = %d, Demod = %d\n", __FUNCTION__, __LINE__, Demod );
225                        retVal = generalError;
226                        goto done;
227        }
228        pCAS2C->CurFATDemod = Demod;
229       
230        ChannelParam.iCarrierAcquisition        = CARRIER_ACQUISITION_NORMAL;
231        ChannelParam.iInverseSpectrum           = INVERSE_SPECTRUM_OFF;
232        ChannelParam.iReceiverMode                      = rMode;
233        if ( Ntsc == 0 )
234                ChannelParam.iNtscSignalDetection       = NORMAL_VSB;
235        else 
236                ChannelParam.iNtscSignalDetection       = NTSC_SIGNAL_DETECTION;
237
238        uResult = SetChannel( TunerParam, DELAY_CHANNEL_TUNE, &ChannelParam );
239
240        if ( Demod == DEMOD_NTSC ) {
241                uResult = SendAudioMessage( 1, g_AudioParameters );
242                if ( uResult != CAS_2B_API_SUCCESS ) {
243                        OS_DbgPrintf("|%s| line = %d, result = 0x%x\n", __FUNCTION__, __LINE__, uResult );
244                        retVal = generalError;
245                        goto done;
246                }
247               
248                uResult = SendAudioMessage( 2, g_AudioParameters );
249                if ( uResult != CAS_2B_API_SUCCESS ) {
250                        OS_DbgPrintf("|%s| line = %d, result = 0x%x\n", __FUNCTION__, __LINE__, uResult );
251                        retVal = generalError;
252                        goto done;
253                }
254               
255                uResult = SendAudioMessage( 3, g_AudioParameters );
256                if ( uResult != CAS_2B_API_SUCCESS ) {
257                        OS_DbgPrintf("|%s| line = %d, result = 0x%x\n", __FUNCTION__, __LINE__, uResult );
258                        retVal = generalError;
259                        goto done;
260                }
261        }
262       
263        pCAS2C->isNtsc = Ntsc;
264done:
265        /* Give Mutex. */
266        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
267        if ( semErr != OK )
268                retVal = generalError;
269
270        return retVal;
271}
272
273/****************************************************************************
274       
275        CAS2C_Stop()
276
277                Summary : Stop the Oren demodulator.
278                Returns : noError on success, others on failure.
279               
280 ************************************************************************^^*/
281ErrCode CAS2C_Stop(void)
282{
283        ErrCode retVal = noError;
284        STATUS semErr;
285
286        /* Take Mutex. */
287        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
288        if ( semErr != OK )
289                return generalError;
290       
291        /* DO NOTHING. */       
292       
293        /* Give Mutex. */
294        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
295        if ( semErr != OK )
296                retVal = generalError;
297
298        return retVal;
299}
300
301
302/****************************************************************************
303       
304        CAS2C_Close()
305
306                Summary : Close the Oren demodulator.
307                Returns : noError on success, others on failure.
308               
309 ************************************************************************^^*/
310ErrCode CAS2C_Close(void)
311{
312        ErrCode retVal = noError;
313        STATUS semErr;
314
315        /* Take Mutex. */
316        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
317        if ( semErr != OK )
318                return generalError;
319       
320
321        /* DO NOTHING */
322        goto done;
323       
324done:
325        /* Give Mutex. */
326        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
327        if ( semErr != OK )
328                retVal = generalError;
329
330        return retVal;
331}
332
333/****************************************************************************
334       
335        CAS2C_Reset()
336
337                Summary : Reset the Oren demodulator.
338                Returns : noError on success, others on failure.
339               
340 ************************************************************************^^*/
341ErrCode CAS2C_Reset(void)
342{
343        ErrCode retVal = noError;
344        STATUS semErr;
345        unsigned int stat;
346        UINT8 buff[2] = {0x66, 0xc0};
347
348        /* Take Mutex. */
349        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
350        if ( semErr != OK )
351                return generalError;
352       
353        stat = IicTransmit(0x2a, &buff[0], 2);
354        if(stat != 0){
355                OS_DbgPrintf("|%s| Reset Failed Error!, %d\n",__FUNCTION__,__LINE__);
356                return generalError;
357        }
358
359        /* Give Mutex. */
360        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
361        if ( semErr != OK )
362                retVal = generalError;
363
364        return retVal;
365}
366
367/****************************************************************************
368       
369        CAS2C_SetFrequency()
370
371                Summary : Set Frequency
372                Returns : noError on success, others on failure.
373               
374 ************************************************************************^^*/
375ErrCode CAS2C_SetFrequency( UINT32 dMHz )
376{
377        ErrCode retVal = noError;
378        STATUS semErr;
379        UINT32 freq;
380//      int casResult;
381       
382        /* Take Mutex. */
383        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
384        if ( semErr != OK )
385                return generalError;
386       
387        freq = (UINT32)dMHz;
388        pCAS2C->FATFreq = freq;
389        OS_DbgPrintf("|%s| dMHz = %d\n", __FUNCTION__, freq );
390
391#if 0
392    /* hwatk/050427, ½ÇÁ¦·Î TuningÇϵµ·Ï... */
393        casResult = TunerDTT7611SendFreq( dMHz, TUNERDTT7611_REF_DIVIDER_RATIO_62_5, TUNERDTT7611_AGC_WIDE_BAND_OFF, TUNER_AGC_MODE_INTERNAL_ANALOG, TUNERDTT7611_CHARGE_PUMP_60, TUNERDTT7611_AGC_TIME_CONSTANT_2_SEC );
394        if ( casResult != DTT7611_SUCCESS ) {
395                OS_DbgPrintf("|%s| error, line=%d, casResult = %d\n", __FUNCTION__, __LINE__, casResult );
396        }
397#endif
398
399        goto done;
400       
401done:
402        /* Give Mutex. */
403        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
404        if ( semErr != OK )
405                retVal = generalError;
406
407        return retVal;
408}
409
410ErrCode CAS2C_SetFrequencyNTSC( UINT32 dMHz )
411{
412        ErrCode retVal = noError;
413        STATUS semErr;
414        UINT32 freq;
415        int casResult;
416       
417        /* Take Mutex. */
418        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
419        if ( semErr != OK )
420                return generalError;
421       
422        freq = (UINT32)dMHz;
423        pCAS2C->FATFreq = freq;
424        OS_DbgPrintf("|%s| dMHz = %d\n", __FUNCTION__, freq );
425#if NIMTN_TYPE==NIMTN_DTT7611
426    /* hwatk/050427, ½ÇÁ¦·Î TuningÇϵµ·Ï... */
427        casResult = TunerDTT7611SendFreq( dMHz, TUNERDTT7611_REF_DIVIDER_RATIO_62_5, TUNERDTT7611_AGC_WIDE_BAND_OFF, /*TUNER_AGC_MODE_INTERNAL_ANALOG*/2, TUNERDTT7611_CHARGE_PUMP_60, TUNERDTT7611_AGC_TIME_CONSTANT_2_SEC );
428        if ( casResult != DTT7611_SUCCESS ) {
429                OS_DbgPrintf("|%s| error, line=%d, casResult = %d\n", __FUNCTION__, __LINE__, casResult );
430        }
431#else
432        casResult=0;
433#endif
434
435        /* Give Mutex. */
436        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
437        if ( semErr != OK )
438                retVal = generalError;
439
440        return retVal;
441}
442
443
444/****************************************************************************
445       
446        CAS2C_GetLockStatus()
447
448                Summary : Set Frequency
449                Returns : noError on success, others on failure.
450               
451 ************************************************************************^^*/
452ErrCode CAS2C_GetLockStatus( int *pLockStatus )
453{
454        ErrCode retVal = noError;
455        STATUS semErr;
456        int err;
457        LOCK_STATUS lockStatus;
458        BOOLEAN ntscLockStatus;
459//      long offset;
460        UINT8 tdaData;
461//      int SQI;
462       
463        /* Take Mutex. */
464        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
465        if ( semErr != OK )
466                return generalError;
467
468        *pLockStatus = 0;
469
470        lockStatus = IsLocked( &err );
471        if ( err != CAS_2B_API_SUCCESS ) {
472                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
473                retVal = generalError;
474                goto done;
475        }
476       
477        if ( lockStatus == LOCKED )
478                *pLockStatus = 1;
479        else
480                *pLockStatus = 0;
481               
482        if ( pCAS2C->isNtsc == 1 ) {
483                ntscLockStatus = IsNtscChannelDetected( &err );
484                if ( err != CAS_2B_API_SUCCESS ) {
485                        OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
486                        retVal = generalError;
487                        goto done;
488                }
489
490#if 0
491                SQI = sDTF8640_GetSignalStrength( &err );
492                if ( err == CAS_2B_API_SUCCESS )
493                        OS_DbgPrintf("|%s| NTSC Lock Status = %d, SQI = %d\n", __FUNCTION__, ntscLockStatus, SQI );
494                else
495                        OS_DbgPrintf("|%s| NTSC Lock Status = %d\n", __FUNCTION__, ntscLockStatus);
496#endif
497#if NIMTN_TYPE==NIMTN_DTT7611   
498                if ( !TunerDTT7611BeforeSendBytes() ) {
499                        OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
500                        retVal = generalError;
501                        goto done;
502                }
503#endif
504                if ( i2cRead( I2C_NIM_TDA9885,FALSE, 0, &tdaData, 1 ) )  {
505                        OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
506                        retVal = generalError;
507                }               
508#if NIMTN_TYPE==NIMTN_DTT7611
509                if ( !TunerDTT7611AfterSendBytes() ) {
510                        OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
511                        retVal = generalError;
512                        goto done;
513                }
514#endif
515                tdaData = ( tdaData >> 1 ) & 0x0F;
516                if ( tdaData == 0x07 || tdaData == 0x08 ) {
517                        *pLockStatus = 0;
518                } else {
519                        if ( ntscLockStatus == 1 )
520                                *pLockStatus = 1;
521                        else
522                                *pLockStatus = 0;
523                        *pLockStatus = 1;              /* hwatk/050427, TDA9885 Data¸¸À¸·Î ÆÇ´Ü */
524                }       
525        }
526
527done:
528        /* Give Mutex. */
529        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
530        if ( semErr != OK )
531                retVal = generalError;
532
533        return retVal;
534}
535
536
537/****************************************************************************
538       
539        CAS2C_GetSignalStrength()
540
541                Summary : Get signal strength from demodulator.
542                Returns : noError on success, others on failure.
543               
544 ************************************************************************^^*/
545ErrCode CAS2C_GetSignalStrength( int *pSQI )
546{
547        ErrCode retVal = noError;
548        STATUS semErr;
549        UINT8 sqi;
550        int err;
551
552        /* Take Mutex. */
553        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
554        if ( semErr != OK )
555                return generalError;
556       
557        sqi = GetSignalStrength( &err, TYPE_AGC_AMPLIFIER_UPC3217 );
558        if ( err != CAS_2B_API_SUCCESS ) {
559                OS_DbgPrintf("|%s| error, line = %d, err = %d\n", __FUNCTION__, __LINE__, err );
560                retVal = generalError;
561                goto done;
562        }
563       
564        *pSQI = sqi;
565
566done:
567        /* Give Mutex. */
568        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
569        if ( semErr != OK )
570                retVal = generalError;
571
572        return retVal;
573}
574
575
576/****************************************************************************
577       
578        CAS2C_GetSNR
579
580                Summary : Get signal strength from demodulator.
581                Returns : noError on success, others on failure.
582               
583 ************************************************************************^^*/
584ErrCode CAS2C_GetSNR( float *pSNR )
585{
586        ErrCode retVal = noError;
587        STATUS semErr;
588        UINT16 snr;
589        int err;
590        float SNR;
591
592        /* Take Mutex. */
593        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
594        if ( semErr != OK )
595                return generalError;
596       
597        if ( pCAS2C->isNtsc ) {
598                *pSNR = (float)6;
599        } else {
600                err = IIC_COM_SUCCESS;
601                snr = GetSnrAfterEqualization( CAS_2B_RECEIVER_MODE_VSB_8_TR, &err );
602                if ( err != IIC_COM_SUCCESS ) {
603                        OS_DbgPrintf("|%s| error, line = %d, err = %d\n", __FUNCTION__, __LINE__, err );
604                        retVal = generalError;
605                        goto done;
606                }
607               
608                SNR = snr;
609                *pSNR = SNR;
610        }
611       
612//      OS_DbgPrintf("|%s| snr = %d, %f\n", __FUNCTION__, (int)snr, SNR );
613
614done:
615        /* Give Mutex. */
616        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
617        if ( semErr != OK )
618                retVal = generalError;
619
620        return retVal;
621}
622
623
624/****************************************************************************
625       
626        CAS2C_GetModFormat
627
628                Summary : Get signal strength from demodulator.
629                Returns : noError on success, others on failure.
630               
631 ************************************************************************^^*/
632ErrCode CAS2C_GetModFormat( Modulation_t *mode )
633{
634        ErrCode retVal = noError;
635        STATUS semErr;
636
637        /* Take Mutex. */
638        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
639        if ( semErr != OK )
640                return generalError;
641
642#if 0
643        if ( pCAS2C->isNtsc == 1 )
644                *mode = DEMOD_NTSC;
645        else
646                *mode = DEMOD_8VSB;
647#else
648        *mode = pCAS2C->CurFATDemod;
649#endif
650
651//done:
652        /* Give Mutex. */
653        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
654        if ( semErr != OK )
655                retVal = generalError;
656
657        return retVal;
658}
659
660
661/****************************************************************************
662       
663        CAS2C_GetErrCount
664
665                Summary : Get signal strength from demodulator.
666                Returns : noError on success, others on failure.
667               
668 ************************************************************************^^*/
669ErrCode CAS2C_GetErrCount( UINT32 *pRSErrCnt )
670{
671        ErrCode retVal = noError;
672        STATUS semErr;
673        int err;
674        UINT8 ser;
675       
676        /* Take Mutex. */
677        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
678        if ( semErr != OK )
679                return generalError;
680       
681        ser = Get1SecSer( &err );
682        if ( err != IIC_COM_SUCCESS ) {
683                OS_DbgPrintf("|%s| error, line = %d, err = %d\n", __FUNCTION__, __LINE__, err );
684                retVal = generalError;
685                goto done;
686        }
687               
688        *pRSErrCnt = ser;
689       
690done:
691        /* Give Mutex. */
692        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
693        if ( semErr != OK )
694                retVal = generalError;
695
696        return retVal;
697}
698
699
700/****************************************************************************
701       
702        CAS2C_GetTDA9885Reg
703
704                Summary :
705                Returns : noError on success, others on failure.
706               
707 ************************************************************************^^*/
708
709ErrCode CAS2C_GetTDA9885Reg( UINT8 *pStatus )
710{
711        ErrCode retVal = noError;
712        STATUS semErr;
713        //UINT8 data;
714        /* Take Mutex. */
715        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
716        if ( semErr != OK )
717                return generalError;
718#if 0//BK- org
719                #if NIMTN_TYPE==NIMTN_DTT7611
720                        if ( !TunerDTT7611BeforeSendBytes() ) {
721                                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
722                                retVal = generalError;
723                                goto done;
724                        }
725                #endif
726                        if ( i2cRead( I2C_NIM_TDA9885,FALSE, 0, &data, 1 ) )  {
727                                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
728                                retVal = generalError;
729                                goto done;
730                        }               
731               
732                        *pStatus = data;
733                #if NIMTN_TYPE==NIMTN_DTT7611
734                        if ( !TunerDTT7611AfterSendBytes() ) {
735                                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
736                                retVal = generalError;
737                                goto done;
738                        }
739                #endif
740#else
741        #if NIMTN_TYPE==NIMTN_DTT7611
742                if(DTT7611GetTunerStatusReg(pStatus))
743                        OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
744        #endif
745#endif
746        //OS_DbgPrintf("|%s| TDA9885 Reg Data = 0x%x\n", __FUNCTION__, (UINT32)data );
747       
748//done:
749        /* Give Mutex. */
750        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
751        if ( semErr != OK )
752                retVal = generalError;
753
754        return retVal;
755}
756
757/****************************************************************************
758       
759        CAS2C_WriteTDA9885Reg
760
761                Summary :
762                Returns : noError on success, others on failure.
763               
764 ************************************************************************^^*/
765ErrCode CAS2C_WriteTDA9885Reg( UINT8 *pData, int Len )
766{
767        ErrCode retVal = noError;
768        STATUS semErr;
769        int i;
770
771        /* Take Mutex. */
772        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
773        if ( semErr != OK )
774                return generalError;
775#if NIMTN_TYPE==NIMTN_DTT7611
776        if ( !TunerDTT7611BeforeSendBytes() ) {
777                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
778                retVal = generalError;
779        }
780#endif
781        if( i2cWrite(I2C_NIM_TDA9885, TRUE, 0, pData, Len)) {
782                OS_DbgPrintf("!! Error Tda9885_WriteReg(): Check if IF section is enabled or not. \n");
783                retVal = generalError;
784        }
785
786#if 0
787        if ( IicTransmit( TDA9885_ADDR, data, Len ) != IIC_COM_SUCCESS )
788                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
789#endif
790#if NIMTN_TYPE==NIMTN_DTT7611
791        if ( !TunerDTT7611AfterSendBytes() ) {
792                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
793                retVal = generalError;
794        }
795#endif
796        OS_DbgPrintf("|%s| ", __FUNCTION__);
797        for (i=0; i<Len; i++) {
798                OS_DbgPrintf("data[%d] = 0x%02X ", i, (UINT32)pData[i] );
799        }
800        OS_DbgPrintf("\n");
801       
802//done:
803        /* Give Mutex. */
804        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
805        if ( semErr != OK )
806                retVal = generalError;
807
808        return retVal;
809}
810
811int gettda()
812{
813        UINT8 data;
814        CAS2C_GetTDA9885Reg( &data );
815       
816        return data;
817}
818
819
820int writetda(int b, int c, int d)
821{
822        UINT8 tdaData[3];
823       
824        tdaData[0] = b & 0xFF;
825        tdaData[1] = c & 0xFF;
826        tdaData[2] = d & 0xFF;
827       
828        return CAS2C_WriteTDA9885Reg( tdaData, 3 );
829}
830
831typedef struct tag_NTSCStatus
832{
833        UINT32  NtscCarrierOffset;
834        BOOL    isStereo;
835        BOOL    isSAP;
836        UINT32  AudioStandard; 
837} NTSC_STATUS, *P_NTSC_STATUS;
838
839typedef struct tag_NTSCExtStatus
840{
841        BOOL    isMaster;
842        UINT32  IISMode;
843        UINT32  IISOutRate;
844        UINT32  SCL_WS_Ratio;
845} NTSC_EXT_STATUS, *P_NTSC_EXT_STATUS;
846
847ErrCode CAS2C_GetNTSCStatus( NTSC_STATUS *pNTSCStat )
848{
849        long ntscCarrierOffset;
850        BOOLEAN isStereo;
851        BOOLEAN isSAP;
852        TYPE_AUDIO_STANDARD audioStandard;
853        int iError;
854        ErrCode err = noError;
855       
856        ntscCarrierOffset = GetNtscCarrierOffset( CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC, &iError );
857        if ( iError != CAS_2B_API_SUCCESS ) {
858                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
859                err = deviceError;
860                goto done;
861        }
862       
863        isStereo = IsStereoDetected( &iError );
864        if ( iError != CAS_2B_API_SUCCESS ) {
865                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
866                err = deviceError;
867                goto done;
868        }
869       
870        isSAP = IsBilingualSapDetected( &iError );
871        if ( iError != CAS_2B_API_SUCCESS ) {
872                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
873                err = deviceError;
874                goto done;
875        }
876
877        audioStandard = AUDIO_STANDARD_BTSC;
878        audioStandard = GetAudioStandard( &iError );
879#if 0
880        if ( iError != CAS_2B_API_SUCCESS || iError != RECEIVED_UNDEFINED_AUDIO_STANDARD ) {
881                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
882                err = deviceError;
883                goto done;
884        }
885#endif
886
887        if ( pNTSCStat ) {
888                pNTSCStat->NtscCarrierOffset = ntscCarrierOffset;
889                pNTSCStat->isStereo = isStereo;
890                pNTSCStat->isSAP = isSAP;
891                pNTSCStat->AudioStandard = audioStandard;
892        }       
893       
894        OS_DbgPrintf("\n\n\n *** NTSC Status ***\n");
895       
896        OS_DbgPrintf("   NTSC Carrier Offset: %d\n", (int)ntscCarrierOffset);
897        OS_DbgPrintf("   Audio Mode: %s - %s\n", isStereo ? "Stereo" : "Mono", isSAP ? "SAP" : "NO-SAP" );
898        OS_DbgPrintf("   Audio Standard: %s\n", 
899                audioStandard == AUDIO_STANDARD_BTSC ? "BTSC" :
900                audioStandard == AUDIO_STANDARD_KOREA ? "A2-KOREA" :
901                audioStandard == AUDIO_STANDARD_RADIO_FM ? "RADIO-FM" : "Unknown" );
902
903done:
904        return err;
905}
906
907//
908// Notes: Standard ÁöÁ¤Çϸé, ´ÙÀ½ Æ©´× ¶§¿¡ Àû¿ëµÊ.
909//
910ErrCode CAS2C_SetAudioStandard( UINT32 AudioStandard)
911{
912        ErrCode err = noError;
913
914        switch( (FEAudioStandard_t)AudioStandard ) {
915                case FE_AUDIO_BTSC:
916                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC;
917                        break; 
918                case FE_DUALFM:
919                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_A2_KOREA;
920                        break;
921                default:
922                        g_Ntsc_Mode = CAS_2B_RECEIVER_MODE_AUDIO_US_BTSC;
923        }
924       
925        return err;
926}
927
928
929ErrCode CAS2C_SetAudioMode( UINT32 AudioMode )
930{
931        ErrCode err = noError;
932        int iError = CAS_2B_API_SUCCESS;
933       
934        switch( AudioMode ) {
935                case 0: /* Mono */
936                        g_AudioParameters.bAudioForcedMonoMode = TRUE;
937                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_STEREO;
938                        break;
939               
940                case 1: /* Stereo */
941                        g_AudioParameters.bAudioForcedMonoMode = FALSE;
942                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_STEREO;
943                        break;
944
945                case 2: /* SAP */
946                case 3:
947                        g_AudioParameters.bAudioForcedMonoMode = FALSE;
948                        g_AudioParameters.iNRSwithch = AUDIO_NR_SWITCH_SAP;
949                        break;
950               
951                default:
952                        OS_DbgPrintf("|%s| ERROR: Invalid Audio Mode %d\n", __FUNCTION__, (int)AudioMode );
953        }
954       
955        iError = SendAudioMessage( 1, g_AudioParameters );
956        if ( iError != IIC_COM_SUCCESS ) {
957                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
958                err = deviceError;
959                goto done;
960        }
961       
962done:
963        return err;
964}
965
966ErrCode CAS2C_GetAudioMode( UINT32 *pAudioMode )
967{
968        ErrCode err = noError;
969        BOOLEAN isStereo, isSAP;
970        int iError;
971       
972        isStereo = IsStereoDetected( &iError );
973        if ( iError != CAS_2B_API_SUCCESS ) {
974                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
975                err = deviceError;
976                goto done;
977        }
978       
979        isSAP = IsBilingualSapDetected( &iError );
980        if ( iError != CAS_2B_API_SUCCESS ) {
981                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
982                err = deviceError;
983                goto done;
984        }
985       
986        if ( isStereo ) {
987                if ( isSAP )
988                        *pAudioMode = (UINT32)FE_AUDIO_SAP;                     /* Stereo and SAP */
989                else
990                        *pAudioMode = (UINT32)FE_AUDIO_STEREO;          /* Stereo and no SAP */
991        } else {
992                if ( isSAP )
993                        *pAudioMode = (UINT32)FE_AUDIO_MONO_SAP;        /* Mono and SAP */
994                else
995                        *pAudioMode = (UINT32)FE_AUDIO_MONO;            /* Mono and no SAP */
996        }
997
998done:
999        return err;
1000}
1001
1002ErrCode CAS2C_GetAudioStandard( UINT32 *pAudioStandard )
1003{
1004        *pAudioStandard = (UINT32)g_Ntsc_Mode;
1005       
1006        return noError;
1007}
1008
1009ErrCode CAS2C_GetNTSCExtStatus( NTSC_EXT_STATUS *pExt )
1010{
1011        ErrCode err = noError;
1012        TYPE_AUDIO_MASTER_SLAVE_MODE isMaster;
1013        TYPE_SCL_TO_WS_RATIO scl_ws_ratio;
1014        TYPE_IIS_OUT_RATE iisRate;
1015        TYPE_IIS_MODE iisMode;
1016        NUMERATOR_DENOMINATOR leftGain;
1017        NUMERATOR_DENOMINATOR rightGain;
1018       
1019        int iError = CAS_2B_API_SUCCESS;
1020       
1021       
1022        isMaster = GetMasterSlaveMode( &iError );
1023        if ( iError != CAS_2B_API_SUCCESS ) {
1024                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1025                err = deviceError;
1026                goto done;
1027        }
1028       
1029        scl_ws_ratio = GetSclToWsRatio( &iError );
1030        if ( iError != CAS_2B_API_SUCCESS ) {
1031                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1032                err = deviceError;
1033                goto done;
1034        }
1035       
1036        iisRate = GetIISOuputRate( &iError );
1037        if ( iError != CAS_2B_API_SUCCESS ) {
1038                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1039                err = deviceError;
1040                goto done;
1041        }
1042
1043        iisMode = GetIISMode( &iError );
1044        if ( iError != CAS_2B_API_SUCCESS ) {
1045                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1046                err = deviceError;
1047                goto done;
1048        }
1049       
1050        leftGain = GetSoundLeftOutputGain( &iError );
1051        if ( iError != CAS_2B_API_SUCCESS ) {
1052                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1053                err = deviceError;
1054                goto done;
1055        }
1056       
1057        rightGain = GetSoundRightOutputGain( &iError );
1058        if ( iError != CAS_2B_API_SUCCESS ) {
1059                OS_DbgPrintf("|%s| error, line=%d\n", __FUNCTION__, __LINE__);
1060                err = deviceError;
1061                goto done;
1062        }
1063       
1064        OS_DbgPrintf("\n\n\n *** NTSC Ext. Status ***\n");
1065       
1066        OS_DbgPrintf("   I2S Master/Slave: %s\n", 
1067                isMaster == TYPE_AUDIO_SLAVE_MODE ? "SLAVE" :
1068                isMaster == TYPE_AUDIO_MASTER_MODE ? "MASTER" : "Unknown" );
1069
1070        OS_DbgPrintf("   SCL/WS Ratio: %s\n",
1071                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_32 ? "32" :
1072                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_48 ? "48" :
1073                scl_ws_ratio == TYPE_SCL_TO_WS_RATIO_64 ? "64" : "Unknown" );
1074       
1075        OS_DbgPrintf("   IIS Rate: %s\n",
1076                iisRate == TYPE_IIS_OUT_RATE_48 ? "48KHz" :
1077                iisRate == TYPE_IIS_OUT_RATE_96 ? "96KHz" :
1078                iisRate == TYPE_IIS_OUT_RATE_44_1 ? "44.1KHz" :
1079                iisRate == TYPE_IIS_OUT_RATE_88_2 ? "88.2KHz" :
1080                iisRate == TYPE_IIS_OUT_RATE_32 ? "32KHz" : "Unknown" );
1081       
1082        OS_DbgPrintf("   I2S Mode: %s\n",
1083                iisMode == TYPE_IIS_MODE_IIS ? "I2S" :
1084                iisMode == TYPE_IIS_MODE_LJ ? "Left-justified" :
1085                iisMode == TYPE_IIS_MODE_RJ ? "Right-justified" : "Unknown" );
1086       
1087        OS_DbgPrintf("   Left  Audio Gain: %d\n", (int)leftGain.Numerator.lNumerator );
1088        OS_DbgPrintf("   Right Audio Gain: %d\n", (int)rightGain.Numerator.lNumerator );
1089
1090done:
1091        return err;
1092}
1093
1094//int __stdcall SendAudioMessage(unsigned char ucReceiveRegisterNumber, CAS_2B_AUDIO_MESSAGE_PARAMETERS stAudiomessageParameters)
1095//void __stdcall InitAudioMessageStructToDefault(CAS_2B_AUDIO_MESSAGE_PARAMETERS* pstAudiomessageParameters)
1096
1097
1098
1099/****************************************************************************
1100       
1101        CAS2C_InitTDA9885Reg
1102
1103                Summary :
1104                Returns : noError on success, others on failure.
1105               
1106 ************************************************************************^^*/
1107ErrCode CAS2C_InitTDA9885(void)
1108{
1109        ErrCode retVal = noError;
1110        STATUS semErr;
1111        UINT8 data[3] = { 0xD4, 0x30, 0x04 };
1112        int i;
1113       
1114        /* Take Mutex. */
1115        semErr = OS_TakeSemaphore( pCAS2C->Mutex );
1116        if ( semErr != OK )
1117                return generalError;
1118#if NIMTN_TYPE==NIMTN_DTT7611
1119        if ( !TunerDTT7611BeforeSendBytes() )
1120                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
1121#endif
1122
1123        if( i2cWrite(I2C_NIM_TDA9885, TRUE, 0, data, 3)) {
1124                OS_DbgPrintf("!! Error Tda9885_WriteReg(): Check if IF section is enabled or not. \n");
1125                retVal = generalError;
1126        }
1127#if NIMTN_TYPE==NIMTN_DTT7611
1128        if ( !TunerDTT7611AfterSendBytes() ) {
1129                OS_DbgPrintf("|%s| error, line = %d\n", __FUNCTION__, __LINE__);
1130                retVal = generalError;
1131        }
1132#endif
1133        OS_DbgPrintf("|%s| ", __FUNCTION__);
1134        for (i=0; i<3; i++) {
1135                OS_DbgPrintf("data[%d] = 0x%02X ", i, (UINT32)data[i] );
1136        }
1137        OS_DbgPrintf("\n");
1138       
1139//done:
1140        /* Give Mutex. */
1141        semErr = OS_GiveSemaphore( pCAS2C->Mutex );
1142        if ( semErr != OK )
1143                retVal = generalError;
1144
1145        return retVal;
1146}
1147
1148UINT16 GetHwVer(void)
1149{
1150        UINT8 data;
1151        int err;
1152       
1153        data = GetHardwareVersion( &err );
1154        if ( data == 0 ) {
1155                if ( err == SEND_HOST_CONTROL_FUNCTION_FAILED ) {
1156                        OS_DbgPrintf("|%s| ERROR: host control function failed.\n", __FUNCTION__);
1157                        return 0;
1158                }
1159        }
1160       
1161        return data;
1162}
1163
1164UINT32 GetCodeVer(void)
1165{
1166        CAS_2B_CODE_VERSION ver;
1167
1168        UINT32 version;
1169        int err;
1170
1171        ver.usaVector[0]=0;
1172        ver.usaVector[1]=0;
1173        ver.usaVector[2]=0;
1174        ver.usaVector[3]=0;
1175        ver.usaVector[4]=0;
1176        ver.usaVector[5]=0;
1177       
1178        ver = GetDSPFirmwareVersion( &err );
1179        if ( err != IIC_COM_SUCCESS ) {
1180                OS_DbgPrintf("|%s| error on i2c communication.\n", __FUNCTION__);
1181                return (UINT32)-1;
1182        }
1183       
1184        OS_DbgPrintf("|%s| Version = 0x%x / 0x%x / 0x%x / 0x%x / 0x%x / 0x%x\n", __FUNCTION__,
1185                (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] );
1186
1187        version  = ver.usaVector[0] << 16;
1188        version |= ver.usaVector[1];
1189//      version |= ver.usaVector[2] << 8;
1190//      version |= ver.usaVector[3];
1191       
1192        return version;
1193}
1194
1195void CAS2C_GetMode()
1196{
1197        int err;
1198       
1199        OS_DbgPrintf("|%s| Mode = 0x%x\n", __FUNCTION__, (UINT32)GetMode(&err) );
1200       
1201}
1202
1203UINT8 CAS2C_GetTunerStatus(void)
1204{
1205        return 0x40;
1206}
1207
1208void get_ifagc()
1209{
1210        NUMERATOR_DENOMINATOR stResult;
1211        int piError;
1212       
1213        piError = 0;
1214        stResult = GetAgcIfCommand( &piError );
1215        if ( piError != 0 ) {
1216                OS_DbgPrintf("|%s| error, piError = %d\n", __FUNCTION__, (unsigned int)piError );
1217                return;
1218        }
1219       
1220        OS_DbgPrintf("IF AGC = %d\n", stResult.Numerator.lNumerator );
1221}
1222
1223void get_ifagc2()
1224{
1225       
1226        NUMERATOR_DENOMINATOR stResult;
1227        int piError;
1228       
1229        piError = 0;
1230        stResult = GetAGCSensor( &piError );
1231        if ( piError != 0 ) {
1232                OS_DbgPrintf("|%s| error, piError = %d\n", __FUNCTION__, (unsigned int)piError );
1233                return;
1234        }
1235       
1236        OS_DbgPrintf("IF AGC = %d\n", stResult.Numerator.lNumerator );
1237}
1238
1239typedef union{
1240        struct{
1241                unsigned        AFCWIN  :1;
1242                unsigned        VIFL    :1;
1243                unsigned        FMIFL   :1;
1244                signed          AFC             :4;     // AFC4, AFC3, AFC2, AFC1
1245                unsigned        PONR    :1;
1246               
1247        }                               Part;                   // ±¸Á¶Ã¼ ¸É¹ö Á¢±Ù
1248        UINT8                   Byte;                   // ¹ÙÀÌÆ® Á¢±Ù
1249}UTda9885ReadReg;
1250
1251static int bStart = 1;
1252void tAutoFreqTune(void)
1253{
1254        UTda9885ReadReg tdadata;
1255        int afc_status;
1256        UINT32 frequency;
1257        UINT8 isNtsc;
1258       
1259        int bLoop = 1;
1260       
1261        while ( bLoop ) 
1262        {
1263                /* Delay 500 msec */
1264                OS_Delay(30);
1265
1266                if ( bStart == 0 )
1267                        continue;
1268                       
1269                isNtsc = pCAS2C->isNtsc;
1270                frequency = pCAS2C->FATFreq;
1271               
1272                if ( CAS2C_GetTDA9885Reg( &tdadata.Byte ) == noError ) {
1273                        afc_status = tdadata.Part.AFC;
1274                        //OS_DbgPrintf("afc_status = %d\n", afc_status );
1275                        switch (afc_status)
1276                        {
1277                                // TUV1236D - AFC Status ÂüÁ¶
1278                                //
1279                                case  7 :   frequency += 188; break;
1280                                case  6 :       frequency += 162; break;
1281                                case  5 :       frequency += 137; break;
1282                                case  4 :       frequency += 112; break;
1283                                case  3 :       frequency +=  87; break;
1284                                case  2 :       frequency +=  62; break;
1285                               
1286                                case  1 :
1287                                case  0 :
1288                                case -1 :
1289                                case -2 :       
1290                                                break;                         
1291                               
1292                                case -3 :       frequency -=  62; break;
1293                                case -4 :       frequency -=  87; break;
1294                                case -5 :       frequency -= 112; break;
1295                                case -6 :       frequency -= 137; break;
1296                                case -7 :       frequency -= 162; break;
1297                                case -8 :   frequency -= 188; break;
1298                               
1299                        }               
1300                }
1301               
1302                if ( pCAS2C->FATFreq != frequency ) {
1303                        OS_DbgPrintf("|%s| new frequency = %d (old=%d)\n", __FUNCTION__, frequency, pCAS2C->FATFreq );
1304                        CAS2C_SetFrequencyNTSC( frequency );
1305                }
1306        }
1307}
1308
1309#if 0
1310void go_aft(void)
1311{
1312        OS_TASK_ID taskId;
1313       
1314        taskId = OS_SpawnTask( tAutoFreqTune, "tAFT", 120, 4096, 0 );
1315        bStart = 1;
1316               
1317        OS_DbgPrintf("Creation of tAFT, id=0x%x\n", taskId );
1318}
1319
1320void stop_aft(void)
1321{
1322        bStart = 0;
1323}
1324#endif
Note: See TracBrowser for help on using the repository browser.