luat_tp.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "luat_base.h"
  2. #include "luat_tp.h"
  3. #include "luat_mem.h"
  4. #include "luat_gpio.h"
  5. #define LUAT_LOG_TAG "tp"
  6. #include "luat_log.h"
  7. static luat_rtos_task_handle g_s_tp_task_handle = NULL;
  8. // uint16_t last_x = 0;
  9. // uint16_t last_y = 0;
  10. void luat_tp_task_entry(void* param){
  11. uint32_t message_id = 0;
  12. luat_tp_config_t *luat_tp_config = NULL;
  13. while (1){
  14. luat_rtos_message_recv(g_s_tp_task_handle, &message_id, &luat_tp_config, LUAT_WAIT_FOREVER);
  15. luat_tp_data_t* tp_data = luat_tp_config->tp_data;
  16. luat_tp_config->opts->read(luat_tp_config,tp_data);
  17. uint16_t coordinate_tmp;
  18. if (luat_tp_config->direction == LUAT_TP_ROTATE_90){
  19. coordinate_tmp = tp_data->x_coordinate;
  20. tp_data->x_coordinate = tp_data->y_coordinate;
  21. tp_data->y_coordinate = luat_tp_config->w - coordinate_tmp;
  22. }else if (luat_tp_config->direction == LUAT_TP_ROTATE_180){
  23. coordinate_tmp = tp_data->y_coordinate;
  24. tp_data->x_coordinate = luat_tp_config->w - tp_data->x_coordinate;
  25. tp_data->y_coordinate = luat_tp_config->h - coordinate_tmp;
  26. }else if (luat_tp_config->direction == LUAT_TP_ROTATE_270){
  27. coordinate_tmp = tp_data->x_coordinate;
  28. tp_data->x_coordinate = luat_tp_config->h - tp_data->y_coordinate;
  29. tp_data->y_coordinate = coordinate_tmp;
  30. }
  31. // // 抬起时,坐标为松开前的最后一次的坐标 !!!不应在此处修改,应在上方实现统一实现,故暂时注释!!!!
  32. // if (tp_data->event == TP_EVENT_TYPE_UP) {
  33. // tp_data->x_coordinate = last_x;
  34. // tp_data->y_coordinate = last_y;
  35. // } else {
  36. // last_x = tp_data->x_coordinate;
  37. // last_y = tp_data->y_coordinate;
  38. // }
  39. if (luat_tp_config->callback){
  40. luat_tp_config->callback(luat_tp_config,tp_data);
  41. }
  42. luat_tp_config->opts->read_done(luat_tp_config);
  43. }
  44. }
  45. int luat_tp_init(luat_tp_config_t* luat_tp_config){
  46. if (g_s_tp_task_handle == NULL){
  47. int ret = luat_rtos_task_create(&g_s_tp_task_handle, 4096, 10, "tp", luat_tp_task_entry, NULL, 32);
  48. if (ret){
  49. g_s_tp_task_handle = NULL;
  50. LLOGE("tp task create failed!");
  51. return -1;
  52. }
  53. }
  54. luat_tp_config->task_handle = g_s_tp_task_handle;
  55. if (luat_tp_config->opts->init){
  56. return luat_tp_config->opts->init(luat_tp_config);
  57. }else{
  58. LLOGE("tp init error, no init function found!");
  59. return -1;
  60. }
  61. }
  62. int luat_tp_irq_enable(luat_tp_config_t* luat_tp_config, uint8_t enabled){
  63. return luat_gpio_irq_enable(luat_tp_config->pin_int, enabled, luat_tp_config->int_type, luat_tp_config);
  64. }