/*=============================================
  * 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-08-01 11:54:47 +0800 (?熸?浜? 01 ?? 2006) $
 * @version 	$Revision: 1142 $
 * @ingroup 	input
 */

/**
* @addtogroup input
* @{
*/

/*===================== Module dependency  ================== */
#include "Core\Header\include.h"

/*======================= Private Types ===================== */

/*======================== Definitions ====================== */

// Definitions of Key Repeat Start Time (Unit in sec)
#define _KEY_REPEAT_START_TIME      	0.4
#if _PCB_TYPE != _PCB_TEST		//add 20091028
// Definitions of Key Mask
#define _MENU_KEY_MASK             		0x80
#define _SOURCE_KEY_MASK            	0x40//#define _EXIT_KEY_MASK              0x40
#define _EXIT_KEY_MASK              		0x40
#define _RIGHT_KEY_MASK             	0x20
#define _LEFT_KEY_MASK              		0x10
#define _UP_KEY_MASK                		0x08
#define _DOWN_KEY_MASK             	0x04
#define _POWER_KEY_MASK          		0x02
#define _KEY7_MASK                  			0x01
#define _LCDONOFF_KEY_MASK                  		0x01

#define _POWER_RIGHT_KEY_MASK      	 	(_POWER_KEY_MASK | _RIGHT_KEY_MASK)
#define _LEFT_RIGHT_KEY_MASK       		 	(_LEFT_KEY_MASK | _RIGHT_KEY_MASK)
#define _POWER_MENU_KEY_MASK       		(_POWER_KEY_MASK | _MENU_KEY_MASK)
#define _POWER_LEFT_RIGHT_KEY_MASK 	(_POWER_KEY_MASK | _LEFT_KEY_MASK | _RIGHT_KEY_MASK)
#if(ISPHotKey == _TRUE)
#define _MENU_SOURCE_ISPKEY_MASK  		(_MENU_KEY_MASK | _SOURCE_KEY_MASK)
#endif

#define _LEFT_DOWN_KEY_MASK       		 	(_LEFT_KEY_MASK | _DOWN_KEY_MASK)			//provisional 既﹚
#define _RIGHT_UP_KEY_MASK       				(_RIGHT_KEY_MASK | _UP_KEY_MASK)				//provisional 既﹚
#define _LEFT_DOWN_MENU_KEY_MASK      	(_LEFT_KEY_MASK | _MENU_KEY_MASK |_DOWN_KEY_MASK )	//provisional 既﹚
#define _RIGHT_UP_MENU_KEY_MASK       	(_RIGHT_KEY_MASK | _MENU_KEY_MASK | _UP_KEY_MASK)		//provisional 既﹚

#if((_MCU_TYPE == _REALTEK_RTD2662_EMCU) && (_DEBUG_TOOL == _RS232)) //fjyang
#define _UP_DOWN_KEY_MASK 		(_UP_KEY_MASK | _DOWN_KEY_MASK)
#endif
#endif
/*========================== Variables ====================== */
BYTE idata ucKeyControl;
BYTE idata ucKeyStatePrev;
BYTE idata ucKeyStateCurr;

/*=================== Local Functions Phototype ==============*/
bit CKeyScanReady(void);
void CKeyScanReadyTimerEvent(void);
void CKeyRepeatEnableTimerEvent(void);
BYTE CKeyScan(void);
UINT8 CKeyMessageConvProc(void);
#if(ISPHotKey == _TRUE)
static void EnableISP(void);
#endif

/*=========================== Functions ===================== */
// Description  : Key scan process
// Input Value  : None
// Output Value : Return message number in OsdMessage
#ifdef LEFT_RIGHT_VOL_IN_ONE_KEY
UINT8  xdata longtimes=0;
UINT8  xdata Lastdata=0;
UINT8 xdata  EnterFlag=0;
#endif

UINT8 CKeyRead(void)
{
#if(_KEY_SCAN_MODE==_GPIO_MODE)
    UINT8   KeyLastValue=0;
#endif
    // Clear the key message
    if (CKeyScanReady()) {
        // Store previous key state
        ucKeyStatePrev = ucKeyStateCurr;

        // Get current key state
        ucKeyStateCurr = CKeyScan();
#if (_KEY_SCAN_MODE==_GPIO_MODE)

#ifdef POWER_LEDONOF_IN_ONE_KEY
        //    if ((ucKeyStateCurr !=_SETUP_KEY_MASK)&&(ucKeyStateCurr!=_MENU_KEY_MASK))
//#else
//        if ((ucKeyStateCurr !=_POWER_KEY_MASK)&&(ucKeyStateCurr!=_LCDONOFF_KEY_MASK))
#endif
        {
            while (KeyLastValue!=ucKeyStateCurr)
            {
                KeyLastValue= CKeyScan();
                CTimerDelayXms(8);
                ucKeyStateCurr = CKeyScan();
            }
        }
#endif
#ifdef LEFT_RIGHT_VOL_IN_ONE_KEY
        if (1)//(GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT)
        {
            if (ucKeyStateCurr==_RIGHT_KEY_MASK&&(ucOsdState!=_VOLIMN_STATE))
            {
                ucKeyStateCurr=_NONE_KEY_MESSAGE;
                // EnterFlag=1;
                Lastdata=_RIGHT_KEY_MASK;
                if (++longtimes>=20)
                {
                    longtimes=0;
                    EnterFlag=1;
                    ucKeyStateCurr=_VOLINC_KEY_MASK;
                }
            }
            else if (ucKeyStateCurr==_RIGHT_KEY_MASK&&(ucOsdState==_VOLIMN_STATE))
            {
                ucKeyStateCurr=_VOLINC_KEY_MASK;
            }
            else  if (ucKeyStateCurr==_LEFT_KEY_MASK&&(ucOsdState!=_VOLIMN_STATE))
            {
                ucKeyStateCurr=_NONE_KEY_MESSAGE;
                // EnterFlag=1;
                Lastdata=_LEFT_KEY_MASK;
                if (++longtimes>=20)
                {
                    longtimes=1;
                    EnterFlag=2;
                    ucKeyStateCurr=_VOLDEC_KEY_MASK;
                }
            }
            else if (ucKeyStateCurr==_LEFT_KEY_MASK&&(ucOsdState==_VOLIMN_STATE))
            {
                ucKeyStateCurr=_VOLDEC_KEY_MASK;
            }
            else
            {


                if (longtimes&&!EnterFlag)
                {
                    longtimes=0;
                    ucKeyStateCurr= Lastdata;
                    EnterFlag=0;
                }
                else  if (EnterFlag==1)
                {
                    longtimes=0;
                    ucKeyStateCurr= _NONE_KEY_MESSAGE;
                    EnterFlag=0;
                }
                else {
                    longtimes=0;
                    EnterFlag=0;
                }
            }

        }
#endif

        // Convert key state to key message, store in (ucKeyNotify)
        return CKeyMessageConvProc();
    }
    return _NONE_KEY_MESSAGE;
}

