event_async.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <rtthread.h>
  2. #include <rtdevice.h>
  3. #include "multi_button.h"
  4. static struct button btn;
  5. #define BUTTON_PIN (10)
  6. static uint8_t button_read_pin(void)
  7. {
  8. return rt_pin_read(BUTTON_PIN);
  9. }
  10. void button_callback(void *btn)
  11. {
  12. uint32_t btn_event_val;
  13. btn_event_val = get_button_event((struct button *)btn);
  14. switch(btn_event_val)
  15. {
  16. case PRESS_DOWN:
  17. rt_kprintf("button press down\n");
  18. break;
  19. case PRESS_UP:
  20. rt_kprintf("button press up\n");
  21. break;
  22. case PRESS_REPEAT:
  23. rt_kprintf("button press repeat\n");
  24. break;
  25. case SINGLE_CLICK:
  26. rt_kprintf("button single click\n");
  27. break;
  28. case DOUBLE_CLICK:
  29. rt_kprintf("button double click\n");
  30. break;
  31. case LONG_RRESS_START:
  32. rt_kprintf("button long press start\n");
  33. break;
  34. case LONG_PRESS_HOLD:
  35. rt_kprintf("button long press hold\n");
  36. break;
  37. }
  38. }
  39. void btn_thread_entry(void* p)
  40. {
  41. while(1)
  42. {
  43. /* 5ms */
  44. rt_thread_delay(RT_TICK_PER_SECOND/200);
  45. button_ticks();
  46. }
  47. }
  48. int multi_button_test(void)
  49. {
  50. rt_thread_t thread = RT_NULL;
  51. /* Create background ticks thread */
  52. thread = rt_thread_create("btn", btn_thread_entry, RT_NULL, 1024, 10, 10);
  53. if(thread == RT_NULL)
  54. {
  55. return RT_ERROR;
  56. }
  57. rt_thread_startup(thread);
  58. /* low level drive */
  59. rt_pin_mode (BUTTON_PIN, PIN_MODE_INPUT);
  60. button_init (&btn, button_read_pin, PIN_LOW);
  61. button_attach(&btn, PRESS_DOWN, button_callback);
  62. button_attach(&btn, PRESS_UP, button_callback);
  63. button_attach(&btn, PRESS_REPEAT, button_callback);
  64. button_attach(&btn, SINGLE_CLICK, button_callback);
  65. button_attach(&btn, DOUBLE_CLICK, button_callback);
  66. button_attach(&btn, LONG_RRESS_START, button_callback);
  67. button_attach(&btn, LONG_PRESS_HOLD, button_callback);
  68. button_start (&btn);
  69. return RT_EOK;
  70. }
  71. INIT_APP_EXPORT(multi_button_test);