1 /* 2 * Copyright 2023 Fabian Blatz <fabianblatz@gmail.com> 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ 8 #define ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ 9 10 #include <lvgl.h> 11 #include <zephyr/device.h> 12 #include <zephyr/input/input.h> 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 struct lvgl_common_input_config { 19 struct k_msgq *event_msgq; 20 }; 21 22 struct lvgl_common_input_data { 23 lv_indev_drv_t indev_drv; 24 lv_indev_t *indev; 25 lv_indev_data_t pending_event; 26 lv_indev_data_t previous_event; 27 }; 28 29 int lvgl_input_register_driver(lv_indev_type_t indev_type, const struct device *dev); 30 int lvgl_init_input_devices(void); 31 32 #define LVGL_INPUT_EVENT_MSGQ(inst, type) lvgl_input_msgq_##type##_##inst 33 #define LVGL_INPUT_DEVICE(inst) DEVICE_DT_GET_OR_NULL(DT_INST_PHANDLE(inst, input)) 34 35 #define LVGL_COORD_VALID(coord) IN_RANGE(coord, LV_COORD_MIN, LV_COORD_MAX) 36 #define LVGL_KEY_VALID(key) IN_RANGE(key, 0, UINT8_MAX) 37 38 #define LVGL_INPUT_DEFINE(inst, type, msgq_size, process_evt_cb) \ 39 static void lvgl_input_cb_##_##inst(struct input_event *evt) \ 40 { \ 41 process_evt_cb(DEVICE_DT_INST_GET(inst), evt); \ 42 } \ 43 INPUT_CALLBACK_DEFINE(LVGL_INPUT_DEVICE(inst), lvgl_input_cb_##_##inst); \ 44 K_MSGQ_DEFINE(lvgl_input_msgq_##type##_##inst, sizeof(lv_indev_data_t), msgq_size, 4) 45 46 #ifdef __cplusplus 47 } 48 #endif 49 50 /** @} */ 51 52 #endif /* ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ */ 53