/*=============================================
  * Copyright (c)      Realtek Semiconductor Corporation, 2005
  * All rights reserved.
  * ============================================ */

/*================= File Description ================= */
/**
 * @file
 * 	This file is for global structure's declaration.
 *
 * @author 	$Author: forster $
 * @date 	$Date: 2006-02-20 15:55:46 +0800 (星期一, 20 二月 2006) $
 * @version 	$Revision: 204 $
 * @ingroup 	input
 */

/**
* @addtogroup input
* @{
*/

#ifndef  _KEY_H
#define  _KEY_H
/*================ Module dependency  =============== */

/*===================== Module Dependency  ================== */

/*========================== Types ========================== */

/*======================== Definitions ====================== */

#define _KEY_AMOUNT                 4

// Macro of Key Scan Ready Flag
#define GET_KEYSCANREADY()          ((bit)(ucKeyControl & _BIT0))
#define SET_KEYSCANREADY()          (ucKeyControl |= _BIT0)
#define CLR_KEYSCANREADY()          (ucKeyControl &= ~_BIT0)

// Macro of Key Scan Start Flag
#define GET_KEYSCANSTART()          ((bit)(ucKeyControl & _BIT1))
#define SET_KEYSCANSTART()          (ucKeyControl |= _BIT1)
#define CLR_KEYSCANSTART()          (ucKeyControl &= ~_BIT1)

// Macro of Key Repeat Start
#define GET_KEYREPEATSTART()        (bit)(ucKeyControl & _BIT2)
#define SET_KEYREPEATSTART()        ucKeyControl |= _BIT2
#define CLR_KEYREPEATSTART()        ucKeyControl &= ~_BIT2


// Macro of Key Repeat Function Enable
// If you want to use repeat function, please set this flag. If not, please clear it.
#define GET_KEYREPEATENABLE()       (bit)(ucKeyControl & _BIT3)
#define SET_KEYREPEATENABLE()       ucKeyControl |= _BIT3
#define CLR_KEYREPEATENABLE()       ucKeyControl &= ~_BIT3

#if _PCB_TYPE == _PCB_TEST		//add 20091028
#define _MENU_KEY_MASK             		0x01
#define _SOURCE_KEY_MASK            	0x02//#define _EXIT_KEY_MASK              0x40
#define _ENTER_KEY_MASK              	0x03
#define _RIGHT_KEY_MASK             	0x04
#define _LEFT_KEY_MASK              		0x05
#define _UP_KEY_MASK                		0x06
#define _DOWN_KEY_MASK             	0x07
#define _CHINC_KEY_MASK          		0x08
#define _CHDEC_KEY_MASK                  	0x09
#define _VOLINC_KEY_MASK          		0x0a
#define _VOLDEC_KEY_MASK                  0x0b
#define _LCDONOFF_KEY_MASK             0x0C
#define _SETUP_KEY_MASK              	0x0D
#define _SDUSB_KEY_MASK              	0x0E
#define _SKIPUP_KEY_MASK              	0x0F
#define _SKIPDOWN_KEY_MASK             0x10
#define _STOP_KEY_MASK              	0x11
#define _PLAYPAUSE_KEY_MASK              	0x12
#define _POWER_KEY_MASK          		0x13
#define _SPEEDUP_KEY_MASK              	0x14
#define _SPEEDDOWN_KEY_MASK          0x15
#define _TITLE_KEY_MASK          		0x16
#define _AUDIO_KEY_MASK          		0x17
#define _DISPLAY_KEY_MASK          		0x18
#define _CAPTION_KEY_MASK          		0x19
#define _AUTOSEARCH_KEY_MASK          		0x1A
#define _REPEAT_KEY_MASK          		0x1B
#define _MUTE_KEY_MASK          		0x1C
#define  _PBC_KEY_MASK                       0x1d
#define _SUBTITLE_KEY_MASK            0x1E
#define _TFT_MODE_MASK                  0X1F

#endif
#if(_KEY_SCAN_MODE==_ADCX_MODE)

#if _PCB_TYPE==_PCB_JPE_28_A00082_0020
#define	MENU_KEY				0
#define	UP_KEY_DATA			6
#define	DOWN_KEY_DATA		16
#define	RIGHT_KEY_DATA		25
#define	LEFT_KEY_DATA			35
#define	SOURCE_KEY				45
#define	POWER_KEY				55
#define	NO_KEY					63

