📄 mode.c
字号:
//----------------------------------------------------------------------------------------------------
// ID Code : Mode.c No.0002
// Update Note :
//
//----------------------------------------------------------------------------------------------------
#define __MODE__
#include "..\Header\Include.h"
//--------------------------------------------------
// Description : Mode handler, the main control flow
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CModeHandler(void)
{
//x.hu, for source change
if (CSourceChange())
{
CModeResetMode();
//return; //if add, switch to no signal channel cause screen darkness
CScalerReset(); //x.hu, test for changing source from VGA to Video
//x.hu, request to set scaler in CVideoExist()
//SET_VIDEO_TABLE_SET_SCALER();
}
if(CPowerHandler())
{
ucCurrState = GET_POWERSTATUS() ? _INITIAL_STATE : _PWOFF_STATE;
}
switch(ucCurrState)
{
case _PWOFF_STATE:
ucCurrState = GET_POWERSTATUS() ? _INITIAL_STATE : _PWOFF_STATE;
break;
case _INITIAL_STATE:
// Evan 050512
LED_Message(LED_MSG_GREEN); // Power up show led
ucCurrState = _SEARCH_STATE;
break;
case _SEARCH_STATE:
if(CSyncHandler())
{
// Source and sync OK
if(CModeDetect())
{
//x.hu, 20050803, update
// move this from the end of "case _SEARCH_STATE" to avoid gabage to be shown
// while signal not stable, such as power on, source switch.
// if set source hint here, when signal is found, the hint text will disable a little time to set display.
#if 0 // 20050805
#if 1//(_SHOW_SOURCEHINT) //x.hu, 20050803, add
if (1){//(GET_SOURCEHINTSTATUS() == _FALSE) {
ucOsdEventMsg = _SHOW_SOURCE_MSG;
CTimerReactiveTimerEvent(SEC(4),COsdDispOsdTimerEvent);
SET_SOURCEHINTSTATUS();
}
#endif
#endif
// Mode stable. Initial display settings switch to active/nosignal/nosupport state
SET_READYFORDISPLAY();
if(stModeInfo.ModeCurr == _MODE_NOSIGNAL)
{
ucCurrState = _NOSIGNAL_STATE;
}
else if(stModeInfo.ModeCurr == _MODE_NOSUPPORT)
{
CModeAutoMeasureOn();
ucCurrState = _NOSUPPORT_STATE;
}
else
{
//x.hu, 20050716, add for changing source, test, and may be update
// Notes for this:
// Because of showing Source hint will power up panel and light, so,
// CModeDisplayActiveMode() will bring out some gabage on the screen.
// We power down the light here, and reactive light when the programe
// enter into _ACTIVE_STATE state.
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
if (!GET_VIDEO_PN_ACTION()) {
CPowerLightPowerOff(); // x.hu, 20050803, remarks
}
#else
CPowerLightPowerOff(); // x.hu, 20050803, remarks
#endif
CModeDisplayActiveMode();
CModeAutoMeasureOn();
/*
//////////////////////////////////////////////////////for test
pData[0]=0;
pData[1]=0;
pData[2]=0;
CScalerWrite(_BRI_RED_COE_60, 3, pData, _AUTOINC);
pData[0]=0;
pData[1]=0;
pData[2]=0;
CScalerWrite(_CTS_RED_COE_63, 3, pData, _AUTOINC);
/////////////////////////////////////////////////////////////////
*/
ucCurrState = _ACTIVE_STATE;
// after found signal,
///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
#if 1 // 20050805
#if 1//(_SHOW_SOURCEHINT) //x.hu, 20050803, add
if (1){//(GET_SOURCEHINTSTATUS() == _FALSE) {
ucOsdEventMsg = _SHOW_SOURCE_MSG;
CTimerReactiveTimerEvent(SEC(4),COsdDispOsdTimerEvent);
SET_SOURCEHINTSTATUS();
}
#endif
#endif
}
}
else
{
// Still in search state
}
ucEvent0 = _INACTIVE_COUNTDOWN_EVENT;
}
else
{
CTimerCountDownEventProc(&ucEvent0, 5, CModeSyncTimeoutCountDownEvent);
}
break;
case _ACTIVE_STATE:
if(CFrameSyncDetect()) //detection frame sync condition. note by zhang_dc
{
// x.hu, add to get whether the sync is lost because switch from PAL and NTSC
CModeIsChange();
CModeResetMode(); //if frame error, reset. note by zhang_dc
}
else //sync is OK!. note by zhang_dc
{
if(CModeIsChange())
{
CModeResetMode();
}
else
{
if(GET_READYFORDISPLAY() == _TRUE)
{
CLR_READYFORDISPLAY();
CLR_SOURCE_AUTOCHANGE();
///////////////////////////////////////for test/////////////////////xyw
//CAutoDoWhiteBalance();
/////////////////////////////////////////////////
CPowerPanelOn();
// x.hu, 20050804, remark because blueBG when src sw
//CAdjustBackgroundColor(_BGND_COLOR_R, _BGND_COLOR_G, _BGND_COLOR_B);
CAdjustBackgroundColor(0, 0, 0);
//while(1) CMiscIspDebugProc(); //for debug.
// CAdjustEnableWatchDog(_WD_ALL);
CAdjustEnableWatchDog(0);
if(GET_FIRST_LOADFONT() == _TRUE)
{
CLR_FIRST_LOADFONT();
COsdDispFirstTimeLoadFont();
}
// x.hu, audio may switch to avalid channel because of no signal, so:
// if audio is not muted, get correct audio channel:
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
#if (_AUDIO_DEVICE != _AUDIO_NONE || _FM_MODULATION == _ENABLE)
if (GET_MUTESTATUS() == 0) {
CAudioFmMuteClear();
}
#endif
#endif
#if 0//(_CUSTOM_TYPE == _CUSTOM_NONE)
#if (_AUDIO_DEVICE != _AUDIO_NONE)
if (GET_MUTESTATUS() == 0) {
CAudioFmMuteClear();
}
#endif
#endif
// x.hu, 20050803, add
// start audio after 1s from showing video
//#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)////////////
//CTimerDelayXms(600); // here also delay light on////////
//#endif////////////////////////
#if (_AUDIO_DEVICE != _AUDIO_NONE)
CAdjustVolume();
#endif
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
#if (_FM_MODULATION == _ENABLE)
CAudio2FM();
#endif
#endif
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
CLR_VIDEO_PN_ACTION();
#endif
}
LED_Message(LED_MSG_GREEN);// XYW
if((stModeUserData.FirstAuto == 0) && (GET_INPUTSOURCE_TYPE() == _SOURCE_VGA))
{
stModeUserData.FirstAuto = 1;
ucOsdEventMsg = _DO_AUTO_CONFIG;
}
}
}
break;
case _NOSUPPORT_STATE:
//#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
//CLR_VIDEO_PN_ACTION();
//#endif
CAudioVolumemute();//xyw
if(GET_READYFORDISPLAY() == _TRUE)
{
CLR_READYFORDISPLAY();
CModeSetFreeRun();
CAdjustBackgroundColor(_BGND_COLOR_R, _BGND_COLOR_G, _BGND_COLOR_B);
//CAdjustBackgroundColor(0, 0, 0);
// x.hu, add @ 20050802, we enable osd to be show while no signal. so:
// Press Menu key to show common osd while no signal,
// we should load font first.
if(GET_FIRST_LOADFONT() == _TRUE)
{
CLR_FIRST_LOADFONT();
COsdDispFirstTimeLoadFont();
}
// x.hu, add @ 20050802 end.
CTimerReactiveTimerEvent(SEC(1), CModeNoSupportEvent);
}
if(CModeConnectIsChange() || CModeIsChange())
CModeResetMode();
break;
case _NOSIGNAL_STATE:
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
CLR_VIDEO_PN_ACTION();
#endif
#if (_AUDIO_DEVICE != _AUDIO_NONE)
// 20050810
//CAudioSelChannel(_AUDIO_CHANNEL_NC);2005.12.26
CAudioVolumemute();//xyw
#endif
if(GET_READYFORDISPLAY() == _TRUE)
{
//CLR_VIDEO_PN_ACTION();
CLR_READYFORDISPLAY();
#if (_SOURCE_AUTOCHANGE_ENABLE == _TRUE)
SET_SOURCE_AUTOCHANGE();
#endif
CModeSetFreeRun();
CAdjustBackgroundColor(_BGND_COLOR_R, _BGND_COLOR_G, _BGND_COLOR_B);
//CAdjustBackgroundColor(0, 0, 0);
// x.hu, add @ 20050802, we enable osd to be show while no signal. so:
// Press Menu key to show common osd while no signal,
// we should load font first.
if(GET_FIRST_LOADFONT() == _TRUE)
{
CLR_FIRST_LOADFONT();
COsdDispFirstTimeLoadFont();
}
// x.hu, add @ 20050802 end.
#if(_TMDS_SUPPORT == _ON)
if(bVGACONNECT && bDVICONNECT)
#else
if(bVGACONNECT)
#endif
{
#if (_OSD_NOSIGNAL_OPTION == _TRUE)
//x.hu, 20051027, for common user to show source hint
#if (_SHOW_SOURCEHINT)
if (GET_SOURCEHINTSTATUS() == _FALSE) {
ucOsdEventMsg = _SHOW_SOURCE_MSG;
CTimerActiveTimerEvent(SEC(300),COsdDispOsdTimerEvent);//8.5
SET_SOURCEHINTSTATUS();
}
#endif
CTimerReactiveTimerEvent(SEC(3.5), CModeNoCableEvent);//xyw
CTimerActiveTimerEvent(SEC(300), CModePowerSavingEvent);//8.5
#else
//CTimerReactiveTimerEvent(SEC(3.5), CModeNoCableEvent);
// x.hu, 20050804, update
// for no signal source hint if not in be started in SetFreerun()
// if src sw to an no signal ch, "CModeSyncTimeoutCountDownEvent" will clr flag
#if (_SHOW_SOURCEHINT)
if (GET_SOURCEHINTSTATUS() == _FALSE) {
ucOsdEventMsg = _SHOW_SOURCE_MSG;
CTimerActiveTimerEvent(SEC(4),COsdDispOsdTimerEvent);
SET_SOURCEHINTSTATUS();
}
#endif
// x.hu, 20050803, add end
CTimerActiveTimerEvent(SEC(300), CModePowerSavingEvent);//8.5
#endif
}
else
{
#if (_OSD_NOSIGNAL_OPTION == _TRUE)
CTimerReactiveTimerEvent(SEC(3.5), CModeNoSignalEvent);//xyw
CTimerActiveTimerEvent(SEC(300), CModePowerSavingEvent);//8.5
#else
//CTimerReactiveTimerEvent(SEC(3.5), CModeNoSignalEvent);
CTimerActiveTimerEvent(SEC(300), CModePowerSavingEvent);//8.5
// x.hu, 20050804, update
// for no signal source hint if not in be started in SetFreerun()
// if src sw to an no signal ch, "CModeSyncTimeoutCountDownEvent" will clr flag
#if (_SHOW_SOURCEHINT)
if (GET_SOURCEHINTSTATUS() == _FALSE) {
ucOsdEventMsg = _SHOW_SOURCE_MSG;
CTimerActiveTimerEvent(SEC(4),COsdDispOsdTimerEvent);
SET_SOURCEHINTSTATUS();
}
#endif
// x.hu, 20050803, add end
#endif
}
}
if(CModeConnectIsChange() || CSourceHandler())
CModeResetMode();
break;
case _SLEEP_STATE:
LED_Message(LED_MSG_FLASH_GREEN);// XYW
if(CModeConnectIsChange() || CSourceHandler())
CModeResetMode();
break;
default:
break;
}
}
//----------------------------------------------------------------------------------------------------
// Measure Functions
//----------------------------------------------------------------------------------------------------
//--------------------------------------------------
// Description : Check measure ready process
// Input Value : None
// Output Value : Return _TRUE if measure finished, _FALSE if timeout
//--------------------------------------------------
bit CModeMeasureReady(void)
{
CScalerSetBit(_SYNC_SELECT_47, ~_BIT0, 0x00); //set HSYNC & VSYNC Measure mode. Analog. note by zhang_dc
CAdjustSyncProcessorMeasureStart(); //Start measurement. note by zhang_dc
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent)) //if measurement finished in specified time. note by zhang_dc
{
return _TRUE;
}
else
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT5, 0x00); //if measurement timeout, disable measurement. note by zhang_dc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -