/*=============================================
  * Copyright (c)      Realtek Semiconductor Corporation, 2005
  * All rights reserved.
  * ============================================ */

/*================= File Description ================= */
/**
 * @file
 * 	This file is for global structure's declaration.
 *
 * @author 	$Author: hillwang $
 * @date 	$Date: 2006-07-19 20:20:02 +0800 (?Ÿæ?ä¸? 19 ä¸ƒæ? 2006) $
 * @version 	$Revision: 1115 $
 * @ingroup 	input
 */

/**
* @addtogroup input
* @{
*/

/*===================== Module dependency  ================== */
#include "Core\Header\include.h"

/*======================= Private Types ===================== */
/*typedef enum {
	_IR_NOKEY_STATE = 0,
	_IR_PRECTRLCODE_STATE = 1,
	_IR_ADDRCODE_STATE,
	_IR_COMMANDCODE_STATE
} IrStateType;
*/
/*======================== Definitions ====================== */
//#define IRQUEUE_SIZE 			5


//MICON_IR
/*											//byte1,byte2,byte3=0x7F,byte4=0x80,
static UINT8 code  _DTV_RESERVED_CMD1[]=	{0x20, 0xdf};	//0x20DF7F80
static UINT8 code  _DTV_DISPLAY[]=			{0x27, 0xd8};	//0x27D87F80
static UINT8 code  _DTV_YELLOW[]=			{0x2d, 0xd2};	//0x2DD27F80
static UINT8 code  _DTV_CAPTION[]=			{0x31, 0xce};	//0x31CE7F80
static UINT8 code  _DTV_GREEN[]=			{0x35, 0xca};	//0x35CA7F80
static UINT8 code  _DTV_RESERVED_CMD2[]=	{0x38, 0xc7};	//0x38C77F80
static UINT8 code  _DTV_RED[]=				{0x39, 0xc6};	//0x39C67F80
static UINT8 code  _DTV_EXIT[]=				{0x3d, 0xc2};	//0x3DC27F80
static UINT8 code  _DTV_CH_DOWN[]=			{0x61, 0x9e};	//0x619E7F80
static UINT8 code  _DTV_OK[]=				{0x62, 0x9d};	//0x629D7F80
static UINT8 code  _DTV_VOL_DOWN[]=			{0x63, 0x9c};	//0x639C7F80
static UINT8 code  _DTV_CH_UP[]=			{0x65, 0x9a};	//0x659A7F80
static UINT8 code  _DTV_MENU[]=				{0x66, 0x99};	//0x66997F80
static UINT8 code  _DTV_VOL_UP[]=			{0x67, 0x98};	//0x67987F80
static UINT8 code  _DTV_RESERVED_CMD3[]=	{0x68, 0x97};	//0x68977F80
static UINT8 code  _DTV_AUDIO[]=			{0x69, 0x96};	//0x69967F80
static UINT8 code  _DTV_2[]=				{0x6a, 0x95};	//0x6A957F80
static UINT8 code  _DTV_1[]=				{0x6b, 0x94};	//0x6B947F80
static UINT8 code  _DTV_RESERVED_CMD4[]=	{0x6c, 0x93};	//0x6C937F80
static UINT8 code  _DTV_JUMP[]=				{0x6d, 0x92};	//0x6D927F80
static UINT8 code  _DTV_0[]=				{0x6e, 0x91};	//0x6E917F80
static UINT8 code  _DTV_DOT[]=				{0x6f, 0x90};	//0x6F907F80
static UINT8 code  _DTV_9[]=				{0x71, 0x8e};	//0x718E7F80
static UINT8 code  _DTV_8[]=				{0x72, 0x8d};	//0x728D7F80
static UINT8 code  _DTV_7[]=				{0x73, 0x8c};	//0x738C7F80
static UINT8 code  _DTV_6[]=				{0x75, 0x8a};	//0x758A7F80
static UINT8 code  _DTV_5[]=				{0x76, 0x89};	//0x76897F80
static UINT8 code  _DTV_4[]=				{0x77, 0x88};	//0x77887F80
static UINT8 code  _DTV_MUTE[]=				{0x79, 0x86};	//0x79867F80
static UINT8 code  _DTV_BLUE[]=				{0x7a, 0x85};	//0x7a857F80
static UINT8 code  _DTV_EPG[]=				{0x7b, 0x84};	//0x7b847F80
static UINT8 code  _DTV_POWER[]=			{0x7d, 0x82};	//0x7D827F80
static UINT8 code  _DTV_FAV_CH[]=			{0x7e, 0x81};	//0x7E817F80
static UINT8 code  _DTV_3[]=				{0x7f, 0x80};	//0x7F807F80
*/
//REALTEK_IR								//byte1,byte2,byte3=0xFB,byte4=0x04,



/*========================== Variables ====================== */
#if (_IR_HANDLER_MODE==_SW_MODE)
#define IRQUEUE_SIZE 			5

BYTE xdata ucTimerCnt	= 0x00;

BYTE xdata ucIrQueue[IRQUEUE_SIZE][4];

BYTE xdata ucIrQueueRd = 0;
BYTE xdata ucIrQueueWr = 0;
WORD xdata ucIrQueueClearCnt=0;
BIT ucIrQueueClearFlag=0;
BYTE idata lowCount= 0,highCount=0,IrBit=1,IrByte=0,BitStart=0,ByteStart=0,IrHandlerEnable=1,repeatIntervalTooLong = 1,repeatIntervalCount=0,repeatIntervalCountLow=0,repeatCounter=0,now_bIR_GPIO=0,IrStatus=IR_HeaderLow;
BYTE xdata tem[4] = { 0x00, 0x00 ,0x00,0x00 };
//BYTE xdata pre_tem[4] = { 0x00, 0x00 ,0x00,0x00 };
BIT pre_bIR_GPIO=0;



//250us
#define IR_HeaderHigh_MinCnt		33	// 9ms=>36*250us=>36(+/-3)
#define IR_HeaderHigh_MaxCnt		39
#define IR_HeaderLow_MinCnt			16// 4.5ms=>18*250=>18(+/-2)
#define IR_HeaderLow_MaxCnt		20
#define IR_Repeat_MinCnt				7
#define IR_Repeat_MaxCnt				10
#define IR_Logical1_MinCnt				5	//1690us=>6.76*250=>6 or 7
#define IR_Logical1_MaxCnt				8
#define IR_Logical0_MinCnt				1	//560us=>2.24*250=>2 or 3
#define IR_Logical0_MaxCnt				4
#define IR_TotalByte							4	//Customer(2) + Control(1) + ~Control(1)

#elif(_IR_HANDLER_MODE==_HW_MODE)
BYTE xdata ucIrQueue[8];
static UINT8 idata ucIrdaStatus;
static BYTE idata repeatCounter=0;
static void CIrdaReadData(void);
#endif
/*=================== Local Functions Phototype ==============*/

/*=========================== Functions ===================== */

//--------------------------------------------------
// Description  : Get IR key status
// Input Value  : None
// Output Value : None
//--------------------------------------------------
#if(_PCB_TYPE == _PCB_TEST)
//#if (_IR_TYPE == _IR_TYPE_KONSTA)

#define CLR_IR_LINE()		{bIR_OUT = _LOW;}
#define SET_IR_LINE()			{bIR_OUT = _HIGH;}

void IRSendDelay(WORD n)
{
	WORD i;
	for(i=0; i<n; i++)
		_nop_();
}

void Send_0(void)
{
	CLR_IR_LINE();
	IRSendDelay(80);
	SET_IR_LINE();
	IRSendDelay(80);
}

void Send_1(void)
{
	CLR_IR_LINE();
	IRSendDelay(80);
	SET_IR_LINE();
	IRSendDelay(240);
}

void Send_Lead(void)
{
	CLR_IR_LINE();
	IRSendDelay(1400);
	SET_IR_LINE();
	IRSendDelay(700);
	
}

