123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /**
- * @file kscan.h
- * @author chipsea
- * @brief
- * @version 0.1
- * @date 2020-11-30
- * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd.
- * @note
- */
- /*******************************************************************************
- * @file kscan.h
- * @brief Contains all functions support for key scan driver
- * @version 0.0
- * @date 13. Nov. 2017
- * @author Ding
- *
- *
- *******************************************************************************/
- #ifndef __KSCAN__H__
- #define __KSCAN__H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "types.h"
- #include "gpio.h"
- #define MULTI_KEY_NUM 6
- #define MULTI_KEY_READ_ADDR (&(AP_KSCAN->mkc[0]))//0x400240CCUL
- //#define MULTI_KEY_READ_ADDR 0x4000d0CCUL//0x400240CCUL
-
- const static uint8_t KSCAN_ROW_GPIO[11] =
- {
- P0,
- P2,
- P15,
- P25,
- P10,
- P18,
- P23,
- P32,
- P34,
- P27,
- P7,
- };
- const static uint8_t KSCAN_COL_GPIO[12] =
- {
- P1,
- P3,
- P14,
- P24,
- P9,
- P20,
- P33,
- P31,
- P26,
- P17,
- P16,
- P11,
- };
- #define NUM_KEY_ROWS 4
- #define NUM_KEY_COLS 4
- #define MAX_KEY_NUM 10
- #define MAX_KEY_ROWS (sizeof(KSCAN_ROW_GPIO)/sizeof(uint8_t))
- #define MAX_KEY_COLS (sizeof(KSCAN_COL_GPIO)/sizeof(uint8_t))
- #define KSCAN_ALL_ROW_NUM 11
- #define KSCAN_ALL_COL_NUM 12
- /*************************************************************
- * @brief enum variable used for setting rows
- *
- */
- typedef enum
- {
- KEY_ROW_P00 = 0,
- KEY_ROW_P02 = 1,
- KEY_ROW_P15 = 2,
- KEY_ROW_P25 = 3,
- KEY_ROW_P10 = 4,
- KEY_ROW_P18 = 5,
- KEY_ROW_P23 = 6,
- KEY_ROW_P32 = 7,
- KEY_ROW_P34 = 8,
- KEY_ROW_P27 = 9,
- KEY_ROW_P07 = 10,
- }KSCAN_ROWS_e;
- /*************************************************************
- * @brief enum variable used for setting cols
- *
- */
- typedef enum
- {
- KEY_COL_P01 = 0,
- KEY_COL_P03 = 1,
- KEY_COL_P14 = 2,
- KEY_COL_P24 = 3,
- KEY_COL_P09 = 4,
- KEY_COL_P20 = 5,
- KEY_COL_P33 = 6,
- KEY_COL_P31 = 7,
- KEY_COL_P26 = 8,
- // KEY_COL_P17 = 9,
- // KEY_COL_P16 = 10,
- KEY_COL_P11 = 11,
-
- }KSCAN_COLS_e;
- /*************************************************************
- * @brief enum variable used for setting multiple key press
- *
- */
- typedef enum{
-
- NOT_IGNORE_MULTI_KEY = 0,
- IGNORE_MULTI_KEY = 1
-
- }KSCAN_MULTI_KEY_STATE_e;
- /*************************************************************
- * @brief enum variable used for setting whether ignore ghost key
- *
- */
- typedef enum{
-
- NOT_IGNORE_GHOST_KEY = 0,
- IGNORE_GHOST_KEY = 1
-
- }KSCAN_GHOST_KEY_STATE_e;
- /*************************************************************
- * @brief enum variable used for setting key press sense type
- *
- */
- typedef enum{
-
- SENCE_HIGH = 0,
- SENCE_LOW = 1
-
- }KSCAN_POLARITY_e;
- /*************************************************************
- * @brief enum variable used for setting key press sense type
- *
- */
- typedef enum{
-
- NO_KEY_PRESS = 0x00,
- ONE_KEY_PRESS = 0x01,
- MULTI_KEY_PRESS = 0x02
-
- }KSCAN_KEY_PRESS_STATE_e;
- typedef enum{
- KEY_RELEASED = 0,
- KEY_PRESSED,
- } kscan_Evt_Type_t;
- typedef struct {
- uint8_t row;
- uint8_t col;
- kscan_Evt_Type_t type;
- } kscan_Key_t;
- typedef struct kscan_Evt_t_{
- uint8_t num;
- kscan_Key_t* keys;
- } kscan_Evt_t;
- typedef void (*kscan_Hdl_t)(kscan_Evt_t* pev);
- typedef struct {
- KSCAN_GHOST_KEY_STATE_e ghost_key_state;
- KSCAN_ROWS_e* key_rows;
- KSCAN_COLS_e* key_cols;
- kscan_Hdl_t evt_handler;
- uint8_t interval;
- } kscan_Cfg_t;
- //PUBLIC FUNCTIONS
- int hal_kscan_init(kscan_Cfg_t cfg, uint8 task_id, uint16 event);
- void hal_kscan_timeout_handler(void);
- void __attribute__((weak)) hal_KSCAN_IRQHandler(void);
- #ifdef __cplusplus
- }
- #endif
- #endif
|