summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliYang~ <[email protected]>2022-07-08 09:25:32 +0800
committerGitHub <[email protected]>2022-07-08 09:25:32 +0800
commitc850054aeed58f952aa1892dd856e9366925ff73 (patch)
treeb48fab62673827f041816b15e490ae284e868600
parent07a2e8c32fb5559e3a702ec2b9e62555e087b9e6 (diff)
Docking lvgl touch driver using package (#6149)
* Docking lvgl touch driver using package
-rw-r--r--bsp/stm32/stm32f469-st-disco/applications/lvgl/lv_port_indev.c73
-rw-r--r--bsp/stm32/stm32f469-st-disco/board/Kconfig14
-rw-r--r--bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript3
-rw-r--r--bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6x36.c86
4 files changed, 65 insertions, 111 deletions
diff --git a/bsp/stm32/stm32f469-st-disco/applications/lvgl/lv_port_indev.c b/bsp/stm32/stm32f469-st-disco/applications/lvgl/lv_port_indev.c
index cf9d3dfda3..9a589f5318 100644
--- a/bsp/stm32/stm32f469-st-disco/applications/lvgl/lv_port_indev.c
+++ b/bsp/stm32/stm32f469-st-disco/applications/lvgl/lv_port_indev.c
@@ -1,35 +1,55 @@
/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
+ * Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
- * 2021-10-18 Meco Man The first version
+ * 2022-07-07 liYony The first version
*/
#include <lvgl.h>
#include <rtdevice.h>
-
#include <lcd_port.h>
-static lv_indev_state_t last_state = LV_INDEV_STATE_REL;
-static rt_int16_t last_x = 0;
-static rt_int16_t last_y = 0;
+#define DBG_TAG "LVGL.port.indev"
+#define DBG_LVL DBG_INFO
+#include <rtdbg.h>
+
+/* Include the package header files you are using */
+#ifdef BSP_USING_TOUCH_FT6X36
+#include "ft6236.h"
+#endif /* BSP_USING_TOUCH_FT6X36 */
+
+/* Touch chip connection information */
+#define BSP_TOUCH_I2C_BUS_NAME "i2c1"
+#define BSP_TOUCH_I2C_RESET_PIN 119 /* PH.7 */
+/* RT-Thread touch device name */
+#define TOUCH_DEV_NAME "touch"
lv_indev_t * touch_indev;
+rt_device_t touch_dev;
+struct rt_touch_data *read_data;
static void input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
{
- data->point.x = last_x;
- data->point.y = last_y;
- data->state = last_state;
-}
+ rt_device_read(touch_dev, 0, read_data, 1);
-void lv_port_indev_input(rt_int16_t x, rt_int16_t y, lv_indev_state_t state)
-{
- last_state = state;
- last_x = x;
- last_y = LCD_HEIGHT - y;
+ if (read_data->event == RT_TOUCH_EVENT_NONE)
+ return;
+
+ /* Since the origin of the LCD screen and the origin of the touch screen are
+ * different, the parameters passed in here need to be simply converted. */
+#ifdef BSP_USING_TOUCH_FT6X36
+ data->point.x = read_data->y_coordinate;
+ data->point.y = LCD_HEIGHT - read_data->x_coordinate;
+#endif /* BSP_USING_TOUCH_FT6X36 */
+
+ if (read_data->event == RT_TOUCH_EVENT_DOWN)
+ data->state = LV_INDEV_STATE_PR;
+ if (read_data->event == RT_TOUCH_EVENT_MOVE)
+ data->state = LV_INDEV_STATE_PR;
+ if (read_data->event == RT_TOUCH_EVENT_UP)
+ data->state = LV_INDEV_STATE_REL;
}
void lv_port_indev_init(void)
@@ -43,3 +63,26 @@ void lv_port_indev_init(void)
/*Register the driver in LVGL and save the created input device object*/
touch_indev = lv_indev_drv_register(&indev_drv);
}
+
+static int lv_hw_touch_init(void)
+{
+ struct rt_touch_config cfg;
+
+#ifdef BSP_USING_TOUCH_FT6X36
+ cfg.dev_name = BSP_TOUCH_I2C_BUS_NAME;
+ rt_hw_ft6236_init(TOUCH_DEV_NAME, &cfg, BSP_TOUCH_I2C_RESET_PIN);
+#endif /* BSP_USING_TOUCH_FT6X36 */
+
+ touch_dev = rt_device_find(TOUCH_DEV_NAME);
+ if (rt_device_open(touch_dev, RT_DEVICE_FLAG_RDONLY) != RT_EOK)
+ {
+ LOG_E("Can't open touch device:%s", TOUCH_DEV_NAME);
+ return -RT_ERROR;
+ }
+
+ read_data = (struct rt_touch_data *)rt_calloc(1, sizeof(struct rt_touch_data));
+
+ return RT_EOK;
+}
+
+INIT_COMPONENT_EXPORT(lv_hw_touch_init);
diff --git a/bsp/stm32/stm32f469-st-disco/board/Kconfig b/bsp/stm32/stm32f469-st-disco/board/Kconfig
index 6dc9e76f42..01d0a09177 100644
--- a/bsp/stm32/stm32f469-st-disco/board/Kconfig
+++ b/bsp/stm32/stm32f469-st-disco/board/Kconfig
@@ -15,6 +15,13 @@ menu "Onboard Peripheral Drivers"
select BSP_USING_TOUCH
default n
+ if BSP_USING_LVGL
+ config BSP_USING_LVGL_DEMO
+ bool "Enable LVGL demo"
+ select PKG_USING_LV_MUSIC_DEMO
+ default n
+ endif
+
config BSP_USING_ARDUINO
bool "Support Arduino"
select PKG_USING_RTDUINO
@@ -39,13 +46,6 @@ menu "Onboard Peripheral Drivers"
imply RTDUINO_USING_ADAFRUIT
imply RTDUINO_USING_MSTIMER2
default n
-
- if BSP_USING_LVGL
- config BSP_USING_LVGL_DEMO
- bool "Enable LVGL demo"
- select PKG_USING_LV_MUSIC_DEMO
- default n
- endif
config BSP_USING_SDRAM
bool "Enable SDRAM"
diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript b/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript
index 2fba1fb030..e6ee9336cd 100644
--- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript
+++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript
@@ -7,9 +7,6 @@ if GetDepend(['BSP_USING_TOUCH_FT6206']):
src += Glob('drv_touch.c')
src += Glob('drv_touch_ft6206.c')
-if GetDepend(['BSP_USING_TOUCH_FT6X36']):
- src += Glob('drv_touch_ft6x36.c')
-
CPPPATH = [cwd]
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6x36.c b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6x36.c
deleted file mode 100644
index 9ee7097ba5..0000000000
--- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6x36.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2022-06-29 solar the first version
- */
-
-#include <rtthread.h>
-#include <rtdevice.h>
-#include "touch.h"
-#include "lcd_port.h"
-#include "drv_common.h"
-
-#define DBG_TAG "ft6236"
-#define DBG_LVL DBG_LOG
-#include <rtdbg.h>
-
-#ifdef BSP_USING_TOUCH_FT6X36
-
-#include "ft6236.h"
-
-#define BSP_TOUCH_I2C_BUS_NAME "i2c1"
-#define BSP_TOUCH_I2C_RESET_PIN 119 /* PH.7 */
-
-#ifdef PKG_USING_LVGL
-#include <lvgl.h>
-extern void lv_port_indev_input(rt_int16_t x, rt_int16_t y, lv_indev_state_t state);
-#endif /* PKG_USING_LVGL */
-
-rt_thread_t ft6236_thread;
-rt_device_t touch;
-
-void ft6236_thread_entry(void *parameter)
-{
- struct rt_touch_data *read_data;
-
- read_data = (struct rt_touch_data *)rt_calloc(1, sizeof(struct rt_touch_data));
-
- while (1)
- {
- rt_device_read(touch, 0, read_data, 1);
-#ifdef PKG_USING_LVGL
- /* Since the origin of the LCD screen and the origin of the touch screen are
- * different, the parameters passed in here need to be simply converted. */
- if (read_data->event == RT_TOUCH_EVENT_DOWN)
- lv_port_indev_input(read_data->y_coordinate, read_data->x_coordinate, LV_INDEV_STATE_PR);
-
- if (read_data->event == RT_TOUCH_EVENT_MOVE)
- lv_port_indev_input(read_data->y_coordinate, read_data->x_coordinate, LV_INDEV_STATE_PR);
-
- if (read_data->event == RT_TOUCH_EVENT_UP)
- lv_port_indev_input(read_data->y_coordinate, read_data->x_coordinate, LV_INDEV_STATE_REL);
-#endif /* PKG_USING_LVGL */
- if (read_data->event != RT_TOUCH_EVENT_NONE)
- LOG_I("LCD point x: %03d y: %03d", read_data->y_coordinate, LCD_HEIGHT - read_data->x_coordinate);
- rt_thread_delay(10);
- }
-}
-
-int ft6236_for_lvgl(void)
-{
- struct rt_touch_config cfg;
-
- cfg.dev_name = BSP_TOUCH_I2C_BUS_NAME;
- rt_hw_ft6236_init("touch", &cfg, BSP_TOUCH_I2C_RESET_PIN);
-
- touch = rt_device_find("touch");
- rt_device_open(touch, RT_DEVICE_FLAG_RDONLY);
-
- ft6236_thread = rt_thread_create("touch", ft6236_thread_entry, RT_NULL, 1024, 10, 20);
- if (ft6236_thread == RT_NULL)
- {
- LOG_D("create ft6236 thread err");
-
- return -RT_ENOMEM;
- }
- rt_thread_startup(ft6236_thread);
-
- return RT_EOK;
-}
-INIT_ENV_EXPORT(ft6236_for_lvgl);
-
-#endif /* BSP_USING_TOUCH_FT6X36 */