// Description  : Initial key status
// Input Value  : None
// Output Value : None
void CKeyInitial(void)
{
    CLR_KEYSCANREADY();
    CLR_KEYSCANSTART();
}

//--------------------------------------------------
// Description  : Key scan ready process. We wait 0.02 sec in order to keep the keypad debounce
// Input Value  : None
// Output Value : None
//--------------------------------------------------
bit CKeyScanReady(void)
{
    if (GET_KEYSCANSTART() && GET_KEYSCANREADY()) {
        CLR_KEYSCANSTART();
        CLR_KEYSCANREADY();
        return _TRUE;
    } else if (!GET_KEYSCANSTART()) {
        // Wait 0.02 sec in order to keep the keypad debounce
        SET_KEYSCANSTART();
//		CTimerReactiveTimerEvent(SEC(0.02), CKeyScanReadyTimerEvent);
        CTimerReactiveTimerEvent(SEC(0.06), CKeyScanReadyTimerEvent);

        return _FALSE;
    } else {
        return _FALSE;
    }
}

//--------------------------------------------------
// Description  : Key scan ready timer event
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyScanReadyTimerEvent(void)
{
    SET_KEYSCANREADY();
}

//--------------------------------------------------
// Description  : Key repeat enable timer event
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyRepeatEnableTimerEvent(void)
{
    SET_KEYREPEATSTART();
    ucKeyStatePrev = 0;
    ucKeyStateCurr = 0;
}

#if(_KEY_SCAN_MODE==_ADCX_MODE)
//20080825 ccy modify
#if (_PCB_TYPE == _PCB_TEST)
BYTE CKeyADC1GetValue(void)
{
    MCU_ADC_ACONTROL_FF08 |= 0x80;			//start adc convert(STRT_ADC_ACKT=1)
    //wait minimam 12us for 5 channel
    pData[0] = 100;
    while (pData[0]--);

    //pData[0] = MCU_ADC_A0_CONVERT_RESULT_FF09;	//ADC0
    pData[0] = MCU_ADC_A1_CONVERT_RESULT_FF0A;   //chnage adc0 to adc3  20090910

    return pData[0]>>2;

}
BYTE CKeyADC2GetValue(void)
{
    MCU_ADC_ACONTROL_FF08 |= 0x80;			//start adc convert(STRT_ADC_ACKT=1)
    //wait minimam 12us for 5 channel
    pData[0] = 100;
    while (pData[0]--);

    pData[0] = MCU_ADC_A2_CONVERT_RESULT_FF0B;	//ADC1

    return pData[0]>>2;

}
BYTE CKeyADC3GetValue(void)
{
    MCU_ADC_ACONTROL_FF08 |= 0x80;			//start adc convert(STRT_ADC_ACKT=1)
    //wait minimam 12us for 5 channel
    pData[0] = 100;
    while (pData[0]--);

    pData[0] = MCU_ADC_A3_CONVERT_RESULT_FF0C;	//ADC1

    return pData[0]>>2;

}

