|
@@ -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;
|
|
|
|
-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;
|
|
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;
|
|
|
|
- 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)
|
|
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);
|