/*=========================================================== * Copyright (c) Realtek Semiconductor Corporation, 2005 * All rights reserved. * ========================================================== */ /*==================== File Description ===================== */ /** * @file * This file is osd event handler implement file for osd related functions. * * @author $Author: hillwang $ * @date $Date: 2006-08-03 21:05:57 +0800 (?Ÿæ??? 03 ?«æ? 2006) $ * @version $Revision: 1150 $ */ /** * @addtogroup osd * @{ */ #define _OSDEVENT_C /*===================== Module dependency ================== */ #include "Core\Header\Include.h" bit bExitEvent = 0; //exit message by exit event cause osd closed immediately /*======================= Private Types ===================== */ /*======================== Definitions ====================== */ /*========================== Variables ====================== */ /*=================== Local Functions Phototype ==============*/ /*=========================== Functions ===================== */ /** This function is for internal message to notify closing OSD. */ void COsdFxExitEvent(void) { if(GET_FACTORYSTATUS() && (ucOsdisAutoMenu==0)) { // keep osd //NOT auto function return, and factory status return; } if (ucOsdState != _MUTE_STATE) COsdMessagePush(_EXIT_KEY_MESSAGE); //20070406 bExitEvent = 1; } /** This function is for internal message to show no-signal OSD. */ void COsdNoSignalEvent(void) { COsdMessagePush(_SHOW_NOSIGNAL_MESSAGE); } void COsdChannelEditExit(void) { BYTE resualt=1; BYTE ucHyperlinkInput; //20080418, update start... #if (_TV_SEL_CH_M3) ucHyperlinkInput = TempTvNumbers;//GET_TV_HYPERLINK_CHANNEL(); #else //#if (_TV_SEL_CH_M3) ucHyperlinkInput = GET_TV_HYPERLINK_CHANNEL(); #endif //#if (_TV_SEL_CH_M3) //czl 20080418, update end... if (ucHyperlinkInput<_FIRST_CHANNEL) goto break1; //ucHyperlinkInput = _FIRST_CHANNEL; else if (ucHyperlinkInput>=GET_TV_MAX_CH()) ucHyperlinkInput = GET_TV_MAX_CH()-1; if (1)//((GET_TV_HYPERLINK_CHANNEL()<= GET_TV_MAX_CH())&&(GET_TV_HYPERLINK_CHANNEL() >= _FIRST_CHANNEL)) { COsdFxDisableOsd(); if (ucHyperlinkInput != stTvInfo.CurChn) { SET_MUTE_PROCESS(_ENABLE); //add 20091212 CTimerDelayXms(1000); stTvInfo.PreChn=stTvInfo.CurChn; stTvInfo.CurChn = ucHyperlinkInput; CEepromSaveTvData(); #if 1//(_KEY_UPDOWN_TO_TV_SUPPORT) //if current input source is not tv, change to tv immediately while UP/DOWN key is pressed. if (GET_INPUTPORT_TYPE(stSystemData.InputSource)!=_VIDEO_TV_PORT) { CLR_TV_HYPERLINK_DATA(); CLR_TV_HYPERLINK_INPUTBIT(); CTimerCancelTimerEvent(COsdFxExitEvent); //!!! according to _INPUT_PORT_MAX !!! //COsdChangeSourceToSpecified(7); for (pData[0]=0; pData[0]<_INPUT_PORT_MAX; pData[0]++) { if (GET_INPUTPORT_TYPE(pData[0])==_VIDEO_TV_PORT) { COsdChangeSourceToSpecified(pData[0]); break; } } } #endif //resualt = CTvSetSpecifiedChannel( stTvInfo.CurChn); CTvTunerChangeChannel(); } //if (resualt) // COsdCoreShowTVChannel(stTvInfo.CurChn, 1); COsdFxShowSource(); } else { } break1: CTimerActiveTimerEvent(SEC(2), COsdFxExitEvent); //COsdFxDisableOsd(); CLR_TV_HYPERLINK_DATA(); CLR_TV_HYPERLINK_INPUTBIT(); //CLR_TV_HYPERLINK_LEN(); //20071226, JPE add, review?? COsdCoreSetState(_IDLE_STATE); } void COsdReckonTimeEvent(void) { /* static UINT8 xdata ucSleepTimeSec = 60; if(!(--ucSleepTimeSec)) { ucSleepTimeSec = 60; if(!(--ucSleepTimeMin)) { //ucSleepTimeMin = 60; //if(!(--ucSleepModeTimes)) { SET_POWERSWITCH(); return; //} } } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimeEvent); */ #if 0//_TIMER_SLEEP_HINT_SUPPORT == 0 if ( ucSleepCountDown==0 ){ SET_POWERSWITCH(); return; } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimeEvent); #else //#if _TIMER_SLEEP_HINT_SUPPORT == 0 if(!(--ucSleepTimeSecCnt)) { if (ucOsdState==_SHOW_SLEEP_TIMEOVER_HINT_STATE) { COsdMessagePush(_SHOW_SLEEP_TIMEOVER_HINT_REMINDTIME_MESSAGE); } ucSleepTimeSecCnt = 60; if(!(--ucSleepTimeMin)) { SET_POWERSWITCH(); return; } } //start to show //compare with time stop if (ucSleepTimeMin>=usTimeStopAndSystemDiffer && bTimeoverHintRequest==1) return; //bTimeoverHintOsdState ==0 : // means not showing time stop hint //ucSleepTimeMin<=_TIMER_SLEEP_HINT_START: // means time to show sleep time hint //ucOsdState!=_SHOW_SLEEP_TIMEOVER_HINT_STATE: // means start to show if (bTimeoverHintOsdState ==0&&ucSleepTimeMin<=_TIMER_SLEEP_HINT_START&&ucOsdState!=_SHOW_SLEEP_TIMEOVER_HINT_STATE) //XX min to show time message if (ucVideoProcessState==_ACTIVE_STATE||ucSyncProcessState==_ACTIVE_STATE) COsdMessagePush(_SHOW_SLEEP_TIMEOVER_HINT_MESSAGE); //update time as XX:SS if (bTimeoverHintOsdState ==0&&ucOsdState==_SHOW_SLEEP_TIMEOVER_HINT_STATE) COsdMessagePush(_SHOW_SLEEP_TIMEOVER_HINT_REMINDTIME_MESSAGE); ucSleepTimeSec = ucSleepTimeSecCnt; CTimerReactiveTimerEvent(SEC(1), COsdReckonTimeEvent); #endif //#if _TIMER_SLEEP_HINT_SUPPORT == 0 } #if _TIMER_PAGE_SUPPORT void COsdReckonTimerPowerOnEvent(void) { #if _NEW_TIME_POWERON_TYPE if ((stTimeData.ucTimeMinStart == ucMinSystem) && (stTimeData.ucTimeHourStart== ucHourSystem)) { CTimerCancelTimerEvent(COsdReckonTimerPowerOnEvent); if (!GET_POWERSTATUS()) { SET_POWERSWITCH(); } return; } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimerPowerOnEvent); #else if (++ucTimerPowerOnMinTickCnt>=60) { ucTimerPowerOnMinTickCnt = 0; if (stTimeData.ucTimeHourStart != 0 || stTimeData.ucTimeMinStart != 0) { if (stTimeData.ucTimeMinStart!=0) { stTimeData.ucTimeMinStart--; if (stTimeData.ucTimeMinStart == 0 && stTimeData.ucTimeHourStart == 0) { CTimerCancelTimerEvent(COsdReckonTimerPowerOnEvent); if (!GET_POWERSTATUS()) { SET_POWERSWITCH(); } return; } else if (stTimeData.ucTimeMinStart == 0) { stTimeData.ucTimeHourStart--; stTimeData.ucTimeMinStart = 59; } } else { stTimeData.ucTimeHourStart--; stTimeData.ucTimeMinStart = 59; } } } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimerPowerOnEvent); #endif } void COsdReckonTimerPowerOffEvent(void) { #if _NEW_TIME_POWEROFF_TYPE if (stTimeData.ucTimeMinStop == ucMinSystem && stTimeData.ucTimeHourStop == ucHourSystem) { CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent); if (GET_POWERSTATUS()) { SET_POWERSWITCH(); COsdFxDisableOsd(); COsdCoreInitialze(); COsdMessageInitial(); ucSleepType = 0; // set Sleep mode disable CTimerCancelTimerEvent(COsdReckonTimeEvent); CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent); return; } } if ((stTimeData.ucTimeHourStop >ucHourSystem)||((stTimeData.ucTimeHourStop == ucHourSystem)&&(stTimeData.ucTimeMinStop >= ucMinSystem))) usTimeStopAndSystemDiffer = (stTimeData.ucTimeHourStop-ucHourSystem)*60+(stTimeData.ucTimeMinStop-ucMinSystem); if (GET_POWERSTATUS()) { bTimeoverHintRequest = 0; if (bTimeStopDone == 0) //time active is on { if (usTimeStopAndSystemDiffer<=_TIMER_SLEEP_HINT_START) { if (ucCurrState!=_SLEEP_STATE) { //compare with sleep time if (ucSleepType ==0 || ucSleepTimeMin>=usTimeStopAndSystemDiffer) bTimeoverHintRequest = 1; } } } } if ((bTimeoverHintRequest==1) && (bTimeoverHintOsdState ==0)) { if (ucOsdState != _SHOW_TIMESTOP_TIMEOVER_HINT_STATE&& ucOsdState==_IDLE_STATE) { COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE); } if (ucOsdState==_SHOW_TIMESTOP_TIMEOVER_HINT_STATE) { COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_REMINDTIME_MESSAGE); } } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimerPowerOffEvent); #else if (++ucTimerPowerOffMinTickCnt>=60) { ucTimerPowerOffMinTickCnt = 0; if (stTimeData.ucTimeHourStop != 0 || stTimeData.ucTimeMinStop != 0) { if (stTimeData.ucTimeMinStop !=0) { stTimeData.ucTimeMinStop--; if (stTimeData.ucTimeMinStop == 0 && stTimeData.ucTimeHourStop == 0) { CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent); if (GET_POWERSTATUS()) { SET_POWERSWITCH(); COsdFxDisableOsd(); COsdCoreInitialze(); COsdMessageInitial(); ucSleepType = 0; // set Sleep mode disable CTimerCancelTimerEvent(COsdReckonTimeEvent); CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent); return; } } else if (stTimeData.ucTimeMinStop == 0) { stTimeData.ucTimeHourStop--; stTimeData.ucTimeMinStop = 59; } } else { stTimeData.ucTimeHourStop--; stTimeData.ucTimeMinStop = 59; } } } usTimeStopAndSystemDiffer = stTimeData.ucTimeHourStop*60+stTimeData.ucTimeMinStop; if (GET_POWERSTATUS()) { bTimeoverHintRequest = 0; if (bTimeStopDone == 0) //time active is on { if (usTimeStopAndSystemDiffer<=_TIMER_SLEEP_HINT_START) { if (ucCurrState!=_SLEEP_STATE) { //compare with sleep time if (ucSleepType ==0 || ucSleepTimeMin>=usTimeStopAndSystemDiffer) bTimeoverHintRequest = 1; } } } } if ((bTimeoverHintRequest==1) && (bTimeoverHintOsdState ==0)) { if (ucOsdState != _SHOW_TIMESTOP_TIMEOVER_HINT_STATE&& ucOsdState==_IDLE_STATE) { COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE); } if (ucOsdState==_SHOW_TIMESTOP_TIMEOVER_HINT_STATE) { COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_REMINDTIME_MESSAGE); } } CTimerReactiveTimerEvent(SEC(1), COsdReckonTimerPowerOffEvent); #endif } void COsdReckonTimerSwitchChEvent(void) { CTimerReactiveTimerEvent(SEC(1), COsdReckonTimerSwitchChEvent); } #endif //#if _TIMER_PAGE_SUPPORT void COsdReckonSystemClockEvent(void) { #if _TIMER_SLEEP_HINT_SUPPORT==0 ucSec++; if(ucSec == 60) { ucSec = 0; ucMin++; if(ucMin == 60) { ucMin = 0; ucHour++; if(ucHour == 24) ucHour = 0; } } //CTimerReactiveTimerEvent(SEC(1), COsdReckonSystemClockEvent); #endif #if _TIMER_SLEEP_HINT_SUPPORT WORD usSystem; WORD usStop; #if 1 //usSystem = ucHourSystem*60+ucMinSystem; //usStop = stTimeData.ucTimeHourStop*60+stTimeData.ucTimeMinStop; usStop = stTimeData.ucTimeHourStop*60+stTimeData.ucTimeMinStop; usSystem = ucHourSystem*60+ucMinSystem; usTimeStopAndSystemDiffer=0xffff; if (usStop>=0 && usStop<_TIMER_SLEEP_HINT_START)//stop 00:00-00:05 { if (usSystem>=23*60+(60-_TIMER_SLEEP_HINT_START) && usSystem<24*60) //system 23:55-00:00 usTimeStopAndSystemDiffer = (usStop+_TIMER_SLEEP_HINT_START)-(usSystem+_TIMER_SLEEP_HINT_START)%60; else if (usSystem>=0 && usSystem<_TIMER_SLEEP_HINT_START) //system 00:00-00:05 { if (usSystem=usTimeStopAndSystemDiffer) bTimeoverHintRequest = 1; } } } #endif //#if _TIMER_PAGE_SUPPORT //} } if ((bTimeoverHintRequest==1) && (bTimeoverHintOsdState ==0)) { if (ucOsdState != _SHOW_TIMESTOP_TIMEOVER_HINT_STATE&& ucOsdState==_IDLE_STATE) { //disable music play status //if (GET_MUSIC_PLAYER_STATUS()) //{ // SET_MUSIC_PLAYER_SWITCH(); // CMusicPlayerHandler(); //} //ready to show timeover hint //else COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE); } if (ucOsdState==_SHOW_TIMESTOP_TIMEOVER_HINT_STATE) { //already show hint, refresh remind time COsdMessagePush(_SHOW_TIMESTOP_TIMEOVER_HINT_REMINDTIME_MESSAGE); } } #endif //#if _TIMER_SLEEP_HINT_SUPPORT #if _TIMER_PAGE_SUPPORT #else //#if _TIMER_PAGE_SUPPORT // stop time check if (stTimeData.ucTimeActiveType) //time active is on { if (GET_POWERSTATUS()) { usSystem = (ucMinSystem)*60+ucSecSystem; usStop = (stTimeData.ucTimeMinStop)*60; if ( stTimeData.ucTimeHourStop==ucHourSystem && usSystem==usStop) { //if (GET_POWERSTATUS()==1) //{ SET_POWERSWITCH(); COsdFxDisableOsd(); COsdCoreInitialze(); COsdMessageInitial(); //20070409, disable sleep timer ucSleepType = 0; // set Sleep mode disable CTimerCancelTimerEvent(COsdReckonTimeEvent); //} if (stTimeData.ucTimeActiveType==2) { stTimeData.ucTimeHourStop = 0; stTimeData.ucTimeMinStop = 0; //CEepromSaveTimeData(); bTimeStopDone = 1; } } } //time start if (GET_POWERSTATUS()==0) { usSystem = (ucMinSystem)*60+ucSecSystem; usStop = (stTimeData.ucTimeMinStart)*60; if ( stTimeData.ucTimeHourStart==ucHourSystem && (usSystem==usStop)) { //if (GET_POWERSTATUS()==0) //{ #if 0//(_TV_POWERONCH_SUPPORT) //20070424, any src switch to tv specified channel CPowerUpDeviceAndInitI2C(); stSystemData.InputSource = 0; //according to _INPUT_PORT_MAX CEepromSaveSystemData(); if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT) { #if (_ColorStandard_TYPE==_NTSC) if (GET_CurChn()!= GET_TVPOWERONCHANNEL()) { SET_PreChn(GET_CurChn()); if (GET_NtscTableType()==_TV_NTSCTABLE_TYPE_AIR) { if (GET_TVPOWERONCHANNEL()<=1 || GET_TVPOWERONCHANNEL()>69) { SET_CurChn(2); } else { SET_CurChn(GET_TVPOWERONCHANNEL()); } } else { SET_CurChn(GET_TVPOWERONCHANNEL()); } CEepromSaveTvData(); //20070406 CEepromGetTvPdbData(GET_CurChn(), &stTvPdb.offset); SET_TV_FINETUNE_PRE_DONE(); #if (_TV_FINETUNE_SAVE_SUPPORT) //20070407, get finetune data CEepromGetTvFinetuneData(GET_CurChn(), &ucTvFinetuneData); #endif } #else //#if (_ColorStandard_TYPE==_NTSC) if (stTvInfo.CurChn != GET_TVPOWERONCHANNEL()) { stTvInfo.PreChn = stTvInfo.CurChn; stTvInfo.CurChn = GET_TVPOWERONCHANNEL(); CEepromSaveTvData(); //20070406 CEepromGetTvPdbData(stTvInfo.CurChn, &stTvPdb.chinfo); SET_TV_FINETUNE_PRE_DONE(); #if (_TV_FINETUNE_SAVE_SUPPORT) //20070407, get finetune data CEepromGetTvFinetuneData(stTvInfo.CurChn, &ucTvFinetuneData); #endif } #endif //NOT #if (_ColorStandard_TYPE==_NTSC) } #endif SET_POWERSWITCH(); COsdFxDisableOsd(); COsdCoreInitialze(); COsdMessageInitial(); //} if (stTimeData.ucTimeActiveType==2) { stTimeData.ucTimeHourStart= 0; stTimeData.ucTimeMinStart= 0; //CEepromSaveTimeData(); bTimeStartDone = 1; } } } if (bTimeStartDone && bTimeStopDone && (stTimeData.ucTimeActiveType==2)) { stTimeData.ucTimeActiveType = 0; //CEepromSaveTimeData(); bTimeStartDone = 0; bTimeStopDone = 0; } } #endif //#if _TIMER_PAGE_SUPPORT } #if _TIMER_SLEEP_HINT_SUPPORT void COsdStopUserTimer(void) { ///////////////////////////////////////////// /*RESET WAKE UP TIMIER AND SLEEP TIMER */ //ucSecWakeup = 0; //ucMinWakeup = 0; //ucHourWakeup = 0; //system clock and wakeup clock share event. //CTimerCancelTimerEvent(COsdReckonSystemClockEvent); ucSleepTimeMin = 0; ucSleepType = _TIMER_SLEEP_T_OFF; CTimerCancelTimerEvent(COsdReckonTimeEvent); //////////////////////////////////////////////// //20070331 ucHourSystem = 0; ucMinSystem = 0; ucSecSystem = 0; } #endif //#if _TIMER_SLEEP_HINT_SUPPORT #if(_Change_SOURCE_Type == Change_SOURCE_Type2 || _Change_SOURCE_Type == Change_SOURCE_Type3) void COsdChangeSourceEvent(void) { if(stSystemData.InputSource == ucSourceTemp){ COsdFxExitEvent(); return; } // If change source, cancel the no-signal event, // and if no signal message on screen, close it. CPowerLightPowerOff(); CTimerCancelTimerEvent(COsdNoSignalEvent); COsdCoreCloseNoSignalOsd(); CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20); COsdCtrlSetSingalSource(ucSourceTemp); //20080829c ccy add COsdMessagePush(_SHOWINFO_MESSAGE); COsdCoreInitialze(); } #endif #if(_MEMORY_LOCATION == _FLASH) void COsdSaveFlashDataEvent(void) { if((bVolumeFlag == _ENABLE)||(bBalanceFlag == _ENABLE)||(bTrebleFlag == _ENABLE)||(bBassFlag == _ENABLE)) { CEepromSaveAudioData(); bVolumeFlag = _DISABLE; bBalanceFlag = _DISABLE; bTrebleFlag = _DISABLE; bBassFlag = _DISABLE; } if((bContrastFlag == _ENABLE)||(bBrightnessFlag == _ENABLE)) { CEepromSaveBriConData(); bContrastFlag = _DISABLE; bBrightnessFlag = _DISABLE; } if(bOsdBlendingFlag == _ENABLE) { CEepromSaveOsdUserData(); bOsdBlendingFlag = _DISABLE; } if(bSharpnessFlag == _ENABLE) { CEepromSaveSystemData(); bSharpnessFlag = _DISABLE; } if((bHueFlag == _ENABLE)||(bSaturationFlag == _ENABLE)) { CEepromSaveHueSatData(); bHueFlag = _DISABLE; bSaturationFlag = _DISABLE; } if((bHPositionFlag == _ENABLE)||(bVPositionFlag == _ENABLE)||(bClockFlag == _DISABLE)||(bPhaseFlag == _DISABLE)) { CEepromSaveModeData(stModeInfo.ModeCurr); bHPositionFlag = _DISABLE; bVPositionFlag = _DISABLE; bClockFlag = _DISABLE; bPhaseFlag = _DISABLE; } } #endif #if _TUNER_TYPE!=_TUNER_NONE void COsdFxManualScanOverEvent(void) { ucManualScanOver = 1; } #endif //#if _TUNER_TYPE!=_TUNER_NONE // Mute icon is shown while idle state void COsdActiveMuteIcon(void) { COsdMessagePush(_SHOW_MUTE_IDLE_MESSAGE); } /** * * @} */