#else
BYTE CKeyScanGetValue(void)
{
    MCU_ADC_ACONTROL_FF08 |= 0x80;			//start adc convert(STRT_ADC_ACKT=1)
    //wait minimam 12us for 5 channel
    pData[0] = 100;
    while (pData[0]--);

    pData[0] = MCU_ADC_A2_CONVERT_RESULT_FF0B;	//ADC2

    return pData[0]>>2;

}
#endif
#endif
//--------------------------------------------------
// Description  : Get key status
// Input Value  : None
// Output Value : Return Key status
//--------------------------------------------------
BYTE CKeyScan(void)
{
    BYTE keystate = 0;
#if (_KEY_SCAN_MODE==_GPIO_MODE)
#ifdef POWER_LEDONOF_IN_ONE_KEY
    static BYTE lcd_power_sw=0;  //jinsuo add for gpio scan key
    static BYTE power_key_dn=0;
#endif
#else

#ifdef POWER_LEDONOF_IN_ONE_KEY
    static BYTE lcd_power_sw=0;  //jinsuo add for gpio scan key
#endif
#endif

#if(_KEY_SCAN_MODE==_ADCX_MODE)
    BYTE keyAdc1Val,keyAdc2Val,keyAdc3Val;
#if (_PCB_TYPE == _PCB_TEST )
    keyAdc1Val = CKeyADC1GetValue();
    keyAdc2Val = CKeyADC2GetValue();
    keyAdc3Val = CKeyADC3GetValue();
#if 0 //  only for debug     on 20091228
    COsdFxClearText(1,0,3,3);
    COsdFxShowNumber(1, 0, keyAdc1Val, 0x33, _CP_RED);
    COsdFxShowNumber(2, 0, keyAdc2Val, 0x33, _CP_RED);
    COsdFxShowNumber(3, 0, keyAdc3Val, 0x33, _CP_RED);
    return 0;
#endif
    //DebugPrintf("\n keyAdcValue0 = %d\n",keyAdcValue0);
    //DebugPrintf("\n keyAdcValue = %d\n",keyAdcValue);
    //COsdFxShowNumber(4, 0, keyAdcValue0, 0x33, _CP_RED);
    //COsdFxShowNumber(4, 4, keyAdcValue, 0x33, _CP_RED);
#if  _KEY_TYPE==_TYPE_KEY_INCARALL

#ifdef HUARUIAN_968A
    //968_2660_KEYAB-v1.0    968a
    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_ENTER_KEY_MASK;

    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;

    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SUBTITLE_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LCDONOFF_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_DOWN_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUDIO_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc2Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PBC_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SOURCE_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLDEC_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LEFT_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;
    //   else if((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
    // keystate|=_SOURCE_KEY_MASK;
    //=======================

#elif defined(DERUN_1012_SHARPLQ104)
    /*      正义盛 10。4   HS-128-KEYBA 2009.08.24 V1.0                   20100503 ADD           */

    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))

        return 0;

    //===================

    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_SOURCE_KEY_MASK;//_SDUSB_KEY_MASK;
    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))

        keystate|=_POWER_KEY_MASK; //no use
    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))

        keystate|=_PLAYPAUSE_KEY_MASK;//_AUDIO_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;//_SOURCE_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LCDONOFF_KEY_MASK; //ok
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;//_MENU_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;//_STOP_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_CHDEC_KEY_MASK;//_VOLINC_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;//_CHINC_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLDEC_KEY_MASK;//_CHDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_CHINC_KEY_MASK;//_VOLDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_UP_KEY_MASK;
    else if ((keyAdc3Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LEFT_KEY_MASK;
    if ((keyAdc3Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_TITLE_KEY_MASK;//_PLAYPAUSE_KEY_MASK;

    else if ((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;//_SETUP_KEY_MASK;
    //====================    //====================    //====================
#elif defined(HUANA_AT09011)// HN-980-2660-K01 V1.0 10-06-21
    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LCDONOFF_KEY_MASK;
    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DISPLAY_KEY_MASK;
    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SKIPDOWN_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SOURCE_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SPEEDDOWN_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SKIPUP_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_PLAYPAUSE_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc2Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUDIO_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_SPEEDUP_KEY_MASK;
    else if ((keyAdc3Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LEFT_KEY_MASK;
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;
    //=======================
#elif defined(HUANA_AT090_768KEY)

    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_SOURCE_KEY_MASK;
    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MUTE_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_VOLDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LEFT_KEY_MASK;
    else if ((keyAdc3Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc3Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    else if ((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PBC_KEY_MASK;
    else if ((keyAdc3Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_POWER_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;	
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;
    //=======================    
#elif defined(XIAOBAWANG_AT090)
    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_PLAYPAUSE_KEY_MASK;
    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;
    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MUTE_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_STOP_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PBC_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_POWER_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUTOSEARCH_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_SOURCE_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LEFT_KEY_MASK;
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;
    //=======================    
#elif defined(YONGNAN_101PFW2B00)
    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_SOURCE_KEY_MASK;

    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;

    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_CHINC_KEY_MASK; // MENU UP IN ONE KEY
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LEFT_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;

    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_UP_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_CHDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLDEC_KEY_MASK;
    else if ((keyAdc2Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LCDONOFF_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;


    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_RIGHT_KEY_MASK;
    else if ((keyAdc3Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    else if ((keyAdc3Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;
    else if ((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUDIO_KEY_MASK;
    else if ((keyAdc3Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_TFT_MODE_MASK;
    //=======================
#elif defined(DERUN_808_HSD100IFW1)||defined(DERUN_1012_CLAA102CN)

    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();

    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LEFT_KEY_MASK;//OK


    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK; //OK
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;//_VOLINC_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;	//OK
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;//_SOURCE_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SOURCE_KEY_MASK;//_PLAYPAUSE_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_DOWN_KEY_MASK;  //OK
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;//_PBC_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;//_VOLDEC_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_VOLINC_KEY_MASK;  //OK
    else if ((keyAdc3Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLDEC_KEY_MASK;//_MENU_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;//_MENU_KEY_MASK;
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;//_MENU_KEY_MASK;

#elif defined(HUARUIAN_968J)
    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;
    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_VOLDEC_KEY_MASK;

    else if ((keyAdc1Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SUBTITLE_KEY_MASK;

    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_DOWN_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SOURCE_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_VOLINC_KEY_MASK;
    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LEFT_KEY_MASK;
    else if ((keyAdc2Val>=_AD1_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD1_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;
    else if ((keyAdc2Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;
    else if ((keyAdc2Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUDIO_KEY_MASK;
    else if ((keyAdc2Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PBC_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_STOP_KEY_MASK;
    else if ((keyAdc3Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;
    else if ((keyAdc3Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_LCDONOFF_KEY_MASK;
    //=======================
#elif  defined(XIAOBAWANG_101PFW2B00)

    if ((keyAdc1Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc2Val >= NO_KEY-_ADC_TOLERANCE)&&(keyAdc3Val >= NO_KEY-_ADC_TOLERANCE))
        return 0;

    keyAdc1Val = CKeyADC1GetValue();
    if (keyAdc1Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_LEFT_KEY_MASK;
    else if ((keyAdc1Val>=_AD2_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD2_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_UP_KEY_MASK;
    else if ((keyAdc1Val>=_AD3_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD3_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_MENU_KEY_MASK;
    else if ((keyAdc1Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SETUP_KEY_MASK;
    else if ((keyAdc1Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_AUTOSEARCH_KEY_MASK;
    else if ((keyAdc1Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc1Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SOURCE_KEY_MASK;

    //===================
    keyAdc2Val = CKeyADC2GetValue();
    if (keyAdc2Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_DOWN_KEY_MASK;
    else if ((keyAdc2Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_RIGHT_KEY_MASK;
    else if ((keyAdc2Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc2Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_ENTER_KEY_MASK;

    //====================
    keyAdc3Val = CKeyADC3GetValue();
    if (keyAdc3Val<=_AD0_KEY_DATA+_ADC_TOLERANCE)
        keystate |=_MUTE_KEY_MASK;
    else if ((keyAdc3Val>=_AD4_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD4_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_SDUSB_KEY_MASK;
    else if ((keyAdc3Val>=_AD5_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD5_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_STOP_KEY_MASK;
    else if ((keyAdc3Val>=_AD6_KEY_DATA-_ADC_TOLERANCE)&&(keyAdc3Val<=_AD6_KEY_DATA+_ADC_TOLERANCE))
        keystate|=_PLAYPAUSE_KEY_MASK;


#endif
#endif   //#if  _KEY_TYPE==_TYPE_KEY_INCARALL

#else

    keyAdcValue = CKeyScanGetValue();
//DebugPrintf("\nkey: %d\n", keyAdcValue);
    if (keyAdcValue>= NO_KEY-_ADC_TOLERANCE)
        keystate =  0;

    else if (keyAdcValue>= POWER_KEY-_ADC_TOLERANCE && keyAdcValue<= POWER_KEY+_ADC_TOLERANCE)
        keystate    = keystate | _POWER_KEY_MASK;

    else if (keyAdcValue>= SOURCE_KEY-_ADC_TOLERANCE && keyAdcValue<= SOURCE_KEY+_ADC_TOLERANCE)
        keystate    = keystate | _SOURCE_KEY_MASK;

    else if (keyAdcValue>= LEFT_KEY_DATA-_ADC_TOLERANCE && keyAdcValue<= LEFT_KEY_DATA+_ADC_TOLERANCE)
        keystate    = keystate | _LEFT_KEY_MASK;

    else if (keyAdcValue>= RIGHT_KEY_DATA-_ADC_TOLERANCE && keyAdcValue<= RIGHT_KEY_DATA+_ADC_TOLERANCE)
        keystate    = keystate | _RIGHT_KEY_MASK;

    else if (keyAdcValue>= DOWN_KEY_DATA-_ADC_TOLERANCE && keyAdcValue<= DOWN_KEY_DATA+_ADC_TOLERANCE)
        keystate    = keystate | _DOWN_KEY_MASK;

    else if (keyAdcValue>= UP_KEY_DATA-_ADC_TOLERANCE && keyAdcValue<= UP_KEY_DATA+_ADC_TOLERANCE)
        keystate    = keystate | _UP_KEY_MASK;

    else if (keyAdcValue<= MENU_KEY+_ADC_TOLERANCE)
        keystate    = keystate | _MENU_KEY_MASK;
    //if (keystate)
    //	DebugPrintf("\nkeystate=0x%x",keystate);
#endif
#endif
#if (_KEY_SCAN_MODE==_GPIO_MODE)


#ifdef POWER_LEDONOF_IN_ONE_KEY
    if ((lcd_power_sw<=6)&&(lcd_power_sw)&&!power_key_dn)
    {
        lcd_power_sw=0;
#if 0
        keystate = _SETUP_KEY_MASK;
#else
        keystate = _LCDONOFF_KEY_MASK;
#endif
        return keystate;
    }
    else if (!power_key_dn)
    {

        lcd_power_sw=0;
//		                return 0;
    }
#endif

    keystate = 0;
    //return  keystate;
    // 4x4 array key, 16keys

#ifdef KAIERSI_905
    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        DebugPrintf("\n key1", 1);
        keystate =  _SOURCE_KEY_MASK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        keystate =  _PLAYPAUSE_KEY_MASK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        keystate =  _AUDIO_KEY_MASK;
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        keystate =  _AUDIO_KEY_MASK;//NOUSE
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if low level, keystate =  key
        WriteKey0(0);//PIN51
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            keystate =  _STOP_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            keystate =  _DOWN_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            keystate =  _MENU_KEY_MASK;
            return keystate;
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                keystate =  _SDUSB_KEY_MASK;
                return keystate;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    keystate|=_POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
                DebugPrintf("\n key10", 1);
                keystate =  _UP_KEY_MASK;
                return keystate;

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                keystate =  _VOLINC_KEY_MASK;
                return keystate;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _LEFT_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _ENTER_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _RIGHT_KEY_MASK;
                    return keystate;
                }

                else
                    WriteKey0(1);
                WriteKey1(1);
                WriteKey2(1);
                WriteKey3(0);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _SETUP_KEY_MASK;//IRCOPY;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _LCDONOFF_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey2())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _VOLDEC_KEY_MASK;//no use
                    return keystate;
                }

                else
                {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                    power_key_dn=0;
#else
                    return keystate;
#endif
                }


            }
        }
    }
#elif defined(HUANA_AT090)
    /* HN-908-2660-K01/K02-V101   10-07-05   */

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if ((!ReadKey0())&&(!ReadKey1()))
    {
        DebugPrintf("\n key1", 1);
        keystate =  _VOLINC_KEY_MASK;
            return keystate;		
    }		
  else   if ((!ReadKey2())&&(!ReadKey3()))
    {
        DebugPrintf("\n key1", 1);
        keystate =  _VOLDEC_KEY_MASK;
            return keystate;		
    }			
 else   if (!ReadKey0())
    {
        DebugPrintf("\n key1", 1);
        keystate =  _DISPLAY_KEY_MASK;
            return keystate;		
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        keystate =  _SOURCE_KEY_MASK;
            return keystate;		
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        keystate =  _LCDONOFF_KEY_MASK;
            return keystate;		
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        keystate =  _SETUP_KEY_MASK;
            return keystate;		
    }
    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if low level, keystate =  key
        WriteKey0(0);//PIN51
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            keystate =  _PLAYPAUSE_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            keystate =  _DOWN_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            keystate =  _MENU_KEY_MASK;
            return keystate;
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                keystate =  _AUDIO_KEY_MASK;
                return keystate;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    keystate|=_POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    DebugPrintf("\n key10", 1);
    keystate =  _UP_KEY_MASK;
    return keystate;
#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                keystate =  _SKIPDOWN_KEY_MASK;//NEXT
                return keystate;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _LEFT_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _ENTER_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _RIGHT_KEY_MASK;
                    return keystate;
                }

                else
                    WriteKey0(1);
                WriteKey1(1);
                WriteKey2(1);
                WriteKey3(0);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _SPEEDDOWN_KEY_MASK;//FF;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _SPEEDUP_KEY_MASK;//FR
                    return keystate;
                }
                else if (!ReadKey2())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _SKIPUP_KEY_MASK;// PREV
                    return keystate;
                }

                else
                {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                    power_key_dn=0;
#else
    return keystate;
#endif
                }


            }
        }
    }	
#elif defined(DERUN_805_AT080)
    /* YT905-KEYA-V1.1   2009.10.19   */

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        DebugPrintf("\n key1", 1);
        keystate =  _RIGHT_KEY_MASK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        keystate =  _DOWN_KEY_MASK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        keystate =  _ENTER_KEY_MASK;
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        keystate =  _LEFT_KEY_MASK;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if low level, keystate =  key
        WriteKey0(0);//PIN51
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            keystate =  _SETUP_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            keystate =  _SDUSB_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            keystate =  _SOURCE_KEY_MASK;
            return keystate;
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                keystate =  _PLAYPAUSE_KEY_MASK;
                return keystate;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    keystate|=_POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    DebugPrintf("\n key10", 1);
    keystate =  _STOP_KEY_MASK;
    return keystate;
#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                keystate =  _VOLINC_KEY_MASK;
                return keystate;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _MENU_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _LCDONOFF_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _CHINC_KEY_MASK;
                    return keystate;
                }

                else
                    WriteKey0(1);
                WriteKey1(1);
                WriteKey2(1);
                WriteKey3(0);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _CHDEC_KEY_MASK;//IRCOPY;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _VOLDEC_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey2())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _UP_KEY_MASK;//no use
                    return keystate;
                }

                else
                {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                    power_key_dn=0;
#else
    return keystate;
#endif
                }


            }
        }
    }
#elif defined(HUANA_100IFW1_1081)
//krs-PD101d v1.0 20100306

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SOURCE_KEY_MASK;//OK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _SETUP_KEY_MASK;//OK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _PBC_KEY_MASK; //OK
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _LCDONOFF_KEY_MASK;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _SDUSB_KEY_MASK;// OK;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _STOP_KEY_MASK;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    return _POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    return _UP_KEY_MASK;

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _MENU_KEY_MASK;//OK;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _VOLINC_KEY_MASK;//ok;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _VOLDEC_KEY_MASK;//ok;;
                    }

                    else
                    {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                        power_key_dn=0;
#else
    return keystate;
#endif
                    }
                }


            }
        }
    }

#elif defined( TUOBU_AT090)
    /*  拓步  tb096-2660-key-v0.1  2010 06 11  */

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SOURCE_KEY_MASK;//USE;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLINC_KEY_MASK;//USE;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _DOWN_KEY_MASK; //USE
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _STOP_KEY_MASK;// USE;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _ENTER_KEY_MASK;  //USE
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _LEFT_KEY_MASK;// USE;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _STOP_KEY_MASK;//NO USE;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
                return _PLAYPAUSE_KEY_MASK;  //USE
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _RIGHT_KEY_MASK;//USE;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _SDUSB_KEY_MASK;  //USE
                }
                else if (!ReadKey1())
                {

                    DebugPrintf("\n key10", 1);
                    return _SETUP_KEY_MASK;  //USE
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _UP_KEY_MASK;  //USE
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _VOLDEC_KEY_MASK;//USE;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _PLAYPAUSE_KEY_MASK;//NO USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _PBC_KEY_MASK;//NO USE;;
                    }

                    else
                    {
                        return keystate;
                    }

                }
            }
        }
    }
#elif defined( GUANWEI_AT090_902)
//  PD9902_KEYA(KEYB)_V1.0  2009.11.23
#include "customer\code\skyworth\key_pd9902.h)"

#elif defined( XINHUACE_AT090)
    /*  新华测qw701-2660-key-v1.0 2010 06 30 */

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _RIGHT_KEY_MASK;//USE;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _UP_KEY_MASK;//USE;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _ENTER_KEY_MASK; //USE
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _DOWN_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _PLAYPAUSE_KEY_MASK;// USE;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _VOLDEC_KEY_MASK;  //USE
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _LEFT_KEY_MASK;// USE;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _SDUSB_KEY_MASK;//USE;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
                return _SOURCE_KEY_MASK;  //USE
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _SUBTITLE_KEY_MASK;//USE;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _AUDIO_KEY_MASK;  //USE
                }
                else if (!ReadKey1())
                {

                    DebugPrintf("\n key10", 1);
                    return _VOLINC_KEY_MASK;  //USE
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _PBC_KEY_MASK;  //USE
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _SETUP_KEY_MASK;//USE;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _MENU_KEY_MASK;// USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _STOP_KEY_MASK;// USE;;
                    }

                    else
                    {
                        return keystate;
                    }

                }
            }
        }
    }	
#elif defined( KANGMEI_N101L6)

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SDUSB_KEY_MASK;//USE;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLDEC_KEY_MASK;//USE;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _PBC_KEY_MASK; //USE
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _AUDIO_KEY_MASK;// USE;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;  //USE
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _SOURCE_KEY_MASK;// USE;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _STOP_KEY_MASK;//USE;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    return _POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    return _UP_KEY_MASK;  //USE

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _VOLINC_KEY_MASK;//USE;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;  //USE
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;  //USE
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;  //USE
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _SKIPDOWN_KEY_MASK;//USE;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _SKIPUP_KEY_MASK;//USE;;
                    }

                    else
                    {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                        power_key_dn=0;
#else
    return keystate;
#endif
                    }

                }
            }
        }
    }

#elif defined( AODELI_968)
    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        DebugPrintf("\n key1", 1);
        keystate =  _SOURCE_KEY_MASK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        keystate =  _PLAYPAUSE_KEY_MASK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        keystate =  _AUDIO_KEY_MASK;
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        keystate =  _AUDIO_KEY_MASK;//NOUSE
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if low level, keystate =  key
        WriteKey0(0);//PIN51
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            keystate =  _STOP_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            keystate =  _DOWN_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            keystate =  _MENU_KEY_MASK;
            return keystate;
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                keystate =  _SDUSB_KEY_MASK;
                return keystate;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    keystate|=_POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    DebugPrintf("\n key10", 1);
    keystate =  _UP_KEY_MASK;
    return keystate;

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                keystate =  _VOLINC_KEY_MASK;
                return keystate;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _LEFT_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _ENTER_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _RIGHT_KEY_MASK;
                    return keystate;
                }

                else
                    WriteKey0(1);
                WriteKey1(1);
                WriteKey2(1);
                WriteKey3(0);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _SETUP_KEY_MASK;//IRCOPY;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _LCDONOFF_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey2())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _VOLDEC_KEY_MASK;//no use
                    return keystate;
                }

                else
                {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                    power_key_dn=0;
#else
    return keystate;
#endif
                }


            }
        }
    }

#elif defined(HUARUIAN_1010_N101L6)    // PD101-KEY-V1.0-2010.3.6


    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SDUSB_KEY_MASK;//OK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLDEC_KEY_MASK;//OK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _TITLE_KEY_MASK; //OK
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _AUDIO_KEY_MASK;// _STOP_KEY_MASK;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _SOURCE_KEY_MASK;// OK;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _STOP_KEY_MASK;//_LCDONOFF_KEY_MASK;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    return _POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    return _UP_KEY_MASK;

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _VOLINC_KEY_MASK;//OK;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _SETUP_KEY_MASK;//ok;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _MENU_KEY_MASK;//ok;;
                    }

                    else
                    {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                        power_key_dn=0;
#else
    return keystate;
#endif
                    }
                }


            }
        }
    }
#elif defined(XINHUACE_HSD100IFW1)    // PD101-KEY-V1.0-2010.3.6


    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _LCDONOFF_KEY_MASK;//OK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLDEC_KEY_MASK;//OK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _MENU_KEY_MASK; //OK
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _SOURCE_KEY_MASK;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            return _AUDIO_KEY_MASK;// OK;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _STOP_KEY_MASK;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);

    return _UP_KEY_MASK;
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _VOLINC_KEY_MASK;//OK;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _SDUSB_KEY_MASK;//ok;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _SETUP_KEY_MASK;//ok;;
                    }

                    else
                    {
    return keystate;
                    }
                }


            }
        }
    }

	#elif defined(ZHONGHENGHUIBO_9D)
   //set all key i/o to high level
   WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        DebugPrintf("\n key1", 1);
        keystate = _LCDONOFF_KEY_MASK;//_SOURCE_KEY_MASK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        keystate = _PBC_KEY_MASK;//_PLAYPAUSE_KEY_MASK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        keystate =  _SETUP_KEY_MASK;//_AUDIO_KEY_MASK;
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        keystate =  _AUDIO_KEY_MASK;//NOUSE
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if low level, keystate =  key
        WriteKey0(0);//PIN51
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            keystate =_SOURCE_KEY_MASK;//_STOP_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            keystate =  _DOWN_KEY_MASK;
            return keystate;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);
            keystate =  _PLAYPAUSE_KEY_MASK;//_MENU_KEY_MASK;
            return keystate;
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                keystate =  _SDUSB_KEY_MASK;
                return keystate;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);
#ifdef POWER_LEDONOF_IN_ONE_KEY
                power_key_dn=1;
                lcd_power_sw++;

                if (lcd_power_sw==28)
                {
                    keystate|=_POWER_KEY_MASK;
                }
                else if (lcd_power_sw>=50)
                    lcd_power_sw=29;
#else
    DebugPrintf("\n key10", 1);
    keystate =  _UP_KEY_MASK;
    return keystate;

#endif
            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                keystate =  _VOLINC_KEY_MASK;
                return keystate;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _LEFT_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate =  _ENTER_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _RIGHT_KEY_MASK;
                    return keystate;
                }

                else
                    WriteKey0(1);
                WriteKey1(1);
                WriteKey2(1);
                WriteKey3(0);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    keystate =  _AUDIO_KEY_MASK;//_SETUP_KEY_MASK;//IRCOPY;
                    return keystate;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    keystate = _VOLDEC_KEY_MASK;//_LCDONOFF_KEY_MASK;
                    return keystate;
                }
                else if (!ReadKey2())
                {
                    DebugPrintf("\n key13", 1);
                    keystate =  _STOP_KEY_MASK;//_VOLDEC_KEY_MASK;//no use
                    return keystate;
                }

                else
                {
#ifdef POWER_LEDONOF_IN_ONE_KEY
                    power_key_dn=0;
#else
    return keystate;
#endif
                }


            }
        }
    }


#elif defined(ZHONGHENGHUIBO_100IFW1)    // PD101-KEY-V1.0-2010.3.6


    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SOURCE_KEY_MASK;//_SDUSB_KEY_MASK;//OK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLDEC_KEY_MASK;//OK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _PLAYPAUSE_KEY_MASK;//_TITLE_KEY_MASK; //OK
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _STOP_KEY_MASK;//_AUDIO_KEY_MASK;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);

            return _SETUP_KEY_MASK;//_SOURCE_KEY_MASK;// OK;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _PBC_KEY_MASK;//_STOP_KEY_MASK;//_LCDONOFF_KEY_MASK;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);

                return _UP_KEY_MASK;

            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _VOLINC_KEY_MASK;//OK;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _LCDONOFF_KEY_MASK;//_SETUP_KEY_MASK;//ok;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _AUDIO_KEY_MASK;//_PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _SDUSB_KEY_MASK;//_MENU_KEY_MASK;//ok;;
                    }

                    else
                    {
                        return keystate;
                    }
                }


            }
        }
    }

