/*=============================================================
 * Copyright (c)      Realtek Semiconductor Corporation, 2005 *
 * All rights reserved.                                       *
 *============================================================*/


#define __TV__

#define _TUNER_H_ //fjyang

#include "Core\Header\Include.h"

void  TV_Power_ON(void)
{
	//bTunerPower=1;//add by xyw 070827
	SET_TUNER_POWER();
}
void TV_Power_Down(void)
{
	//bTunerPower=0;//add by xyw 070827
	CLR_TUNER_POWER();
}
BYTE CTvSetChStatus(BYTE chn,bit status)
{
	BYTE mask,q,r;

	//check chn range
	if(chn >= GET_TV_MAX_CH())
		return ((BYTE)_FALSE);

	//get q ,r and mask
	q=(chn)/8;
	r=(chn)%8;
	mask = _BIT0 << r ;

	//set correspoding bit
	if(status==_ENABLE)
		stTvChStatus.ChStatus[q] |= mask ;
	else
		stTvChStatus.ChStatus[q] &= ~mask ;

	return ((BYTE)_TRUE);
}


BYTE CTvGetChStatus(BYTE chn)
{
	BYTE mask,q,r;

	if(chn >= GET_TV_MAX_CH())
		return ((BYTE)_FALSE);

	//get q ,r and mask
	q=(chn)/8;
	r=(chn)%8;
	mask = _BIT0 << r ;

	//set correspoding bit
	if( stTvChStatus.ChStatus[q] & mask )
		return ((BYTE)_TRUE);
	else
		return ((BYTE)_FALSE);
}


void CTvTunerChangeChannelApplyNewData(void)
{
	//20070407, finetune update
	CEepromGetTvPdbData(stTvInfo.CurChn, &stTvPdb.chinfo);

	//20080418, add start...
#if (_TV_SEL_CH_M3)
	TempTvNumbers = stTvInfo.CurChn;
#endif	//#if (_TV_SEL_CH_M3)
	//20080418, add end...
	
	SET_TV_FINETUNE_PRE_DONE();
#if 1//(_TV_FINETUNE_SAVE_SUPPORT)
	//20070407, get finetune data
	CEepromGetTvFinetuneData(stTvInfo.CurChn, &ucTvFinetuneData);
#endif
#if (_TV_AFC_SUPPORT)
	//20070407, finetune update
	if (GET_TV_AFC_ENABLE())
		CTunerSetFreq(stTvPdb.pdb, stTvPdb.Afc);
	else
		CTunerSetFreq(stTvPdb.pdb + ucTvFinetuneData-50 , 0);		
	//if (GET_CURR_AUDIO_SYS()!=_TV_AUDIO_SYS_AUTO)
	//CTunerSetSound(GET_CURR_AUDIO_SYS());
#else
	CTunerSetFreq(stTvPdb.pdb);
#endif
	//CTimerDelayXms(_TV_AUTOSCAN_RESPONSE_TIME);
	//CTimerDelayXms(_TV_AUTOSCAN_RESPONSE_TIME);
	//CTimerDelayXms(_TV_AUTOSCAN_RESPONSE_TIME);

}

//this will cause mode reset when change mode between signal and no signal
void CTvTunerChangeChannel(void)
{
#if 0
	BYTE lastAvMode;

	bit isVRateChange = 0;
#endif

	//czl 071205
			//volumetemp=stAudioData.Volume;
			//stAudioData.Volume=0;
			///CPt2314WrVolumeGradual(stAudioData.Volume, 0);
			//CPt2314WrMute(_ENABLE);
			//CTimerDelayXms(5);
			if(ucVideoProcessState== _ACTIVE_STATE)
			{
				//DebugPrintf("CTvTunerChangeChannel()\n", 0);
				//"POP" and Blue background while channel is changed, update
//				CAudioSetVolume(0);
//				CTimerDelayXms(100);
//				SET_MUTE_PROCESS(_ENABLE);
#if  DINISHI_CHANGESOURCE_DVD_TV_MUTE
  //          MUTE_SW= stAudioData.Volume;
	//SET_MUTE_PROCESS(0);//JINSUO ADD 20100710
		CTimerDelayXms(150);
		CAudioChipWrVolumeGradual(stAudioData.Volume, 1);	
				CTimerDelayXms(200);
				SET_MUTE_PROCESS(1);
#endif	

				//CAdjustBackgroundColor(0,0,0x80);

#if _CUSTOMER_SANSE
				CAdjustBackgroundColor(0,0,0x80);
#else
				CAdjustBackgroundColor(0,0,0);
#endif
    				CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);

				//I2CSetBit(0x38,0x3f,0x40);

//////////////////////////////////////////////////				
				CTvTunerChangeChannelApplyNewData();
//////////////////////////////////////////////////	

				{
					CModeResetMode();
				}
				//I2CSetBit(0x38,0x3f,0x00);
				
			}
			else
			{
#if _CUSTOMER_SANSE
				CAdjustBackgroundColor(0,0,0x80);
    				CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 | _BIT5 | _BIT1 | _BIT0));
#else
#if _TV_BACKGROUND_OPTION_SUPPORT
				//if (GET_TV_BACKGROUND())
				{
					CAdjustBackgroundColor(0,0,0);
	    				CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
				}