void Send_end(void) 
{
	CLR_IR_LINE();
	IRSendDelay(80);
	SET_IR_LINE();
	IRSendDelay(163);
}

void Send_code(BYTE value)
{
	BYTE i;
	for(i=0;i<8;i++)
	{
		if(value&0x01)
			Send_1();
		else
			Send_0();
		value>>=1;
	}
}

void	Send_Key(BYTE value)
{
	BYTE TempValN;
	TempValN = ~value;
	EA=0;
	Send_Lead();
	Send_code(0x00);//Send_code(CUSTOM_CODE>>8);
	Send_code(0xff);//Send_code(CUSTOM_CODE&0xff);
	Send_code(value);
	Send_code(TempValN);
	Send_end();
	EA=1;
}
#if 0
void	Send_KeyRepeat(void)
{
	EA=0;
	CLR_IR_LINE();
	IRSendDelay(1400);
	SET_IR_LINE();
	IRSendDelay(320);
	CLR_IR_LINE();
	IRSendDelay(80);
	SET_IR_LINE();
	IRSendDelay(640);
	EA=1;
}

#endif
BYTE CDVDIRKeyScan(void)
{
	BYTE temp;
	BYTE IRstate = _NONE_KEY_MESSAGE;
#if(_IR_HANDLER_MODE==_HW_MODE)
	ucIrdaStatus  = MCU_IR_STATUS_FF89;
	if(ucIrdaStatus&(_BIT4|_BIT3))
	{
		CIrdaReadData();				
		//DebugPrintf("\n ucIrQueue[0] is %x", ucIrQueue[0]);	//IR Customer Code.
		//DebugPrintf("\n ucIrQueue[1] is %x", ucIrQueue[1]);	//IR Customer Code.
		//DebugPrintf("\n ucIrQueue[2] is %x\n", ucIrQueue[2]);	//IR Command Code.
		//COsdFxClearText(3,0,2,3);
		//COsdFxShowNumber(3, 0, ucIrQueue[0], 0x33, _CP_RED);
		//COsdFxShowNumber(3, 3, ucIrQueue[1], 0x33, _CP_RED);
		//COsdFxShowNumber(4, 0, ucIrQueue[2], 0x33, _CP_RED);
		if(((UINT16 *)ucIrQueue)[0]==CUSTOM_CODE)
		{
			if(!(ucIrdaStatus&_BIT2))
			{
				if(ucIrQueue[2]==(~ucIrQueue[3])) 
				{				
					temp = ucIrQueue[2];
					switch(temp)
					{
#ifdef ZHONGHENGHUIBO_100IFW1
                  				case IR_FUNC_CHINC :							
#endif													
						case IR_SD_DVD_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_MUTE);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
#ifdef ZHONGHENGHUIBO_100IFW1
                  				case IR_FUNC_CHDEC:									
#endif								
						case IR_SUBTIT_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_SUB_TITLE);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_AUDIO_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_AUDIO_VCD);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_SETUP_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_SETUP);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
#ifdef DERUN_REMOTE
				case IR_FUNC_AUTOSEARCH:
#endif					
						case IR_SLOW_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_SF);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_STOP_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_STOP);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_PLAY_PAUSE_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_PLAY_PAUSE);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_REPEAT_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_REPEAT);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_AB_KEY:
						if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_SET_A);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_SPEED_DOWN_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_FR);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_SPEED_UP_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_FF);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_GOTO_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_GOTO);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_ZOOM_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_ZOOM_IN);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_ENTER_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_PLAY_ENTER);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
#ifdef ZHONGHENGHUIBO_100IFW1
				case IR_FUNC_AUTOSEARCH:
#endif					
						case IR_FUNC_PROGRAM:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_PROGRAM);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_DVD_MENU:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								//Send_Key(IR_TITLE_MENU);	
								Send_Key(IR_ROOT_MENU);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_TITLE:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_TITLE_MENU);	
							IRstate = _INVALID_KEY_MESSAGE;
							break;
							
						case IR_FUNC_DISPLAY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_DISPLAY);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM100:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_ADD10);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM0:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _0_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM0);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM1:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _1_KEY_MESSAGE;
						else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM1);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM2:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _2_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM2);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM3:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _3_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM3);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM4:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _4_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM4);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM5:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _5_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM5);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM6:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _6_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM6);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM7:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _7_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM7);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM8:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _8_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM8);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM9:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _9_KEY_MESSAGE;
							else if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NUM9);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _INVALID_KEY_MESSAGE;
							break;
#ifdef DERUN_REMOTE
                  				case IR_FUNC_CHINC :							
#endif									
						case IR_SKIP_BACK_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_PREV);
							}
							IRstate = _INVALID_KEY_MESSAGE;
							break;
#ifdef DERUN_REMOTE							
                  				case IR_FUNC_CHDEC:									
#endif									
						case IR_SKIP_FRONT_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_NEXT);
							}
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_POWER_KEY:
							IRstate = _POWER_KEY_MESSAGE;
							break;
						case IR_FUNC_SOURCE :
							IRstate = _SOURCE_KEY_MESSAGE;			
							break;
						case IR_MENU_KEY :
							IRstate = _MENU_KEY_MESSAGE;			
							break;
             					case IR_FUNC_MUTE :
							IRstate = _MUTE_KEY_MESSAGE;			
							break;
						case IR_FUNC_LCDONOFF:
							IRstate = _LCDONOFF_KEY_MESSAGE;
							break;
						case IR_FUNC_VOLINC:
							IRstate = _VOLUME_INC_MESSAGE;
							break;
						case IR_FUNC_VOLDEC:
							IRstate = _VOLUME_DEC_MESSAGE;
							break;
						case IR_LEFT_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_LEFT);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _LEFT_KEY_MESSAGE;
							break;
						case IR_RIGHT_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_RIGHT);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _RIGHT_KEY_MESSAGE;
							break;
						case IR_UP_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_UP);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _UP_KEY_MESSAGE;
							break;
						case IR_DOWN_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
							{
								Send_Key(IR_DOWN);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							else
								IRstate = _DOWN_KEY_MESSAGE;
							break;
						case IR_ANGLE_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_ANGLE);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_PAL_NTSC_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_PAL_NTSC);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_PBC_KEY:
							if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_ROOT_MENU);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
							case IR_FUNC_RETURN:
								if(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE)
								Send_Key(IR_RETURN);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						default:
							IRstate = _INVALID_KEY_MESSAGE;
							break;
					}
					repeatCounter = 0;
				}
			}
			else if (ucIrdaStatus&_BIT2)  
			{	
				repeatCounter++;
				if(repeatCounter>=1)
				{
					IRstate = _REPEAT_KEY_MESSAGE;
					repeatCounter = 0;
				}
			}
		}
	}
#endif
	return IRstate;
}
#if 0
#define CLR_DMBIR_LINE()		{bDMB_IR= _LOW;}
#define SET_DMBIR_LINE()		{bDMB_IR = _HIGH;}

void SendDMBIR_0(void)
{
	CLR_DMBIR_LINE();
	DelayX100us(5);
	SET_DMBIR_LINE();
	DelayX100us(5);
}

void SendDMBIR_1(void)
{
	CLR_DMBIR_LINE();
	DelayX100us(5);
	SET_DMBIR_LINE();
	DelayX100us(14);
}

void SendDMBIR_Lead(void)
{
	CLR_DMBIR_LINE();
	DelayX100us(69);
	SET_DMBIR_LINE();
	DelayX100us(34);
	
}

void SendDMBIR_end(void) 
{
	CLR_DMBIR_LINE();
	DelayX100us(5);
	SET_DMBIR_LINE();
	DelayX100us(460);
}

