目录
前言
在weston框架下,支持的输入设备通常是标准设备,如:键盘、鼠标、触摸屏等。若要支持我们自定义的键盘,需要在weston框架下做适配。
1 weston框架下输入管理流程
该部分我们参考ariesjzj大神的《输入管理》章节部分,理解了第一部分之后,基于该部分在第二章中阐述适配的过程。

Weston中的输入管理模块与libinput对接,它实现了两大部分的功能:一是对输入设备的维护,二是对输入事件的处理。对于输入事件既会在Weston中做处理,也会传给相应的client。从事件处理模型上来看,libinput的主循环监听udev monitor fd,它主要用于监听设备的添加删除事件。如果有设备添加,会打开该设备并把fd加入到libinput的主循环上。另一方面,Weston中会将libinput的epoll fd加入主循环。这样形成级联的epoll,无论是udev monitor还是input device的fd有事件来,都会通知到Weston和libinput的主循环。这些事件通过libinput中的事件缓冲队列存储,而Weston会作为消费者从中拿事件并根据事件类型进行处理。
2 按键适配处理分析
weston在嵌入式设备中运行,常采用的命令为:weston --tty=1 --backend=drm-backend.so ,后端采取的是drm对接显示硬件。drm-backend.so来自于weston/libweston/compositor_drm.c
drm_backend_create
udev_input_init -> process_events(input);
-> udev_input_enable
wl_event_loop_add_fd 将input设备添加到epoll中去监控
在udev_input_enable 中将输入设备的fd加入到epoll循环中,如果该设备信号可读,则触发回调函数:libinput_source_dispatch
libinput_source_dispatch
udev_input_dispatch
process_events(input)
第二个epoll循环:
while ((event = libinput_get_event(input->libinput))) {
process_event(event);
libinput_event_destroy(event);
}

本文深入解析了Weston框架下的输入管理流程,包括按键适配处理及亮灭屏机制。揭示了从底层输入设备到顶层destop-shell的交互过程,详细介绍了按键事件如何触发屏幕唤醒,以及西斯顿框架如何实现完整的灭屏操作。
最低0.47元/天 解锁文章
8634

被折叠的 条评论
为什么被折叠?



