فهرست منبع

update:tp适配jd9261t做调整

alienwalker 1 سال پیش
والد
کامیت
7ed4e9dcda
5فایلهای تغییر یافته به همراه45 افزوده شده و 42 حذف شده
  1. 3 3
      components/tp/luat_lib_tp.c
  2. 9 7
      components/tp/luat_tp.c
  3. 7 28
      components/tp/luat_tp.h
  4. 25 3
      components/tp/luat_tp_gt911.c
  5. 1 1
      luat/include/luat_gpio.h

+ 3 - 3
components/tp/luat_lib_tp.c

@@ -67,7 +67,7 @@ static int l_tp_handler(lua_State* L, void* ptr) {
             lua_call(L, 2, 0);
         }
     }
-    luat_gpio_irq_enable(luat_tp_config->pin_int, 1);
+    luat_tp_config->opts->read_done(luat_tp_config);
     return 0;
 }
 
@@ -186,8 +186,8 @@ static const rotable_Reg_t reg_tp[] =
 {
 	{ "init",	    ROREG_FUNC(l_tp_init)},
 
-    { "RISING",     ROREG_INT(TP_INT_TYPE_RISING_EDGE)},
-    { "FALLING",    ROREG_INT(TP_INT_TYPE_FALLING_EDGE)},
+    { "RISING",     ROREG_INT(LUAT_GPIO_RISING_IRQ)},
+    { "FALLING",    ROREG_INT(LUAT_GPIO_FALLING_IRQ)},
 	{ NULL,         ROREG_INT(0) }
 };
 

+ 9 - 7
components/tp/luat_tp.c

@@ -7,17 +7,18 @@
 #include "luat_log.h"
 
 
