diff --git a/bsp/stm32/stm32f469-st-disco/board/Kconfig b/bsp/stm32/stm32f469-st-disco/board/Kconfig index 8f433171a8..8f05844f71 100644 --- a/bsp/stm32/stm32f469-st-disco/board/Kconfig +++ b/bsp/stm32/stm32f469-st-disco/board/Kconfig @@ -8,28 +8,11 @@ config SOC_STM32F469NI default y menu "Onboard Peripheral Drivers" - - config BSP_USING_SDRAM - bool "Enable SDRAM" - select BSP_USING_FMC - default n - - config BSP_USING_LCD_MIPI - bool - default n - - config BSP_USING_LCD_OTM8009A - bool "Enable LCD OTM8009A" - select BSP_USING_SDRAM - select BSP_USING_LTDC - select BSP_USING_LCD_MIPI - default n - config BSP_USING_LVGL bool "Enable LVGL for LCD" select BSP_USING_LCD_OTM8009A - select BSP_USING_TOUCH select PKG_USING_LVGL + select BSP_USING_TOUCH default n if BSP_USING_LVGL @@ -39,6 +22,11 @@ menu "Onboard Peripheral Drivers" default n endif + config BSP_USING_SDRAM + bool "Enable SDRAM" + select BSP_USING_FMC + default n + config BSP_USING_QSPI_FLASH bool "Enable QSPI FLASH (N25Q128A qspi1)" select BSP_USING_QSPI @@ -63,25 +51,50 @@ menu "Onboard Peripheral Drivers" select RT_USING_DFS_ELMFAT select RT_USING_PIN default n - if BSP_USING_SDCARD + config SDIO_MAX_FREQ int "sdio max freq" range 0 24000000 + depends on BSP_USING_SDCARD default 24000000 - endif config BSP_USING_TOUCH - bool "Enable TOUCH" - select BSP_USING_I2C1 + bool "Enable touch screen" + + choice + prompt "Touch IC type" + depends on BSP_USING_TOUCH + default BSP_CHOICE_TOUCH_FT6X36 + + config BSP_USING_TOUCH_FT6206 + bool "FT6206" + select BSP_USING_I2C1 + if BSP_USING_TOUCH_FT6206 + config BSP_TOUCH_INT_PIN + int # "Touch IC interrupt pin" + default 149 + config BSP_TOUCH_I2C_NAME + string # "I2C Bus Name" + default "i2c1" + endif + + config BSP_USING_TOUCH_FT6X36 + bool "FT6x36" + select BSP_USING_I2C1 + select PKG_USING_TOUCH_DRIVERS + select PKG_USING_FT6236 + endchoice + + config BSP_USING_LCD_MIPI + bool + default n + + config BSP_USING_LCD_OTM8009A + bool "Enable LCD OTM8009A" + select BSP_USING_SDRAM + select BSP_USING_LTDC + select BSP_USING_LCD_MIPI default n - if BSP_USING_TOUCH - config BSP_TOUCH_INT_PIN - int "Touch interrupt pin" - default 149 - config BSP_I2C_NAME - string "I2C Bus Name" - default "i2c1" - endif endmenu menu "On-chip Peripheral Drivers" diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript b/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript index 618e45d87a..2fba1fb030 100644 --- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript +++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/SConscript @@ -1,9 +1,17 @@ from building import * cwd = GetCurrentDir() -src = Glob('*.c') -CPPPATH = [cwd, str(Dir('#'))] +src = [] -group = DefineGroup('Drivers', src, depend = ['BSP_USING_TOUCH'], CPPPATH = CPPPATH) +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) Return('group') diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.c b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.c index d6c29e059f..4fafd795b5 100644 --- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.c +++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.c @@ -10,7 +10,7 @@ #include -#ifdef BSP_USING_TOUCH +#ifdef BSP_USING_TOUCH_FT6206 #include "drv_touch.h" #include #ifdef PKG_USING_GUIENGINE @@ -154,7 +154,7 @@ static int rt_touch_thread_init(void) rt_list_t *l; touch_drv_t current_driver; rt_thread_t tid = RT_NULL; - i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(BSP_I2C_NAME); + i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(BSP_TOUCH_I2C_NAME); RT_ASSERT(i2c_bus); current_driver = RT_NULL; if (rt_device_open((rt_device_t)i2c_bus, RT_DEVICE_OFLAG_RDWR) != RT_EOK) @@ -204,4 +204,4 @@ static int touc_bg_init(void) } INIT_COMPONENT_EXPORT(touc_bg_init); -#endif /* BSP_USING_TOUCH */ +#endif /* BSP_USING_TOUCH_FT6206 */ diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.h b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.h index 21bea39f83..8041c471c1 100644 --- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.h +++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2021, RT-Thread Development Team + * Copyright (c) 2006-2022, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * diff --git a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft.c b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6206.c similarity index 97% rename from bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft.c rename to bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6206.c index bd2db859ba..aa76f709e2 100644 --- a/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft.c +++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6206.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2021, RT-Thread Development Team + * Copyright (c) 2006-2022, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -17,7 +17,7 @@ #include #include -#ifdef BSP_USING_TOUCH +#ifdef BSP_USING_TOUCH_FT6206 #define DBG_ENABLE #define DBG_SECTION_NAME "TOUCH.ft" @@ -212,4 +212,4 @@ int ft_driver_register(void) } INIT_DEVICE_EXPORT(ft_driver_register); -#endif +#endif /* BSP_USING_TOUCH_FT6206 */ 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 new file mode 100644 index 0000000000..9ee7097ba5 --- /dev/null +++ b/bsp/stm32/stm32f469-st-disco/board/ports/touch/drv_touch_ft6x36.c @@ -0,0 +1,86 @@ +/* + * 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 */