From c8c7425dbfaca3b726d9f2f17d9f1178ec8f01d4 Mon Sep 17 00:00:00 2001 From: zwsd Date: Wed, 24 Aug 2022 11:56:20 +0800 Subject: [PATCH] update --- APP/key.c | 37 ++++++++++++++++++++++++------------- APP/main.c | 28 +++++++++++++++++++--------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/APP/key.c b/APP/key.c index f7aa29d..28fc20c 100644 --- a/APP/key.c +++ b/APP/key.c @@ -1,23 +1,34 @@ #include "key.h" + #include +static bool s_inited; + key_module_t *key_module_s; -void key_init(key_module_t *key_module) -{ - key_module_s = key_module; +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() -{ - 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]); - } +void key_do_loop_in_each_period() { + 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]); + } } -void key_process_each(key_t *each) -{ - key_module_s->onkey(each,1); +void key_process_each(key_t *each) { + each->keep_state_count++; + + bool now_io_state = each->get_key_state(); //获取现在的按键io状态 + if (!now_io_state) { + key_module_s->onkey(each, zks_rising_edge); + } } \ No newline at end of file diff --git a/APP/main.c b/APP/main.c index d6a4b0c..8d75589 100644 --- a/APP/main.c +++ b/APP/main.c @@ -9,16 +9,10 @@ static key_t s_keys[] = { s_key_init("powerkey", port_gpio_get_power_key_state), s_key_init("levelkey", port_gpio_get_level_key_state), + s_key_init("timerkey", port_gpio_get_timer_key_state), + s_key_init("intervalkey", port_gpio_get_interval_key_state), }; -static void onkey(key_t *key, key_state_t key_state) { - if (strcmp(key->name, "powerkey") && key_state == zks_rising_edge) { - // printf("powerkey\n"); - } else if (strcmp(key->name, "levelkey") && key_state == zks_rising_edge) { - // printf("levelkey\n"); - } -} - static void mf_init_all_subdevice_state() { port_debug_set(false); port_fan_set(false); @@ -31,6 +25,22 @@ static void mf_init_all_subdevice_state() { port_led_b_set(false); } +static void onkey(key_t *key, key_state_t key_state) { + if /* */ (strcmp(key->name, "powerkey") == 0 && zks_rising_edge == key_state) { + printf("powerkey\n"); + // mf_process_poweron_key(key); + } else if (strcmp(key->name, "levelkey") == 0 && zks_rising_edge == key_state) { + printf("levelkey\n"); + // mf_process_level_key(key); + } else if (strcmp(key->name, "timerkey") == 0 && zks_rising_edge == key_state) { + printf("timerkey\n"); + // mf_process_timer_key(key); + } else if (strcmp(key->name, "intervalkey") == 0 && zks_rising_edge == key_state) { + printf("intervalkey\n"); + // mf_process_interval_key(key); + } +} + key_module_t key_module = key_module_init(s_keys, onkey); void hardware_init() { @@ -55,7 +65,7 @@ int main() { while (true) { // scan key - DO_IT_EACH_MS(1000) { key_do_loop_in_each_period(); }; + DO_IT_EACH_MS(20) { key_do_loop_in_each_period(); }; END(); // debug light