#define _ADC_TOLERANCE			2
#endif
#if (_PCB_TYPE == _PCB_TEST)
/*											//add 20090914
//20080919 ccy modify
#define	MENU_KEY				6
#define	UP_KEY_DATA			20
#define	DOWN_KEY_DATA		34
#define	RIGHT_KEY_DATA		2
#define	LEFT_KEY_DATA			13
#define	SOURCE_KEY				46
#define	POWER_KEY				59
#define	NO_KEY					63
//20081121 ccy add


#define _ADC_TOLERANCE			3
*/											//add 20090914
#if _KEY_TYPE==_TYPE_KEY_BC
#if _CUSTOMER_HUANA
//ADC1
#define	MENU_KEY				46//22//28//
#define	SETUP_KEY_DATA		0//39//
#define	SOURCE_KEY				35//12//15//
#define	LEFT_KEY_DATA			15//11//14//
#define	DOWN_KEY_DATA		53//24//
#define  SDUSB_KEY_DATA		7
#define	MUTE_KEY_DATA			24
//ADC2
#define	AUDIO_KEY_DATA		35//03
#define  STOP_KEY_DATA			46
#define	TITLE_KEY_DATA		53
#define	LCDONOFF_KEY			24
#define	DISPLAY_KEY_DATA		0
#define	VOLINC_KEY_DATA		6
#define	VOLDEC_KEY_DATA		14
//ADC3
#define	UP_KEY_DATA			0//27//
#define	RIGHT_KEY_DATA		15//00
#define	ENTER_KEY_DATA		24//12//15//
#define	PLAYPAUSE_KEY_DATA	7

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#else
//ADC1
#define	MENU_KEY				46//22//28//
#define	SETUP_KEY_DATA		0//39//
#define	SOURCE_KEY			35//12//15//
#define	LEFT_KEY_DATA			15//11//14//
#define	DOWN_KEY_DATA		53//24//
#define  TITLE_KEY_DATA			7
#define	DISPLAY_KEY_DATA			24
//ADC2
#define	LCDONOFF_KEY			35//03
#define  SDUSB_KEY_DATA		46
#define	AUDIO_KEY_DATA			53
#define	VOLDEC_KEY_DATA		24
#define	VOLINC_KEY_DATA		0
#define	STOP_KEY_DATA			6
#define	PLAYPAUSE_KEY_DATA		14
//ADC3
#define	UP_KEY_DATA			0//27//
#define	RIGHT_KEY_DATA		15//00
#define	ENTER_KEY_DATA		24//12//15//
#define	CAPTION_KEY_DATA		7

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#endif
#elif _KEY_TYPE == _TYPE_KEY_BF
//ADC1
#define	MENU_KEY				13//22//28//
#define	LCDONOFF_KEY			24//03
#define  TITLE_KEY_DATA			53
#define  SDUSB_KEY_DATA		46
#define	DISPLAY_KEY_DATA		0
#define	AUDIO_KEY_DATA		34
//ADC2
#define	VOLDEC_KEY_DATA		23
#define	VOLINC_KEY_DATA		0
#define	STOP_KEY_DATA			6
#define	PLAYPAUSE_KEY_DATA	13
#define	DOWN_KEY_DATA		53//24//
#define	RIGHT_KEY_DATA		46//00
#define	ENTER_KEY_DATA		34//12//15//
//ADC3
#define	SOURCE_KEY			13//12//15//
#define	SETUP_KEY_DATA		23//39//
#define	UP_KEY_DATA			0//27//
#define	LEFT_KEY_DATA			6//11//14//

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif _KEY_TYPE == _TYPE_KEY_DERUN1002
//ADC1
#define	MENU_KEY				24//22//28//
#define	LCDONOFF_KEY			34//03
#define	SETUP_KEY_DATA		46//39//
#define	SOURCE_KEY			0//12//15//
#define  SDUSB_KEY_DATA		53
#define	PLAYPAUSE_KEY_DATA		13
//ADC2
#define	DOWN_KEY_DATA		53//24//
#define	RIGHT_KEY_DATA		46//00
#define	ENTER_KEY_DATA		34//12//15//
#define	VOLDEC_KEY_DATA		13
#define	VOLINC_KEY_DATA		6
#define	CHDEC_KEY_DATA		0
#define	CHINC_KEY_DATA		23
//ADC3	
#define  TITLE_KEY_DATA			13
#define	STOP_KEY_DATA			23
#define	UP_KEY_DATA			0//27//
#define	LEFT_KEY_DATA			6//11//14//

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif _KEY_TYPE == _TYPE_KEY_HS1081
//ADC1
#define	MENU_KEY				24//22//28//
#define	LCDONOFF_KEY			7//03
#define	SOURCE_KEY			46//12//15//
#define  SDUSB_KEY_DATA		0
#define	STOP_KEY_DATA			14
#define	RIGHT_KEY_DATA		53//00
//ADC2
#define	SETUP_KEY_DATA		46//39//
#define	DOWN_KEY_DATA		53//24//
#define	ENTER_KEY_DATA		34//12//15//
#define	VOLDEC_KEY_DATA		23
#define	VOLINC_KEY_DATA		0
#define	CHDEC_KEY_DATA		13
#define	CHINC_KEY_DATA		6
//ADC3
#define	PLAYPAUSE_KEY_DATA	14
#define	UP_KEY_DATA			0//27//
#define	LEFT_KEY_DATA			7//11//14//

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif _KEY_TYPE == _TYPE_KEY_HS1081_2
//ADC1
#define	MENU_KEY				46
#define	LCDONOFF_KEY			7
#define	SETUP_KEY_DATA		24
#define  SDUSB_KEY_DATA		0
#define	RIGHT_KEY_DATA		53
#define	DISPLAY_KEY_DATA		15

