key_drv.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. --[[
  2. @module key_drv
  3. @summary 按键驱动模块
  4. @version 1.0
  5. @date 2025.12.11
  6. @author 江访
  7. @usage
  8. 本文件为按键驱动功能模块,核心业务逻辑为:
  9. 1、初始化BOOT键和PWR键的GPIO;
  10. 2、配置按键事件的中断处理函数;
  11. 3、实现按键防抖功能,防止误触发;
  12. 4、对外发布按键消息;
  13. 本文件没有对外接口,直接在main.lua中require "key_drv"就可以加载运行;
  14. ]]
  15. -- 按键定义
  16. local key_boot = 0 -- GPIO0按键(BOOT键)
  17. local key_pwr = gpio.PWR_KEY -- 电源按键
  18. -- 按键事件处理函数
  19. local function handle_boot_key(val)
  20. -- print("key_boot", val)
  21. if val == 1 then
  22. sys.publish("KEY_EVENT", "boot_down")
  23. else
  24. sys.publish("KEY_EVENT", "boot_up")
  25. end
  26. end
  27. local function handle_pwr_key(val)
  28. -- print("key_pwr", val)
  29. if val == 1 then
  30. sys.publish("KEY_EVENT", "pwr_up")
  31. else
  32. sys.publish("KEY_EVENT", "pwr_down")
  33. end
  34. end
  35. --[[
  36. 初始化按键GPIO;
  37. 配置BOOT键和PWR键的GPIO中断;
  38. @api init()
  39. @summary 配置BOOT键和PWR键的GPIO中断
  40. @return bool 初始化只会返回true
  41. @usage
  42. ]]
  43. local function init()
  44. gpio.setup(key_boot, handle_boot_key, gpio.PULLDOWN, gpio.BOTH)
  45. gpio.debounce(key_boot, 50, 0) -- 防抖,防止频繁触发
  46. gpio.setup(key_pwr, handle_pwr_key, gpio.PULLUP, gpio.BOTH)
  47. gpio.debounce(key_pwr, 50, 0) -- 防抖,防止频繁触发
  48. log.info("key_drv", "按键初始化完成")
  49. end
  50. init()