key_driver.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #ifndef SYS_KEY_DRIVER_H
  2. #define SYS_KEY_DRIVER_H
  3. #include "typedef.h"
  4. typedef enum __KEY_DRIVER_TYPE {
  5. KEY_DRIVER_TYPE_IO = 0x0,
  6. KEY_DRIVER_TYPE_AD,
  7. KEY_DRIVER_TYPE_RTCVDD_AD,
  8. KEY_DRIVER_TYPE_IR,
  9. KEY_DRIVER_TYPE_TOUCH,
  10. KEY_DRIVER_TYPE_CTMU_TOUCH,
  11. KEY_DRIVER_TYPE_RDEC,
  12. KEY_DRIVER_TYPE_SLIDEKEY,
  13. KEY_DRIVER_TYPE_SOFTKEY,
  14. KEY_DRIVER_TYPE_BRIGHTNESS,
  15. KEY_DRIVER_TYPE_VOICE,
  16. KEY_DRIVER_TYPE_MAX,
  17. } KEY_DRIVER_TYPE;
  18. #define NO_KEY 0xff
  19. #define KEY_NOT_SUPPORT 0x01
  20. struct key_driver_para {
  21. const u32 scan_time; //按键扫描频率, 单位ms
  22. u8 last_key; //上一次get_value按键值
  23. //== 用于消抖类参数
  24. u8 filter_value; //用于按键消抖
  25. u8 filter_cnt; //用于按键消抖时的累加值
  26. const u8 filter_time; //当filter_cnt累加到base_cnt值时, 消抖有效
  27. //== 用于判定长按和HOLD事件参数
  28. const u8 long_time; //按键判定长按数量
  29. const u8 hold_time; //按键判定HOLD数量
  30. u8 press_cnt; //与long_time和hold_time对比, 判断long_event和hold_event
  31. //== 用于判定连击事件参数
  32. u8 click_cnt; //单击次数
  33. u8 click_delay_cnt; //按键被抬起后等待连击事件延时计数
  34. const u8 click_delay_time; ////按键被抬起后等待连击事件延时数量
  35. u8 notify_value; //在延时的待发送按键值
  36. u8 key_type;
  37. u8(*get_value)(void);
  38. };
  39. //组合按键映射按键值
  40. struct key_remap {
  41. u8 bit_value;
  42. u8 remap_value;
  43. };
  44. struct key_remap_data {
  45. u8 remap_num;
  46. const struct key_remap *table;
  47. };
  48. // key_driver API:
  49. extern int key_driver_init(void);
  50. #endif