?? tv_2in1.c
字號(hào):
#define _TV_2IN1_C_
#include "board.h"
#define _TV_C_
#include <math.h>
#include "types.h"
#include "Global.h"
#if TV_ENABLE
#include "Reg52.h"
#include "TV.h"
#include "devtuner.h"
#include "misc.h"
#include "nvram.h"
#include "DevVD.h"
#include "msVD.h"
#include "msosd.h"
#include "DEBUG.h"
#include "ms_reg.h"
#include "ms_rwreg.h"
#include "panel.h"
#include "mstar.h"
//#include "menudef.h"
#include "menu.h"
#include "UserPref.h"
#include "Tda7052.h"
#include "nvram.h"
#include "M2_vd_agc_lib.h"
#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif
BYTE XDATA g_ucTryTimes;
extern BYTE code strProgramText[LANG_Nums][12];
extern void devSetSWF(BYTE ColorSoundSystem);
extern void NVRam_WriteWord(WORD addr, WORD value);
extern void Osd_SetTextColor(BYTE foreColor, BYTE backColor);
extern BOOL ExecuteKeyEvent(MenuItemActionType menuAction);
#if TV_SYSTEM==TV_NTSC
code WORD tFreqCode_AirTV[] =
{
// x0 x1 x2 x3 x4 <Channel>
TN_N( 48.25), TN_N( 61.25), TN_N( 55.25), TN_N( 61.25), TN_N( 67.25), // 000 - 004
TN_N( 77.25), TN_N( 83.25), TN_N(175.25), TN_N(181.25), TN_N(187.25), // 005 - 009
TN_N(193.25), TN_N(199.25), TN_N(205.25), TN_N(211.25), TN_N(471.25), // 010 - 014
TN_N(477.25), TN_N(483.25), TN_N(489.25), TN_N(495.25), TN_N(501.25), // 015 - 019
TN_N(507.25), TN_N(513.25), TN_N(519.25), TN_N(525.25), TN_N(531.25), // 020 - 024
TN_N(537.25), TN_N(543.25), TN_N(549.25), TN_N(555.25), TN_N(561.25), // 025 - 029
TN_N(567.25), TN_N(573.25), TN_N(579.25), TN_N(585.25), TN_N(591.25), // 030 - 034
TN_N(597.25), TN_N(603.25), TN_N(609.25), TN_N(615.25), TN_N(621.25), // 035 - 039
TN_N(627.25), TN_N(633.25), TN_N(639.25), TN_N(645.25), TN_N(651.25), // 040 - 044
TN_N(657.25), TN_N(663.25), TN_N(669.25), TN_N(675.25), TN_N(681.25), // 045 - 049
TN_N(687.25), TN_N(693.25), TN_N(699.25), TN_N(705.25), TN_N(711.25), // 050 - 054
TN_N(717.25), TN_N(723.25), TN_N(729.25), TN_N(735.25), TN_N(741.25), // 055 - 059
TN_N(747.25), TN_N(753.25), TN_N(759.25), TN_N(765.25), TN_N(771.25), // 060 - 064
TN_N(777.25), TN_N(783.25), TN_N(789.25), TN_N(795.25), TN_N(801.25), // 065 - 069
};
// CATV-STD
code WORD tFreqCode_CATV[] =
{
// x0 x1 x2 x3 x4 <Channel>
TN_N( 48.25), TN_N( 73.25), TN_N( 55.25), TN_N( 61.25), TN_N( 67.25), // 000 - 004
TN_N( 77.25), TN_N( 83.25), TN_N(175.25), TN_N(181.25), TN_N(187.25), // 005 - 009
TN_N(193.25), TN_N(199.25), TN_N(205.25), TN_N(211.25), TN_N(121.25), // 010 - 014
TN_N(127.25), TN_N(133.25), TN_N(139.25), TN_N(145.25), TN_N(151.25), // 015 - 019
TN_N(157.25), TN_N(163.25), TN_N(169.25), TN_N(217.25), TN_N(223.25), // 020 - 024
TN_N(229.25), TN_N(235.25), TN_N(241.25), TN_N(247.25), TN_N(253.25), // 025 - 029
TN_N(259.25), TN_N(265.25), TN_N(271.25), TN_N(277.25), TN_N(283.25), // 030 - 034
TN_N(289.25), TN_N(295.25), TN_N(301.25), TN_N(307.25), TN_N(313.25), // 035 - 039
TN_N(319.25), TN_N(325.25), TN_N(331.25), TN_N(337.25), TN_N(343.25), // 040 - 044
TN_N(349.25), TN_N(355.25), TN_N(361.25), TN_N(367.25), TN_N(373.25), // 045 - 049
TN_N(379.25), TN_N(385.25), TN_N(391.25), TN_N(397.25), TN_N(403.25), // 050 - 054
TN_N(409.25), TN_N(415.25), TN_N(421.25), TN_N(427.25), TN_N(433.25), // 055 - 059
TN_N(439.25), TN_N(445.25), TN_N(451.25), TN_N(457.25), TN_N(463.25), // 060 - 064
TN_N(469.25), TN_N(475.25), TN_N(481.25), TN_N(487.25), TN_N(493.25), // 065 - 069
TN_N(499.25), TN_N(505.25), TN_N(511.25), TN_N(517.25), TN_N(523.25), // 070 - 074
TN_N(529.25), TN_N(535.25), TN_N(541.25), TN_N(547.25), TN_N(553.25), // 075 - 079
TN_N(559.25), TN_N(565.25), TN_N(571.25), TN_N(577.25), TN_N(583.25), // 080 - 084
TN_N(589.25), TN_N(595.25), TN_N(601.25), TN_N(607.25), TN_N(613.25), // 085 - 089
TN_N(619.25), TN_N(625.25), TN_N(631.25), TN_N(637.25), TN_N(643.25), // 090 - 094
TN_N( 91.25), TN_N( 97.25), TN_N(103.25), TN_N(109.25), TN_N(115.25), // 095 - 099
TN_N(649.25), TN_N(655.25), TN_N(661.25), TN_N(667.25), TN_N(673.25), // 100 - 104
TN_N(679.25), TN_N(685.25), TN_N(691.25), TN_N(697.25), TN_N(703.25), // 105 - 109
TN_N(709.25), TN_N(715.25), TN_N(721.25), TN_N(727.25), TN_N(733.25), // 110 - 114
TN_N(739.25), TN_N(745.25), TN_N(751.25), TN_N(757.25), TN_N(763.25), // 115 - 119
TN_N(769.25), TN_N(775.25), TN_N(781.25), TN_N(787.25), TN_N(793.25), // 120 - 124
TN_N(799.25) // 125
};
WORD NTSCChannelVsIsValid(BYTE ucSourceIndex,BYTE chIndex,WORD uwCompareFreq)
{
WORD uwtemp;
if(ucSourceIndex==NTSC_ATV)
uwtemp=tFreqCode_AirTV[chIndex];
else
uwtemp=tFreqCode_CATV[chIndex];
if(abs(uwtemp-uwCompareFreq)<STEPS_1M)
{
uwtemp=uwCompareFreq;
}
return uwtemp;
}
WORD CurrentChannelFreq(BYTE ucChannel)
{
if (g_TVChSetting.ucTVSource== NTSC_ATV) // air TV
return tFreqCode_AirTV[ucChannel];
else
return tFreqCode_CATV[ucChannel];
}
#endif
BYTE code AUTOAFCMappingValue[16]=
{
0x08,// 0
0x09,// 1
0x0A,// 2
0x0B,// 3
0x0C,// 4
0x0D,// 5
0x0E,// 6
0x0F,// 7
0x00,// 8
0x01,// 9
0x02,// A
0x03,// B
0x04,// C
0x05,// D
0x06,// E
0x07,// F
};
BYTE GetAFCValue(BYTE ucLoopCount)
{
BYTE value;
value= devTunerGetStatus(ucLoopCount);
value &= 0x1e;
value >>= 1;
value &= 0x0f;//16 counts
return AUTOAFCMappingValue[value];//abs(value-7);//alue;//
}
void TurnerAFCHandler(void)
{
BYTE AFCValue,uctempAFCTunerCount;
WORD wtempFre;
if(!PowerOnFlag||!IsTVInUse())
return;
else if(AFCDisableFlag)
return;
else if(!(chData.ucChannelMisc&DoAFCFlag))
return;
else if(!(g_VdInfo.wVideoStatus&VD_HSYNC_LOCKED))
return;
AFCValue = GetAFCValue(5);
uctempAFCTunerCount=g_ucAFCTuneCounter;
wtempFre=chData.wFreq;
if(AFCValue>9)
{//printMsg("AFCValue>>>>9");
wtempFre++;
uctempAFCTunerCount++;
}
else if(AFCValue<6)
{//printMsg("AFCValue>>>>6");
wtempFre--;
uctempAFCTunerCount--;
}
else
return;
if(uctempAFCTunerCount<AFCTUNEMINCOUNT||uctempAFCTunerCount>AFCTUNEMAXCOUNT)
{//printMsg("uctempAFCTunerCount OUT OF RANGE ");
return;
}
g_ucAFCTuneCounter=uctempAFCTunerCount;
chData.wFreq=wtempFre;
DevTunerWrite(chData.wFreq);
}
BOOL CheckTunerVsIsValid(WORD Vs)
{
if((Vs>=TN_FREQMIN)&&(Vs<=TN_FREQMAX))
return TRUE;
else
return FALSE;
}
void ReadTVChannelInfo(BYTE ch, BOOL ReallyAddr)
{
ReallyAddr=ReallyAddr;
NVRam_ReadTbl(nvrChanneAddr(ch), (BYTE*)&chData,SIZE_TV_CHANNEL_INFO);
if(!CheckTunerVsIsValid(chData.wFreq))
chData.wFreq=TN_FREQ_INVILIDDEF;
#if TV_SYSTEM==TV_NTSC
chData.wFreq=NTSCChannelVsIsValid(g_TVChSetting.ucTVSource,ch,chData.wFreq);
#endif
}
void SaveTVChannelInfo(BYTE ch, BOOL ReallyAddr)
{
ReallyAddr=ReallyAddr;
if(!CheckTunerVsIsValid(chData.wFreq))
chData.wFreq=TN_FREQ_INVILIDDEF;
NVRam_WriteTbl(nvrChanneAddr(ch), (BYTE*)&chData,SIZE_TV_CHANNEL_INFO);
}
void TV_SelectChannel( BYTE ucChannel )
{
#if TV_SYSTEM==TV_NTSC
if(ucChannel>=TV_MAX_CHANNEL_NUM&&g_TVChSetting.ucTVSource==NTSC_ATV)
return;
else if(ucChannel>=CATV_MAX_CHANNEL_NUM&&g_TVChSetting.ucTVSource==NTSC_CTV)
return;
#else
if(ucChannel>=TV_MAX_CHANNEL_NUM)
return;
#endif
g_TVChSetting.ucPreChannelNO = g_TVChSetting.ucCurChannelNO;
g_TVChSetting.ucCurChannelNO = ucChannel;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource==NTSC_ATV)
g_TVChSetting.ucATVChannelNO=ucChannel;
else
g_TVChSetting.ucCTVChannelNO=ucChannel;
#endif
TV_SetCh();
}
void TV_SelectPreChannel(void)
{
BYTE temp;
temp=g_TVChSetting.ucCurChannelNO;
g_TVChSetting.ucCurChannelNO=g_TVChSetting.ucPreChannelNO;
g_TVChSetting.ucPreChannelNO=temp;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource==NTSC_ATV)
g_TVChSetting.ucATVChannelNO=g_TVChSetting.ucCurChannelNO;
else
g_TVChSetting.ucCTVChannelNO=g_TVChSetting.ucCurChannelNO;
#endif
TV_SetCh();
}
void TV_SetCh(void)
{
VD_AGC_ResetGain( g_uwVideoAGC );
ReadTVChannelInfo(g_TVChSetting.ucCurChannelNO,FALSE);
g_TVChSetting.TvCurChannelMisc=chData.ucChannelMisc;
DevTunerWrite(chData.wFreq);
devSetSWF(chData.ucChannelMisc);
devTunerSetAGCValue(g_VideoSetting.TunerAGC);
msVDReset();
//if( g_ucmsVDCtl&MSVD_CTL_FLAG_NOISE_HANDLER )
msVDNoiseHandlerReset();
SaveChannelNumberSetting();
Set_InputTimingChangeFlag();
Set_AFCDisableFlag();
Set_ChannelAFCFlag();
msVDColorBurstHandler( VD_COLOR_BURST_HANDLER_RESET );
}
BYTE TV_GetIncValidChannel( BYTE ucCurChannel )
{
BYTE ucTemp;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource==NTSC_ATV)
ucTemp=TV_MAX_CHANNEL_NUM;
else
ucTemp=CATV_MAX_CHANNEL_NUM;
#else
ucTemp=TV_MAX_CHANNEL_NUM;
#endif
ucCurChannel++;
ucCurChannel%=ucTemp;
return ucCurChannel;
}
BYTE TV_GetDecValidChannel( BYTE ucCurChannel )
{
BYTE ucTemp;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource==NTSC_ATV)
ucTemp=TV_MAX_CHANNEL_NUM;
else
ucTemp=CATV_MAX_CHANNEL_NUM;
#else
ucTemp=TV_MAX_CHANNEL_NUM;
#endif
ucCurChannel+=(ucTemp-1);
ucCurChannel%=ucTemp;
return ucCurChannel;
}
BYTE SearchTVNoSkipChannel(BYTE channel,BOOL Inc)
{
BYTE BkChannel=channel;
BYTE temp;
//WORD wTempAdd;
do
{
WatchDogClear();
if(Inc)
channel=TV_GetIncValidChannel(channel);
else
channel=TV_GetDecValidChannel(channel);
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource==NTSC_ATV)
{
temp=g_ucTVChannelSkipInfoBuff[channel/8];
}
else
{
temp=g_ucCATVChannelSkipInfoBuff[channel/8];
}
#else
temp=g_ucTVChannelSkipInfoBuff[channel/8];
#endif
temp&=1<<(channel%8);
if((temp)||channel==g_TVChSetting.ucCurChannelNO)
break;
}while(BkChannel!=channel);
return channel;
}
void SaveChannelSkipInfo( BYTE chIdx ,BIT bSkipIndex)
{
BYTE ucTemp,ucTempInfoBit,ucTempValue;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource == NTSC_ATV)
{
NVRam_ReadByte(nvrTVChanneSkipInfoAddr(chIdx), &ucTemp);
}
else
{
NVRam_ReadByte(nvrCATVChanneSkipInfoAddr(chIdx), &ucTemp);
}
#else
NVRam_ReadByte(nvrTVChanneSkipInfoAddr(chIdx), &ucTemp);
#endif
ucTempInfoBit=chIdx%8;
ucTempValue=((BYTE)bSkipIndex<<ucTempInfoBit);
ucTempInfoBit=1<<ucTempInfoBit;
ucTemp&=~ucTempInfoBit;
ucTemp|=ucTempValue;
#if TV_SYSTEM==TV_NTSC
if(g_TVChSetting.ucTVSource == NTSC_ATV)
{
g_ucTVChannelSkipInfoBuff[chIdx/8]=ucTemp;
NVRam_WriteByte(nvrTVChanneSkipInfoAddr(chIdx), ucTemp);
}
else
{
g_ucCATVChannelSkipInfoBuff[chIdx/8]=ucTemp;
NVRam_WriteByte(nvrCATVChanneSkipInfoAddr(chIdx), ucTemp);
}
#else
g_ucTVChannelSkipInfoBuff[chIdx/8]=ucTemp;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -