luat_touchkey_air101.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "luat_base.h"
  2. #include "luat_touchkey.h"
  3. #include "luat_msgbus.h"
  4. #include "wm_include.h"
  5. #include "wm_touchsensor.h"
  6. #include "wm_gpio_afsel.h"
  7. #include "wm_io.h"
  8. #include "wm_regs.h"
  9. static enum tls_io_name touchkeymap[] = {
  10. WM_IO_PA_00, // NOP
  11. WM_IO_PA_07, /*touch sensor 1*/
  12. WM_IO_PA_09, /*touch sensor 2*/
  13. WM_IO_PA_10, /*touch sensor 3*/
  14. WM_IO_PB_00, /*touch sensor 4*/
  15. WM_IO_PB_01, /*touch sensor 5*/
  16. WM_IO_PB_02, /*touch sensor 6*/
  17. WM_IO_PB_03, /*touch sensor 7*/
  18. WM_IO_PB_04, /*touch sensor 8*/
  19. WM_IO_PB_05, /*touch sensor 9*/
  20. WM_IO_PB_06, /*touch sensor 10*/
  21. WM_IO_PB_07, /*touch sensor 11*/
  22. WM_IO_PB_08, /*touch sensor 12*/
  23. WM_IO_PB_09, /*touch sensor 13*/
  24. WM_IO_PA_12, /*touch sensor 14*/
  25. WM_IO_PA_14, /*touch sensor 15*/
  26. };
  27. static void luat_touchkey_cb(uint32_t value) {
  28. rtos_msg_t msg;
  29. msg.handler = l_touchkey_handler;
  30. msg.ptr = NULL;
  31. for (uint8_t i = 0; i < 15; i++)
  32. {
  33. if (value&BIT(i))
  34. {
  35. msg.arg1 = i + 1;
  36. msg.arg2 = tls_touchsensor_countnum_get(i+1);
  37. luat_msgbus_put(&msg, 0);
  38. }
  39. }
  40. }
  41. int luat_touchkey_setup(luat_touchkey_conf_t *conf) {
  42. if (conf->id < 1 || conf->id > 15 )
  43. return -1;
  44. wm_touch_sensor_config(touchkeymap[(enum tls_io_name)conf->id]);
  45. tls_touchsensor_init_config(conf->id, conf->scan_period, conf->window, 1);
  46. tls_touchsensor_irq_enable(conf->id);
  47. tls_touchsensor_irq_register(luat_touchkey_cb);
  48. if (conf->threshold)
  49. tls_touchsensor_threshold_config(conf->id, conf->threshold);
  50. return 0;
  51. }
  52. int luat_touchkey_close(uint8_t id) {
  53. if (id < 1 || id > 15 )
  54. return -1;
  55. tls_touchsensor_irq_disable(id);
  56. tls_touchsensor_deinit(id);
  57. return 0;
  58. }