You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

85 lines
2.2 KiB

/**
* @file key.c
* @author Finny (tianjialong0106@163.com)
* @brief
* @version 0.1
* @date 2022-09-26
*
* @copyright Copyright (c) 2022
*
*/
#include "key.h"
#include "port.h"
#include "cover.h"
#define key_long_press_time_ms 5000
static T_key_structer_t *T_key_structer_s;
static key_event_cb short_press_event_cb_s;
static key_event_cb long_press_event_cb_s;
void T_key_init(T_key_structer_t *T_key_structer)
{
T_key_structer_s = T_key_structer;
}
void T_key_registered_cb(key_event_cb short_press_event_cb, key_event_cb long_press_event_cb)
{
short_press_event_cb_s = short_press_event_cb;
long_press_event_cb_s = long_press_event_cb;
}
void T_key_on_event(void)
{
}
void T_key_schedule(void)
{
static uint32_t key_start_press_down_time = 0;
T_key_structer_s->key_now_state = T_key_get_level();
/* 检查是否盖上盖 */
if (cover_get_level())
{
/* 上升沿 */
if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == true))
{
if (T_key_structer_s->key_press_down_keep_time != 0)
{
T_key_structer_s->key_press_down_keep_time = 0;
}
key_start_press_down_time = port_get_ticket();
}
/* 下降沿 */
if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == false))
{
T_key_structer_s->key_press_down_keep_time = port_get_ticket() - key_start_press_down_time;
}
/* 20ms消抖 */
if ((T_key_structer_s->key_press_down_keep_time > 20) && (key_start_press_down_time != 0))
{
if (T_key_structer_s->key_press_down_keep_time < 500)
{
short_press_event_cb_s();
}
else if (T_key_structer_s->key_press_down_keep_time >= 3000)
{
long_press_event_cb_s();
}
key_start_press_down_time = 0;
T_key_structer_s->key_press_down_keep_time = 0;
}
}
else
{
}
T_key_structer_s->key_before_state = T_key_structer_s->key_now_state;
}
bool T_key_get_level(void)
{
return false;
}