亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tv_2in1.c

?? mstar716驅動源代碼
?? 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);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美电影一区二区| 日韩国产精品久久| 五月天丁香久久| 国产精品一区二区三区四区| 欧美性生活影院| 国产色产综合色产在线视频| 亚洲成在线观看| 国产成人在线视频免费播放| 91精品国产综合久久久久久漫画| 中国色在线观看另类| 亚州成人在线电影| 99精品在线免费| 久久免费视频一区| 日本不卡的三区四区五区| 99天天综合性| 欧美国产一区在线| 日韩vs国产vs欧美| 欧美手机在线视频| 亚洲综合在线电影| 99久久伊人精品| 国产欧美一区二区精品性| 五月天丁香久久| 91女厕偷拍女厕偷拍高清| 精品少妇一区二区三区| 亚洲成人精品一区二区| 91成人免费在线| 亚洲综合一区在线| 欧美在线free| 亚洲一区成人在线| 在线观看av不卡| 亚洲精品乱码久久久久久日本蜜臀| 国产精品系列在线观看| 2欧美一区二区三区在线观看视频| 免费不卡在线视频| 91精品婷婷国产综合久久| 亚洲午夜精品17c| 欧美性猛片xxxx免费看久爱| 亚洲午夜免费视频| 欧美精品在欧美一区二区少妇| 亚洲国产欧美日韩另类综合 | 国产91清纯白嫩初高中在线观看| 欧美精品一区二区三区一线天视频| 免费黄网站欧美| 欧美精品一区二区三区四区| 成人午夜av影视| 中文字幕一区免费在线观看| 91小视频在线| 婷婷开心久久网| 精品国产污污免费网站入口 | 亚洲综合小说图片| 制服丝袜亚洲精品中文字幕| 日本美女视频一区二区| 欧美一卡二卡在线| 成人一区二区三区| 一区二区三区精品视频| 欧美一区二区三区视频免费播放| 国产一区欧美日韩| 亚洲欧美aⅴ...| 欧美成人a∨高清免费观看| 国产激情视频一区二区三区欧美 | 久久久av毛片精品| 99精品视频在线免费观看| 亚洲sss视频在线视频| 日韩精品一区二区三区在线播放 | 亚洲欧美日韩中文播放| 欧美日本一区二区| 国产成人亚洲综合a∨猫咪| 亚洲乱码中文字幕| 精品免费视频.| 91婷婷韩国欧美一区二区| 日本麻豆一区二区三区视频| 亚洲欧洲性图库| 欧美一级二级在线观看| 91香蕉视频污| 国产精品18久久久久| 亚洲在线成人精品| 久久久99精品免费观看不卡| 欧美色图天堂网| 99久久er热在这里只有精品66| 亚洲午夜久久久久中文字幕久| 国产欧美综合在线| 欧美日韩mp4| 色综合一区二区| 国产自产视频一区二区三区 | 国产精品久久久久aaaa樱花| 91麻豆精品国产91久久久久久久久| 成人午夜视频免费看| 久久99国产精品久久99 | 国内精品久久久久影院色| 亚洲精品亚洲人成人网在线播放| 久久久噜噜噜久久人人看 | 国产精品久久久久9999吃药| 91精品国产综合久久蜜臀| 91久久久免费一区二区| 高清国产一区二区三区| 美国十次了思思久久精品导航| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日韩欧美一级在线播放| 欧美日韩精品三区| 色美美综合视频| 97国产精品videossex| 国产精品18久久久久久久久| 人禽交欧美网站| 日韩黄色小视频| 亚洲bdsm女犯bdsm网站| 亚洲成人av福利| 樱花草国产18久久久久| 亚洲免费看黄网站| 亚洲私人影院在线观看| 国产精品护士白丝一区av| 中文无字幕一区二区三区| 国产欧美日韩在线视频| 日本一区二区免费在线观看视频| 久久嫩草精品久久久精品一| 精品国产乱码久久久久久蜜臀| 制服.丝袜.亚洲.中文.综合| 777亚洲妇女| 欧美一区二区女人| 欧美v日韩v国产v| 亚洲精品一区二区三区香蕉| 日韩精品中午字幕| 精品国产免费人成电影在线观看四季| 欧美一级日韩不卡播放免费| 精品理论电影在线观看| 精品国产乱码久久久久久久| 久久精品视频在线看| 欧美精彩视频一区二区三区| 自拍偷拍欧美精品| 亚洲午夜影视影院在线观看| 免费成人结看片| 粉嫩久久99精品久久久久久夜| 成人午夜免费电影| 91蜜桃在线免费视频| 欧美亚洲综合色| 欧美一区二区视频观看视频| 日韩欧美成人激情| 国产三级精品三级在线专区| 亚洲三级小视频| 午夜精品国产更新| 韩国三级中文字幕hd久久精品| 成人一区二区视频| 欧美亚洲综合一区| 欧美一级黄色大片| 国产精品国产三级国产aⅴ原创| 亚洲中国最大av网站| 麻豆精品一区二区| 99精品久久久久久| 在线播放亚洲一区| 国产亚洲福利社区一区| 亚洲制服丝袜av| 国内精品免费**视频| 欧美在线视频全部完| 日韩精品一区国产麻豆| 亚洲精品水蜜桃| 国产一区二区视频在线播放| 日本精品视频一区二区| 欧美一级高清片| 一区二区三区国产精华| 国产一区二区不卡| 欧美日韩免费高清一区色橹橹| 久久综合狠狠综合久久综合88 | 久久久久久久久久久电影| 一区二区三区在线视频观看| 久久国产精品无码网站| 99国产精品久久| 久久一日本道色综合| 亚洲大片免费看| 成人v精品蜜桃久久一区| 欧美电影免费观看高清完整版在 | 日本一区二区成人| 久久se精品一区二区| 97久久超碰国产精品电影| 91精品福利在线一区二区三区| 亚洲色图在线播放| 国产麻豆视频一区| 日韩一区二区三区四区五区六区| 国产精品久久久久久久第一福利| 日韩av一区二区在线影视| 成人av网站在线| xf在线a精品一区二区视频网站| 亚洲成人先锋电影| 91成人免费在线| 亚洲欧美日本韩国| 成人免费高清在线| 国产欧美精品一区aⅴ影院| 日本aⅴ亚洲精品中文乱码| 欧美丝袜自拍制服另类| 亚洲色图视频网| 成人av网站在线观看| 欧美激情在线免费观看| 国产精品白丝jk黑袜喷水| 欧美tickling挠脚心丨vk| 日本亚洲欧美天堂免费| 在线不卡中文字幕播放| 五月婷婷综合网| 欧美午夜精品理论片a级按摩| 一区二区三区日韩欧美精品 | 成人黄色在线看| 日本一区二区三区视频视频| 国产91高潮流白浆在线麻豆|