void SendDMBIR_code(BYTE value)
{
	if((value & 0x01) == 0x01)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x02) == 0x02)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x04) == 0x04)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x08) == 0x08)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x10) == 0x10)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x20) == 0x20)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x40) == 0x40)
		SendDMBIR_1();
	else
		SendDMBIR_0();
	if((value &  0x80) == 0x80)
		SendDMBIR_1();
	else
		SendDMBIR_0();
}

void	SendDMBIR_Key(BYTE value)
{
	BYTE TempVal;
	TempVal = SendValueConverter(value);
	
	SendDMBIR_Lead();
	SendDMBIR_code(SendValueConverter(CUSTOM_CODE>>8));
	SendDMBIR_code(SendValueConverter(CUSTOM_CODE&0xff));
	SendDMBIR_code(TempVal);
	SendDMBIR_code(~TempVal);
	SendDMBIR_end();
}

void	SendDMBIR_KeyRepeat(void)
{
	CLR_DMBIR_LINE();
	DelayX100us(69);
	SET_DMBIR_LINE();
	DelayX100us(17);
	CLR_DMBIR_LINE();
	DelayX100us(5);
	SET_DMBIR_LINE();

}
BYTE CDMBIRKeyScan(void)
{
	BYTE IRstate = _NONE_KEY_MESSAGE;

#if(_IR_HANDLER_MODE==_HW_MODE)
	ucIrdaStatus  = MCU_IR_STATUS_FF89;
	if(ucIrdaStatus&(_BIT4|_BIT3))
	{
		CIrdaReadData();				
		//DebugPrintf("\n ucIrQueue[0] is %x", ucIrQueue[0]);	//IR Customer Code.
		//DebugPrintf("\n ucIrQueue[1] is %x", ucIrQueue[1]);	//IR Customer Code.
		//DebugPrintf("\n ucIrQueue[2] is %x\n", ucIrQueue[2]);	//IR Command Code.
		//COsdFxShowNumber(3, 0, ucIrQueue[0], 0x33, _CP_RED);
		//COsdFxShowNumber(3, 3, ucIrQueue[1], 0x33, _CP_RED);
		//COsdFxShowNumber(4, 0, ucIrQueue[2], 0x33, _CP_RED);
		if(((UINT16 *)ucIrQueue)[0]==CUSTOM_CODE)
		{
			if(!(ucIrdaStatus&_BIT2))
			{
				if(ucIrQueue[2]==(~ucIrQueue[3])) 
				{				
					switch(ucIrQueue[2])
					{
						case IR_SD_DVD_KEY:
						case IR_GOTO_KEY:
						case IR_SUBTIT_KEY:
						case IR_AUDIO_KEY:
						case IR_SETUP_KEY:
						case IR_SLOW_KEY:
						case IR_STOP_KEY:
						case IR_PLAY_PAUSE_KEY:
						case IR_REPEAT_KEY:
						case IR_AB_KEY:
						case IR_SPEED_DOWN_KEY:
						case IR_SPEED_UP_KEY:
						case IR_PBC_KEY:
						case IR_ZOOM_KEY:
						case IR_SKIP_BACK_KEY:
						case IR_SKIP_FRONT_KEY:
						case IR_ENTER_KEY:
						case IR_FUNC_RETURN:
						case IR_FUNC_DISPLAY:
						case IR_FUNC_NUM100:
							SendDMBIR_Key(ucIrQueue[2]);
							IRstate = _INVALID_KEY_MESSAGE;
							break;
						case IR_FUNC_NUM0:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _0_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM1:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _1_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM2:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _2_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM3:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _3_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM4:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _4_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM5:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _5_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM6:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _6_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM7:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _7_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM8:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _8_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_FUNC_NUM9:
							if(ucOsdState==_MAINMENU_STATE)
								IRstate = _9_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_POWER_KEY:
							IRstate = _POWER_KEY_MESSAGE;
							break;
						case IR_FUNC_SOURCE :
							IRstate = _SOURCE_KEY_MESSAGE;			
							break;
						case IR_MENU_KEY :
							IRstate = _MENU_KEY_MESSAGE;			
							break;
             					case IR_FUNC_MUTE :
							IRstate = _MUTE_KEY_MESSAGE;			
							break;
						//case IR_FUNC_DISPLAY:
							//IRstate = _DISPLAY_KEY_MESSAGE;
							//break;
						case IR_FUNC_VOLINC:
							IRstate = _VOLUME_INC_MESSAGE;
							break;
						case IR_FUNC_VOLDEC:
							IRstate = _VOLUME_DEC_MESSAGE;
							break;
						case IR_LEFT_KEY:
							if(ucOsdState == _MAINMENU_STATE ||ucOsdState == _VOLIMN_STATE)
								IRstate = _LEFT_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_RIGHT_KEY:
							if(ucOsdState == _MAINMENU_STATE ||ucOsdState == _VOLIMN_STATE)
								IRstate = _RIGHT_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_UP_KEY:
							if(ucOsdState == _MAINMENU_STATE ||ucOsdState == _VOLIMN_STATE)
								IRstate = _UP_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						case IR_DOWN_KEY:
							if(ucOsdState == _MAINMENU_STATE ||ucOsdState == _VOLIMN_STATE)
								IRstate = _DOWN_KEY_MESSAGE;
							else
							{
								SendDMBIR_Key(ucIrQueue[2]);
								IRstate = _INVALID_KEY_MESSAGE;
							}
							break;
						default:
							IRstate = _INVALID_KEY_MESSAGE;
							break;
					}
					repeatCounter = 0;
				}
			}
			else if (ucIrdaStatus&_BIT2)  
			{	
				repeatCounter++;
				if(repeatCounter>=1)
				{
					if(ucIrQueue[2]==(~ucIrQueue[3])) 
					{
						switch(ucIrQueue[2])
						{
							case IR_SD_DVD_KEY:
							case IR_GOTO_KEY:
							case IR_SUBTIT_KEY:
							case IR_AUDIO_KEY:
							case IR_SETUP_KEY:
							case IR_SLOW_KEY:
							case IR_STOP_KEY:
							case IR_PLAY_PAUSE_KEY:
							case IR_REPEAT_KEY:
							case IR_AB_KEY:
							case IR_SPEED_DOWN_KEY:
							case IR_SPEED_UP_KEY:
							case IR_PBC_KEY:
							case IR_ZOOM_KEY:
							case IR_SKIP_BACK_KEY:
							case IR_SKIP_FRONT_KEY:
							case IR_ENTER_KEY:
							case IR_FUNC_RETURN:
							case IR_FUNC_DISPLAY:
							case IR_FUNC_NUM100:
								SendDMBIR_KeyRepeat();
								break;
							case IR_LEFT_KEY:
							case IR_RIGHT_KEY:
							case IR_UP_KEY:
							case IR_DOWN_KEY:
								if((ucOsdState != _MAINMENU_STATE) && (ucOsdState != _VOLIMN_STATE))
									SendDMBIR_KeyRepeat();
								break;
							default:
								break;
						}
					}
					IRstate = _REPEAT_KEY_MESSAGE;
					repeatCounter = 0;
				}
			}
		}
	}
#endif
	return IRstate;
}

#endif

#endif