#else
				CAdjustBackgroundColor(0,0,0);
    				CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 | _BIT5 | _BIT1 | _BIT0));
#endif
#endif
//////////////////////////////////////////////////				
				CTvTunerChangeChannelApplyNewData();
//////////////////////////////////////////////////				
				if(1/*CVdcIsLocked() == _TRUE*/)
				{
					CModeResetMode();
				}
				else
				{
#if _TV_BACKGROUND_OPTION_SUPPORT
//20081018 ccy modify
					if  (GET_TV_BACKGROUND()==0)
#else
					if  (0)//(GET_TV_BACKGROUND()==0)
#endif
					{
						CScalerPageSelect(_PAGE8);
						CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0xB0);
						//CVideoDisplaySet();
						 CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 |_BIT3 |_BIT1 | _BIT0));
					//	if(Panel[0].PanelConfig&_BIT3 == 0)
					//		CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (0));
					//	else
					//		CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (_BIT3));
						CAdjustBackgroundColor(0,0,0x00);

					}
								//20070401
				else
					{
						//20081027 CCY MODIFY
						CScalerPageSelect(_PAGE8);
						CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0x20);
						//CModeSetFreeRun();
	    					CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT5 | _BIT1 | _BIT0));
						//20070331
						CAdjustBackgroundColor(0,0,0xff);
					}
				}
			}

}

#if _TUNER_TYPE!=_TUNER_NONE
void CTvScanSetBackground(BYTE display)
{
		display	 = display;
#if 1//(_TV_BACKGROUND_OPTION_SUPPORT)
	//DebugPrintf("\nTVScan:bg=%d\n",GET_TV_BACKGROUND());
//20080829 ccy modify
		if ((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT))
		{

			if(0)// (GET_TV_BACKGROUND()==0)//20081013 ccy modify     //delect by dengyi 2010 01 07
			{
				CScalerPageSelect(_PAGE8);
				CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0xB0);		//Enable snow noise. zhang_dc 2008.01.28
				
				//CVideoDisplaySet();
				//CScalerSetBit(_VDISP_CTRL_28, ~(_BIT5 | _BIT3 | _BIT1 | _BIT0),(_BIT1 | _BIT0));

				CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 |_BIT3 |_BIT1 | _BIT0));
				//czl 080506
		//	if(Panel[0].PanelConfig&_BIT3 == 0)
		//		CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (0));
		//		else
		//		CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (_BIT3));


				//20070401
				CAdjustBackgroundColor(0,0,0x00);
			}
			else
			{
				CScalerPageSelect(_PAGE8);
				CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0x20);		//Disable snow noise. zhang_dc 2008.01.28
				//CTimerReactiveNosignal_Icon_Powersaving(1);		//dong disable 20091026
	
				//CModeSetFreeRun();
				CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT5 | _BIT1 | _BIT0));

				CAdjustBackgroundColor(0x00, 0x00, 0xff);	
			}
		}
		
/*
	{
		
			CVideoDisplaySet();
		CScalerSetBit(_VDISP_CTRL_28, ~(_BIT5 | _BIT3 | _BIT1 | _BIT0),(_BIT1 | _BIT0));
		CAdjustBackgroundColor(0x00, 0x00, 0x00);
	}
	else
	{
		CModeSetFreeRun();
		CAdjustBackgroundColor(0x00, 0x00, 0xff);//20080901 ccy modify
		CScalerSetBit(_VDISP_CTRL_28, ~_BIT3, _BIT5);	// display output background & free running mode
	}
	*/
#else
	CModeSetFreeRun();
	CAdjustBackgroundColor(_TV_SCAN_BG_RED,_TV_SCAN_BG_GREEN,_TV_SCAN_BG_BLUE);
	CScalerSetBit(_VDISP_CTRL_28, ~_BIT3, _BIT5);	// display output background & free running mode
#endif
}
#endif	//#if _TUNER_TYPE!=_TUNER_NONE

//added by czl 100118
void CTvVideoColorStandardsetting(BYTE usvideocolorsys)
{
	UINT8 uctemp;
	
	CTunerSetColor(usvideocolorsys);
	CScalerPageSelect(_PAGE8);
	switch(usvideocolorsys)
	{
		case _TV_VIDEO_SYS_NTSC:
			uctemp = 0x00;
			break;
		case _TV_VIDEO_SYS_PAL:
			if(GET_CURR_AUDIO_SYS() == _TV_AUDIO_SYS_M)
				uctemp = 0x01;
			else if(GET_CURR_AUDIO_SYS() == _TV_AUDIO_SYS_N)
				uctemp = 0x03;
			else 
				uctemp = 0x06;
			break;
		case _TV_VIDEO_SYS_SECAM:
				uctemp = 0x07;
			break;
		case _TV_VIDEO_SYS_AUTO:
		default:
				uctemp = 0x80;
			break;
	}
	
	if(uctemp == 0x80){
		CScalerSetByte(_P8_MANUAL_MODE_D2,0x00);
		CTimerDelayXms(200);
		CScalerSetByte(_P8_MANUAL_MODE_D2,uctemp);
		}
	CScalerPageSelect(_PAGE9);
	CScalerSetByte(_P9_CKILL_B5,0x87);
}
