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.

60 lines
1.5 KiB

3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
4 years ago
3 years ago
  1. #ifndef _KEY_H_
  2. #define _KEY_H_
  3. #include "port.h"
  4. #include "pwm.h"
  5. #define POWER_KEY_TRIGGER_TIME 3000
  6. #define KEY_SCAN_PERIOD 20 //扫描周期20ms
  7. #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
  8. #define ZKEY_INIT(_name, _get_key_state) \
  9. { .name = _name, .get_key_state = _get_key_state }
  10. #define ZMODULE_INIT(_keys, _onkey) /**/ \
  11. { /**/ \
  12. .keys = _keys, /**/ \
  13. .nkey = ARRAY_SIZE(_keys), /**/ \
  14. .onkey = _onkey /**/ \
  15. }
  16. typedef bool (*get_key_state_t)(void);
  17. typedef enum {
  18. // mode1
  19. zks_keep,
  20. zks_rising_edge, //上升沿按键按下从0-1
  21. zks_falling_edge, //下降沿按键抬起1-0
  22. // mode2
  23. zks_trigger_event, //触发
  24. zks_longtime_trigger_event, //长时间触发
  25. } zkey_state_t;
  26. /**
  27. * @brief zkey
  28. */
  29. typedef struct {
  30. const char *name;
  31. get_key_state_t get_key_state;
  32. bool last_io_state;
  33. zkey_state_t cur_state; //当前的状态
  34. uint32_t keep_state_count; /*按键当前状态保持了多久*/
  35. bool hasProcessed; /*useful for user*/
  36. bool after_filter_state;
  37. uint32_t currentstatekeep_count; //消抖使用
  38. bool last_real_state; //消抖使用
  39. } zkey_t;
  40. /**
  41. * @brief zkey_module
  42. */
  43. typedef struct {
  44. zkey_t *keys;
  45. int nkey;
  46. void (*onkey)(zkey_t *key, zkey_state_t key_state);
  47. } zkey_module_t;
  48. void zkey_init(zkey_module_t *module);
  49. void zkey_do_loop_in_each_period(void *_null);
  50. #endif