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.

66 lines
1.8 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. #include "key.h"
  2. #include <stdio.h>
  3. static bool s_inited;
  4. key_module_t *key_module_s;
  5. void key_init(key_module_t *key_module) {
  6. key_module_s = key_module;
  7. s_inited = true; //标志位说明按键初始化完成
  8. for (int i = 0; i < key_module_s->nkey; i++) {
  9. key_module_s->keys[i].cur_state = zks_keep;
  10. key_module_s->keys[i].last_io_state = key_module_s->keys[i].get_key_state();
  11. key_module_s->keys[i].after_filter_state = key_module_s->keys[i].get_key_state();
  12. }
  13. }
  14. void key_do_loop_in_each_period() {
  15. //如果没初始化则不进行按键扫描
  16. if (!s_inited) {
  17. return;
  18. }
  19. //按键扫描
  20. for (int i = 0; i < key_module_s->nkey; i++) {
  21. // printf("key_name:%s\n", key_module_s->keys[i].name);
  22. key_process_each(&key_module_s->keys[i]);
  23. }
  24. }
  25. static void prv_zkey_process_each_after_filter(key_t *each, bool now_io_state) {
  26. if (now_io_state != each->last_io_state) {
  27. if (now_io_state) {
  28. each->keep_state_count = 0;
  29. each->hasProcessed = false;
  30. each->cur_state = zks_rising_edge;
  31. key_module_s->onkey(each, each->cur_state);
  32. } else {
  33. each->cur_state = zks_falling_edge;
  34. key_module_s->onkey(each, each->cur_state);
  35. each->keep_state_count = 0;
  36. }
  37. each->last_io_state = now_io_state;
  38. } else {
  39. each->cur_state = zks_keep;
  40. if (now_io_state) {
  41. key_module_s->onkey(each, each->cur_state);
  42. }
  43. }
  44. }
  45. void key_process_each(key_t *each) {
  46. each->keep_state_count++;
  47. bool now_io_state = each->get_key_state(); //获取现在的按键io状态 true未按下 false按下
  48. // if (now_io_state != each->last_io_state) {
  49. // each->keep_state_count = 0;
  50. // }
  51. each->after_filter_state = now_io_state;
  52. each->last_real_state = now_io_state;
  53. prv_zkey_process_each_after_filter(each, each->after_filter_state);
  54. }