//ADC2
#define	SOURCE_KEY			      46
#define	STOP_KEY_DATA			7
#define	PLAYPAUSE_KEY_DATA	15
#define	DOWN_KEY_DATA		53
#define	ENTER_KEY_DATA		35
#define	VOLDEC_KEY_DATA		24
#define	VOLINC_KEY_DATA		0

//ADC3
#define	AUDIO_KEY_DATA		14
#define	UP_KEY_DATA			0
#define	LEFT_KEY_DATA			7

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif _KEY_TYPE==_TYPE_KEY_BB
//ADC1
#define	MENU_KEY				53//
#define	LCDONOFF_KEY			34//03
#define	SOURCE_KEY				24//12//15//
#define  SDUSB_KEY_DATA		13
#define	DISPLAY_KEY_DATA			46
#define	AUDIO_KEY_DATA			0
//ADC2	
#define	ENTER_KEY_DATA		34//12//15//
#define	DOWN_KEY_DATA		53//24//
#define	RIGHT_KEY_DATA		46//00	
#define	STOP_KEY_DATA			6
#define	PLAYPAUSE_KEY_DATA	13		
#define	VOLDEC_KEY_DATA		23
#define	VOLINC_KEY_DATA		0
//ADC3
#define  TITLE_KEY_DATA			13
#define	LEFT_KEY_DATA			6//11//14//
#define	UP_KEY_DATA			0//27//
#define	SETUP_KEY_DATA		24

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif  _KEY_TYPE==_TYPE_KEY_INCARALL

#define   _AD0_KEY_DATA               0
#define    _AD1_KEY_DATA               7
#define    _AD2_KEY_DATA               14
#define    _AD3_KEY_DATA               24
#define    _AD4_KEY_DATA               35
#ifdef HUANA_AT090
#define    _AD5_KEY_DATA               44
#else
#define    _AD5_KEY_DATA               46
#endif
#define     _AD6_KEY_DATA                53
#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#elif _KEY_TYPE==_TYPE_KEY_XBW
//ADC1
#define	TITLE_KEY_DATA		0//
#define	AUTOSEARCH_KEY		39//03
#define	PLAYPAUSE_KEY_DATA	53//12//15//
#define  STOP_KEY_DATA			46
#define	DISPLAY_KEY_DATA		7
#define	AUDIO_KEY_DATA		34
#define	LEFT_KEY_DATA			24//11//14//
//ADC2	
#define	SOURCE_KEY				6//12//15//
#define	DOWN_KEY_DATA		24//24//
#define	SDUSB_KEY_DATA		14//00	
#define	REPEAT_KEY_DATA		35
#define	MUTE_KEY_DATA			46		
#define	LCDONOFF_KEY			24
#define	MENU_KEY				0
//ADC3
#define  ENTER_KEY_DATA		24
#define	RIGHT_KEY_DATA		14//11//14//
#define	UP_KEY_DATA			6//27//
#define	SETUP_KEY_DATA		0

#define _ADC_TOLERANCE			2
#define	NO_KEY					63
#endif
#endif

#endif

/*=====================  Extern Variables =================== */

//--------------------------------------------------
// Global Variables
//--------------------------------------------------
#ifdef _KEY_C
    #define EXTERN
#else
    #define EXTERN   extern
#endif

EXTERN BYTE idata ucKeyControl;


#undef EXTERN

/*======================= Extern Functions ================== */
UINT8 CKeyRead(void);
BYTE CKeyScan(void);		//add 20091028
void CKeyInitial(void);
void CKeyScanReadyTimerEvent(void);

#if(_KEY_SCAN_MODE==_ADCX_MODE)
//20080825 ccy modify
#if (_PCB_TYPE == _PCB_TEST)
BYTE CKeyADC1GetValue(void);
BYTE CKeyADC2GetValue(void);
BYTE CKeyADC3GetValue(void);
#else
BYTE CKeyScanGetValue(void);
#endif
#endif

#endif // #ifndef _KEY_H

/**
 *
 * @}
 */

