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.
|
|
/**
* @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; }
|