//----------------------------------------------------------------------------------------------------
// Copyright of Realtek SemiConductor Corp.
// Model   : RTD2553V
// Version : V0.00c (08.31.2005)
//
//----------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------
// ID Code      : Main.c No.0002
// Update Note  :
//
//----------------------------------------------------------------------------------------------------

#define __MAIN__

#include "Core\Header\Include.h"
/**
 * CMainUserInitial
 * Setting some flags for user when initial
 * @param <none>
 * @return {none}
 *
 */
void CMainUserInitial(void)
{
	// User can make some initial settings at firmware startup
	CLR_PANELPOWERSTATUS();
	CLR_LIGHTPOWERSTATUS();
	CLR_FRAMESYNCSTATUS();
	CLR_POWERSWITCH();
	CLR_FIRST_ADCCLOCK();
//	SET_DVD_POWERONOFF();
#if(_HDMI_SUPPORT == _ON)
       CLR_HDMIINPUT();
#endif
	SET_FIRST_LOADFONT();
#if  0
	CLR_OSDVBI_INITIAL();
#endif
	//SET_SOURCE_AUTOCHANGE();
	CLR_SOURCE_AUTOCHANGE();
//	SET_PRE_VGA_CONNECT(bVGACONNECT);
//#if(_TMDS_SUPPORT == _ON)
//#if (_HDMI_SUPPORT == _ON)
//	SET_PRE_HDMI_CONNECT(bHDMICONNECT);
//#else
//	SET_PRE_DVI_CONNECT(bDVICONNECT);
//#endif
//#endif
	CLR_USE_TRANSITION_RESULT();
	//czl 071129
	CLR_POWERSTATUS();
	//20080825 ccy add
	#if (_PCB_TYPE == _PCB_TEST)
	CLR_FM_POWER();
	#endif
		stSystemData.InputSource=2;    //add by dengyi  0n  0225
	CEepromSaveSystemData();
	
}

/**
 * CMainSystemInitial
 * Initial the system for once when power up
 * @param <none>
 * @return {none}
 *
 */
