| /* |
| * Copyright 2023 Fabian Blatz <fabianblatz@gmail.com> |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ |
| #define ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ |
| |
| #include <lvgl.h> |
| #include <zephyr/device.h> |
| #include <zephyr/input/input.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct lvgl_common_input_config { |
| struct k_msgq *event_msgq; |
| }; |
| |
| struct lvgl_common_input_data { |
| lv_indev_drv_t indev_drv; |
| lv_indev_t *indev; |
| lv_indev_data_t pending_event; |
| lv_indev_data_t previous_event; |
| }; |
| |
| int lvgl_input_register_driver(lv_indev_type_t indev_type, const struct device *dev); |
| int lvgl_init_input_devices(void); |
| |
| #define LVGL_INPUT_EVENT_MSGQ(inst, type) lvgl_input_msgq_##type##_##inst |
| #define LVGL_INPUT_DEVICE(inst) DEVICE_DT_GET_OR_NULL(DT_INST_PHANDLE(inst, input)) |
| |
| #define LVGL_COORD_VALID(coord) IN_RANGE(coord, LV_COORD_MIN, LV_COORD_MAX) |
| #define LVGL_KEY_VALID(key) IN_RANGE(key, 0, UINT8_MAX) |
| |
| #define LVGL_INPUT_DEFINE(inst, type, msgq_size, process_evt_cb) \ |
| static void lvgl_input_cb_##_##inst(struct input_event *evt) \ |
| { \ |
| process_evt_cb(DEVICE_DT_INST_GET(inst), evt); \ |
| } \ |
| INPUT_CALLBACK_DEFINE(LVGL_INPUT_DEVICE(inst), lvgl_input_cb_##_##inst); \ |
| K_MSGQ_DEFINE(lvgl_input_msgq_##type##_##inst, sizeof(lv_indev_data_t), msgq_size, 4) |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| /** @} */ |
| |
| #endif /* ZEPHYR_MODULES_LVGL_LVGL_COMMON_INPUT_H_ */ |