#else

    //set all key i/o to high level
    WriteKey0(1);
    WriteKey1(1);
    WriteKey2(1);
    WriteKey3(1);
    CTimerDelayXms(1);

    //first: scan line, if find low level, id this, and keystate =  key
    if (!ReadKey0())
    {
        //DebugPrintf("\n key1", 1);
        //COsdFxClearText(1,0,3,3);
        //COsdFxShowNumber(1, 0, 1, 0x33, _CP_RED);
        return _SOURCE_KEY_MASK;//_SDUSB_KEY_MASK;//OK;
    }
    else if (!ReadKey1())
    {
        DebugPrintf("\n key2", 1);
        return  _VOLDEC_KEY_MASK;//OK;
    }
    else if (!ReadKey2())
    {
        DebugPrintf("\n key3", 1);
        return _PLAYPAUSE_KEY_MASK;//_TITLE_KEY_MASK; //OK
    }
    else if (!ReadKey3())
    {
        DebugPrintf("\n key4", 1);
        return _SOURCE_KEY_MASK;// NOUSE ;
    }

    else
    {
        //second: loop scan line, set line1 to low level, and check cross line, if

        WriteKey0(0);
        WriteKey1(1);
        WriteKey2(1);
        WriteKey3(1);
        CTimerDelayXms(1);
        if (!ReadKey1())
        {
            DebugPrintf("\n key5", 1);
            return _STOP_KEY_MASK;//_AUDIO_KEY_MASK;
        }
        else if (!ReadKey2())
        {
            DebugPrintf("\n key6", 1);
            return _DOWN_KEY_MASK;
        }
        else if (!ReadKey3())
        {
            DebugPrintf("\n key7", 1);

            return _SETUP_KEY_MASK;//_SOURCE_KEY_MASK;// OK;//
        }
        else
        {
            WriteKey0(1);
            WriteKey1(0);
            WriteKey2(1);
            WriteKey3(1);
            CTimerDelayXms(1);
            if (!ReadKey0())
            {
                DebugPrintf("\n key8", 1);
                return _PBC_KEY_MASK;//_STOP_KEY_MASK;//_LCDONOFF_KEY_MASK;
            }
            else if (!ReadKey2())
            {
                DebugPrintf("\n key9", 1);

                return _UP_KEY_MASK;

            }
            else if (!ReadKey3())
            {
                DebugPrintf("\n key10", 1);
                return _VOLINC_KEY_MASK;//OK;
            }
            else
            {
                WriteKey0(1);
                WriteKey1(1);
                WriteKey2(0);
                WriteKey3(1);
                CTimerDelayXms(1);
                if (!ReadKey0())
                {
                    DebugPrintf("\n key11", 1);
                    return  _LEFT_KEY_MASK;
                }
                else if (!ReadKey1())
                {
                    DebugPrintf("\n key12", 1);
                    return _ENTER_KEY_MASK;
                }
                else if (!ReadKey3())
                {
                    DebugPrintf("\n key13", 1);
                    return _RIGHT_KEY_MASK;
                }

                else
                {
                    WriteKey0(1);
                    WriteKey1(1);
                    WriteKey2(1);
                    WriteKey3(0);
                    CTimerDelayXms(1);
                    if (!ReadKey0())
                    {
                        DebugPrintf("\n key11", 1);
                        return  _LCDONOFF_KEY_MASK;//_SETUP_KEY_MASK;//ok;;
                    }
                    else if (!ReadKey1())
                    {
                        DebugPrintf("\n key12", 1);
                        return  _AUDIO_KEY_MASK;//_PLAYPAUSE_KEY_MASK;//USE;

                    }
                    else if (!ReadKey2())
                    {
                        DebugPrintf("\n key13", 1);
                        return _SDUSB_KEY_MASK;//_MENU_KEY_MASK;//ok;;
                    }

                    else
                    {
                        return keystate;
                    }
                }


            }
        }
    }
