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

📄 tv_mmi.c

📁 泰景的模拟电视全部驱动及MTK平台界面代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "Tv_Include.h"

unsigned char Tlg_i2c_write_data(unsigned char dadd, unsigned short	radd, unsigned short *data);
unsigned char Tlg_i2c_read_data(unsigned char dadd, unsigned short radd, unsigned short *data);

TLG_TV_SCANLINES gTvScanLines;
TLG_TV_OPTIONS gTvOptions;
TLG_TV_STORAGE gTvStorage;
TLG_FM_OPTIONS gFmOptions;
TLG_FM_STORAGE gFmStorage;

void TLG_WriteLog(char *str)
{
}

DECLSPEC TLGI2C_WriteBurst(unsigned i2c_addr, unsigned start_addr, int length, unsigned	short *	data)
{
	return 0;
}

DECLSPEC TLGI2C_ReadBurst(unsigned i2c_addr, unsigned start_addr, int length, unsigned short * data)
{
	return 0;
}

DECLSPEC TLGI2C_WriteReg(unsigned i2c_addr, unsigned reg_addr, unsigned	short data)
{
	return Tlg_i2c_write_data((unsigned char)i2c_addr, (unsigned short)reg_addr, &data);
}

DECLSPEC TLGI2C_ReadReg(unsigned i2c_addr, unsigned reg_addr, unsigned short * data)
{
	return Tlg_i2c_read_data((unsigned char)i2c_addr, (unsigned short)reg_addr, data);
}

void TLG_Delay(uint16 milliseconds)
{
	volatile uint32 delay;
	for (delay = milliseconds * 20000; delay > 0; delay--);
}

/*****************************************************************************
* TLGAPP_SetLnaGpio
* BEGIN CUSTOM SECTION: This procedure is called to perform LNA switching.
* It may be customized for a given build.
*****************************************************************************/
#ifdef TLG1100
#if TLG_VERSION_MAJOR == 1 && TLG_VERSION_MINOR == 9 && TLG_VERSION_PATCH == 3
TLG1100DLL_API void TLGAPP_SetLnaGpio(uint32 hz)
#elif TLG_VERSION_MAJOR == 1 && TLG_VERSION_MINOR == 10 && TLG_VERSION_PATCH == 0
TLGDLL_API void TLGAPP_SetLnaGpio(uint32 hz)
#endif
#else
#ifdef TLG3100
TLG3100DLL_API void TLGAPP_SetLnaGpio(uint32 hz)
#else
#ifdef TLG1120
#endif /* TLG1120 */
#endif /* TLG3100 */
#endif /* TLG1100 */

#ifndef TLG1120
{
	if (hz > TLG_UHF_CUTOFF_HZ)
	{
		if (tlg_cur_lna != TLG_LNA_UHF)
		{
			tlg_cur_lna = TLG_LNA_UHF;
			/** BEGIN CUSTOM SECTION: DO GPIO FOR UHF SWITCH HERE **/
			TLG_SetGPIOEnable(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_SET|TLG_GPIO2_SET);
			TLG_SetGPIOOutput(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_SET|TLG_GPIO2_SET);
		}

	} else if (hz > TLG_VHF2_CUTOFF_HZ) {
		if (tlg_cur_lna != TLG_LNA_VHF2)
		{
			tlg_cur_lna = TLG_LNA_VHF2;
			/** BEGIN CUSTOM SECTION: DO GPIO FOR VHF2 SWITCH HERE **/
			TLG_SetGPIOEnable(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_SET|TLG_GPIO2_SET);
			TLG_SetGPIOOutput(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_SET|TLG_GPIO2_CLR);
		}
	} else {
		if (tlg_cur_lna != TLG_LNA_VHF1)
		{
			tlg_cur_lna = TLG_LNA_VHF1;
			/** BEGIN CUSTOM SECTION: DO GPIO FOR VHF1 SWITCH HERE **/
			TLG_SetGPIOEnable(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_SET|TLG_GPIO2_SET);
			TLG_SetGPIOOutput(tlg_i2c_addr, TLG_GPIO1|TLG_GPIO2, TLG_GPIO1_CLR|TLG_GPIO2_CLR);
		}
	}
}
#endif /* TLG1120 */

