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.
67 lines
1.8 KiB
67 lines
1.8 KiB
#include "key.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
static bool s_inited;
|
|
|
|
key_module_t *key_module_s;
|
|
|
|
void key_init(key_module_t *key_module) {
|
|
key_module_s = key_module;
|
|
s_inited = true; //标志位说明按键初始化完成
|
|
|
|
for (int i = 0; i < key_module_s->nkey; i++) {
|
|
key_module_s->keys[i].cur_state = zks_keep;
|
|
key_module_s->keys[i].last_io_state = key_module_s->keys[i].get_key_state();
|
|
key_module_s->keys[i].after_filter_state = key_module_s->keys[i].get_key_state();
|
|
}
|
|
}
|
|
|
|
void key_do_loop_in_each_period() {
|
|
//如果没初始化则不进行按键扫描
|
|
if (!s_inited) {
|
|
return;
|
|
}
|
|
|
|
//按键扫描
|
|
for (int i = 0; i < key_module_s->nkey; i++) {
|
|
// printf("key_name:%s\n", key_module_s->keys[i].name);
|
|
key_process_each(&key_module_s->keys[i]);
|
|
}
|
|
}
|
|
|
|
static void prv_zkey_process_each_after_filter(key_t *each, bool now_io_state) {
|
|
if (now_io_state != each->last_io_state) {
|
|
if (now_io_state) {
|
|
each->keep_state_count = 0;
|
|
each->hasProcessed = false;
|
|
each->cur_state = zks_rising_edge;
|
|
key_module_s->onkey(each, each->cur_state);
|
|
} else {
|
|
each->cur_state = zks_falling_edge;
|
|
key_module_s->onkey(each, each->cur_state);
|
|
each->keep_state_count = 0;
|
|
}
|
|
each->last_io_state = now_io_state;
|
|
} else {
|
|
each->cur_state = zks_keep;
|
|
if (now_io_state) {
|
|
key_module_s->onkey(each, each->cur_state);
|
|
}
|
|
}
|
|
}
|
|
|
|
void key_process_each(key_t *each) {
|
|
each->keep_state_count++;
|
|
|
|
bool now_io_state = each->get_key_state(); //获取现在的按键io状态 true未按下 false按下
|
|
|
|
// if (now_io_state != each->last_io_state) {
|
|
// each->keep_state_count = 0;
|
|
// }
|
|
|
|
each->after_filter_state = now_io_state;
|
|
each->last_real_state = now_io_state;
|
|
|
|
prv_zkey_process_each_after_filter(each, each->after_filter_state);
|
|
}
|