Docking lvgl touch driver using package (#6149)
* Docking lvgl touch driver using package
This commit is contained in:
parent
07a2e8c32f
commit
c850054aee
|
@ -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
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2021-10-18 Meco Man The first version
|
* 2022-07-07 liYony The first version
|
||||||
*/
|
*/
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
#include <rtdevice.h>
|
#include <rtdevice.h>
|
||||||
|
|
||||||
#include <lcd_port.h>
|
#include <lcd_port.h>
|
||||||
|
|
||||||
static lv_indev_state_t last_state = LV_INDEV_STATE_REL;
|
#define DBG_TAG "LVGL.port.indev"
|
||||||
static rt_int16_t last_x = 0;
|
#define DBG_LVL DBG_INFO
|
||||||
static rt_int16_t last_y = 0;
|
#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;
|
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)
|
static void input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
|
||||||
{
|
{
|
||||||
data->point.x = last_x;
|
rt_device_read(touch_dev, 0, read_data, 1);
|
||||||
data->point.y = last_y;
|
|
||||||
data->state = last_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lv_port_indev_input(rt_int16_t x, rt_int16_t y, lv_indev_state_t state)
|
if (read_data->event == RT_TOUCH_EVENT_NONE)
|
||||||
{
|
return;
|
||||||
last_state = state;
|
|
||||||
last_x = x;
|
/* Since the origin of the LCD screen and the origin of the touch screen are
|
||||||
last_y = LCD_HEIGHT - y;
|
* 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)
|
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*/
|
/*Register the driver in LVGL and save the created input device object*/
|
||||||
touch_indev = lv_indev_drv_register(&indev_drv);
|
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);
|
||||||
|
|
|
@ -15,6 +15,13 @@ menu "Onboard Peripheral Drivers"
|
||||||
select BSP_USING_TOUCH
|
select BSP_USING_TOUCH
|
||||||
default n
|
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
|
config BSP_USING_ARDUINO
|
||||||
bool "Support Arduino"
|
bool "Support Arduino"
|
||||||
select PKG_USING_RTDUINO
|
select PKG_USING_RTDUINO
|
||||||
|
@ -40,13 +47,6 @@ menu "Onboard Peripheral Drivers"
|
||||||
imply RTDUINO_USING_MSTIMER2
|
imply RTDUINO_USING_MSTIMER2
|
||||||
default n
|
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
|
config BSP_USING_SDRAM
|
||||||
bool "Enable SDRAM"
|
bool "Enable SDRAM"
|
||||||
select BSP_USING_FMC
|
select BSP_USING_FMC
|
||||||
|
|
|
@ -7,9 +7,6 @@ if GetDepend(['BSP_USING_TOUCH_FT6206']):
|
||||||
src += Glob('drv_touch.c')
|
src += Glob('drv_touch.c')
|
||||||
src += Glob('drv_touch_ft6206.c')
|
src += Glob('drv_touch_ft6206.c')
|
||||||
|
|
||||||
if GetDepend(['BSP_USING_TOUCH_FT6X36']):
|
|
||||||
src += Glob('drv_touch_ft6x36.c')
|
|
||||||
|
|
||||||
CPPPATH = [cwd]
|
CPPPATH = [cwd]
|
||||||
|
|
||||||
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||||
|
|
|
@ -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 */
|
|
Loading…
Reference in New Issue