Browse Source

[bsp][stm32f429-disco] Change touch exec from hard timer to thread

xuzhuoyi 6 years ago
parent
commit
61bca24ce6

+ 42 - 0
bsp/stm32f429-disco/applications/application.c

@@ -32,8 +32,40 @@
 #include <gdb_stub.h>
 #include <gdb_stub.h>
 #endif
 #endif
 
 
+#include "drv_touch.h"
+
+#ifdef PKG_USING_LITTLEVGL2RTT
+#include "littlevgl2rtt.h"
+#endif 
+
+static void rt_touch_thread_entry(void *parameter)
+{
+    int16_t x;
+    int16_t y;
+    struct touch_state ts;
+    while(1)
+    {
+        touch_get_state(&ts);
+
+#ifdef PKG_USING_LITTLEVGL2RTT    
+        if(ts.pressed) 
+        {
+            x = (3706 - ts.x) / 14;
+            y = (-461 + ts.y) / 10.5;
+        
+            littlevgl2rtt_send_input_event(x, y, LITTLEVGL2RTT_INPUT_DOWN);
+        }
+        else
+            littlevgl2rtt_send_input_event(-1, -1, LITTLEVGL2RTT_INPUT_UP);
+#endif
+        rt_thread_mdelay(100);
+    }
+}
+
 void rt_init_thread_entry(void* parameter)
 void rt_init_thread_entry(void* parameter)
 {
 {
+    rt_thread_t tid;
+    
     /* GDB STUB */
     /* GDB STUB */
 #ifdef RT_USING_GDB
 #ifdef RT_USING_GDB
     gdb_set_device("uart6");
     gdb_set_device("uart6");
@@ -58,6 +90,16 @@ void rt_init_thread_entry(void* parameter)
     
     
     rt_components_init();
     rt_components_init();
 
 
+    rt_device_t tscreen = rt_device_find("touch");
+    rt_device_open(tscreen, RT_DEVICE_FLAG_RDWR);
+
+    tid = rt_thread_create("touch",
+                           rt_touch_thread_entry, RT_NULL,
+                           1024, 4, 20);
+
+    if (tid != RT_NULL)
+        rt_thread_startup(tid);
+                                      
 }
 }
 
 
 int rt_application_init()
 int rt_application_init()

+ 0 - 4
bsp/stm32f429-disco/drivers/board.c

@@ -160,10 +160,6 @@ void rt_hw_board_init()
     lcd = rt_device_find("lcd");
     lcd = rt_device_find("lcd");
     rtgui_graphic_set_device(lcd);
     rtgui_graphic_set_device(lcd);
 #endif
 #endif
-
-    rt_device_t tscreen = rt_device_find("touch");
-    rt_device_open(tscreen, RT_DEVICE_FLAG_RDWR);
-    rt_timer_start((rt_timer_t)tscreen->user_data);
 	
 	
 }
 }
 
 

+ 1 - 25
bsp/stm32f429-disco/drivers/drv_touch.c

@@ -213,26 +213,6 @@ void touch_show_state()
 }
 }
 MSH_CMD_EXPORT(touch_show_state, show screen coordinate in touching);
 MSH_CMD_EXPORT(touch_show_state, show screen coordinate in touching);
 
 
-static void touch_timer(void *parameter)
-{
-    int16_t x;
-    int16_t y;
-    struct touch_state ts;
-    touch_get_state(&ts);
-
-#ifdef PKG_USING_LITTLEVGL2RTT    
-    if(ts.pressed) 
-    {
-        x = (3706 - ts.x) / 14;
-        y = (-461 + ts.y) / 10.5;
-        
-        littlevgl2rtt_send_input_event(x, y, LITTLEVGL2RTT_INPUT_DOWN);
-    }
-    else
-        littlevgl2rtt_send_input_event(-1, -1, LITTLEVGL2RTT_INPUT_UP);
-#endif
-}
-
 static int rt_hw_touch_init(void)
 static int rt_hw_touch_init(void)
 {
 {
     static struct rt_device touch;
     static struct rt_device touch;
@@ -240,11 +220,7 @@ static int rt_hw_touch_init(void)
     /* init device structure */
     /* init device structure */
     touch.type = RT_Device_Class_Unknown;
     touch.type = RT_Device_Class_Unknown;
     touch.init = stmpe811_touch_init;
     touch.init = stmpe811_touch_init;
-
-    /* create 1/8 second timer */
-
-    touch.user_data = rt_timer_create("touch", touch_timer, RT_NULL,
-                                      RT_TICK_PER_SECOND/8, RT_TIMER_FLAG_PERIODIC);
+    touch.user_data = RT_NULL;
 
 
     /* register touch device to RT-Thread */
     /* register touch device to RT-Thread */
     rt_device_register(&touch, "touch", RT_DEVICE_FLAG_RDWR);
     rt_device_register(&touch, "touch", RT_DEVICE_FLAG_RDWR);