touch_key.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "touch_key.h"
  2. #include "key_driver.h"
  3. #include "app_config.h"
  4. #if TCFG_TOUCH_KEY_ENABLE
  5. /* =========== 触摸键使用说明 ============= */
  6. //1. 使用plcnt模块作计数;
  7. //2. 配置参数时, 在配置好时钟后, 需要调试no_touch_cnt和touch_cnt的值;
  8. static const struct touch_key_platform_data *__this = NULL;
  9. //按键驱动扫描参数列表
  10. struct key_driver_para touch_key_scan_para = {
  11. .scan_time = 10, //按键扫描频率, 单位: ms
  12. .last_key = NO_KEY, //上一次get_value按键值, 初始化为NO_KEY;
  13. .filter_time = 1, //按键消抖延时;
  14. .long_time = 75, //按键判定长按数量
  15. .hold_time = (75 + 15), //按键判定HOLD数量
  16. .click_delay_time = 20, //按键被抬起后等待连击延时数量
  17. .key_type = KEY_DRIVER_TYPE_TOUCH,
  18. .get_value = touch_key_get_value,
  19. };
  20. #define TOUCH_KEY_DEBUG 0
  21. #if TOUCH_KEY_DEBUG
  22. #define touch_key_debug(fmt, ...) printf("[TOUCH] "fmt, ##__VA_ARGS__)
  23. #else
  24. #define touch_key_debug(fmt, ...)
  25. #endif
  26. u8 touch_key_get_value(void)
  27. {
  28. u8 key = get_plcnt_value();
  29. if (key != NO_KEY) {
  30. touch_key_debug("key = %d", key);
  31. return __this->port_list[key].key_value;
  32. }
  33. return NO_KEY;
  34. }
  35. int touch_key_init(const struct touch_key_platform_data *touch_key_data)
  36. {
  37. __this = touch_key_data;
  38. printf("touch_key_init >>>> ");
  39. return plcnt_init((void *)touch_key_data);
  40. }
  41. #endif /* #if TCFG_TOUCH_KEY_ENABLE */