void TLGAPP_InitVideoAndAudio(void)
{
	TLG_SetChnStandard(tlg_i2c_addr, TLG_VSTD_NTSC_M);
	TLG_SetChnBandwidth(tlg_i2c_addr, TLG_BW_6);

	tlg_cur_gain = 4;
	tlg_cur_aud_mode = TLG_DAC;
	if (tlg_cur_aud_mode != TLG_DAC)
		TLG_SetAudioSampleRate(tlg_i2c_addr, TLG_AUD_RATE_26_367KHZ);
	TLG_SetAudioMode(tlg_i2c_addr, tlg_cur_aud_mode);
	TLG_SetAudioGain(tlg_i2c_addr, tlg_cur_aud_mode, tlg_cur_gain);
	TLG_SetAudioChan(tlg_i2c_addr, TLG_LEFT_RIGHT);
	TLG_SetAudioEnable(tlg_i2c_addr, TLG_ENABLE);

	TLG_Set601VideoOutClock(tlg_i2c_addr, TLG_NORMAL);
	TLG_SetHDecimate(tlg_i2c_addr, TLG_ON);
	TLG_SetVidOutType(tlg_i2c_addr, TLG_VID_LCD);
	TLG_SetVSyncPolarity(tlg_i2c_addr, TLG_ACTIVE_LOW);
	TLG_SetHSyncPolarity(tlg_i2c_addr, TLG_ACTIVE_HIGH);
	TLG_SetHsyncLowPower(tlg_i2c_addr, TLG_ON);

	TLG_SetAntennaType(tlg_i2c_addr, TLG_ANTENNA_DEF);
}