#endif/* KAIERSI_905*/

#endif /*#if (_KEY_SCAN_MODE==_GPIO_MODE)*/

    return keystate;
}

//--------------------------------------------------
// Description  : Convert keypad status into key message, stores in ucKeyNotify
// Input Value  : None
// Output Value : None
//--------------------------------------------------
UINT8 CKeyMessageConvProc(void)
{
    UINT8 ucKeyMessage = _NONE_KEY_MESSAGE;

    switch (ucKeyStateCurr)
    {
    case _POWER_KEY_MASK:
        ucKeyMessage = _POWER_KEY_MESSAGE;
        break;
    case _LCDONOFF_KEY_MASK:
        ucKeyMessage = _LCDONOFF_KEY_MESSAGE;
        break;
    case _MENU_KEY_MASK:
        ucKeyMessage = _MENU_KEY_MESSAGE;
        break;
    case _SOURCE_KEY_MASK:
        ucKeyMessage = _SOURCE_KEY_MESSAGE;
        break;
    case _TFT_MODE_MASK :
        ucKeyMessage = _PICT_MODE_KEY_MESSAGE;
        break;
    case _VOLDEC_KEY_MASK:
#ifdef YONGNAN_101PFW2B00
        if ((ucOsdState!=_MAINMENU_STATE)||(ucOsdState==_VOLIMN_STATE))
            ucKeyMessage = _VOLUME_DEC_MESSAGE;
        else
            ucKeyMessage = _LEFT_KEY_MESSAGE;
#else
        ucKeyMessage = _VOLUME_DEC_MESSAGE;
#endif
        break;
    case _VOLINC_KEY_MASK:
#ifdef YONGNAN_101PFW2B00
        if ((ucOsdState!=_MAINMENU_STATE)||(ucOsdState==_VOLIMN_STATE))
            ucKeyMessage = _VOLUME_INC_MESSAGE;
        else
            ucKeyMessage = _RIGHT_KEY_MESSAGE;
#else
        ucKeyMessage = _VOLUME_INC_MESSAGE;
#endif
        break;
    case _CHDEC_KEY_MASK:
#ifdef YONGNAN_101PFW2B00
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _CHANNEL_DEC_MESSAGE;
        else
            ucKeyMessage = _DOWN_KEY_MESSAGE;
#else
        ucKeyMessage = _CHANNEL_DEC_MESSAGE;
#endif
        break;
    case _CHINC_KEY_MASK:
#ifdef YONGNAN_101PFW2B00
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _CHANNEL_INC_MESSAGE;
        else
            ucKeyMessage = _UP_KEY_MESSAGE;
#else
        ucKeyMessage = _CHANNEL_INC_MESSAGE;
#endif
        break;
    case _MUTE_KEY_MASK:
        ucKeyMessage = _MUTE_KEY_MESSAGE;
        break;
    case _AUTOSEARCH_KEY_MASK:
        ucKeyMessage = _AUTOSEARCH_KEY_MESSAGE;
        break;
    case _REPEAT_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _ENTER_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _TITLE_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _SETUP_KEY_MASK:
#if defined(TUOBU_AT090)||defined(ZHONGHENGHUIBO_100IFW1)
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE||ucOsdState==_MAINMENU_STATE||ucOsdState==_VOLIMN_STATE))
            ucKeyMessage = _INVALID_KEY_MESSAGE;
        else
            ucKeyMessage = _MENU_KEY_MESSAGE;
