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.

84 lines
2.2 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
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
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
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
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
3 years ago
  1. /**
  2. * @file key.c
  3. * @author Finny (tianjialong0106@163.com)
  4. * @brief
  5. * @version 0.1
  6. * @date 2022-09-26
  7. *
  8. * @copyright Copyright (c) 2022
  9. *
  10. */
  11. #include "key.h"
  12. #include "port.h"
  13. #include "cover.h"
  14. #define key_long_press_time_ms 5000
  15. static T_key_structer_t *T_key_structer_s;
  16. static key_event_cb short_press_event_cb_s;
  17. static key_event_cb long_press_event_cb_s;
  18. void T_key_init(T_key_structer_t *T_key_structer)
  19. {
  20. T_key_structer_s = T_key_structer;
  21. }
  22. void T_key_registered_cb(key_event_cb short_press_event_cb, key_event_cb long_press_event_cb)
  23. {
  24. short_press_event_cb_s = short_press_event_cb;
  25. long_press_event_cb_s = long_press_event_cb;
  26. }
  27. void T_key_on_event(void)
  28. {
  29. }
  30. void T_key_schedule(void)
  31. {
  32. static uint32_t key_start_press_down_time = 0;
  33. T_key_structer_s->key_now_state = T_key_get_level();
  34. /* 检查是否盖上盖 */
  35. if (cover_get_level())
  36. {
  37. /* 上升沿 */
  38. if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == true))
  39. {
  40. if (T_key_structer_s->key_press_down_keep_time != 0)
  41. {
  42. T_key_structer_s->key_press_down_keep_time = 0;
  43. }
  44. key_start_press_down_time = port_get_ticket();
  45. }
  46. /* 下降沿 */
  47. if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == false))
  48. {
  49. T_key_structer_s->key_press_down_keep_time = port_get_ticket() - key_start_press_down_time;
  50. }
  51. /* 20ms消抖 */
  52. if ((T_key_structer_s->key_press_down_keep_time > 20) && (key_start_press_down_time != 0))
  53. {
  54. if (T_key_structer_s->key_press_down_keep_time < 500)
  55. {
  56. short_press_event_cb_s();
  57. }
  58. else if (T_key_structer_s->key_press_down_keep_time >= 3000)
  59. {
  60. long_press_event_cb_s();
  61. }
  62. key_start_press_down_time = 0;
  63. T_key_structer_s->key_press_down_keep_time = 0;
  64. }
  65. }
  66. else
  67. {
  68. }
  69. T_key_structer_s->key_before_state = T_key_structer_s->key_now_state;
  70. }
  71. bool T_key_get_level(void)
  72. {
  73. return false;
  74. }