Touch Screen Driver






Last updated
Was this helpful?






Last updated
Was this helpful?
Was this helpful?
config BSP_USING_TOUCH_FT6X36
bool "FT6x36"
select BSP_USING_I2C1
select PKG_USING_TOUCH_DRIVERS
select PKG_USING_FT6236copymistakeCopy Successconfig BSP_USING_LVGL
bool "Enable LVGL for LCD"
select BSP_USING_LCD_OTM8009A
select PKG_USING_LVGL
select BSP_USING_TOUCH_FT6X36
default ncopymistakeCopy Successstatic int lv_hw_touch_init(void)
{
struct rt_touch_config cfg;
cfg.dev_name = BSP_TOUCH_I2C_BUS_NAME;/* 使用的I2C设备名 */
#ifdef BSP_USING_TOUCH_FT6X36
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;
}
return RT_EOK;
}
INIT_COMPONENT_EXPORT(lv_hw_touch_init);copymistakeCopy Successvoid lv_port_indev_init(void)
{
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); /*Basic initialization*/
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = input_read;
/*Register the driver in LVGL and save the created input device object*/
touch_indev = lv_indev_drv_register(&indev_drv);
}copymistakeCopy Successstatic void input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
{
struct rt_touch_data *read_data;
/* 可以将内存分配这个步骤改为全局变量,以提高读取效率 */
read_data = (struct rt_touch_data *)rt_calloc(1, sizeof(struct rt_touch_data));
rt_device_read(touch_dev, 0, read_data, 1);
/* 如果没有触摸事件,直接返回 */
if (read_data->event == RT_TOUCH_EVENT_NONE)
return;
/* 这里需要注意的是:触摸驱动的原点可能和LCD的原点不一致,所以需要我们进行一些处理 */
#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;
}copymistakeCopy Success