-luat_rtos_task_handle tp_task_handle = NULL;
+static luat_rtos_task_handle g_s_tp_task_handle = NULL;
 
 void luat_tp_task_entry(void* param){
     uint32_t message_id = 0;
     luat_tp_config_t *luat_tp_config = NULL;
     while (1){
-        luat_rtos_message_recv(tp_task_handle, &message_id, &luat_tp_config, LUAT_WAIT_FOREVER);
+        luat_rtos_message_recv(g_s_tp_task_handle, &message_id, &luat_tp_config, LUAT_WAIT_FOREVER);
         luat_tp_data_t* tp_data = luat_tp_config->tp_data;
         uint8_t touch_num = luat_tp_config->opts->read(luat_tp_config,tp_data);
+
         if (luat_tp_config->callback == NULL){
-            luat_tp_irq_enable(luat_tp_config, 1);
+        	luat_tp_config->opts->read_done(luat_tp_config);
         }else{
             luat_tp_config->callback(luat_tp_config,tp_data);
         }
@@ -25,14 +26,15 @@ void luat_tp_task_entry(void* param){
 }
 
 int luat_tp_init(luat_tp_config_t* luat_tp_config){
-    if (tp_task_handle == NULL){
-        int ret = luat_rtos_task_create(&tp_task_handle, 4096, 10, "tp", luat_tp_task_entry, NULL, 10);
+    if (g_s_tp_task_handle == NULL){
+        int ret = luat_rtos_task_create(&g_s_tp_task_handle, 4096, 10, "tp", luat_tp_task_entry, NULL, 32);
         if (ret){
-            tp_task_handle = NULL;
+        	g_s_tp_task_handle = NULL;
             LLOGE("tp task create failed!");
             return -1;
         }
     }
+    luat_tp_config->task_handle = g_s_tp_task_handle;
     if (luat_tp_config->opts->init){
         return luat_tp_config->opts->init(luat_tp_config);
     }else{
@@ -42,7 +44,7 @@ int luat_tp_init(luat_tp_config_t* luat_tp_config){
 }
 
 int luat_tp_irq_enable(luat_tp_config_t* luat_tp_config, uint8_t enabled){
-    return luat_gpio_irq_enable(luat_tp_config->pin_int, enabled);
+    return luat_gpio_irq_enable(luat_tp_config->pin_int, enabled, luat_tp_config->int_type, luat_tp_config);
 }
 
 

+ 7 - 28
components/tp/luat_tp.h

@@ -7,36 +7,17 @@
 
 #define LUAT_TP_TOUCH_MAX 10
 
-extern luat_rtos_task_handle tp_task_handle;
-
 typedef struct luat_tp_config luat_tp_config_t;
 typedef struct luat_tp_opts luat_tp_opts_t;
-typedef struct luat_touch_info{
-    union{
-        struct {
-            uint64_t version:8;
-            uint64_t x_max:16;
-            uint64_t y_max:16;
-            uint64_t touch_num:4;
-            uint64_t :4;
-            uint64_t int_type:2;
-            uint64_t :1;
-            uint64_t x2y:1;
-            uint64_t stretch_rank:2;
-            uint64_t :2;
-            uint64_t :8;
-        };
-        uint64_t info;
-    };
-}luat_tp_info_t;
+
 
 typedef struct{
-    uint8_t          event;
-    uint8_t          track_id;
+	uint32_t         timestamp;
     uint16_t         x_coordinate;
     uint16_t         y_coordinate;
+    uint8_t          event;
+    uint8_t          track_id;
     uint8_t          width;
-    uint32_t         timestamp;
 } luat_tp_data_t;
 
 typedef struct luat_tp_config{
@@ -56,12 +37,14 @@ typedef struct luat_tp_config{
     luat_tp_opts_t* opts;
     int (*callback)(luat_tp_config_t* luat_tp_config, luat_tp_data_t* luat_tp_data);
     luat_tp_data_t tp_data[LUAT_TP_TOUCH_MAX];
+    luat_rtos_task_handle task_handle;
 } luat_tp_config_t;
 
 typedef struct luat_tp_opts {
     const char* name;
     int (*init)(luat_tp_config_t* luat_tp_config);
     int (*read)(luat_tp_config_t* luat_tp_config, uint8_t* data);
+    void (*read_done)(luat_tp_config_t* luat_tp_config);
     void (*deinit)(luat_tp_config_t* luat_tp_config);
 } luat_tp_opts_t;
 
@@ -72,10 +55,6 @@ typedef enum{
 	TP_EVENT_TYPE_MOVE
 } luat_tp_event_type_t;
 
-typedef enum{
-	TP_INT_TYPE_RISING_EDGE = 0,
-	TP_INT_TYPE_FALLING_EDGE,
-} luat_tp_int_type_t;
 
 extern luat_tp_opts_t tp_config_gt911;
 
@@ -86,4 +65,4 @@ int luat_tp_irq_enable(luat_tp_config_t* luat_tp_config, uint8_t enabled);
 
 
 
-#endif
+#endif

+ 25 - 3
components/tp/luat_tp_gt911.c

@@ -77,6 +77,24 @@
 #define GT911_REFRESH_RATE_MIN      (5)
 #define GT911_REFRESH_RATE_MAX      (20)
 
+typedef struct luat_touch_info{
+    union{
+        struct {
+            uint64_t version:8;
+            uint64_t x_max:16;
+            uint64_t y_max:16;
+            uint64_t touch_num:4;
+            uint64_t :4;
+            uint64_t int_type:2;
+            uint64_t :1;
+            uint64_t x2y:1;
+            uint64_t stretch_rank:2;
+            uint64_t :2;
+            uint64_t :8;
+        };
+        uint64_t info;
+    };
+}luat_tp_info_t;
 
 static uint8_t gt911_init_state = 0;
 
@@ -199,7 +217,7 @@ static int luat_tp_irq_cb(int pin, void *args){
     }
     luat_tp_config_t* luat_tp_config = (luat_tp_config_t*)args;
     luat_tp_irq_enable(luat_tp_config, 0);
-    luat_rtos_message_send(tp_task_handle, 1, args);
+    luat_rtos_message_send(luat_tp_config->task_handle, 1, args);
     return 0;
 }
 
@@ -250,10 +268,10 @@ static int tp_gt911_init(luat_tp_config_t* luat_tp_config){
 	memcpy((uint8_t*)(&cfg_table[GT911_X_OUTPUT_MAX - GT911_CONFIG_REG]), (uint8_t*)(&luat_tp_config->w), 2);
 	memcpy((uint8_t*)(&cfg_table[GT911_Y_OUTPUT_MAX - GT911_CONFIG_REG]), (uint8_t*)(&luat_tp_config->h), 2);
 
-	if (TP_INT_TYPE_RISING_EDGE == luat_tp_config->int_type){
+	if (LUAT_GPIO_RISING_IRQ == luat_tp_config->int_type){
 		cfg_table[GT911_MODULE_SWITCH1 - GT911_CONFIG_REG] &= 0xFC;
 		cfg_table[GT911_MODULE_SWITCH1 - GT911_CONFIG_REG] |= 0x00;
-	}else if (TP_INT_TYPE_FALLING_EDGE == luat_tp_config->int_type){
+	}else if (LUAT_GPIO_FALLING_IRQ == luat_tp_config->int_type){
 		cfg_table[GT911_MODULE_SWITCH1 - GT911_CONFIG_REG] &= 0xFC;
 		cfg_table[GT911_MODULE_SWITCH1 - GT911_CONFIG_REG] |= 0x01;
 	}
@@ -320,6 +338,10 @@ static int tp_gt911_deinit(luat_tp_config_t* luat_tp_config){
 static int tp_gt911_get_info(luat_tp_config_t* luat_tp_config, luat_tp_info_t *luat_touch_info){
     return tp_i2c_read_reg16(luat_tp_config, GT911_CONFIG_REG, luat_touch_info, sizeof(luat_tp_info_t), 1);
 }
+static void tp_gt911_read_done(luat_tp_config_t * luat_tp_config)
+{
+	luat_tp_irq_enable(luat_tp_config->pin_int, 1);
+}
 
 // gt911 get tp info.
 static int16_t pre_x[GT911_TOUCH_NUMBER_MAX] = {-1, -1, -1, -1, -1};

+ 1 - 1
luat/include/luat_gpio.h

@@ -100,7 +100,7 @@ void luat_gpio_close(int pin);
  */
 int luat_gpio_set_irq_cb(int pin, luat_gpio_irq_cb cb, void* args);
 
-int luat_gpio_irq_enable(int pin, uint8_t enabled);
+int luat_gpio_irq_enable(int pin, uint8_t enabled, uint8_t irq_type, void *arg);
 
 /**
  * @brief GPIO模拟单线输出模式