/****************************************************************************/ /* */ /* Copyright (c) 2003 Trident Technologies, Inc. */ /* All rights reserved */ /* */ /* The content of this file or document is CONFIDENTIAL and PROPRIETARY */ /* to Trident Microsystems, Inc. It is subject to the terms of a */ /* License Agreement between Licensee and Trident Technologies, Inc. */ /* restricting among other things, the use, reproduction, distribution */ /* and transfer. Each of the embodiments, including this information and */ /* any derivative work shall retain this copyright notice */ /* */ /****************************************************************************/ /**************************************************************************** * Copyright (C) 2003-2005, Trident Technologies, Inc. * Copyright (C) 2003-2005, Oren Semiconductor * * File: TunerDTVS205FH201A.c * * Created: 01-25-05 * Description: This file contain source code for DTVS205FH201A * * Modified by Alex, 2006-4-29 * ****************************************************************************/ #include #include #include "dsthalcommon.h" #include "dsthalcfg.h" #include "S5H1409Core.h" //#include "TunerDTVS205FH201A.h" //#include "IicComm.h" //#include "trid_sysdef.h" //#include "TunerDebug.h" #undef DTVS205_DEVICE_ADDRESS_WRITE #define DTVS205_DEVICE_ADDRESS_WRITE 0xC2 extern int S5H1409_IicTransmit(unsigned char chipAddr, unsigned char *pBuffer, int len ); #define MY_MSG_LEVEL 1 // global data structure for our tuner i2c address and tuner type TUNER_INIT_PARAMETERS gStInitParam[MAX_TUNER_SUPPORT]; // port #ifdef _DEBUG_AGC_ TYPE_TUNERDTVS205FH201A_AGC g_AgcValue=TUNERDTVS205FH201A_AGC_96; #endif static BOOLEAN TunerDTVS205BeforeSendBytes() { if ( Sdm_1409xRepeaterEnable() ) return 0; return 1; } static BOOLEAN TunerDTVS205AfterSendBytes() { if ( Sdm_1409xRepeaterDisable() ) return 0; return 1; } int TunerDTVS205FH201ASendChannel( unsigned int uiChannel, int iAdjustFreqKHZ, CHANNEL_TABLE_TYPE iChannelTable,TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio,unsigned int uiAgc, unsigned int uiAgcMode,unsigned int uiChargePump,unsigned int uiAgcTimeConstant) { unsigned long ulFrequency; unsigned char Db1; unsigned char Db2; unsigned char Cb; unsigned char Bb; printf("uiChannel=%d\n", uiChannel); DTVS205FH201AInitBytes(&Db1,&Db2,&Cb,&Bb); ulFrequency = TunerDTVS205FH201AGetFrequency(uiChannel,iChannelTable); if(0 == ulFrequency) return DTVS205FH201A_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY; //Add for the adjust ulFrequency+=iAdjustFreqKHZ; //printf(" ### AgcMode = %d ### \n",uiAgcMode); if(FALSE == TunerDTVS205FH201ASetRFFreq(ulFrequency,uiAgcMode,&Bb)) return DTVS205FH201A_FREQUENCY_VALUE_OUT_OF_RANGE; if(FALSE == DTVS205FH201ASetN( ulFrequency,iRefDividerRatio,&Db1,&Db2)) return DTVS205FH201A_COULD_NOT_SET_N; #if 1//20071110 if (((ulFrequency>=DTVS205FH201A_100MHz)&&(ulFrequency<=DTVS205FH201A_168MHz)) || ((ulFrequency>=DTVS205FH201A_700MHz)&&(ulFrequency<=DTVS205FH201A_866MHz))) { uiChargePump=TUNERDTVS205FH201A_CHARGE_PUMP_100; } else { uiChargePump=TUNERDTVS205FH201A_CHARGE_PUMP_20; } #endif DTVS205FH201ASetCPandStepSize(iRefDividerRatio, uiChargePump, &Cb); // DTVS205FH201ASetStepSize( iRefDividerRatio, &Cb,&Cb2); // DTVS205FH201ASetAGC(uiAgc,&Ab); // DTVS205FH201ASetATC(uiAgcTimeConstant,&Ab); return DTVS205FH201ASendControlData(uiAgcMode,Db1,Db2,Cb,Bb); } #if 1 int TunerDTVS205FH201ASendFreq( unsigned long ulFrequency,TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio,unsigned int uiAgc, unsigned int uiAgcMode,unsigned int uiChargePump,unsigned int uiAgcTimeConstant) { unsigned char Db1; unsigned char Db2; unsigned char Cb; unsigned char Bb; // unsigned char Ab; // unsigned char Cb2; DTVS205FH201AInitBytes(&Db1,&Db2,&Cb,&Bb); //printf(" ### AgcMode = %d ### \n",uiAgcMode); printf("ulFrequency is %ld\n",ulFrequency); ulFrequency /= 1000; if(FALSE == TunerDTVS205FH201ASetRFFreq(ulFrequency,uiAgcMode,&Bb)){ printf("|%s|%d|\n",__FUNCTION__,__LINE__); return DTVS205FH201A_FREQUENCY_VALUE_OUT_OF_RANGE; } if(FALSE == DTVS205FH201ASetN( ulFrequency,iRefDividerRatio,&Db1,&Db2)){ printf("|%s|%d|\n",__FUNCTION__,__LINE__); return DTVS205FH201A_COULD_NOT_SET_N; } #if 1//20071110 if (((ulFrequency>=DTVS205FH201A_100MHz)&&(ulFrequency<=DTVS205FH201A_168MHz)) || ((ulFrequency>=DTVS205FH201A_700MHz)&&(ulFrequency<=DTVS205FH201A_866MHz))) { printf("|%s|%d|\n",__FUNCTION__,__LINE__); uiChargePump=TUNERDTVS205FH201A_CHARGE_PUMP_100; } else { printf("|%s|%d|\n",__FUNCTION__,__LINE__); uiChargePump=TUNERDTVS205FH201A_CHARGE_PUMP_20; } #endif DTVS205FH201ASetCPandStepSize(iRefDividerRatio, uiChargePump, &Cb); // DTVS205FH201ASetStepSize( iRefDividerRatio, &Cb,&Cb2); // DTVS205FH201ASetAGC(uiAgc,&Ab); // DTVS205FH201ASetATC(uiAgcTimeConstant,&Ab); return DTVS205FH201ASendControlData(uiAgcMode,Db1,Db2,Cb,Bb); } int TunerDTVS205FH201ASendPicCarrier( unsigned long ulFrequency,TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio,unsigned int uiAgc, unsigned int uiAgcMode,unsigned int uiChargePump,unsigned int uiAgcTimeConstant) { //add 1.75 MHz to the picture carrier frequency return TunerDTVS205FH201ASendFreq( ulFrequency + 1750 ,iRefDividerRatio,uiAgc, uiAgcMode,uiChargePump, uiAgcTimeConstant); } #endif unsigned long TunerDTVS205FH201AGetFrequency( unsigned int uiChannelNumber,CHANNEL_TABLE_TYPE iChannelTable) { unsigned long ulFreq = 0; if(NA_TERRESTRIAL == iChannelTable) {//terrestrial if ((uiChannelNumber >= 2) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 2: ulFreq = 57; break; case 3: ulFreq = 63; break; case 4: ulFreq = 69; break; case 5: ulFreq = 79; break; case 6: ulFreq = 85; break; } } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFreq = 174 + ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 69)) { ulFreq = 470 + ((uiChannelNumber - 14) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 77)) { ulFreq = 470 + ((uiChannelNumber - 14) * 6) + 3; } else { return 0; } return ulFreq * 1000; } else if(NA_CATV == iChannelTable) {//CATV if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: ulFreq = 75; break; case 2: ulFreq = 57; break; case 3: ulFreq = 63; break; case 4: ulFreq = 69; break; case 5: ulFreq = 79; break; case 6: ulFreq = 85; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFreq = 90 + ((uiChannelNumber - 95) * 6) + 3; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFreq = 174 + ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFreq = 120 + ((uiChannelNumber - 14) * 6) + 3; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFreq = 216 + ((uiChannelNumber - 23) * 6) + 3; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFreq = 648 + ((uiChannelNumber - 100) * 6) + 3; } else { return 0; } return ulFreq * 1000; } else if(IRC == iChannelTable) {//IRC if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: ulFreq = 75; //ulFreq = 75012; break; case 2: ulFreq = 57; //ulFreq = 57015; break; case 3: ulFreq = 63; //ulFreq = 63012; break; case 4: ulFreq = 69; //ulFreq = 69012; break; case 5: ulFreq = 81; //ulFreq = 81012; break; case 6: ulFreq = 87; //ulFreq = 87012; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFreq = 90 + ((uiChannelNumber - 95) * 6) + 3; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFreq = 174 + ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFreq = 120 + ((uiChannelNumber - 14) * 6) + 3; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFreq = 216 + ((uiChannelNumber - 23) * 6) + 3; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFreq = 648 + ((uiChannelNumber - 100) * 6) + 3; } else { return 0; } return (ulFreq * 1000) +12 ; } else if(HRC == iChannelTable) {//HRC if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: //ulFreq = 75; ulFreq = 73753; break; case 2: ulFreq = 55753; break; case 3: ulFreq = 61753; break; case 4: ulFreq = 67753; break; case 5: ulFreq = 79754; break; case 6: ulFreq = 85754; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFreq = (917545 + ((uiChannelNumber - 95) * 60003))/10; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFreq = (1757587 + ((uiChannelNumber - 7) * 60003))/10; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFreq = (1217560 + ((uiChannelNumber - 14) * 60003))/10; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFreq = (2177608 + ((uiChannelNumber - 23) * 60003))/10; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFreq = (6497824 + ((uiChannelNumber - 100) * 60003))/10; } else { return 0; } return ulFreq ; } else return 0; } BOOLEAN TunerDTVS205FH201ASetRFFreq(unsigned long ulFrequency,unsigned int iAgcMode ,unsigned char* pucBb) { *pucBb = 0; if (iAgcMode==TUNER_AGC_MODE_INTERNAL_ANALOG) *pucBb=0x00;//0x00 else *pucBb=0x04;//0x04 if ((ulFrequency >= DTVS205FH201A_LOW_BAND_MIN) && (ulFrequency <= DTVS205FH201A_LOW_BAND_MAX) ) { *pucBb |= 0x01; } else if((ulFrequency >= DTVS205FH201A_MID_BAND_MIN) && (ulFrequency <= DTVS205FH201A_MID_BAND_MAX)) { *pucBb |= 0x02; } else if((ulFrequency >= DTVS205FH201A_HIGH_BAND_MIN) && (ulFrequency <= DTVS205FH201A_HIGH_BAND_MAX)) { *pucBb |= 0x08; } else return FALSE; return TRUE; } BOOLEAN DTVS205FH201ASetN(unsigned long ulFrequency,TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio, unsigned char* pucDb1,unsigned char* pucDb2) { // calc N unsigned short usNval,usMultiplier; unsigned char ucNlow8,ucNbits8_14; usMultiplier = 0; //1/(dRefDividerRatio/1000) switch(iRefDividerRatio) { case TUNERDTVS205FH201A_REF_DIVIDER_RATIO_31_25: usMultiplier = 32; break; case TUNERDTVS205FH201A_REF_DIVIDER_RATIO_50: usMultiplier = 20; break; case TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5: usMultiplier = 16; break; // case TUNERDTVS205FH201A_REF_DIVIDER_RATIO_166_7: // usMultiplier = 6; // break; default: usMultiplier = 20; break; } usNval = (unsigned short)(((ulFrequency + DTVS205FH201A_F_IF_KHZ) * usMultiplier)/1000); if(usNval >= DTVS205FH201A_N_MAX) { //max n in 14 bits usNval = usNval/2 ; } // set N if (usNval == 0 || usNval >= DTVS205FH201A_N_MAX) { //15 bits return FALSE; } // clear N bits *pucDb1 = 0x00; *pucDb2 = 0x00; ucNlow8 = usNval & 0x00FF; ucNbits8_14 = (usNval & 0x07f00) >> 8; *pucDb2 = ucNlow8; *pucDb1 |= ucNbits8_14 ; return TRUE; } void DTVS205FH201ASetCPandStepSize(TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio, TYPE_TUNERDTVS205FH201A_CHARGE_PUMP iRefChargePump, unsigned char* pucCb) { *pucCb = 0x00; if (TUNERDTVS205FH201A_CHARGE_PUMP_20 == iRefChargePump) *pucCb = 0x00; else *pucCb = 0x40; if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_50 == iRefDividerRatio) { *pucCb |= 0x02; } else if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_31_25 == iRefDividerRatio) { *pucCb |= 0x02; } else if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5 == iRefDividerRatio) { *pucCb |= 0x06; } *pucCb |= 0x80; } #if 0 void DTVS205FH201ASetStepSize(TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio, unsigned char* pucCb,unsigned char* pucCb2) { *pucCb &= 0xf9; *pucCb2 &= 0xf9; if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_50 == iRefDividerRatio) { *pucCb &= 0xf9; *pucCb2 &= 0xf9; } else if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_31_25 == iRefDividerRatio) { *pucCb |= 0x2; *pucCb2 |= 0x2; } else if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_166_7 == iRefDividerRatio) { *pucCb |= 0x4; *pucCb2 |= 0x4; } else if (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5 == iRefDividerRatio) { *pucCb |= 0x6; *pucCb2 |= 0x6; } } void DTVS205FH201ASetAGC(unsigned int uiAgc, unsigned char* pucAb) { *pucAb &= 0x8f; if (0 == uiAgc) { *pucAb &= 0x8f; } else if (1== uiAgc) { *pucAb |= 0x10; } else if (2 == uiAgc) { *pucAb |= 0x20; } else if (3 == uiAgc) { *pucAb |= 0x30; } else if (4 == uiAgc) { *pucAb |= 0x40; } else if (5 == uiAgc) { *pucAb |= 0x50; } else if (6 == uiAgc) { *pucAb |= 0x60; } } void DTVS205FH201ASetATC(unsigned int uiAgcTimeConstant,unsigned char* pucAb) { if (2 == uiAgcTimeConstant) *pucAb &= ~0x80; else if (50== uiAgcTimeConstant) *pucAb |= 0x80; } #endif extern int S5H1409_IicTransmitEx(unsigned char chipAddr, unsigned char *pBuffer, int len ); unsigned int DTVS205FH201ASendControlData( unsigned int uiAgcMode,unsigned char Db1,unsigned char Db2,unsigned char Cb,unsigned char Bb) { unsigned char str[10]; // unsigned char ucSlaveAddr = gStInitParam[TunerID].ucDeviceSlaveAddr; if (!TunerDTVS205BeforeSendBytes()) return -1; str[0] = Db1; str[1] = Db2; str[2] = Cb; // cb1_ta1 str[3] = Bb; // CB2 str[4]= '\0'; fprintf(stderr,"### <%s> Tuner Data: %#02x %#02x %#02x %#02x ###\n", __func__,str[0],str[1],str[2],str[3]); if (S5H1409_IicTransmitEx(DTVS205_DEVICE_ADDRESS_WRITE, str, 4)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } if( !TunerDTVS205AfterSendBytes()) return -1; else return 0; /* if(1 == uiAgcMode) { #ifdef MS_WINDOW while(ulWait != 0) ulWait --; #else usleep(YIELD_TIME); #endif str[0] = Cb2; str[1] = Ab; str[2]= '\0'; if (IicTransmit((unsigned char)gStInitParam[TunerID].ucDeviceI2CAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } } //Send data byte if internal analog AGC mode. if(2 == uiAgcMode) { str[0] = 0x00; str[1] = 0xD4; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } str[0] = 0x01; str[1] = 0x30; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } str[0] = 0x02; str[1] = 0x04; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } } //Send data byte if internal digital AGC mode. if(1 == uiAgcMode) { str[0] = 0x00; str[1] = 0xD4; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } str[0] = 0x01; str[1] = 0x30; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } str[0] = 0x02; str[1] = 0x24; if (IicTransmit((unsigned char)ucSlaveAddr, str, 2)) { return DTVS205FH201A_SEND_CONTROL_DATA_FAILED; } } */ return DTVS205FH201A_SUCCESS; } void DTVS205FH201AInitBytes(unsigned char* pucDb1,unsigned char* pucDb2,unsigned char* pucCb,unsigned char* pucBb) { *pucDb1 = 0; *pucDb2 = 0; *pucCb = 0x88; *pucBb = 0; } int DTVS205FH201A_Init(TUNER_INIT_PARAMETERS InitParam[MAX_TUNER_SUPPORT]) { int i; for(i=0; iiTunerType) return CAS_2B_UNDEFINED_TUNER_TYPE; switch(pstTunerParameters->iTunerGet) { case TUNER_GET_AFC: tmp = S5H_IicReadTunerByte(DTVS205_DEVICE_ADDRESS_WRITE); printf("AFC get :%#02x\n", tmp); AFCValue = tmp & 0x07; switch(AFCValue) { case 0: AFCValue = -250; break; case 1: AFCValue = -49; break; case 2: AFCValue = 0; break; case 3: AFCValue = +49; break; case 4: AFCValue = +250; break; default: AFCValue = +250; break; } pstTunerParameters->RetValue1 = AFCValue; pstTunerParameters->RetValue2 = (tmp & 0x40)!=0; break; default: break; } return iError; } int DTVS205FH201A_SetChannel( CAS_2B_TUNER_PARAMETERS* pstTunerParameters,unsigned short usDelay,CAS_2B_CHANNEL_CHANGE_PARAMETERS* pstChannelChangeParameters) { ERROR_TYPE iError; unsigned long ulDelay; printf("stTunerParameters.iAgcMode = %d \n",pstTunerParameters->iAgcMode); if(TUNER_DTVS205FH201A == pstTunerParameters->iTunerType) { printf("SetValue=%ld\n", pstTunerParameters->ulSetValue); #ifdef _DEBUG_AGC_ iError = SetTunerDTVS205FH201A( pstTunerParameters->iTunerSet, &(pstTunerParameters->ulSetValue), pstTunerParameters->iAdjustFreqKHZ, pstTunerParameters->iChannelTableType, TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5,/*default value*/ 0, //TUNERDTVS205FH201A_AGC_93,/*default value*/ pstTunerParameters->iAgcMode, TUNERDTVS205FH201A_CHARGE_PUMP_20,/*default value*/ 0);/*default value*/ #else iError = SetTunerDTVS205FH201A( pstTunerParameters->iTunerSet, &(pstTunerParameters->ulSetValue), pstTunerParameters->iAdjustFreqKHZ, pstTunerParameters->iChannelTableType, TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5,/*default value*/ 0, //TUNERDTVS205FH201A_AGC_93,/*default value*/ pstTunerParameters->iAgcMode, TUNERDTVS205FH201A_CHARGE_PUMP_20,/*default value*/ 0);/*default value*/ #endif if(CAS_2B_API_SUCCESS != iError) { printf("SetTunerDTVS205FH201A failure\n"); return iError; } } else { printf("Undefined tuner type\n"); return CAS_2B_UNDEFINED_TUNER_TYPE; } //if the pstChannelChangeParameters argument is NULL it means that we send only //the tuner PLL frequency if(NULL == pstChannelChangeParameters) return CAS_2B_API_SUCCESS; //wait a delay; ulDelay = usDelay * 10000; #ifdef MS_WINDOW while(ulDelay != 0) ulDelay --; #else usleep(ulDelay/2); #endif printf("SetChannel Done!"); return CAS_2B_API_SUCCESS; } int __stdcall SetTunerDTVS205FH201A( TYPE_TUNER_SET_OPTION TunerSet, void* pvTunerSet, int iAdjustFreqKHZ, CHANNEL_TABLE_TYPE iChannelTable, TYPE_TUNERDTVS205FH201A_REF_DIVIDER_RATIO iRefDividerRatio , TYPE_TUNERDTVS205FH201A_AGC iAgc, TYPE_TUNER_AGC_MODE iAgcMode, CHARGE_PUMP iChargePump, TYPE_TUNERDTVS205FH201A_AGC_TIME_CONSTANT iAgcTimeConstant ) { unsigned int uiAgc=0,uiChargePump,uiAgcTimeConstant=0,uiAgcMode=0; int iRes; if((TUNERDTVS205FH201A_REF_DIVIDER_RATIO_31_25 != iRefDividerRatio) && (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_50 != iRefDividerRatio) && (TUNERDTVS205FH201A_REF_DIVIDER_RATIO_62_5 != iRefDividerRatio)) return CAS_2B_UNDEFINED_TUNER_DTVS205FH201A_REF_DIVIDER_RATIO_TYPE; printf("&&&&&&&&&&&&& iAgc = %d &&&&&&&&&&&&\n",iAgc); if(CHARGE_PUMP_20 == iChargePump) uiChargePump = 20; else if(CHARGE_PUMP_100 == iChargePump) uiChargePump = 100; else return CAS_2B_UNDEFINED_TUNER_DTVS205FH201A_CHRGE_PUMP_TYPE; if(TUNER_AGC_MODE_INTERNAL_DIGITAL == iAgcMode ) uiAgcMode = 1; else if(TUNER_AGC_MODE_INTERNAL_ANALOG == iAgcMode) uiAgcMode = 0; else return CAS_2B_UNDEFINED_TUNER_DTVS205FH201A_AGC_MODE_TYPE; printf("uiAgcMode = %d \n",uiAgcMode); if( TUNER_SET_CHANNEL == TunerSet) iRes = TunerDTVS205FH201ASendChannel(*((unsigned long*)pvTunerSet), iAdjustFreqKHZ, iChannelTable,iRefDividerRatio,uiAgc, uiAgcMode,uiChargePump, uiAgcTimeConstant); #if 0 else if( TUNER_SET_CENTER_FREQUENCY_KHZ == TunerSet) iRes = TunerDTVS205FH201ASendFreq(*((unsigned long*)pvTunerSet),iRefDividerRatio,uiAgc, uiAgcMode,uiChargePump, uiAgcTimeConstant); else if( TUNER_SET_PIC_CARRIER_KHZ == TunerSet) iRes = TunerDTVS205FH201ASendPicCarrier(*((unsigned long*)pvTunerSet),iRefDividerRatio,uiAgc, uiAgcMode,uiChargePump, uiAgcTimeConstant); #endif else return CAS_2B_UNDEFINED_TUNER_DTVS205FH201A_SET_OPTION_TYPE; switch(iRes) { case DTVS205FH201A_SUCCESS: return CAS_2B_API_SUCCESS; case DTVS205FH201A_CHANNEL_OUT_OF_RANGE: return CAS_2B_TUNER_DTVS205FH201A_CHANNEL_OUT_OF_RANGE; case DTVS205FH201A_COULD_NOT_SET_N: return CAS_2B_TUNER_DTVS205FH201A_N_VALUE_OUT_OF_RANGE; case DTVS205FH201A_SEND_CONTROL_DATA_FAILED: case DTVS205FH201A_BEFORE_SEND_BYTES_FAILED: case DTVS205FH201A_AFTER_SEND_BYTES_FAILED: return CAS_2B_TUNER_DTVS205FH201A_SEND_CONTROL_DATA_FAILED; case DTVS205FH201A_FREQUENCY_VALUE_OUT_OF_RANGE: return CAS_2B_TUNER_DTVS205FH201A_FREQUENCY_VALUE_OUT_OF_RANGE; case DTVS205FH201A_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY: return CAS_2B_TUNER_DTVS205FH201A_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY; default: return CAS_2B_TUNER_DTVS205FH201A_GENERAL_FAILIUR; } }