void CMainSystemInitial(void)
{
    // Initial MCU
	CMcuInitial();	
 	CScalerPageSelect(_PAGE0);//eric 20070529
	CScalerSetByte(_P0_POWER_ON_RESET_F3,_BIT7|_BIT6);		

  	while(!CMainDetectSystemPower());

//huxj20071010, need review this
CMiscSetPinShare();
	SET_AUDIO_CHIP_MUTE();
	SET_EARPHONE_MUTE();
	SET_AUDIO_CHIP_STBY(1);

	
LED_Message(_LED_MSG_RED);

	SET_EXT_POWER();

	// Initial timer events
	CTimerInitialTimerEvent();

	CPowerPanelPowerOff();		//download program again, we should power off panel before restart
	CPowerLightPowerOff();	//Avoid pwr-up,backlight on first.

	// Check eeprom and load eeprom settings
	CEepromStartupCheck();

     // Set panel select settings
	CMiscSelectPanel();

#if(_RESET_TYPE == _RESET_IN)
    // Scaler reset
	CScalerResetInForResetIn();
#endif  // End of #if(_RESET_TYPE == _RESET_IN)

    #if _CUSTOMER_HPC//add by xyw 071109 modified power on slowly
	SET_POWERSTATUS();
    #endif
	// Initial user settings
	CMainUserInitial();

	// Initial scaler settings
	CScalerInitial();

       COsdDispFirstTimeLoadFont();
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
	COsdLoadfontLoadChineseBankFont(0);
	COsdDispLoadChineseFont(0);
#else
	COsdDispLoadFont(GET_LANGUAGE());
#endif
	// Initial key scan status
	CKeyInitial();

	// Initial source input port settings
	CSourceInitialInputPort();

#if 0//(_VIDEO_SUPPORT == _ON)
	// Initial video settings
   	CVideoInitial();
	CTimerDelayXms(10);			//CTimerDelayXms(200);
	CVideoOutputDisable();
#endif  // End of #if(_VIDEO_SUPPORT == _ON)

	//init Audio
	CAudioInit();

	if((GET_INPUTSOURCE_TYPE() != _SOURCE_VGA) && (GET_INPUTSOURCE_TYPE() != _SOURCE_DVI))
		CAccAdjust(GET_DCC_MODE());
   	else
		CAccAdjust(_DISABLE);	// D-sub/DVI DCC disable

	// Initilize Osd system
	COsdMessageInitial();
	COsdMessagePush(_SHOW_BOOT_MESSAGE);
	COsdInitialize();
	CTimerActiveTimerEvent(SEC(1), COsdReckonSystemClockEvent);

#if((_SCALER_TYPE==_RTD2662) && (_MCU_TYPE == _REALTEK_RTD2662_EMCU))
	//only for test mcu access ok...
	CScalerRead(_ID_REG_00, 1, pData, _NON_AUTOINC);
	MCU_THRESHOLD_VALUE_FF0F = pData[0];
#endif

#if _TIMER_SLEEP_HINT_SUPPORT
	/////////////////////////////////////////////
	/*DISABLE WAKE UP TIMIER AND SLEEP TIMER WHILE POWER ON*/	
	COsdStopUserTimer();
	////////////////////////////////////////////////
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

#if(1 /*(_DEBUG_TOOL == _ISP_FOR_MYSON) ||(_DEBUG_TOOL == _ISP_FOR_RTD2662_EMCU)*/)
	CDdcciInitial();
#endif  // End of #if(_DEBUG_TOOL == _ISP_FOR_MYSON)

#if(_FAST_READ == _ON)
	CMCUSetFlashClk();
#endif

#if _CUSTOMER_KTC
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
  	if (!bMENU_KEY && !bPOWER_KEY)
	{	
		SET_FACTORYSTATUS();
		CEepromSaveSystemData();
		COsdCoreInitialze();
  	}
#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
#endif	//#if _CUSTOMER_KTC


#if( _DEBUG_TOOL == _RS232)

#if (_DEBUG_Printf_OUTPUT_CONTROL == _ON || _HDCP_WR_BY_RS232 == _ON)
	//press MENU+SOURCE key to initialize serial port
	ucRtd2662IspFlag = 1;	
	{	
  		MCU_PIN_SHARE_CTRL00_FF96 |= 0xF8;
		ucRtd2662IspFlag = 0;
  	}
	CUartInitial();		// Initial uart settings	
	CTimerDelayXms(20);
#endif	//#if (_DEBUG_Printf_OUTPUT_CONTROL == _ON || _HDCP_WR_BY_RS232 == _ON)

#endif  // End of #if(_DEBUG_TOOL == _RS232)

	DebugPrintf("\n2662 System initial complete!!!\n",'i');

#if 0//(_GAMMA_TYPE == 	_FULL_GAMMA_COMPRESS_TABLE2)
	CAdjustGamma(_FULL_GAMMA_COMPRESS_TABLE2, GAMMA_1_R, GAMMA_1_G, GAMMA_1_B);//eric 20070607
#endif

	//first power up
	SET_VDC_FIRST_ON();
	SET_TV_FIRST_ON();
	

#if(_HDCP_SUPPORT == _ON)
	SET_HOTPLUG_HDMI(_OFF);
	SET_HOTPLUG_HDMI2(_OFF);
	CAdjustHDCP();
	//CTimerDelayXms(100);
	//SET_HOTPLUG_HDMI(_ON);
	//SET_HOTPLUG_HDMI2(_ON);
	//CTimerDelayXms(100);
#endif

	//SET_AUDIO_CHIP_STBY(1);
	CLR_EXT_POWER();
	SET_POWERSWITCH();

#if _CUSTOMER_CGT
	//CGT: auto power on if not TV source
	if (GET_INPUTPORT_TYPE(stSystemData.InputSource)!=_VIDEO_TV_PORT)
	{
		CLR_POWERSTATUS();
		SET_POWERSWITCH();
	}
#if _CGT_DELAY_PC_MUTE
		CLR_PC_AUDIO_ACTIVE();
#endif	//#if _CGT_DELAY_PC_MUTE
#endif	//#if _CUSTOMER_CGT


}

