/*=========================================================== * Copyright (c) Realtek Semiconductor Corporation, 2005 * All rights reserved. * ========================================================== */ /*==================== File Description ===================== */ /** * @file * This file osd message process is for osd related functions. * * @author $Author: hillwang $ * @date $Date: 2006-07-26 17:16:38 +0800 (?Ÿæ?ä¸? 26 七æ? 2006) $ * @version $Revision: 1133 $ */ /** * @addtogroup osd * @{ */ #define _OSDMESSAGE_C /*===================== Module dependency ================== */ #include "Core\Header\Include.h" /*======================= Private Types ===================== */ /*======================== Definitions ====================== */ /*========================== Variables ====================== */ BYTE xdata ucOsdMessage; BYTE xdata ucOsdPreMessage; UINT8 xdata ucOsdMessageControl; static UINT8 xdata ucOsdMsgQueueRd = 0; static UINT8 xdata ucOsdMsgQueueWr = 0; UINT8 xdata ucOsdMsgQueue[_MESSAGE_QUEUE_SIZE]; UINT8 xdata ucRepeatKeyCount = 0; UINT8 xdata ucKeyPadMessage = 0; // for KEY Pad used. UINT16 idata usItemStart; /*=================== Local Functions Phototype ==============*/ BIT COsdMessageGetInternal(void); static void COsdMessagePowerCtrl(void); /*=========================== Functions ===================== */ void COsdMessageHandler(void) { BYTE ucAcceptMessage; ucAcceptMessage = CKeyRead(); if(ucAcceptMessage == _NONE_KEY_MESSAGE) { if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _YPBPR_A0_PORT) //add by lbh 20090916 ucAcceptMessage = CDVDIRKeyScan(); else ucAcceptMessage = CIRKeyScan(); } //if(ucAcceptMessage != _NONE_KEY_MESSAGE) //DebugPrintf("\ucAcceptMessage==%d\n", ucAcceptMessage); // DebugPrintf("\IrHandlerEnable==%d\n", IrHandlerEnable); #if( 0) if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DTV_PORT) ucAcceptMessage=DTVCommandFunc(ucAcceptMessage); #endif if(ucAcceptMessage != _NONE_KEY_MESSAGE) { if(ucAcceptMessage == _POWER_KEY_MESSAGE) { //cancel factory status while soft power down if (GET_FACTORYSTATUS() && GET_POWERSTATUS()) { //save factory status CLR_FACTORYSTATUS(); CEepromSaveSystemData(); #if 1//(_FACTORY_COLSE_BY_POWER) COsdFxDisableOsd(); COsdMessageInitial(); COsdCoreInitialze(); return; #endif } #if _TIMER_PAGE_SUPPORT if (ucOsdState == _SHOW_TIMESTOP_TIMEOVER_HINT_STATE) { stTimeData.ucTimeHourStop = stTimeData.ucTimeMinStop = 0; ucTimerPowerOffMinTickCnt = 0; CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent); COsdFxDisableOsd(); return; } #endif //#if _TIMER_PAGE_SUPPORT #if 1 CTimerWaitForEvent(_EVENT_DEN_STOP); CTimerWaitForEvent(_EVENT_DEN_STOP); CTimerWaitForEvent(_EVENT_DEN_STOP); CTimerWaitForEvent(_EVENT_DEN_STOP); COsdCoreSetState(_IDLE_STATE); #endif ucSleepType = 0; // set Sleep mode disable SET_POWERSWITCH(); COsdMessageInitial(); return; } #if (_PCB_TYPE == _PCB_TEST) else if(ucAcceptMessage == _LCDONOFF_KEY_MESSAGE) { if(GET_LIGHTPOWERSTATUS()) { CPowerLightPowerOff(); CTimerDelayXms(200); #ifndef DERUN_805_AT080 CPowerPanelPowerOff(); CTimerDelayXms(200); #endif bForcePanelOff = 1; } else { if(GET_POWERSTATUS()) { CPowerPanelPowerOn(); CTimerDelayXms(600); CPowerLightPowerOn(); bForcePanelOff = 0; } } COsdMessageInitial(); //add 20091123 return; } #endif //disable by lbh 20091014 else if (GET_POWERSTATUS()) // Ken COsdMessagePush(ucAcceptMessage); else ucOsdMessage = _NONE_KEY_MESSAGE; //Ken } if (ucAcceptMessage == _EXIT_KEY_MESSAGE) SET_DONT_ENABLE_OSD_WHEN_CHANGE_SRC(); if(GET_OSDMESSAGE_REMAINDER()) { ucAcceptMessage = COsdMessagePop(); if(ucAcceptMessage != _REPEAT_KEY_MESSAGE) { ucOsdPreMessage = ucAcceptMessage; ucRepeatKeyCount = 0; } //debug after press left or right key to adjust parameter,then press invalid keys will deal with repeat key 20081016 else if(ucAcceptMessage == _REPEAT_KEY_MESSAGE && ucOsdPreMessage == _INVALID_KEY_MESSAGE/*_NONE_KEY_MESSAGE*/) //change by lbh 20090916 ucAcceptMessage = _INVALID_KEY_MESSAGE/*_NONE_KEY_MESSAGE*/; //change by lbh 20090916 //20081016 else { ucRepeatKeyCount++; if(ucRepeatKeyCount == 255) ucRepeatKeyCount = 5; } ucOsdMessage = ucAcceptMessage; return; } ucOsdMessage = _NONE_KEY_MESSAGE; #if 0 if(COsdMessageGetInternal()){ return; } else { CLR_OSDMESSAGESCANREADY(); ucAcceptMessage = CKeyRead(); if(ucAcceptMessage == _NONE_KEY_MESSAGE) ucAcceptMessage = CIRKeyScan(); if(ucAcceptMessage != _NONE_KEY_MESSAGE) { ucOsdMessage = ucAcceptMessage; if(ucOsdMessage != _REPEAT_KEY_MESSAGE) ucOsdPreMessage = ucOsdMessage; if(ucOsdMessage == _POWER_KEY_MESSAGE) if(GET_POWERSTATUS()) SET_POWERSWITCH(); else SET_POWERSWITCH(); return; } } ucOsdMessage = _NONE_KEY_MESSAGE; #endif } /** This is the call back function for OSD menu time-out. When the time-out occur, we send the fake _EXIT_KEY_MESSAGE mesage to close the OSD menu. */ void COsdMessageInitial(void) { UINT8 ucCnt; // Initial key scan status CKeyInitial(); // CRemoteCtrlInitial(); for(ucCnt = 0; ucCnt < _MESSAGE_QUEUE_SIZE; ucCnt++) ucOsdMsgQueue[ucCnt] = _NONE_KEY_MESSAGE; ucOsdMessage = _NONE_KEY_MESSAGE; ucOsdPreMessage = _NONE_KEY_MESSAGE; } #if 0 BIT COsdMessageGetInternal(void) { if(GET_OSDMESSAGESCANREADY()) { CLR_OSDMESSAGESCANREADY(); return _TRUE; } ucOsdMessage = _NONE_KEY_MESSAGE; return _FALSE; } void COsdMessageSend(BYTE message) { ucOsdMessage = message; COsdCoreSetState(_IDLE_STATE); // COsdCoreResetLayer(); CTimerCancelTimerEvent(COsdFxExitEvent); SET_OSDMESSAGESCANREADY(); } #endif void COsdMessagePush(UINT8 message) { ucOsdMsgQueue[ucOsdMsgQueueWr] = message; ucOsdMsgQueueWr = (ucOsdMsgQueueWr + 1) % _MESSAGE_QUEUE_SIZE; SET_OSDMESSAGE_REMAINDER(); } UINT8 COsdMessagePop(void) { UINT8 xdata ucRetMessage; if(GET_OSDMESSAGE_REMAINDER()) { ucRetMessage = ucOsdMsgQueue[ucOsdMsgQueueRd]; ucOsdMsgQueueRd = (ucOsdMsgQueueRd + 1) % _MESSAGE_QUEUE_SIZE; if(ucOsdMsgQueueRd == ucOsdMsgQueueWr) CLR_OSDMESSAGE_REMAINDER(); return ucRetMessage; } return _NONE_KEY_MESSAGE; } /* void COsdMessageClr() { ucOsdMessage = _NONE_KEY_MESSAGE; } */ /** * * @} */