//BYTE keystate=0;
BYTE CIRKeyScan(void)
{
	BYTE temp;
	BYTE keystate=0;
	
#if (_IR_HANDLER_MODE==_SW_MODE)
//	if((pre_tem[0]==0x00)&&(pre_tem[1]==0xff))
	if(ucIrQueueRd != ucIrQueueWr) {

             // DebugPrintf("\n ucIrQueue[ucIrQueueRd][0] is %x", ucIrQueue[ucIrQueueRd][0]);	//IR Customer Code.
	       //DebugPrintf("\n ucIrQueue[ucIrQueueRd][1] is %x", ucIrQueue[ucIrQueueRd][1]);	//IR Customer Code.
	      // DebugPrintf("\n ucIrQueue[ucIrQueueRd][2] is %x\n", ucIrQueue[ucIrQueueRd][2]);	//IR Command Code.
		
		if(((UINT16 *)ucIrQueue[ucIrQueueRd])[0]==CUSTOM_CODE) {
			if(ucIrQueue[ucIrQueueRd][2]==(~ucIrQueue[ucIrQueueRd][3])) {
				temp = ucIrQueue[ucIrQueueRd][2];
#endif	

		
		//DebugPrintf("\n MCU_PIN_SHARE_CTRL0D_FFA3==%x", MCU_PIN_SHARE_CTRL0D_FFA3);
		//DebugPrintf("\n IRQ_STATUS_FF00==%x", IRQ_STATUS_FF00);
		//DebugPrintf("\n MCU_IR_DEBOUNCE_FF81==%x", MCU_IR_DEBOUNCE_FF81);
		//DebugPrintf("\n MCU_IR_STATUS_FF89==%x", MCU_IR_STATUS_FF89);
		/*DebugPrintf("\n MCU_IR_DATA0_FF8A==%x", ucIrQueue[5]);
		DebugPrintf("\n MCU_IR_DATA1_FF8B==%x", ucIrQueue[6]);
		DebugPrintf("\n MCU_IR_DATA2_FF8C==%x", ucIrQueue[0]);
		DebugPrintf("\n MCU_IR_DATA3_FF8D==%x", ucIrQueue[1]);
		DebugPrintf("\n MCU_IR_DATA4_FF8E==%x", ucIrQueue[2]);
		DebugPrintf("\n MCU_IR_DATA5_FF8F==%x", ucIrQueue[3]);*/
		//DebugPrintf("\n ucIrdaStatus==%x\n", ucIrdaStatus);
		//DebugPrintf("\n MCU_CTRL_FFED==%x\n", MCU_CTRL_FFED);
		
		
#if (_IR_HANDLER_MODE==_HW_MODE)
		ucIrdaStatus  = MCU_IR_STATUS_FF89;
		if(ucIrdaStatus&(_BIT4|_BIT3)){

			CIrdaReadData();		
			
			DebugPrintf("\n ucIrQueue[0] is %x", ucIrQueue[0]);	//IR Customer Code.
			DebugPrintf("\n ucIrQueue[1] is %x", ucIrQueue[1]);	//IR Customer Code.
			DebugPrintf("\n ucIrQueue[2] is %x\n", ucIrQueue[2]);	//IR Command Code.
			//COsdFxClearText(3,0,2,3);
			//COsdFxShowNumber(3, 0, ucIrQueue[0], 0x33, _CP_RED);
			//COsdFxShowNumber(3, 3, ucIrQueue[1], 0x33, _CP_RED);
			//COsdFxShowNumber(4, 0, ucIrQueue[2], 0x33, _CP_RED);
			if(((UINT16 *)ucIrQueue)[0]==CUSTOM_CODE) {
				if(!(ucIrdaStatus&_BIT2)){
					if(ucIrQueue[2]==(~ucIrQueue[3])) {
					
						
						temp = ucIrQueue[2];

#endif
	
			switch (temp)
			{
				case IR_POWER_KEY :
      					keystate = _POWER_KEY_MESSAGE;			break;
			
				case IR_LEFT_KEY :	//fjyang
					keystate = _LEFT_KEY_MESSAGE;
					break;
				case IR_RIGHT_KEY :
					keystate = _RIGHT_KEY_MESSAGE;	
					break;
					
				case IR_FUNC_VOLDEC:
					keystate = _VOLUME_DEC_MESSAGE;		break;
				case IR_FUNC_VOLINC:
					keystate = _VOLUME_INC_MESSAGE;		break;

				case IR_UP_KEY :
				#ifndef DERUN_REMOTE//_REMOTE_CONTROLLER==_TYPE_YINGKA_WHITE||_REMOTE_CONTROLLER==_TYPE_YINGKA_GRAY||_REMOTE_CONTROLLER==_TYPE_YINGKA_XBW
					if(GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
						keystate = _CHANNEL_INC_MESSAGE;
					else
				#endif
					keystate = _UP_KEY_MESSAGE;				
					break;
				case IR_DOWN_KEY :
				#ifndef DERUN_REMOTE// _REMOTE_CONTROLLER==_TYPE_YINGKA_WHITE||_REMOTE_CONTROLLER==_TYPE_YINGKA_GRAY||_REMOTE_CONTROLLER==_TYPE_YINGKA_XBW
					if(GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
						keystate = _CHANNEL_DEC_MESSAGE;
					else
				#endif
					keystate = _DOWN_KEY_MESSAGE;			
					break;

				case IR_FUNC_CHINC :
					keystate = _CHANNEL_INC_MESSAGE;		break;
				case IR_FUNC_CHDEC :
					keystate = _CHANNEL_DEC_MESSAGE;		break;
	
			#if(_REMOTE_CONTROLLER==_TYPE_YINGKA_BLACK)
				case IR_SKIP_BACK_KEY:
					keystate = _CHANNEL_DEC_MESSAGE;		break;
				case IR_SKIP_FRONT_KEY:
					keystate = _CHANNEL_INC_MESSAGE;		break;
			#endif
				case IR_FUNC_RETURN:
					keystate = _RETURN_KEY_MESSAGE;			break;
#if( 0)					
				//case IR_OK_KEY:	//gallon add
					keystate = _OK_KEY_MESSAGE;				break;
				case IR_ENTER:
					keystate = _ENTER_KEY_MESSAGE;			break;
				case IR_RED:
					keystate = _RED_KEY_MESSAGE;				break;
				case IR_GREEN:
					keystate = _GREEN_KEY_MESSAGE;			break;
				case IR_BLUE:
					keystate = _BLUE_KEY_MESSAGE;			break;
				case IR_YELLOW:
					keystate = _YELLOW_KEY_MESSAGE;			break;	
				case IR_EPG:
					keystate = _EPG_KEY_MESSAGE;				break;
				case IR_FAV_CH:

					keystate = _FAV_CH_KEY_MESSAGE;			break;
				case IR_WIDE:

					keystate = _WIDE_KEY_MESSAGE;			break;	
				case IR_FREEZE:

					keystate = _FREEZE_KEY_MESSAGE;			break;
				case IR_CARD:

					keystate = _CARD_KEY_MESSAGE;			break;
				case IR_MULTI_CH:

					keystate = _MULTI_CH_KEY_MESSAGE;		break;

#endif
				case IR_MENU_KEY :
					
					keystate = _MENU_KEY_MESSAGE;			break;
              		case IR_FUNC_SOURCE :
					keystate = _SOURCE_KEY_MESSAGE;			break;
             			case IR_FUNC_MUTE :
					keystate = _MUTE_KEY_MESSAGE;			break;
#if(_REMOTE_CONTROLLER==_TYPE_PREMIER ||_REMOTE_CONTROLLER==_TYPE_HPC2)// modified by xyw 071106
             			case IR_FUNC_EXIT :
					keystate = _EXIT_KEY_MESSAGE;			break;
#endif
				case IR_FUNC_NUM0 :
					keystate = _0_KEY_MESSAGE;				break;
				case IR_FUNC_NUM1 :
					keystate = _1_KEY_MESSAGE;				break;
				case IR_FUNC_NUM2 :
					keystate = _2_KEY_MESSAGE;				break;
				case IR_FUNC_NUM3 :
					keystate = _3_KEY_MESSAGE;				break;
				case IR_FUNC_NUM4 :
					keystate = _4_KEY_MESSAGE;				break;
				case IR_FUNC_NUM5 :
					keystate = _5_KEY_MESSAGE;				break;
				case IR_FUNC_NUM6 :
					keystate = _6_KEY_MESSAGE;				break;
				case IR_FUNC_NUM7 :
					keystate = _7_KEY_MESSAGE;				break;
				case IR_FUNC_NUM8 :
					keystate = _8_KEY_MESSAGE;				break;
				case IR_FUNC_NUM9 :
					keystate = _9_KEY_MESSAGE;				break;
			#if _REMOTE_CONTROLLER==_TYPE_YINGKA_BLACK
				case IR_FUNC_PROGRAM:
					keystate = _100_KEY_MESSAGE;				break;
			#endif

				case IR_FUNC_NUM100:
					keystate = _100_KEY_MESSAGE;				break;

				case IR_FUNC_AUTOSEARCH:
					keystate = _AUTOSEARCH_KEY_MESSAGE;		break;
					
			#if _REMOTE_CONTROLLER==_TYPE_YINGKA_WHITE||_REMOTE_CONTROLLER==_TYPE_YINGKA_XBW
				case IR_SLOW_KEY:
					keystate = _AUTOSEARCH_KEY_MESSAGE;		break;
			#endif
				//case IR_FUNC_MTS :
				//	keystate = _MTS_KEY_MESSAGE;				break;
				//case IR_FUNC_JUMP:
				//	keystate = _RETURN_KEY_MESSAGE;			break;
			#if(_REMOTE_CONTROLLER==_TYPE_PREMIER)	   //dong alter 20080911
				case IR_FUNC_SLEEP:
					keystate = _SLEEP_KEY_MESSAGE;			break;
			#endif
#if (0/*_AUDIO_EFFECT_SUPPORT*/)
				case IR_FUNC_SOUND_MODE :
					keystate = _SOUND_MODE_KEY_MESSAGE;			break;
#endif

//czl 071126
#if _DISP_RATIO_M2_SUPPORT
			#if(_REMOTE_CONTROLLER==_TYPE_PREMIER)//dong alter 20080911
				case IR_FUNC_RATIO_MODE:
					keystate=_DisplayRatio_KEY_MESSAGE;				break;
			#endif
#endif
#if (_PICT_EFFECT_SUPPORT)
			#if(_REMOTE_CONTROLLER==_TYPE_PREMIER)//dong alter 20080911
				case IR_FUNC_PICT_MODE :
					keystate = _PICT_MODE_KEY_MESSAGE;			break;
			#endif
#endif

				case IR_FUNC_DISPLAY:
					keystate = _DISPLAY_KEY_MESSAGE;				break;


				case IR_FUNC_LCDONOFF:
					keystate = _LCDONOFF_KEY_MESSAGE;			break;
				case IR_AUDIO_KEY:
					if(GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&ucOsdState == _IDLE_STATE)
						keystate = _TV_AUDIO_SYSTEM_KEY_MESSAGE;			
					break;
#if(_REMOTE_CONTROLLER==_TYPE_PREMIER)
				//case IR_FUNC_CC:
				//	keystate = _CC_KEY_MESSAGE;				break;
				//case IR_FUNC_YPBPR_AUTO_COLOR:
				//	keystate = _YPBPR_AUTO_COLOR_MESSAGE;	break;
				case IR_OK_KEY: //yf_zhang added ok_key to enter menu and verify value 2007-5-15 10:41
		    		keystate = _OK_KEY_MESSAGE;				break;  
#endif
//20080823 ccy modify
#if 0 //(_REMOTE_CONTROLLER==_TYPE_TOLIP)					//disable by lbh 20090916
				//case IR_FUNC_CC:
				//	keystate = _CC_KEY_MESSAGE;				break;
				//case IR_FUNC_YPBPR_AUTO_COLOR:
				//	keystate = _YPBPR_AUTO_COLOR_MESSAGE;	break;
				case IR_OK_KEY: //yf_zhang added ok_key to enter menu and verify value 2007-5-15 10:41
		    			keystate = _OK_KEY_MESSAGE;				break;  
				case IR_SETUP_KEY:
					keystate = _EXIT_KEY_MESSAGE;   	      break;
#endif

#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
                            case IR_PC_KEY:
                                 keystate = _PC_KEY_MESSAGE;
								break;
                             case IR_TV_AV_KEY:
                                 keystate = _TV_AV_KEY_MESSAGE;
								break;                                    
                            case IR_AUTO_KEY:
                                 keystate = _DO_AUTO_CONFIG_MESSAGE;//_AUTO_KEY_MESSAGE;
								break;								
#endif	//#if _HPC_OTHER_IR_FUCTION_ENABLE
#endif	//#if _CUSTOMER_HPC

#if  (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
				case IR_FUNC_BRIGHTNESS:
					keystate = _BRIGHTNESS_KEY_MESSAGE;
					break;
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
				case IR_FUNC_CONTRAST:
					keystate = _CONTRAST_KEY_MESSAGE;
					break;
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
				case IR_FUNC_COLOR:
					keystate = _COLOR_KEY_MESSAGE;
					break;
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)


#if _CUSTOMER_CGT
                             case IR_TV_KEY:
                                 keystate = _TV_KEY_MESSAGE;				break;                                    
                            case IR_PC_KEY:
                                 keystate = _PC_KEY_MESSAGE;				break;
                             case IR_AV_KEY:
                                 keystate = _AV_KEY_MESSAGE;				break;                                    
                            case IR_SV_KEY:
                                 keystate = _SV_KEY_MESSAGE;				break;								
#endif	//#if _CUSTOMER_CGT
			//#if(_REMOTE_CONTROLLER==_TYPE_TOLIP)//(_IR_TYPE == _IR_TYPE_KONSTA)			//change by lbh 20090916
				case IR_SD_DVD_KEY:
			#if _REMOTE_CONTROLLER!=_TYPE_YINGKA_BLACK
				case IR_FUNC_PROGRAM:
			#endif
				case IR_DVD_MENU:
				case IR_FUNC_TITLE:					
				case IR_SUBTIT_KEY:
				//case IR_AUDIO_KEY:
				case IR_SETUP_KEY:
			#if _REMOTE_CONTROLLER!=_TYPE_YINGKA_WHITE&&_REMOTE_CONTROLLER!=_TYPE_YINGKA_XBW
				case IR_SLOW_KEY:
			#endif
				case IR_STOP_KEY:
				case IR_PLAY_PAUSE_KEY:
				case IR_REPEAT_KEY:
				case IR_AB_KEY:
				case IR_SPEED_DOWN_KEY:
				case IR_SPEED_UP_KEY:
				case IR_GOTO_KEY:
				case IR_ZOOM_KEY:
				case IR_ENTER_KEY:
			#if _REMOTE_CONTROLLER!=_TYPE_YINGKA_BLACK
				case IR_SKIP_BACK_KEY:
				case IR_SKIP_FRONT_KEY:
			#endif
				case IR_ANGLE_KEY:
				case IR_PAL_NTSC_KEY:
				case IR_PBC_KEY:
					keystate = _INVALID_KEY_MESSAGE;
					break;
			//#endif

			default:
  					keystate = _NONE_KEY_MESSAGE;			break;

			}


			repeatCounter = 0;
#if (_IR_HANDLER_MODE==_SW_MODE)				
			repeatIntervalTooLong = 0;
			
			}
		
		    }
		

		else if ((ucIrQueue[ucIrQueueRd][0]==0xff)&&(ucIrQueue[ucIrQueueRd][1]==0x00)&&(ucIrQueue[ucIrQueueRd][2]==0x99)&&(ucIrQueue[ucIrQueueRd][3]==0x11))  {//Repeat command

#elif(_IR_HANDLER_MODE==_HW_MODE)		
		}
		}else if (ucIrdaStatus&_BIT2)  {//Repeat command
#endif
		
   		repeatCounter++;

			if(repeatCounter>=1)
			{
			keystate = _REPEAT_KEY_MESSAGE;
			repeatCounter = 0;
			}
		}


#if (_IR_HANDLER_MODE==_SW_MODE)

		else if((ucIrQueue[ucIrQueueRd][0]||ucIrQueue[ucIrQueueRd][1]||ucIrQueue[ucIrQueueRd][2]||ucIrQueue[ucIrQueueRd][3])!=0) {

			

			repeatCounter = 0;

		}
				 ucIrQueueRd = (ucIrQueueRd + 1) % IRQUEUE_SIZE;
		}

	IrHandlerEnable=1;
#elif(_IR_HANDLER_MODE==_HW_MODE)
			}
		}
		/*else if(ucIrdaStatus&_BIT7)
		{
			MCU_IR_STATUS_FF89 |= _BIT7;
			repeatCounter++;

			if(repeatCounter>=1)
			{
				keystate = _REPEAT_KEY_MESSAGE;
				repeatCounter = 0;
			}
		}*/

#endif

	
	return keystate;
}


/**
 * This is the function to process Ir.
 */
 #if( _IR_HANDLER_MODE==_SW_MODE)
void CIrHandler(void)
{
	now_bIR_GPIO = bIR_GPIO;

	switch (IrStatus)
	{
		case IR_HeaderLow:	//0x01
			CIrHeaderLow();
			if(IrStatus != IR_HeaderHigh)
				break;

		case IR_HeaderHigh:	//0x02
			CIrHeaderHigh();
			if(IrStatus != IR_Command)
				break;

		case IR_Command:	//0x03
 			CIrCommand();
			break;

		case IR_Detect:		//0x04
			CIrDetect();
			break;
	}
	pre_bIR_GPIO = now_bIR_GPIO;
}


//--------------------------------------------------
// Description  : Detect 9ms low
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CIrHeaderLow(void)
{
	if(now_bIR_GPIO==_LOW){
		ucIrQueueClearCnt = 0;
		lowCount++;
	}
	else if (now_bIR_GPIO==_HIGH && lowCount>=IR_HeaderHigh_MinCnt && lowCount<=IR_HeaderHigh_MaxCnt){
		ucIrQueueClearCnt = 0;
		IrStatus = IR_HeaderHigh;   //9ms passed
	}
	else
	{
		ucIrQueueClearCnt++;

		CIrReset();

		if(ucIrQueueClearCnt >=1600){		// 200ms not receive valid IR command
			ucIrQueueClearCnt = 0;
//			ucIrQueueClearFlag = _TRUE;
//			if(ucIrQueueClearFlag == _TRUE){

				if(ucKeyPadMessage == _NONE_KEY_MESSAGE)
					ucOsdPreMessage = _NONE_KEY_MESSAGE;
//				COsdMessageInitial();
//				ucIrQueueClearFlag = _FALSE;
//			}

		}

	}
}

//--------------------------------------------------
// Description  : Detect 4.5ms low
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CIrHeaderHigh(void)
{
	if(now_bIR_GPIO==_HIGH){
		highCount++;
	}

	else if (now_bIR_GPIO==_LOW && highCount>=IR_HeaderLow_MinCnt && highCount<=IR_HeaderLow_MaxCnt){
		highCount = 0;
		IrStatus = IR_Command;  // 4.5ms passed, header passed
	}

	else if(now_bIR_GPIO==0 && highCount>=IR_Repeat_MinCnt && highCount<=IR_Repeat_MaxCnt){  //Repeat signal
		if(repeatIntervalTooLong==0){
			IrStatus = IR_Detect;
//			IrHandlerEnable=0;
			ucIrQueue[ucIrQueueWr][0] = 0xff;   //repeat command
			ucIrQueue[ucIrQueueWr][1] = 0x00;
			ucIrQueue[ucIrQueueWr][2] = 0x99;
			ucIrQueue[ucIrQueueWr][3] = 0x11;
			ucIrQueueWr = (ucIrQueueWr + 1) % IRQUEUE_SIZE;
			repeatIntervalCount = 0;
			CIrReset();
		}else if(repeatIntervalTooLong==1){
			IrStatus = IR_HeaderLow;
			CIrReset();
		}
	}
	else{
	  	IrStatus = IR_HeaderLow;
		CIrReset();
	}
}


//--------------------------------------------------
// Description  : Detect 4 byte: address, ~address, command, ~command
// Input Value  : None
// Output Value : None
//--------------------------------------------------

void CIrCommand(void)
{
	BYTE logic = 0;

	if(now_bIR_GPIO==_HIGH && pre_bIR_GPIO==_LOW)
		BitStart = 1;
	if(BitStart==1){
		if(now_bIR_GPIO==_HIGH)
			highCount++;
		else{
			if(highCount>=IR_Logical1_MinCnt){
				if(highCount<=IR_Logical1_MaxCnt){
					logic = 0x80;
					ByteStart = 1;
				}
				else{
					CIrReset();  //wrong, reset
				    IrStatus = IR_HeaderLow;
				    return;
				}
			}
			else if (highCount<=IR_Logical0_MaxCnt && highCount>=IR_Logical0_MinCnt){
				logic = 0x00;
				ByteStart = 1;
			}
			else{
				CIrReset();  //wrong, reset
				IrStatus = IR_HeaderLow;
				return;
			}
			highCount=0;
			BitStart=0;
		}
	}
	if(ByteStart==1){
		if(IrByte<=(IR_TotalByte-1)){
           	if(IrBit<=7){
				tem[IrByte] = (tem[IrByte]|logic)>>1;
	   		   	ucIrQueue[ucIrQueueWr][IrByte]=tem[IrByte];
				IrBit++;
				ByteStart = 0;
	        }
	       	else{
			   	tem[IrByte] = (tem[IrByte]|logic);
				 ucIrQueue[ucIrQueueWr][IrByte]=tem[IrByte];
				ByteStart = 0;
              	IrByte++;
				 if(IrByte>=IR_TotalByte) {

					if((ucIrQueue[ucIrQueueWr][0]||ucIrQueue[ucIrQueueWr][1]||ucIrQueue[ucIrQueueWr][2]||ucIrQueue[ucIrQueueWr][3])!=0) {
						if ((ucIrQueue[ucIrQueueWr][0]!=0xff)&&(ucIrQueue[ucIrQueueWr][1]!=0x00)&&(ucIrQueue[ucIrQueueWr][2]!=0x99)&&(ucIrQueue[ucIrQueueWr][3]!=0x11))
								ucIrQueueRd = ucIrQueueWr;

							ucIrQueueWr = (ucIrQueueWr + 1) % IRQUEUE_SIZE;
					}

					IrStatus = IR_Detect;
				 }
				IrBit = 1;
		   	}
	   	}
	}
}

//--------------------------------------------------
// Description  : Detect the interval between repeat signal, if too long, disable the repeat command
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CIrDetect(void)
{
	if(now_bIR_GPIO==_HIGH){
    	repeatIntervalCountLow++;
		if(repeatIntervalCountLow>=20){
			repeatIntervalCount++;
			repeatIntervalCountLow=0;
		}
		if(repeatIntervalCount>=50)
		{
			repeatIntervalTooLong=1;  //repeat don't care
			repeatIntervalCount = 0;
        		IrStatus = IR_HeaderLow;
		}
	}
	else{
    	repeatIntervalCountLow=repeatIntervalCount=0;
		IrStatus = IR_HeaderLow;
  	}
}

void CIrReset(void)
{
//	if(IrByte>=IR_TotalByte)
//		IrHandlerEnable=0;
	tem[0] = 0;
	tem[1] = 0;
	tem[2] = 0;
	tem[3] = 0;

	pre_bIR_GPIO = _LOW;
	highCount = 0;
	lowCount = 0;
	BitStart = 0;
	ByteStart = 0;
	IrBit = 1;
	IrByte = 0;
}
#endif


#if (_IR_HANDLER_MODE==_HW_MODE)
UINT8 code tIrdaInitial[12]={

#if _REMOTE_CONTROL==_NEC_TYPE//24.3Mhz/512

	0x60,//			IR_CTRL1_FF80	
	0x03,//0a,//03//		IR_DEBOUNCE_FF81
	0X65,//			IR_BURST_LENGTH_FF82
	0X32,//			IR_SILENCE_LENGTH_FF83
	0X19,//			IR_REPEAT_LENGTH_FF84
	0X19,//			IR_MOD_LENGTH_FF85
	0X19,//			IR_DATA0_LENGTH_FF86
	0X4d,//			IR_DATA1_LENGTH_FF87
	
	0X9F,//			IR_CTRL2_FF88
	
	0xa2,//0xa0,//0X97,//			IR_ONE_CMD_TIME_FF90
	0xb8,//0xb4,//0xaf,//0Xa5,//			IR_IDLE_TIME_FF91
	0X00,//			IR_CTRL3_FF92

#endif

};

void CIrdaInitial(void)
{


	MCU_IR_CTRL1_FF80			=	tIrdaInitial[0];		
	MCU_IR_DEBOUNCE_FF81		=	tIrdaInitial[1];		
	MCU_IR_BURST_LENGTH_FF82	=	tIrdaInitial[2];			
	MCU_IR_SILENCE_LENGTH_FF83 =	tIrdaInitial[3];				
	MCU_IR_REPEAT_LENGTH_FF84 =	tIrdaInitial[4];				
	MCU_IR_MOD_LENGTH_FF85	=	tIrdaInitial[5];			
	MCU_IR_DATA0_LENGTH_FF86	=	tIrdaInitial[6];		
	MCU_IR_DATA1_LENGTH_FF87	=	tIrdaInitial[7];
	
	MCU_IR_CTRL2_FF88			=	tIrdaInitial[8];	  	

	MCU_IR_ONE_CMD_TIME_FF90	=	tIrdaInitial[9];						
   	MCU_IR_IDLE_TIME_FF91		=	tIrdaInitial[10];						
 	MCU_IR_CTRL3_FF92			=	tIrdaInitial[11];				

	MCU_IR_INTRQ_FF93			=	0x00;//0x00;		
	MCU_IR_STATUS_FF89		|=_BIT0;//|_BIT1;//enable IR

}

static void CIrdaReadData(void)
{
	//UINT8 ucIRState;
	
	//ucIRState = MCU_IR_STATUS_FF89;
	//DebugPrintf("\n MCU_IR_STATUS_FF89==%x", MCU_IR_STATUS_FF89);
		///ucIrdaStatus  = MCU_IR_STATUS_FF89;
	//ucIrQueue[4] =	ucIRState;
	//if(ucIrdaStatus&(_BIT4|_BIT3)&&(!(ucIrdaStatus&_BIT2))){//Buffer1 OR  Buffer2 data valid flag  		
		
		ucIrQueue[0] =	MCU_IR_DATA2_FF8C;
		ucIrQueue[1] =	MCU_IR_DATA3_FF8D;
		ucIrQueue[2] =	MCU_IR_DATA4_FF8E;
		ucIrQueue[3] =	MCU_IR_DATA5_FF8F;
	/*	
	}else{
		ucIrQueue[0] =	0;
		ucIrQueue[1] =	0;
		ucIrQueue[2] =	0;
		ucIrQueue[3] =	0;
		
	}
		*/
	
}


#endif
/*
#if( 0)
BIT DTVflag=0;
BIT DTVMenuflag=0;

static UINT8 code  _DTV_POWER[] = 			{0xA0,0x5F};	//"Power"
static UINT8 code  _DTV_RESERVED_CMD1[] = 	{0xA1,0x5E};	//"Reserved command"
static UINT8 code  _DTV_CH_DOWN[]=			{0xA2,0x5D};	//"Ch Down"
static UINT8 code  _DTV_UNDEFINED_CMD1[] = 	{0xA3,0x5C};	//"Undefined command"
static UINT8 code  _DTV_MUTE[] = 			{0xA4,0x5B};	//"Mute"
static UINT8 code  _DTV_RESERVED_CMD2[] = 	{0xA5,0x5A};	//"Reserved command"
static UINT8 code  _DTV_UP[] = 				{0xA6,0x59};	//"up"
static UINT8 code  _DTV_SLEEP[] = 			{0xA7,0x58};	//"Sleep"
static UINT8 code  _DTV_INPUT[] = 			{0xA8,0x57};	//"Input"
static UINT8 code  _DTV_LEFT[] = 			{0xA9,0x56};	//"left"
static UINT8 code  _DTV_OK[] = 				{0xAA,0x55};	//"OK"
static UINT8 code  _DTV_CAPTION[] = 		{0xAB,0x54};	//"Caption"
static UINT8 code  _DTV_1[] = 				{0xAC,0x53};	//"1"
static UINT8 code  _DTV_JUMP[] = 			{0xAD,0x52};	//"Jump"
static UINT8 code  _DTV_DOWN[] = 			{0xAE,0x51};	//"down"
static UINT8 code  _DTV_2[] = 				{0xAF,0x50};	//"2"
static UINT8 code  _DTV_4[] = 				{0xB0,0x4F};	//"4"
static UINT8 code  _DTV_RED[] = 			{0xB1,0x4E};	//"Red"
static UINT8 code  _DTV_GREEN[] = 			{0xB2,0x4D};	//"Green"
static UINT8 code  _DTV_5[] = 				{0xB3,0x4C};	//"5"
static UINT8 code  _DTV_7[] = 				{0xB4,0x4B};	//"7"
static UINT8 code  _DTV_EPG[] = 			{0xB5,0x4A};	//"EPG"
static UINT8 code  _DTV_PROGINFO[] = 		{0xB6,0x49};	//"Prog Info"
static UINT8 code  _DTV_8[] = 				{0xB7,0x48};	//"8"
static UINT8 code  _DTV_DOT[] = 			{0xB8,0x47};	//"."
static UINT8 code  _DTV_PIP[] = 			{0xB9,0x46};	//"PIP"
static UINT8 code  _DTV_POP[] = 			{0xBA,0x45};	//"POP"
static UINT8 code  _DTV_0[] = 				{0xBB,0x44};	//"0"
static UINT8 code  _DTV_RESERVED_CMD3[] = 	{0xBC,0x43};	//"Reserved command"
static UINT8 code  _DTV_CH_GUIDE[] = 		{0xBD,0x42};	//"Ch Guide"
static UINT8 code  _DTV_MULTI_CH[] = 		{0xBE,0x41};	//"Multi Ch"
static UINT8 code  _DTV_CH_UP[] = 			{0xBF,0x40};	//"Ch Up"
static UINT8 code  _DTV_VOL_DOWN[] = 		{0xE0,0x1F};	//"Vol Down"
static UINT8 code  _DTV_UNDEFINED_CMD2[] = 	{0xE1,0x1E};	//"Undefined command"
static UINT8 code  _DTV_UNDEFINED_CMD3[] = 	{0xE2,0x1D};	//"Undefined command"
static UINT8 code  _DTV_RESERVED_CMD4[] = 	{0xE3,0x1C};	//"Reserved command"
static UINT8 code  _DTV_DISPLAY[] = 		{0xE4,0x1B};	//"Display"
static UINT8 code  _DTV_WIDE[] = 			{0xE5,0x1A};	//"Wide"
static UINT8 code  _DTV_UNDEFINED_CMD4[] = 	{0xE6,0x19};	//"Undefined command"
static UINT8 code  _DTV_RESERVED_CMD5[] = 	{0xE7,0x18};	//"Reserved command"
static UINT8 code  _DTV_VIDEO[] = 			{0xE8,0x17};	//"Video"
static UINT8 code  _DTV_AUDIO[] = 			{0xE9,0x16};	//"Audio"
static UINT8 code  _DTV_UNDEFINED_CMD5[] = 	{0xEA,0x15};	//"Undefined command"
static UINT8 code  _DTV_RIGHT[] = 			{0xEB,0x14};	//"right"
static UINT8 code  _DTV_UNDEFINED_CMD6[] = 	{0xEC,0x13};	//"Undefined command"
static UINT8 code  _DTV_3[] = 				{0xED,0x12};	//"3"
static UINT8 code  _DTV_UNDEFINED_CMD7[] = 	{0xEE,0x11};	//"Undefined command"
UINT8 code  _DTV_EXIT[2] = 			{0xEF,0x10};	//"Exit"
static UINT8 code  _DTV_UNDEFINED_CMD8[] = 	{0xF0,0x0F};	//"Undefined command"
static UINT8 code  _DTV_6[] = 				{0xF1,0x0E};	//"6"
static UINT8 code  _DTV_BLUE[] = 			{0xF2,0x0D};	//"Blue"
static UINT8 code  _DTV_YELLOW[] = 			{0xF3,0x0C};	//"Yellow"
static UINT8 code  _DTV_UNDEFINED_CMD9[] = 	{0xF4,0x0B};	//"Undefined command"
static UINT8 code  _DTV_9[] = 				{0xF5,0x0A};	//"9"
UINT8 code  _DTV_MENU[2] = 			{0xF6,0x09};	//"Menu"
static UINT8 code  _DTV_TOOL[] = 			{0xF7,0x08};	//"Tool"
static UINT8 code  _DTV_UNDEFINED_CMD11[] = {0xF8,0x07};	//"Undefined command"
static UINT8 code  _DTV_ENTER[] = 			{0xF9,0x06};	//"Enter"
static UINT8 code  _DTV_ROI[] = 			{0xFA,0x05};	//"ROI"
static UINT8 code  _DTV_FREEZE[] = 			{0xFB,0x04};	//"Freeze"
static UINT8 code  _DTV_VOL_UP[] = 			{0xFC,0x03};	//"Vol Up"
static UINT8 code  _DTV_RESERVED_CMD6[] = 	{0xFD,0x02};	//"Reserved command"
static UINT8 code  _DTV_FAV_CH[] = 			{0xFE,0x01};	//"FavCh"
static UINT8 code  _DTV_CARD[] = 			{0xFF,0x00};	//"Card"

BYTE DTVCommandFunc(BYTE message)
{
	if((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DTV_PORT )&&DTVflag&&DTVMenuflag){	//DTV menu,cannot use hotkey	

		//keystate = _NONE_KEY_MESSAGE;	
		switch (message)
		{																		
			case _OK_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_OK);					break;
			case _MENU_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_MENU);					//break;
							waitcount=0;
							waitflag=0;
																				break;
			case _LEFT_KEY_MESSAGE :	//Vol-Dn
							Send2DTV(COM_SEND_IR, _DTV_VOL_DOWN);			break;
			case _RIGHT_KEY_MESSAGE :	//Vol-Up
							Send2DTV(COM_SEND_IR, _DTV_VOL_UP);				break;
			case _UP_KEY_MESSAGE :	//CH-Up
							Send2DTV(COM_SEND_IR, _DTV_CH_UP);				break;
			case _DOWN_KEY_MESSAGE :	//CH-Dn
							Send2DTV(COM_SEND_IR, _DTV_CH_DOWN);				break;
			case _MUTE_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_MUTE);					break;
			case _EXIT_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_EXIT);					//break;
							waitcount=0;
							waitflag=0;											break;
			case _POWER_KEY_MESSAGE :
							//keystate = _POWER_KEY_MESSAGE;	
							Send2DTV(COM_SEND_IR, _DTV_POWER);
							return _POWER_KEY_MESSAGE;							break;
			case _ENTER_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_ENTER);				break;
			case _RED_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_RED);					break;	
			case _GREEN_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_GREEN);				break;
			case _BLUE_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_BLUE);					break;
			case _YELLOW_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_YELLOW);				break;	
			default:
  							//keystate = _NONE_KEY_MESSAGE;
  							return _NONE_KEY_MESSAGE;							break;		
							

		}
					
	}
	else if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DTV_PORT &&(!DTVflag)&&(!DTVMenuflag)) {	//no DTV menu,can use hotkey					 		

		//keystate = _NONE_KEY_MESSAGE;						
		switch (message)
		{																			
			case _0_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_0);						break;
			case _1_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_1);						break;
			case _2_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_2);						break;
			case _3_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_3);						break;
			case _4_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_4);						break;
			case _5_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_5);						break;
			case _6_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_6);						break;
			case _7_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_7);						break;
			case _8_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_8);						break;
			case _9_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_9);						break;
		//	case _100_KEY_MESSAGE://dot or 100
		//					Send2DTV(COM_SEND_IR, _DTV_DOT);					break;
	
			case _RED_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_RED);					break;
			case _GREEN_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_GREEN);				break;
			case _BLUE_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_BLUE);					break;
			case _YELLOW_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_YELLOW);				break;
			case _EPG_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_EPG);
							waitcount=0;
							waitflag=0;
							DTVflag=1; 
							DTVMenuflag=1;	
							COsdFxDisableOsd();									break;
			case _MENU_KEY_MESSAGE :
							DTVflag=1;
							DTVMenuflag=0;
							//keystate = _MENU_KEY_MESSAGE;
							return _MENU_KEY_MESSAGE;							break;
			case _FAV_CH_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_FAV_CH);
							waitcount=0;
							waitflag=0;
							DTVflag=1;
							DTVMenuflag=1;
							COsdFxDisableOsd();									break;
			case _LEFT_KEY_MESSAGE :	//Vol-Dn
							//keystate = _LEFT_KEY_MESSAGE;
							return _LEFT_KEY_MESSAGE;							break;
			case _RIGHT_KEY_MESSAGE :	//Vol-Up
							//keystate = _RIGHT_KEY_MESSAGE;
							return _RIGHT_KEY_MESSAGE;							break;
			case _UP_KEY_MESSAGE :	//CH-Up
							Send2DTV(COM_SEND_IR, _DTV_CH_UP);				break;
			case _DOWN_KEY_MESSAGE :	//CH-Dn
							Send2DTV(COM_SEND_IR, _DTV_CH_DOWN);				break;
		       case _MUTE_KEY_MESSAGE :
					              //keystate = _MUTE_KEY_MESSAGE;
					              return _MUTE_KEY_MESSAGE;							break;							
			case _DISPLAY_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_DISPLAY);				break;
			case _OK_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_OK);
							waitcount=0;
							waitflag=0;
							DTVflag=1;
							DTVMenuflag=1;
							COsdFxDisableOsd();									break;
			case _CC_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_CAPTION);				break;
			case _MTS_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_AUDIO);				break;
			case _WIDE_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_WIDE);					break;
			case _EXIT_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_EXIT);					break;
			case _POWER_KEY_MESSAGE :
							//keystate = _POWER_KEY_MESSAGE;
							Send2DTV(COM_SEND_IR, _DTV_POWER);
							return _POWER_KEY_MESSAGE;							break;
			case _ENTER_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_ENTER);				break;
			case _RETURN_KEY_MESSAGE :
							Send2DTV(COM_SEND_IR, _DTV_JUMP);					break;
			case _FREEZE_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_FREEZE);				break;
			case _CARD_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_CARD);					break;
			case _MULTI_CH_KEY_MESSAGE:
							Send2DTV(COM_SEND_IR, _DTV_MULTI_CH);				break;
			case _SOURCE_KEY_MESSAGE :
							//keystate = _SOURCE_KEY_MESSAGE;
							return _SOURCE_KEY_MESSAGE;						break;
			default:
  							//keystate = _NONE_KEY_MESSAGE;
  							return _NONE_KEY_MESSAGE;							break;
		}
									
	}else{

		if(message==_POWER_KEY_MESSAGE)
		{
			 if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DTV_PORT )
					   Send2DTV(COM_SEND_SYSTEM, STOP_DTV);
			 return _POWER_KEY_MESSAGE;
		}
		if(message==_OK_KEY_MESSAGE)
			//keystate = _MENU_KEY_MESSAGE;
			return _MENU_KEY_MESSAGE;
		return message;
	}

	
}
#endif
*/
/**
 *
 * @}
 */
