From fdc5f9170a2065ca59137e6081508e4c5a56442e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Thu, 8 Feb 2024 18:57:08 +0100 Subject: [PATCH] Support evdev on Linux --- src/drv/tft/tft_driver_posix_fbdev.cpp | 16 +++++++++++++++- src/hasp_gui.cpp | 6 ++++++ user_setups/linux_sdl/linux_fbdev_64bits.ini | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/drv/tft/tft_driver_posix_fbdev.cpp b/src/drv/tft/tft_driver_posix_fbdev.cpp index ba584b01..e76b7190 100644 --- a/src/drv/tft/tft_driver_posix_fbdev.cpp +++ b/src/drv/tft/tft_driver_posix_fbdev.cpp @@ -11,6 +11,10 @@ #include "drv/tft/tft_driver.h" #include "tft_driver_posix_fbdev.h" +#if USE_EVDEV || USE_BSD_EVDEV +#include "indev/evdev.h" +#endif + #include "dev/device.h" #include "hasp_debug.h" #include "hasp_gui.h" @@ -23,6 +27,9 @@ #include +extern uint16_t tft_width; +extern uint16_t tft_height; + namespace dev { /** @@ -71,6 +78,13 @@ void TftFbdevDrv::init(int32_t w, int h) fbdev_init(); fbdev_get_sizes((uint32_t*)&_width, (uint32_t*)&_height); + tft_width = _width; + tft_height = _height; + +#if USE_EVDEV || USE_BSD_EVDEV + evdev_register("/dev/input/event2", LV_INDEV_TYPE_POINTER, NULL); +#endif + #if HASP_USE_LVGL_TASK #error "fbdev LVGL task is not implemented" #else @@ -99,7 +113,7 @@ void TftFbdevDrv::set_invert(bool invert) {} void TftFbdevDrv::flush_pixels(lv_disp_drv_t* disp, const lv_area_t* area, lv_color_t* color_p) { - fbdev_flush(disp, area, color_p); + lv_disp_flush_ready(disp); } bool TftFbdevDrv::is_driver_pin(uint8_t pin) { diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp index af4c8388..ac181b83 100644 --- a/src/hasp_gui.cpp +++ b/src/hasp_gui.cpp @@ -291,6 +291,10 @@ void guiSetup() #endif disp_drv.monitor_cb = gui_monitor_cb; + // register a touchscreen/mouse driver - only on real hardware and SDL2 + // Win32 and POSIX handles input drivers in tft_driver +#if TOUCH_DRIVER != -1 || USE_MONITOR + /* Initialize the touch pad */ static lv_indev_drv_t indev_drv; lv_indev_drv_init(&indev_drv); @@ -331,6 +335,8 @@ void guiSetup() gui_hide_pointer(false); lv_indev_set_cursor(mouse_indev, cursor); /*Connect the image object to the driver*/ +#endif // TOUCH_DRIVER != -1 || USE_MONITOR + #if HASP_TARGET_ARDUINO // drv_touch_init(gui_settings.rotation); // Touch driver haspTouch.init(tft_width, tft_height); diff --git a/user_setups/linux_sdl/linux_fbdev_64bits.ini b/user_setups/linux_sdl/linux_fbdev_64bits.ini index 624d3de6..d1982e57 100644 --- a/user_setups/linux_sdl/linux_fbdev_64bits.ini +++ b/user_setups/linux_sdl/linux_fbdev_64bits.ini @@ -14,6 +14,7 @@ build_flags = ;-D LV_LVGL_H_INCLUDE_SIMPLE ;-D LV_DRV_NO_CONF -D USE_FBDEV + -D USE_EVDEV ; ----- ArduinoJson -D ARDUINOJSON_DECODE_UNICODE=1 -D HASP_NUM_PAGES=12