#else
        ucKeyMessage = _INVALID_KEY_MESSAGE;
#endif
        break;
    case _SDUSB_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _STOP_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _PLAYPAUSE_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _PBC_KEY_MASK:
    case _SKIPUP_KEY_MASK:
    case _SKIPDOWN_KEY_MASK:
    case _SPEEDUP_KEY_MASK:
    case _SPEEDDOWN_KEY_MASK:
    case _SUBTITLE_KEY_MASK:
    case _CAPTION_KEY_MASK:
        ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _RIGHT_KEY_MASK:
#if _KEY_TYPE != _TYPE_KEY_XBW
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _INVALID_KEY_MESSAGE;
        else
#endif
            ucKeyMessage = _RIGHT_KEY_MESSAGE;
        break;
    case _LEFT_KEY_MASK:
#if _KEY_TYPE != _TYPE_KEY_XBW
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _INVALID_KEY_MESSAGE;
        else
#endif
            ucKeyMessage = _LEFT_KEY_MESSAGE;
        break;
    case _UP_KEY_MASK:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&ucOsdState==_IDLE_STATE)
            ucKeyMessage = _INVALID_KEY_MESSAGE;
//#ifndef DERUN_REMOTE//_KEY_TYPE == _TYPE_KEY_BF||_KEY_TYPE == _TYPE_KEY_HS1081_2||_KEY_TYPE ==_TYPE_KEY_BB||_KEY_TYPE ==_TYPE_KEY_XBW
#if  1//def DERUN_1012_CLAA102CN DERUN_808_HSD100IFW1
        else if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _CHANNEL_INC_MESSAGE;
