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 cf9d3dfda3a83e39fad8797a816cadddab73328e..9a589f5318c8733d6b762d2aea42614a29d29373 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 #include - #include -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 + +/* 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 6dc9e76f4230875dd2cde5bae8043626627ddeec..01d0a0917769d602f533c76d2f42412747fdafa0 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 2fba1fb030c63fbd01c1add38bc22c2a89e85897..e6ee9336cd22437334c29660ba213c71661f3c36 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 9ee7097ba5224d11df876645feb621c029780c78..0000000000000000000000000000000000000000 --- 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 -#include -#include "touch.h" -#include "lcd_port.h" -#include "drv_common.h" - -#define DBG_TAG "ft6236" -#define DBG_LVL DBG_LOG -#include - -#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 -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 */