⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tv_2in1.c

📁 MST726驱动TFT屏程序,源代码!很好的资料
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 "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;
	NVRam_WriteByte(nvrTVChanneSkipInfoAddr(chIdx), ucTemp);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -