148 lines
5.3 KiB
C
148 lines
5.3 KiB
C
/*****************************************************************************
|
||
** Filename : keyboard_drive.h
|
||
** Project :
|
||
** Module :
|
||
** Processor :
|
||
** Date/Time :
|
||
** Abstract :
|
||
** Contents :
|
||
** Author : mingyea
|
||
** http :
|
||
** mail :
|
||
** --------------------------------------------------------------------------
|
||
**
|
||
** --------------------------------------------------------------------------
|
||
******************************************************************************/
|
||
|
||
#ifndef _KEY_DIGITAL_DRIVER_H_
|
||
#define _KEY_DIGITAL_DRIVER_H_
|
||
/*****************************************************************************
|
||
* Include Files
|
||
*****************************************************************************/
|
||
|
||
#include "common_types.h"
|
||
#include "common_cfg.h"
|
||
#include "key_digital_driver_cfg.h"
|
||
|
||
/*****************************************************************************
|
||
* Defines
|
||
*****************************************************************************/
|
||
//typedef u8 key_digital_key_state_t;
|
||
typedef u16 key_digital_key_tim_t;
|
||
|
||
typedef enum
|
||
{
|
||
KEY_DIGITAL_DRIVER_LOGIC_INIT =0u,
|
||
KEY_DIGITAL_DRIVER_LOGIC_VALID =1u,
|
||
}key_digital_driver_logic_level_e;
|
||
|
||
typedef enum
|
||
{
|
||
KEY_DIGITAL_DRIVER_DIFF_NULL =0u, //鍵盤無變化
|
||
KEY_DIGITAL_DRIVER_DIFF_SURE =1u, //鍵盤有變化
|
||
}key_digital_driver_diff_e;
|
||
|
||
typedef enum
|
||
{
|
||
KEY_DIGITAL_DRIVER_STATE_UP =0u, //默認是彈起
|
||
KEY_DIGITAL_DRIVER_STATE_SHORT_DOWN=1u , //短按
|
||
KEY_DIGITAL_DRIVER_STATE_LONG_DOWN=2u , //長按
|
||
KEY_DIGITAL_DRIVER_STATE_STICK =3u, //卡住
|
||
KEY_DIGITAL_DRIVER_STATE_ERRO =4u, //電汽錯誤
|
||
}key_digital_driver_state_e;
|
||
|
||
typedef enum
|
||
{
|
||
KEY_DIGITAL_DRIVER_SUBSTATE_INIT =0u, //初始
|
||
KEY_DIGITAL_DRIVER_SUBSTATE_UP=1u, //默認是彈起
|
||
KEY_DIGITAL_DRIVER_SUBSTATE_ERROR=2u , //異常状態
|
||
}key_digital_driver_substate_e;
|
||
|
||
|
||
#define KEY_DIGITAL_EVENT_RELEASE 1u
|
||
#define KEY_DIGITAL_EVENT_PRESSED 2u
|
||
#define KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE 4u
|
||
#define KEY_DIGITAL_EVENT_LONG_DOWN 8u
|
||
#define KEY_DIGITAL_EVENT_NULL 0u
|
||
|
||
typedef struct
|
||
{
|
||
u8 event;
|
||
#ifndef RAM_OPTIMIZE_EN
|
||
u8 phy_cur_level; //當前物理電平
|
||
u8 phy_pre_level; //上次物理電平
|
||
u8 logic_cur_level; //當前邏輯電平
|
||
u8 logic_pre_level; //上次邏輯電平
|
||
u8 change; //一般用於,state的收化。要結合state使用
|
||
u8 state_change; //一般用於,state的收化。要結合state使用
|
||
key_digital_driver_substate_e sub_state; //用於輔助的
|
||
key_digital_driver_state_e state; //狀態,一般指邏輯,且消抖後的。
|
||
key_digital_driver_state_e pre_state; //上一次
|
||
key_digital_key_tim_t timecount; //計時
|
||
#else
|
||
u8 phy_cur_level:1; //當前物理電平
|
||
u8 phy_pre_level:1; //上次物理電平
|
||
u8 logic_cur_level:1; //當前邏輯電平
|
||
u8 logic_pre_level:1; //上次邏輯電平
|
||
u8 change:1; //一般用於,state的收化。要結合state使用
|
||
u8 state_change:1; //一般用於,state的收化。要結合state使用
|
||
//u8 res:2; //湊成8bit
|
||
key_digital_driver_substate_e sub_state:2; //用於輔助的
|
||
key_digital_driver_state_e state:4; //狀態,一般指邏輯,且消抖後的。
|
||
key_digital_driver_state_e pre_state:4; //上一次
|
||
key_digital_key_tim_t timecount; //計時
|
||
#endif
|
||
}key_digital_driver_alone_s;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
key_digital_driver_alone_s digital_key[KEY_DIGITAL_DRIVER_KEY_TOTAL];
|
||
}key_digital_driver_s;
|
||
|
||
/*****************************************************************************
|
||
* Macros
|
||
*****************************************************************************/
|
||
|
||
/*****************************************************************************
|
||
* Type Defines
|
||
*****************************************************************************/
|
||
|
||
/*****************************************************************************
|
||
*Static Variable
|
||
*****************************************************************************/
|
||
|
||
/*****************************************************************************
|
||
*Global Variable
|
||
*****************************************************************************/
|
||
|
||
/*****************************************************************************
|
||
*Constant
|
||
*****************************************************************************/
|
||
|
||
/*****************************************************************************
|
||
*Function Prototype
|
||
*****************************************************************************/
|
||
void key_digital_driver_init(void);
|
||
void key_digital_driver_normal_task(void);
|
||
key_digital_driver_state_e key_digital_driver_get_state(u8 id);
|
||
u8 key_digital_driver_get_phy_level(u8 id);
|
||
u8 key_digital_driver_get_logic_level(u8 id);
|
||
u8 key_digital_driver_get_change(u8 id);
|
||
key_digital_key_tim_t key_digital_driver_get_timecount(u8 id);
|
||
u8 key_digital_driver_get_phy_pre_quick(u8 id);
|
||
void key_digital_driver_quick_scan(void);
|
||
key_digital_driver_diff_e key_digital_driver_judge_diff_wakeup(void);
|
||
key_digital_driver_diff_e key_digital_driver_judge_state_wakeup(void);
|
||
void key_digital_driver_goto_sleep(void);
|
||
u8 key_digital_driver_get_phy_pre_level(u8 id);
|
||
u8 key_digital_driver_get_state_change(u8 id);
|
||
void key_digital_driver_goto_wakeup(void);
|
||
|
||
key_digital_driver_state_e key_digital_driver_get_event(u8 id);
|
||
|
||
#endif /* end __KEY_H */
|
||
/*****************************************************************************
|
||
** End Of File
|
||
******************************************************************************/
|