浏览代码

add: 实验性添加lvgl indev的支持,支持模拟点击

Wendal Chen 4 年之前
父节点
当前提交
05b3f6a588

+ 0 - 0
bsp/air105/change.log


+ 5 - 0
components/lvgl/binding/luat_lib_lvgl.c

@@ -94,6 +94,11 @@ LUAT_LV_COLOR_RLT
 LUAT_LV_THEME_RLT
 LUAT_LV_MAP_RLT
 
+// 输入设备
+#ifdef LUAT_USE_LVGL_INDEV
+LUAT_LV_INDEV_RLT
+#endif
+
 //LVGL组件
 #ifdef LUAT_USE_LVGL_ARC
 LUAT_LV_ARC_RLT

+ 44 - 0
components/lvgl/binding/luat_lib_lvgl_indev_ext.c

@@ -0,0 +1,44 @@
+#include "luat_base.h"
+#include "luat_lvgl.h"
+#include "lvgl.h"
+#include "luat_malloc.h"
+
+static lv_indev_data_t point_emulator_data = {0};
+
+bool point_input_read(lv_indev_drv_t * drv, lv_indev_data_t*data) {
+    memcpy(data, drv->user_data, sizeof(lv_indev_data_t));
+    return false;
+}
+
+int luat_lv_indev_drv_register(lua_State* L) {
+    lv_indev_drv_t indev_drv;
+    lv_indev_drv_init(&indev_drv);
+    const char* type = luaL_checkstring(L, 1);
+    int ok = 0;
+    if (!strcmp("pointer", type)) {
+        indev_drv.type = LV_INDEV_TYPE_POINTER;
+        const char* dtype = luaL_checkstring(L, 2);
+        if (!strcmp("emulator", dtype)) {
+            indev_drv.user_data = &point_emulator_data;
+            memset(indev_drv.user_data, 0, sizeof(lv_indev_data_t));
+            indev_drv.read_cb = point_input_read;
+            lv_indev_drv_register(&indev_drv);
+            ok = 1;
+        }
+        else if(!strcmp("xpt2046", type)) {
+            // TODO 支持xpt2046?
+        }
+    }
+    lua_pushboolean(L, ok);
+    return 1;
+}
+
+int luat_lv_indev_point_emulator_update(lua_State* L) {
+    int x = luaL_checkinteger(L, 1);
+    int y = luaL_checkinteger(L, 2);
+    int state = luaL_optinteger(L, 3, 1);
+    point_emulator_data.point.x = x;
+    point_emulator_data.point.y = y;
+    point_emulator_data.state = state;
+    return 0;
+}

+ 1 - 0
components/lvgl/binding/luat_lvgl.h

@@ -50,5 +50,6 @@ void luat_lv_fs_init(void);
 #include "luat_lvgl_fonts.h"
 #include "luat_lvgl_font.h"
 #include "luat_lvgl_struct.h"
+#include "luat_lvgl_indev.h"
 
 #endif

+ 14 - 0
components/lvgl/binding/luat_lvgl_indev.h

@@ -0,0 +1,14 @@
+
+#ifndef LUAT_LVGL_INDEV
+#define LUAT_LVGL_INDEV
+
+#include "luat_base.h"
+#include "lvgl.h"
+
+int luat_lv_indev_drv_register(lua_State *L);
+int luat_lv_indev_point_emulator_update(lua_State *L);
+
+#define LUAT_LV_INDEV_RLT {"indev_drv_register", luat_lv_indev_drv_register, 0},\
+{"indev_point_emulator_update", luat_lv_indev_point_emulator_update, 0},\
+
+#endif