LL01/code_app_out/Source/module/keyboard/key_digital_driver.h
2025-04-26 16:03:23 +08:00

148 lines
5.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
** 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
******************************************************************************/