#endif
        else
            ucKeyMessage = _UP_KEY_MESSAGE;
        break;
    case _DOWN_KEY_MASK:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&ucOsdState==_IDLE_STATE)
            ucKeyMessage = _INVALID_KEY_MESSAGE;
//#ifndef DERUN_REMOTE// _KEY_TYPE == _TYPE_KEY_BF||_KEY_TYPE == _TYPE_KEY_HS1081_2||_KEY_TYPE ==_TYPE_KEY_BB||_KEY_TYPE ==_TYPE_KEY_XBW
#if 1//def DERUN_1012_CLAA102CN DERUN_808_HSD100IFW1
        else if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
            ucKeyMessage = _CHANNEL_DEC_MESSAGE;
#endif
        else
            ucKeyMessage = _DOWN_KEY_MESSAGE;
        break;
    case _AUDIO_KEY_MASK:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT&&ucOsdState == _IDLE_STATE)
            ucKeyMessage = _TV_AUDIO_SYSTEM_KEY_MESSAGE;
        else
            ucKeyMessage = _INVALID_KEY_MESSAGE;
        break;
    case _DISPLAY_KEY_MASK:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT)
            ucKeyMessage = _INVALID_KEY_MESSAGE;
        else
            ucKeyMessage = _DISPLAY_KEY_MESSAGE;
        break;

    default:
        CLR_KEYREPEATSTART();
        CTimerCancelTimerEvent(CKeyRepeatEnableTimerEvent);
        CLR_KEYREPEATENABLE();
        return _NONE_KEY_MESSAGE;
    }


