Files
banban/ql-kernel/threadx/common/include/quec_keypad.h

299 lines
10 KiB
C

#ifndef _QUEC_KEYPAD_H_
#define _QUEC_KEYPAD_H_
#ifdef __cplusplus
extern "C" {
#endif
#define COL_TOTAL 7
#define ROW_TOTAL 7
#define MANUAL 0
#define AUTO 1
#define SINGLE_KEY 0
#define MULTI_KEY 1
#define KEYPAD_ROW_NUM (0x8) /* */
#define KEYPAD_COL_NUM (0x8) /* */
#define KEYPAD_COL_ROW_NUM (KEYPAD_ROW_NUM > KEYPAD_COL_NUM?KEYPAD_ROW_NUM:KEYPAD_COL_NUM)
#define KEYPAD_COL_NUM_MAX (0x8)
typedef struct s_KDCreg {
unsigned int kpc_pc;
unsigned int reserved0;
unsigned int kpc_dk;
unsigned int reserved1;
unsigned int kpc_rec;
unsigned int reserved2;
unsigned int kpc_mk;
unsigned int reserved3;
unsigned int kpc_as;
unsigned int reserved4;
unsigned int kpc_asmkp0;
unsigned int reserved5;
unsigned int kpc_asmkp1;
unsigned int reserved6;
unsigned int kpc_asmkp2;
unsigned int reserved7;
unsigned int kpc_asmkp3;
unsigned int reserved8;
unsigned int kpc_kdi;//0x48
unsigned int reserved9;// 0x4C
unsigned int reserved10; //0x50
unsigned int reserved11; // 0x54
unsigned int d2_kp_num; // 0x58
unsigned int reserved12; // 0x5C
unsigned int d2_mukp01;//0x60
unsigned int reserved13;
unsigned int d2_mukp23;//0x68
} KDCReg;
typedef enum{
DIRECT_KEY = 1,
MATRIX_KEY,
ROTARY_0,
ROTARY_1
}Keypad_Type;
typedef struct _UI_EVENT {
unsigned int nEventId;
unsigned int nParam1;
unsigned int nParam2;
unsigned int nParam3;
} UI_EVENT;
typedef unsigned char (*ValEventFunc)(UI_EVENT);
/*
*
* THE BIT DEFINES
*
*/
#define BIT_0 (1 << 0)
#define BIT_1 (1 << 1)
#define BIT_2 (1 << 2)
#define BIT_3 (1 << 3)
#define BIT_4 (1 << 4)
#define BIT_5 (1 << 5)
#define BIT_6 (1 << 6)
#define BIT_7 (1 << 7)
#define BIT_8 (1 << 8)
#define BIT_9 (1 << 9)
#define BIT_10 (1 << 10)
#define BIT_11 (1 << 11)
#define BIT_12 (1 << 12)
#define BIT_13 (1 << 13)
#define BIT_14 (1 << 14)
#define BIT_15 (1 << 15)
#define BIT_16 (1 << 16)
#define BIT_17 (1 << 17)
#define BIT_18 (1 << 18)
#define BIT_19 (1 << 19)
#define BIT_20 (1 << 20)
#define BIT_21 (1 << 21)
#define BIT_22 (1 << 22)
#define BIT_23 (1 << 23)
#define BIT_24 (1 << 24)
#define BIT_25 (1 << 25)
#define BIT_26 (1 << 26)
#define BIT_27 (1 << 27)
#define BIT_28 (1 << 28)
#define BIT_29 (1 << 29)
#define BIT_30 (1 << 30)
#define BIT_31 ((unsigned)1 << 31)
#define MASK_(__n,__w) (((1U<<(__w))-1)<<(__n))
#define KPC_BASE 0xD4012000
/*
*
* THE REGISTER DEFINES
*
*/
#define KPC_PC (KPC_BASE+0x0000) /* 32 bit KPC Keypad Control Register */
#define KPC_DK (KPC_BASE+0x0008) /* 32 bit KPC Keypad Direct Key Register */
#define KPC_REC (KPC_BASE+0x0010) /* 32 bit KPC Keypad Rotary Encoder Count Register */
#define KPC_MK (KPC_BASE+0x0018) /* 32 bit KPC Keypad Matrix Key Register */
#define KPC_AS (KPC_BASE+0x0020) /* 32 bit KPC Keypad Automatic Scan Register */
#define KPC_ASMKP0 (KPC_BASE+0x0028) /* 32 bit KPC Keypad Automatic Scan Multiple Keypress
* Register 0
*/
#define KPC_ASMKP1 (KPC_BASE+0x0030) /* 32 bit KPC Keypad Automatic Scan Multiple Keypress
* Register 1
*/
#define KPC_ASMKP2 (KPC_BASE+0x0038) /* 32 bit KPC Keypad Automatic Scan Multiple Keypress
* Register 2
*/
#define KPC_ASMKP3 (KPC_BASE+0x0040) /* 32 bit KPC Keypad Automatic Scan Multiple Keypress
* Register 3
*/
#define KPC_KDI (KPC_BASE+0x0048) /* 32 bit KPC Keypad Key Debounce Interval Register */
extern volatile unsigned int matrixKeypressReg[4];
/*
*
* THE BIT DEFINES
*
*/
/* KPC_PC 0x0000 KPC Keypad Control Register */
#define KPC_PC_AS BIT_30 /* Automatic Scan */
#define KPC_PC_ASACT BIT_29 /* Automatic Scan on Activity */
#define KPC_PC_MKRN_MSK MASK_(26,3) /* Matrix Keypad Row Number */
#define KPC_PC_MKRN_BASE 26
#define KPC_PC_MKCN_MSK MASK_(23,3) /* Keypad Column Number */
#define KPC_PC_MKCN_BASE 23
#define KPC_PC_MI BIT_22 /* Matrix Keypad Interrupt */
#define KPC_PC_IMKP BIT_21 /* Ignore Multiple Keypress */
#define KPC_PC_MS7 BIT_20 /* Manual Matrix Scan line 7 */
#define KPC_PC_MS6 BIT_19 /* Manual Matrix Scan line 6 */
#define KPC_PC_MS5 BIT_18 /* Manual Matrix Scan line 5 */
#define KPC_PC_MS4 BIT_17 /* Manual Matrix Scan line 4 */
#define KPC_PC_MS3 BIT_16 /* Manual Matrix Scan line 3 */
#define KPC_PC_MS2 BIT_15 /* Manual Matrix Scan line 2 */
#define KPC_PC_MS1 BIT_14 /* Manual Matrix Scan line 1 */
#define KPC_PC_MS0 BIT_13 /* Manual Matrix Scan line 0 */
#define KPC_PC_ME BIT_12 /* Matrix Keypad Enable */
#define KPC_PC_MIE BIT_11 /* Matrix Interrupt Enable */
#define KPC_PC_DK_DEB_SEL BIT_9 /* Direct Keypad Debounce Select */
#define KPC_PC_DN_MSK MASK_(6,3) /* Direct Key Number */
#define KPC_PC_DN_BASE 6
#define KPC_PC_DI BIT_5 /* Direct Keypad Interrupt */
#define KPC_PC_RE_ZERO_DEB BIT_4 /* Rotary Encoder Zero Debounce Interval */
#define KPC_PC_REE1 BIT_3 /* Rotary Encoder 1 Enable */
#define KPC_PC_REE0 BIT_2 /* Rotary Encoder 0 Enable */
#define KPC_PC_DE BIT_1 /* Direct Keypad Enable */
#define KPC_PC_DIE BIT_0 /* Direct Keypad Interrupt Enable */
/* KPC_DK 0x0008 KPC Keypad Direct Key Register */
#define KPC_DK_DKP BIT_31 /* Direct Key Pressed */
#define KPC_DK_DK7 BIT_7 /* Direct Key 7 input */
#define KPC_DK_DK6 BIT_6 /* Direct Key 6 input */
#define KPC_DK_DK5 BIT_5 /* Direct Key 5 input */
#define KPC_DK_DK4 BIT_4 /* Direct Key 4 input */
#define KPC_DK_RB1_DK3 BIT_3 /* Rotary Encoder B / Direct Key 3 input */
#define KPC_DK_RA1_DK2 BIT_2 /* Rotary Encoder A / Direct Key 2 input */
#define KPC_DK_RB0_DK1 BIT_1 /* Rotary Encoder B / Direct Key 1 input */
#define KPC_DK_RA0_DK0 BIT_0 /* Rotary Encoder A / Direct Key 0 input */
/* KPC_REC 0x0010 KPC Keypad Rotary Encoder Count Register */
#define KPC_REC_OF1 BIT_31 /* Overflow bit for rotary encoder 1 */
#define KPC_REC_UF1 BIT_30 /* Underflow bit for rotary encoder 1 */
#define KPC_REC_RE_COUNT1_MSK MASK_(16,8) /* Count value for rotary encoder 1 */
#define KPC_REC_RE_COUNT1_BASE 16
#define KPC_REC_OF0 BIT_15 /* Overflow bit for rotary encoder 0 */
#define KPC_REC_UF0 BIT_14 /* Underflow bit for rotary encoder 0 */
#define KPC_REC_RE_COUNT0_MSK MASK_(0,8) /* Count value for rotary encoder 0 */
#define KPC_REC_RE_COUNT0_BASE 0
/* KPC_MK 0x0018 KPC Keypad Matrix Key Register */
#define KPC_MK_MKP BIT_31 /* MKP */
#define KPC_MK_MR7 BIT_7 /* Matrix Row 7 */
#define KPC_MK_MR6 BIT_6 /* Matrix Row 6 */
#define KPC_MK_MR5 BIT_5 /* Matrix Row 5 */
#define KPC_MK_MR4 BIT_4 /* Matrix Row 4 */
#define KPC_MK_MR3 BIT_3 /* Matrix Row 3 */
#define KPC_MK_MR2 BIT_2 /* Matrix Row 2 */
#define KPC_MK_MR1 BIT_1 /* Matrix Row 1 */
#define KPC_MK_MR0 BIT_0 /* Matrix Row 0 */
/* KPC_AS 0x0020 KPC Keypad Automatic Scan Register */
#define KPC_AS_SO BIT_31 /* Scan On */
#define KPC_AS_MUKP_MSK MASK_(26,5) /* Multiple Keys Pressed */
#define KPC_AS_MUKP_BASE 26
#define KPC_AS_RP_MSK MASK_(4,4) /* Row Pressed */
#define KPC_AS_RP_BASE 4
#define KPC_AS_CP_MSK MASK_(0,4) /* Column Pressed */
#define KPC_AS_CP_BASE 0
/* KPC_ASMKP0 0x0028 KPC Keypad Automatic Scan Multiple Keypress Register 0 */
#define KPC_ASMKP0_SO BIT_31 /* Scan On */
#define KPC_ASMKP0_MKC1_MSK MASK_(16,8) /* Matrix Keypad Column 1 reading */
#define KPC_ASMKP0_MKC1_BASE 16
#define KPC_ASMKP0_MKC0_MSK MASK_(0,8) /* Matrix Keypad Column 0 reading */
#define KPC_ASMKP0_MKC0_BASE 0
/* KPC_ASMKP1 0x0030 KPC Keypad Automatic Scan Multiple Keypress Register 1 */
#define KPC_ASMKP1_SO BIT_31 /* Scan On */
#define KPC_ASMKP1_MKC3_MSK MASK_(16,8) /* Matrix Keypad Column 3 Reading */
#define KPC_ASMKP1_MKC3_BASE 16
#define KPC_ASMKP1_MKC2_MSK MASK_(0,8) /* Matrix Keypad Column 2 Reading */
#define KPC_ASMKP1_MKC2_BASE 0
/* KPC_ASMKP2 0x0038 KPC Keypad Automatic Scan Multiple Keypress Register 2 */
#define KPC_ASMKP2_SO BIT_31 /* Scan On */
#define KPC_ASMKP2_MKC5_MSK MASK_(16,8) /* Matrix Keypad Column 5 reading */
#define KPC_ASMKP2_MKC5_BASE 16
#define KPC_ASMKP2_MKC4_MSK MASK_(0,8) /* Matrix Keypad Column 4 reading */
#define KPC_ASMKP2_MKC4_BASE 0
/* KPC_ASMKP3 0x0040 KPC Keypad Automatic Scan Multiple Keypress Register 3 */
#define KPC_ASMKP3_SO BIT_31 /* Scan On */
#define KPC_ASMKP3_MKC7_MSK MASK_(16,8) /* Matrix Keypad Column 7 reading */
#define KPC_ASMKP3_MKC7_BASE 16
#define KPC_ASMKP3_MKC6_MSK MASK_(0,8) /* Matrix Keypad Column 6 reading */
#define KPC_ASMKP3_MKC6_BASE 0
#define GET_COLUMN_IDENTIFIES(_value,_X) (_value>>(_X%2?16:0))&0xFF
/* KPC_KDI 0x0048 KPC Keypad Key Debounce Interval Register */
#define KPC_KDI_DIRECT_KEY_DEBOUNCE_INTERVAL_MSK MASK_(8,8) /* Direct Key Debounce Interval */
#define KPC_KDI_DIRECT_KEY_DEBOUNCE_INTERVAL_BASE 8
#define KPC_KDI_MATRIX_KEY_DEBOUNCE_INTERVAL_MSK MASK_(0,8) /* Matrix Key Debounce Interval */
#define KPC_KDI_MATRIX_KEY_DEBOUNCE_INTERVAL_BASE 0
#define KEYPAD_MATRIX_LENGTH 8
typedef enum keypad_kp_mkin{
KP_MKI0 = 0,
KP_MKI1,
KP_MKI2,
KP_MKI3,
KP_MKI4,
KP_MKI5,
KP_MKI6,
KP_MKI7,
KP_MKI_NO_VALID
}KEYPAD_KP_MKIN_E;;
typedef enum keypad_kp_mkout{
KP_MKO0 = 0,
KP_MKO1,
KP_MKO2,
KP_MKO3,
KP_MKO4,
KP_MKO5,
KP_MKO6,
KP_MKO7,
KP_MKO_NO_VALID
}KEYPAD_KP_MKOUT_E;
void ValKeypadRegister(ValEventFunc EventFuncP);
void ValKeypadMultikeyEn(unsigned char En);
void quec_KeypadPinmuxCfg(KEYPAD_KP_MKOUT_E row[KEYPAD_MATRIX_LENGTH],KEYPAD_KP_MKIN_E col[KEYPAD_MATRIX_LENGTH]);
int ValKeypadInit(unsigned char MultiKey, unsigned char KeyHoldDuration, KEYPAD_KP_MKOUT_E row[KEYPAD_MATRIX_LENGTH],KEYPAD_KP_MKIN_E col[KEYPAD_MATRIX_LENGTH]);
#ifdef __cplusplus
}
#endif
#endif