const TLG_REGION_SETTING RegionSetting[] = {
	{/* TLG_REGION_USA */			tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_CANADA */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_KOREA */			tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_TAIWAN */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_MEXICO */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_CHILE */			tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_VENEZUELA */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_PHILIPPINES */	tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_JAMAICA */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_CHINA */			tlg_china_pald_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_D,		TLG_TV_625_LINES},
	{/* TLG_REGION_SHENZHEN */		tlg_shenzhen_map,				TLG_BW_8,	TLG_VSTD_PAL_I,		TLG_TV_625_LINES},
	{/* TLG_REGION_VIETNAM */		tlg_vietnam_pal_d_k_chn_map,			TLG_BW_8,	TLG_VSTD_PAL_D,		TLG_TV_625_LINES},
	{/* TLG_REGION_W_EUROPE */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_TURKEY */ 		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_UAE */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_AFGHANISTAN */ 	tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_SINGAPORE */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_THAILAND */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_CAMBODIA */ 		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_INDONESIA */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_MALAYSIA */ 		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_LAOS */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_PORTUGAL */ 		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_SWEDEN */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_PAKISTAN */ 		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_SPAIN */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_JAPAN */			tlg_ntsc_japan_chn_map,		TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_UK */			tlg_pal_i_chn_map,			TLG_BW_8,	TLG_VSTD_PAL_I,		TLG_TV_625_LINES},
	{/* TLG_REGION_HONGKONG  */	tlg_pal_i_chn_map,			TLG_BW_8,	TLG_VSTD_PAL_I,		TLG_TV_625_LINES},
	{/* TLG_REGION_SOUTHAFRICA */	tlg_pal_i_chn_map,			TLG_BW_8,	TLG_VSTD_PAL_I,		TLG_TV_625_LINES},
	{/* TLG_REGION_BRAZIL */		tlg_brazil_pal_m_chn_map,			TLG_BW_6,	TLG_VSTD_PAL_M,		TLG_TV_525_LINES},
	{/* TLG_REGION_ARGENTINA */		tlg_argentina_pal_nc_chn_map,			TLG_BW_6,	TLG_VSTD_PAL_NC,	TLG_TV_625_LINES},
	{/* TLG_REGION_INDIA */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_BURMA */			tlg_burma_chn_map,			TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_SUDAN */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_YEMEN */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_PERU */			tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_BOLIVIA */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_ECUADOR */		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_SURINAME */ 		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_AUSTRALIA */		tlg_australia_pal_b_chn_map,	TLG_BW_7,	TLG_VSTD_PAL_B,		TLG_TV_625_LINES},
	{/* TLG_REGION_NEWZEALAND */	tlg_new_zealand_pal_b_chn_map,TLG_BW_7,	TLG_VSTD_PAL_B,		TLG_TV_625_LINES},
	{/* TLG_REGION_COLUMBIA */ 		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_COSTARICA */	tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_HONDURAS */ 		tlg_ntsc_chn_map,				TLG_BW_6,	TLG_VSTD_NTSC_M,	TLG_TV_525_LINES},
	{/* TLG_REGION_GERMAN */		tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_ITALY */			tlg_italy_chn_map,				TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
	{/* TLG_REGION_KENYA */			tlg_pal_b_g_chn_map,		TLG_BW_8,	TLG_VSTD_PAL_G,		TLG_TV_625_LINES},
};

void TLGAPP_InitHsyncAndVsync(void)
{
	uint16 v_hi_start1, v_hi_stop1, v_hi_start2, v_hi_stop2, v_hi_start3, v_hi_stop3;
	uint16 h_hi_start, h_hi_stop, h_kill_start1, h_kill_stop1, h_kill_start2, h_kill_stop2;

	switch(gTvScanLines)
	{
		case TLG_TV_525_LINES:
			TLG_SetChromaLumaOrder(tlg_i2c_addr, TLG_CHRLUM_NORMAL);
			TLG_SetCbCrOrder(tlg_i2c_addr, TLG_CBCR_NORMAL);

			h_hi_start 	= 139+((H_OFFSET_525+gTvOptions.mHOffset)*2+(H_REDUCE_525+gTvOptions.mHReduce))*PIXEL_STEP;
			h_hi_stop 	= 858+((H_OFFSET_525+gTvOptions.mHOffset-H_OFFSET_RANGE)*2-(H_REDUCE_525+gTvOptions.mHReduce))*PIXEL_STEP;
			h_kill_start1	= 1;
			h_kill_stop1 	= 19+(V_OFFSET_525+gTvOptions.mVOffset+(V_REDUCE_525+gTvOptions.mVReduce+1)/2)*PIXEL_STEP;
			h_kill_start2 	= 264+(V_OFFSET_525+gTvOptions.mVOffset-(V_REDUCE_525+gTvOptions.mVReduce+0)/2-V_OFFSET_RANGE)*PIXEL_STEP;
			h_kill_stop2	= 525;
			v_hi_start1 	= 1;
			v_hi_stop1 	= h_kill_stop1;
			v_hi_start2 	= 0;
			v_hi_stop2 	= 0;
			v_hi_start3 	= 0;
			v_hi_stop3 	= 0;
			break;

		case TLG_TV_625_LINES:
			TLG_SetChromaLumaOrder(tlg_i2c_addr, TLG_CHRLUM_NORMAL);
			TLG_SetCbCrOrder(tlg_i2c_addr, TLG_CBCR_NORMAL);

			h_hi_start 	= 145+((H_OFFSET_625+gTvOptions.mHOffset)*2+(H_REDUCE_625+gTvOptions.mHReduce))*PIXEL_STEP;
			h_hi_stop 	= 864+((H_OFFSET_625+gTvOptions.mHOffset-H_OFFSET_RANGE)*2-(H_REDUCE_625+gTvOptions.mHReduce))*PIXEL_STEP;
			h_kill_start1	= 1;
			h_kill_stop1 	= 22+(V_OFFSET_625+gTvOptions.mVOffset+(V_REDUCE_625+gTvOptions.mVReduce+1)/2)*PIXEL_STEP;
			h_kill_start2 	= 311+(V_OFFSET_625+gTvOptions.mVOffset-(V_REDUCE_625+gTvOptions.mVReduce+0)/2-V_OFFSET_RANGE)*PIXEL_STEP;
			h_kill_stop2	= 625;
			v_hi_start1 	= 1;
			v_hi_stop1 	= h_kill_stop1;
			v_hi_start2 	= 0;
			v_hi_stop2 	= 0;
			v_hi_start3 	= 0;
			v_hi_stop3 	= 0;
			break;

		default:
#ifdef WIN32
			printf("ATV ERROR: Unsupported scan lines!\n\n");
#else
#ifdef ADS_MTK
			kal_prompt_trace(MOD_MMI, "ATV ERROR: Unsupported scan lines!\n");
#else /* default */
			;
#endif /* ADS_MTK */
#endif /* WIN32 */
	}
	
	TLG_SetExtHSync(tlg_i2c_addr, h_hi_start, h_hi_stop, h_kill_start1, h_kill_stop1, h_kill_start2, h_kill_stop2);
	TLG_SetExtVSync(tlg_i2c_addr, v_hi_start1, v_hi_stop1, v_hi_start2, v_hi_stop2, v_hi_start3, v_hi_stop3);

#ifdef WIN32
	printf("TLG_SetExtHSync(tlg_i2c_addr, %d, %d, %d, %d, %d, %d);\n", h_hi_start, h_hi_stop, h_kill_start1, h_kill_stop1, h_kill_start2, h_kill_stop2);
	printf("TLG_SetExtVSync(tlg_i2c_addr, %d, %d, %d, %d, %d, %d);\n", v_hi_start1, v_hi_stop1, v_hi_start2, v_hi_stop2, v_hi_start3, v_hi_stop3);
	printf(" TV window: w=%d, h=%d\n", (h_hi_stop - h_hi_start + 1) / 2, h_kill_start2 - h_kill_stop1 - 1);
#endif /* WIN32 */
}

void TLGAPP_InitTvChannelMap(void)
{
	if (gTvStorage.mRegion < TLG_REGION_TOTAL)
	{
	  	TLGAPP_SetChannelMap(
			(uint32 (*)[4])RegionSetting[gTvStorage.mRegion].chnmap,
#ifdef TLG1100
			TLG_MODE_ANALOG_TV
#else
#ifdef TLG3100
			TLG_MODE_ANALOG_TV
#else
#ifdef TLG1120
			TLG_MODE_ANALOG_TV_UNCOMP
#endif /* TLG1120 */
#endif /* TLG3100 */
#endif /* TLG1100 */
			, RegionSetting[gTvStorage.mRegion].bw,
			RegionSetting[gTvStorage.mRegion].vidstd);

		gTvScanLines = RegionSetting[gTvStorage.mRegion].scanlines;
	}
	else
	{
#ifdef WIN32
		printf("ATV ERROR: Undefined region code!\n");
#else
#ifdef ADS_MTK
		kal_prompt_trace(MOD_MMI, "ATV ERROR: Undefined region code!\n");
#else /* default */
		;
#endif /* ADS_MTK */
#endif /* WIN32 */
	}

#ifdef WIN32
	printf("Total channel number = %d\n", tlg_cur_chn_cnt);
#endif /* WIN32 */

	TLGAPP_InitHsyncAndVsync();
}

#if CHANNEL_SWITCH_EFFECT == 0

int TLGAPP_SetChannelExt(int iChn)
{
	return TLGAPP_SetChannel(iChn);
}

#elif CHANNEL_SWITCH_EFFECT == 1

uint16 Fading = 0, FadeStep, Silence;
uint16 AudioMode, AudioGain, VideoY, VideoU, VideoV;

#if USE_SYNC_CONTROL
static uint16 v_hi_start1, v_hi_stop1, v_hi_start2, v_hi_stop2, v_hi_start3, v_hi_stop3,
  	   h_hi_start, h_hi_stop, h_kill_start1, h_kill_stop1, h_kill_start2, h_kill_stop2;
#endif	/* USE_SYNC_CONTROL */

static void FadeCallback(void)
{
	uint16 VideoY1, VideoU1, VideoV1, AudioGain1;

	if (FadeStep == 0)
	{
		TLG_SetYUVScale(tlg_i2c_addr, 0, 0, 0);

#if USE_PA_CONTROL
#ifdef ADS_MTK
		AFE_TurnOffSpeaker(L1SP_FM_RADIO);
#endif
#endif	/* USE_PA_CONTROL */

		TLG_SetAudioGain(tlg_i2c_addr, AudioMode, 0);

#if USE_MUTE_CONTROL
		TLG_SetAudioEnable(tlg_i2c_addr, TLG_MUTE);
#endif	/* USE_MUTE_CONTROL */

#if	USE_SYNC_CONTROL
		TLG_SetExtHSync(tlg_i2c_addr, 0, 0, 0, 0, 0, 0);
		TLG_SetExtVSync(tlg_i2c_addr, 0, 0, 0, 0, 0, 0);
#endif	/* USE_SYNC_CONTROL */

		Silence = 1;
	}
	else
	{
		if (FadeStep > SILENCE_STEP)
		{
			if (Silence == 1)
			{
#if	USE_SYNC_CONTROL
				TLG_SetExtHSync(tlg_i2c_addr, h_hi_start, h_hi_stop, h_kill_start1, h_kill_stop1, h_kill_start2, h_kill_stop2);
				TLG_SetExtVSync(tlg_i2c_addr, v_hi_start1, v_hi_stop1, v_hi_start2, v_hi_stop2, v_hi_start3, v_hi_stop3);
#endif	/* USE_SYNC_CONTROL */

#if USE_MUTE_CONTROL
				TLG_SetAudioEnable(tlg_i2c_addr, TLG_ENABLE);
#endif	/* USE_MUTE_CONTROL */

#if USE_PA_CONTROL
#ifdef ADS_MTK
				AFE_TurnOnSpeaker(L1SP_FM_RADIO);
#endif
#endif	/* USE_PA_CONTROL */

				Silence = 0;
			}

			VideoY1 = VideoY * (FadeStep - SILENCE_STEP) / (FADE_IN_STEP - SILENCE_STEP);
			VideoU1 = VideoU * (FadeStep - SILENCE_STEP) / (FADE_IN_STEP - SILENCE_STEP);
			VideoV1 = VideoV * (FadeStep - SILENCE_STEP) / (FADE_IN_STEP - SILENCE_STEP);
			TLG_SetYUVScale(tlg_i2c_addr, VideoY1, VideoU1, VideoV1);

			AudioGain1 = AudioGain * (FadeStep - SILENCE_STEP) / (FADE_IN_STEP - SILENCE_STEP);
			TLG_SetAudioGain(tlg_i2c_addr, AudioMode, AudioGain1);
		}
	}

	if (FadeStep++ < FADE_IN_STEP)
	{
		StartTimer(ATV_TIMER_CHANNEL_CHANGE, STEP_DURATION, FadeCallback);
		Fading = 1;
	}
	else
	{
		StopTimer(ATV_TIMER_CHANNEL_CHANGE);
		Fading = 0;
	}
}

int TLGAPP_SetChannelExt(int iChn)
{
	if (Fading == 0)
	{
#if	USE_SYNC_CONTROL
		TLG_GetExtHSync(tlg_i2c_addr, &h_hi_start, &h_hi_stop, &h_kill_start1, &h_kill_stop1, &h_kill_start2, &h_kill_stop2);
		TLG_GetExtVSync(tlg_i2c_addr, &v_hi_start1, &v_hi_stop1, &v_hi_start2, &v_hi_stop2, &v_hi_start3, &v_hi_stop3);
#endif	/* USE_SYNC_CONTROL */

		TLG_GetYUVScale(tlg_i2c_addr, &VideoY, &VideoU, &VideoV);

		TLG_GetAudioMode(tlg_i2c_addr, &AudioMode);
		TLG_GetAudioGain(tlg_i2c_addr, AudioMode, &AudioGain);
	}
	else
		StopTimer(ATV_TIMER_CHANNEL_CHANGE);

	FadeStep = 0;
	FadeCallback();
	return TLGAPP_SetChannel(iChn);
}

#elif CHANNEL_SWITCH_EFFECT == 2

int is_switching = 0;

int TLGAPP_SetChannelExt(int iChn)
{
	int ret;

	is_switching = 1;

	// Mute

	ret = TLGAPP_SetChannel(iChn);
	TLG_Delay(100);

	// De-mute

	is_switching = 0;

⌨️ 快捷键说明

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