#include "VP13HRTuner.h" #include "Cas2BRoutines.h" #include "IicComm.h" #if SUPPORT_TUNER_VP13HR #define F_IF 44000 //in KHz #define N_MAX 32768 //15 bits int TunerVP13HRSendCenterFrequency(unsigned long ulFrequency,TYPE_TUNER_VP13HR_REF_DIVIDER_RATIO iReferenceDividerRatio, BOOLEAN bIsFMTrap){ unsigned char ucaDataBytes[4]; unsigned long ulMult,ulN; int iVal = 0; ucaDataBytes[0] = 0x00; ucaDataBytes[1] = 0x00; ucaDataBytes[2] = 0x80; ucaDataBytes[3] = 0x00; switch(iReferenceDividerRatio){ case TUNER_VP13HR_REF_DIVIDER_RATIO_50: ulMult = 80; break; case TUNER_VP13HR_REF_DIVIDER_RATIO_31_25: ulMult = 128; break; case TUNER_VP13HR_REF_DIVIDER_RATIO_62_5: ulMult = 64; break; default: return VP13HR_UNDEFINED_REFERENCE_DIVIDER_RATIO; } // calculate N ulN = ((ulFrequency + 44000/*F_IF*/) * ulMult) / 4000; if(ulN > 32768/*15 bits*/){ //max n in 14 bits ulN = (ulN/2 * 10 + 5)/10; } if (ulN >= 32768) //15 bits return VP13HR_N_CALCULATION_FAILED; ucaDataBytes[0] = (unsigned char)((ulN & 0x07f00) >> 8); ucaDataBytes[1] = (unsigned char)(ulN & 0xff); //CP auto ucaDataBytes[2] = 0x88; if((ulFrequency > 150000 && ulFrequency <= 174000) || (ulFrequency > 402000 && ulFrequency <= 468000) || (ulFrequency > 758000 && ulFrequency <= 864000)){ ucaDataBytes[2] |= 0x40; } //step size iVal = iReferenceDividerRatio; if(iReferenceDividerRatio == 2)//in case of 62.5 iReferenceDividerRatio sould be 3 iVal++; ucaDataBytes[2] |= iVal << 1; //band switch byte if(ulFrequency > 54000 && ulFrequency <= 174000) ucaDataBytes[3] = 0x01; else if(ulFrequency > 174000 && ulFrequency <= 468000) ucaDataBytes[3] = 0x02; else if(ulFrequency > 468000 && ulFrequency <= 864000) ucaDataBytes[3] = 0x08; else//like low band ucaDataBytes[3] = 0x01; if(bIsFMTrap) ucaDataBytes[3] |= 0x04; if(FALSE == BeforeTunerSendBytes()) return VP13HR_SEND_CONTROL_DATA_FAILED; if (0 != IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE), ucaDataBytes, 4)) { return VP13HR_SEND_CONTROL_DATA_FAILED; } if(FALSE == AfterTunerSendBytes()) return VP13HR_SEND_CONTROL_DATA_FAILED; return VP13HR_SUCCESS; } int TunerVP13HRAFT(unsigned long ulFrequency,TYPE_TUNER_VP13HR_REF_DIVIDER_RATIO iReferenceDividerRatio, BOOLEAN bIsFMTrap) { /* F = F0 */ unsigned long ulF = ulFrequency; unsigned int FirstTime=1; /* Send to Tuner */ TunerVP13HRSendCenterFrequency(ulFrequency ,iReferenceDividerRatio, bIsFMTrap); /* Delay by 300ms */ OS_mDelay(300); /* Is the Tuner Locked ? */ Step1: if (TLSys_NTSC_LOCKED()) goto Step2; /* Locked */ else { ulF-=750; /* F = F - 750KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulF 2.04V */ goto Step3; else { ulF-=125; /* F = F - 125KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulFulFrequency+2250)/* Check if inside the frequency limits */ return TunerVP13HRSendCenterFrequency(ulFrequency ,iReferenceDividerRatio, bIsFMTrap); /* FINISH AFT */ else { OS_mDelay(30); /* Delay by 30ms */ goto Step3; } } } /* Is the Tuner Locked ? */ Step4: OS_mDelay(100); /* Delay by 100ms */ if (TLSys_NTSC_LOCKED()) goto Step5; /* Locked */ else { ulF+=750; /* F = F + 750KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulF>ulFrequency+2250) /* Check if inside the frequency limits */ return TunerVP13HRSendCenterFrequency(ulFrequency ,iReferenceDividerRatio, bIsFMTrap); /* FINISH AFT */ else goto Step4; } Step5: if (TLSys_AFT_Read()==3) /* AFT > 2.04V */ goto Step3; else { ulF+=125; /* F = F + 125KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulF>ulFrequency+2250)/* Check if inside the frequency limits */ return TunerVP13HRSendCenterFrequency(ulFrequency ,iReferenceDividerRatio, bIsFMTrap); /* FINISH AFT */ else { Demux_STCDelay(90 * 30); /* Delay by 30ms */ goto Step5; } } Step6: if (TLSys_AFT_Read()==0) /* AFT < 1.47V */ goto Step8; else { ulF-=125; /* F = F - 125KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulFulFrequency+2250)/* Check if inside the frequency limits */ return TunerVP13HRSendCenterFrequency(ulFrequency ,iReferenceDividerRatio, bIsFMTrap); /* FINISH AFT */ else { Demux_STCDelay(90 * 30); /* Delay by 30ms */ goto Step7; } } Step8: if (TLSys_AFT_Read()==3) /* AFT > 2.04V */ goto Step7; else { ulF-=62; /* F = F - 62.5KHz */ TunerVP13HRSendCenterFrequency(ulF ,iReferenceDividerRatio, bIsFMTrap); /* Send to Tuner */ if (ulF= 2) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 2: ulFrequency = 57; break; case 3: ulFrequency = 63; break; case 4: ulFrequency = 69; break; case 5: ulFrequency = 79; break; case 6: ulFrequency = 85; break; } } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFrequency = 174 + ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 69)) { ulFrequency = 470 + ((uiChannelNumber - 14) * 6) + 3; } return ulFrequency * 1000; } else if(1 == iChannelTable){//CATV if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: ulFrequency = 75; break; case 2: ulFrequency = 57; break; case 3: ulFrequency = 63; break; case 4: ulFrequency = 69; break; case 5: ulFrequency = 79; break; case 6: ulFrequency = 85; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFrequency = 90 + ((uiChannelNumber - 95) * 6) + 3; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFrequency = 174 + ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFrequency = 120 + ((uiChannelNumber - 14) * 6) + 3; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFrequency = 216 + ((uiChannelNumber - 23) * 6) + 3; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFrequency = 648 + ((uiChannelNumber - 100) * 6) + 3; } return ulFrequency * 1000; } else if(2 == iChannelTable){//IRC if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: ulFrequency = 75; break; case 2: ulFrequency = 57; break; case 3: ulFrequency = 63; break; case 4: ulFrequency = 69; break; case 5: ulFrequency = 81; break; case 6: ulFrequency = 87; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFrequency = 90 + ((uiChannelNumber - 95) * 6) + 3; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFrequency = 174+ ((uiChannelNumber - 7) * 6) + 3; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFrequency = 120 + ((uiChannelNumber - 14) * 6) + 3; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFrequency = 216 + ((uiChannelNumber - 23) * 6) + 3; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFrequency = 648 + ((uiChannelNumber - 100) * 6) + 3; } return ulFrequency * 1000; } else if(3 == iChannelTable){//HRC if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) { switch (uiChannelNumber) { case 1: ulFrequency = 75000; break; case 2: ulFrequency = 55753; break; case 3: ulFrequency = 61753; break; case 4: ulFrequency = 66753; break; case 5: ulFrequency = 79754; break; case 6: ulFrequency = 85754; break; } } else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) { ulFrequency = (917545 + ((uiChannelNumber - 95) * 60003))/10; } else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) { ulFrequency = (1757587 + ((uiChannelNumber - 7) * 60003))/10; } else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) { ulFrequency = (1217560 + ((uiChannelNumber - 14) * 60003))/10; } else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) { ulFrequency = (2177608 + ((uiChannelNumber - 23) * 60003))/10; } else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) { ulFrequency = (6497824 + ((uiChannelNumber - 100) * 60003))/10; } return ulFrequency ; } else return 0; } #endif