/** * @file libinput.h * */ #ifndef LVGL_LIBINPUT_H #define LVGL_LIBINPUT_H #ifdef __cplusplus extern "C" { #endif /********************* * INCLUDES *********************/ #ifndef LV_DRV_NO_CONF #ifdef LV_CONF_INCLUDE_SIMPLE #include "lv_drv_conf.h" #else #include "../../lv_drv_conf.h" #endif #endif #if USE_LIBINPUT || USE_BSD_LIBINPUT #ifdef LV_LVGL_H_INCLUDE_SIMPLE #include "lvgl.h" #else #include "lvgl/lvgl.h" #endif #include #if USE_XKB #include "xkb.h" #endif /* USE_XKB */ /********************* * DEFINES *********************/ /********************** * TYPEDEFS **********************/ typedef enum { LIBINPUT_CAPABILITY_NONE = 0, LIBINPUT_CAPABILITY_KEYBOARD = 1U << 0, LIBINPUT_CAPABILITY_POINTER = 1U << 1, LIBINPUT_CAPABILITY_TOUCH = 1U << 2 } libinput_capability; typedef struct { int fd; struct pollfd fds[1]; int button; int key_val; lv_point_t most_recent_touch_point; struct libinput *libinput_context; struct libinput_device *libinput_device; #if USE_XKB xkb_drv_state_t xkb_state; #endif /* USE_XKB */ } libinput_drv_state_t; /********************** * GLOBAL PROTOTYPES **********************/ /** * find connected input device with specific capabilities * @param capabilities required device capabilities * @param force_rescan erase the device cache (if any) and rescan the file system for available devices * @return device node path (e.g. /dev/input/event0) for the first matching device or NULL if no device was found. * The pointer is safe to use until the next forceful device search. */ char *libinput_find_dev(libinput_capability capabilities, bool force_rescan); /** * find connected input devices with specific capabilities * @param capabilities required device capabilities * @param devices pre-allocated array to store the found device node paths (e.g. /dev/input/event0). The pointers are * safe to use until the next forceful device search. * @param count maximum number of devices to find (the devices array should be at least this long) * @param force_rescan erase the device cache (if any) and rescan the file system for available devices * @return number of devices that were found */ size_t libinput_find_devs(libinput_capability capabilities, char **found, size_t count, bool force_rescan); /** * Prepare for reading input via libinput using the default driver state. Use this function if you only want * to connect a single device. */ void libinput_init(void); /** * Prepare for reading input via libinput using a specific driver state. Use this function if you want to * connect multiple devices. * @param state driver state to initialize * @param path input device node path (e.g. /dev/input/event0) */ void libinput_init_state(libinput_drv_state_t *state, char* path); /** * Reconfigure the device file for libinput using the default driver state. Use this function if you only want * to connect a single device. * @param dev_name input device node path (e.g. /dev/input/event0) * @return true: the device file set complete * false: the device file doesn't exist current system */ bool libinput_set_file(char* dev_name); /** * Reconfigure the device file for libinput using a specific driver state. Use this function if you want to * connect multiple devices. * @param state the driver state to configure * @param dev_name input device node path (e.g. /dev/input/event0) * @return true: the device file set complete * false: the device file doesn't exist current system */ bool libinput_set_file_state(libinput_drv_state_t *state, char* dev_name); /** * Read available input events via libinput using the default driver state. Use this function if you only want * to connect a single device. * @param indev_drv driver object itself * @param data store the libinput data here */ void libinput_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); /** * Read available input events via libinput using a specific driver state. Use this function if you want to * connect multiple devices. * @param state the driver state to use * @param indev_drv driver object itself * @param data store the libinput data here */ void libinput_read_state(libinput_drv_state_t * state, lv_indev_drv_t * indev_drv, lv_indev_data_t * data); /********************** * MACROS **********************/ #endif /* USE_LIBINPUT || USE_BSD_LIBINPUT */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* LVGL_LIBINPUT_H */