BIT CMainDetectSystemPower(void)
{
/*
#if(_RESET_TYPE == _RESET_IN)

//    if(!bLVRPOWERDETECT);
//        return _FALSE;

#endif

#if(_SYSTEMPOWER_DETECT_SUPPORT == _ON)

    // It's an example F/W for RTD2120.
    MCU_ADC_CTRL_FF0B = 0x80;
    while((MCU_ADC_CTRL_FF0B & _BIT7) != 0x00);

    if((bSYSTEMPOWERDETECT & 0xfc) < 0xe0)
        return _FALSE;

#endif
*/
    return _TRUE;
}

/**
 * main
 * main process
 * first system initial, then main loop
 * @param <none>
 * @return {none}
 *
*/
void main(void)
{
	static BYTE data ucIconMove1sCnt = 0;


    do{
#if(_RESET_TYPE == _RESET_IN)	///! MCU reset Scaler
   		CScalerSetBit(bSCALERRESET, ~_BIT0, _BIT0);
#endif  // End of #if(_RESET_TYPE == _RESET_IN)

        CMainSystemInitial();

      	CCustomerInitial();
		
#if 0 //_HDCP_WR_BY_RS232
	CEepromLoadHdcpKeyDefualtData();
#endif
			
	do{
		//20070402
		if (bTimeSecTicker)
		{
			bTimeSecTicker = 0;
			
			if (GET_BURNSTATUS())
			{
				if (ucFactoryBurnTimer<3)
					ucFactoryBurnTimer++;
			}
#if _CUSTOMER_SANSE
			bLedFlash = 1;
#endif
			//for logo move time
			if (GET_ICON_MOVE_ENABLE())
			{
				if ((++ucIconMove1sCnt)>=_ICON_MOVE_STICK)
				{
					SET_ICON_MOVE_STICK();
					ucIconMove1sCnt = 0;
				}
			}

			COsdReckonSystemClockEvent();
#if 0
DebugPrintf("stModeUserCenterData.CenterClock:0x%x", stModeUserCenterData.CenterClock>>8);
DebugPrintf("%x\n", stModeUserCenterData.CenterClock);
DebugPrintf(" stModeUserData.Clock:0x%x", stModeUserData.Clock>>8);
DebugPrintf("%x\n\n\n",  stModeUserData.Clock);
{
	UINT16 xdata tmpMin,tmpMax,result;
extern UINT16 COsdFxGetAdcClockRange(BYTE ucPar);

	tmpMin = COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MIN);
	tmpMax = COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MAX);

DebugPrintf("COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MIN):%x",  tmpMin>>8);
DebugPrintf("%x\n",  tmpMin);
DebugPrintf("COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MAX):%x",  tmpMax>>8);
DebugPrintf("%x\n",  tmpMax);

	result = stModeUserData.Clock-tmpMin;
DebugPrintf("result 1:%x",  result>>8);
DebugPrintf("%x\n",  result);
	result *= 100;
DebugPrintf("result 2:%x",  result>>8);
DebugPrintf("%x\n",  result);
	result /=(tmpMax - tmpMin);
DebugPrintf("result 3:%x",  result>>8);
DebugPrintf("%x\n",  result);

}
#endif
		}

			CMiscIspDebugProc();
			CTimerHandler();
			COsdMessageHandler();
			CModeHandler();
			COsdHandler();
		//	COsdFxShowNumber(4, 0, stAudioData.Volume, 0x33, _CP_12);
		//	COsdFxShowNumber(5,0,testpdata1,0x33, _CP_12);	

		//	COsdFxShowNumber(7, 0, ucVStartBias, 0x33, _CP_12);

		//COsdFxShowNumber(8, 0,stModeInfo.IVStartPos   , 0x33, _CP_RED);

	//	COsdFxShowNumber(6,0,ucHStartBias , 0x33, _CP_RED);
	//	COsdFxShowNumber(6,4,stModeInfo.IHStartPos, 0x33, _CP_RED);

		}
#if(_RESET_TYPE == _RESET_IN)
        while((bit)CScalerGetBit(bSCALERRESET, _BIT0));
#elif(_RESET_TYPE == _RESET_OUT)
        while(_TRUE);
#endif  // End of #if(_RESET_TYPE == _RESET_IN)

	}	while(_TRUE);
}