//	if((ucKeyStatePrev != ucKeyStateCurr)||(_KEY7_MASK == ucKeyStateCurr)) {
    if (ucKeyStatePrev != ucKeyStateCurr)
    {
        CLR_KEYREPEATSTART();
        SET_KEYREPEATENABLE();
        if (ucKeyStateCurr == _SOURCE_KEY_MASK)
            CTimerActiveTimerEvent(SEC(1.5),CKeyRepeatEnableTimerEvent);
        else if (ucKeyStateCurr == _POWER_KEY_MASK)
            CTimerActiveTimerEvent(SEC(1),CKeyRepeatEnableTimerEvent);
#if _KEY_TYPE==_TYPE_KEY_XBW
        else if (ucKeyStateCurr == _LEFT_KEY_MASK||ucKeyStateCurr == _RIGHT_KEY_MASK)
            CTimerActiveTimerEvent(SEC(0.1),CKeyRepeatEnableTimerEvent);
#endif
        else
            CTimerActiveTimerEvent(SEC(_KEY_REPEAT_START_TIME),CKeyRepeatEnableTimerEvent);
        ucKeyPadMessage = ucKeyMessage;
        switch (ucKeyStateCurr)
        {
        case _ENTER_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_PLAY_ENTER);
            break;
        case _RIGHT_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_RIGHT_K);
            break;
        case _LEFT_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_LEFT_K);
            break;
        case _UP_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_UP_K);
            break;
        case _DOWN_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_DOWN_K);
            break;
        case _TITLE_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                //Send_Key(IR_TITLE_MENU);
                Send_Key(IR_ROOT_MENU);
            break;
        case _AUDIO_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_AUDIO_VCD);
            break;
        case _SETUP_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_SETUP);
            break;
        case _SDUSB_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_MUTE);
            break;
        case _DISPLAY_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_DISPLAY);
            break;
        case _STOP_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_STOP);
            break;
        case _PLAYPAUSE_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_PLAY_PAUSE);
            break;
        case _REPEAT_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_REPEAT);
            break;
        case _CAPTION_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_SUB_TITLE);
            break;
        case _PBC_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_ROOT_MENU);
            break;
        case _SUBTITLE_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_SUB_TITLE);
            break;
        case _SKIPUP_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_PREV);
            break;
        case _SKIPDOWN_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_NEXT);
            break;
        case _SPEEDDOWN_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_FF);
            break;
        case _SPEEDUP_KEY_MASK:
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                Send_Key(IR_FR);
            break;

        }
        return ucKeyMessage;
    }
    else
    {
        if (GET_KEYREPEATENABLE())
        {
            if (GET_KEYREPEATSTART())
            {
                CTimerReactiveTimerEvent(SEC(0.1),CKeyRepeatEnableTimerEvent);
                CLR_KEYREPEATSTART();
                ucKeyPadMessage = ucKeyMessage;
                switch (ucKeyStateCurr)
                {
                case _ENTER_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_PLAY_ENTER);
                    break;
                case _RIGHT_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_RIGHT_K);
                    break;
                case _LEFT_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_LEFT_K);
                    break;
                case _UP_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_UP_K);
                    break;
                case _DOWN_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_DOWN_K);
                    break;
                case _TITLE_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        //Send_Key(IR_TITLE_MENU);
                        Send_Key(IR_ROOT_MENU);
                    break;
                case _AUDIO_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_AUDIO_VCD);
                    break;
                case _SETUP_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_SETUP);
                    break;
                case _SDUSB_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_MUTE);
                    break;
                case _DISPLAY_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_DISPLAY);
                    break;
                case _STOP_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_STOP);
                    break;
                case _PLAYPAUSE_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_PLAY_PAUSE);
                    break;
                case _REPEAT_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_REPEAT);
                    break;
                case _CAPTION_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_SUB_TITLE);
                    break;
                case _PBC_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_ROOT_MENU);
                    break;
                case _SUBTITLE_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_SUB_TITLE);
                    break;
                case _SKIPUP_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_PREV);
                    break;
                case _SKIPDOWN_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_NEXT);
                    break;
                case _SPEEDDOWN_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_FF);
                    break;
                case _SPEEDUP_KEY_MASK:
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT&&(ucOsdState==_IDLE_STATE||ucOsdState==_MUTE_STATE))
                        Send_Key(IR_FR);
                    break;

                }
                return ucKeyMessage;
            }
            else
            {
                CLR_KEYREPEATSTART();
                CTimerCancelTimerEvent(CKeyRepeatEnableTimerEvent);
//				ucKeyMessage = _KEY7_MASK;
                ucKeyPadMessage = _REPEAT_KEY_MESSAGE;
#if _KEY_TYPE==_TYPE_KEY_XBW
                if (ucKeyStateCurr==_RIGHT_KEY_MASK)
                {
                    return _VOLUME_INC_MESSAGE;
                }
                else if (ucKeyStateCurr==_LEFT_KEY_MASK)
                {
                    return _VOLUME_DEC_MESSAGE;
                }
                else
#endif
                    return _REPEAT_KEY_MESSAGE;
            }
        }
    }
    ucKeyPadMessage = _NONE_KEY_MESSAGE;
    return _NONE_KEY_MESSAGE;
}

#if(ISPHotKey == _TRUE)
sfr WINBOND_CHPENR  = 0xf6;
sfr WINBOND_CHPCON  = 0x9F;
sfr WINBOND_TA      = 0xC7;

static void EnableISP(void)
{
    //P4 = 0x00;
    //pwPowerOffSystem();

    WINBOND_CHPENR = 0x87;         // write enable
    WINBOND_CHPENR = 0x59;         // write enable
    WINBOND_CHPCON = 0x03;         // bank=4k,flash mode (LDSEL=1,ENP=1)
    TL0 = 0xfe;
    TH0 = 0xff;
    TR0 = 1;
    PCON = PCON | 0x01;            // enter idle mode
    WINBOND_TA = 0xaa;             // write enable
    WINBOND_TA = 0x55;             // write enable
    WINBOND_CHPCON = 0x03;         // bank=4k,flash mode (LDSEL=1,ENP=1)
    TL0 = 0xfe;
    TH0 = 0xff;
    TR0 = 1;
    PCON = PCON | 0x01;            // enter idle mode
//	while(1)	;
}

#endif
/**
 *
 * @}
 */
