文章目录
本人学习完韦老师的视频,因此来复习巩固,写以笔记记之。
看完视频复习的同学观看最佳!
基于 IMX6ULL-PRO
参考视频 Linux快速入门到精通视频
参考资料:01_嵌入式Linux应用开发完全手册V5.1_IMX6ULL_Pro开发板.pdf
一、输入系统应用编程
1-1 输入系统简介
输入设备:常见的有键盘、鼠标、遥控杆、书写板、触摸屏等。用户通过这些输入设备与 Linux 系统进行数据交换。
输入系统:Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架。框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。
输入系统框架如下图所示:
/dev/input/event0 是Linux操作系统的一个输入设备,代表了计算机上的第一个物理输入设备,通常是键盘、鼠标、触摸屏。所有输入设备都被视为文件,以便于使用文件I/O操作来读写或写入输入设备的数据。
假设用户程序直接访问dev/input/event0 设备节点,数据的流程为:
① APP发起读操作,若无数据则休眠;
② 用户操作设备,硬件上产生中断;
③ 输入系统驱动层对应的驱动程序处理中断:读取到数据,转换为标准的输入事件,向核心层汇报。输入事件即“struct input_event ”结构体。
④ 核心层可以决定把输入事件转发给上面哪个 handler来处理:从handler 的名字来看,它就是用来处输入操作的。有多种 handler ,比如:evdev_handler 、kbd_handler 、joydev_handler 等等。
内核中使用input_dev 结构体
来表示输入设备,部分内容如下图所示
struct input_dev {
const char *name;//输入设备的名字
const char *phys;//在系统层次结构中设备的物理路径;
const char *uniq;
struct input_id id;//输入设备id,包含总线类型,制造商id,产品id和版本号等;
unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];//设备属性和怪异位图
unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//设备支持的事件类型;EV_KEY, EV_REL;
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];//设备具有的按键(能够报告的)
unsigned long relbit[BITS_TO_LONGS(REL_CNT)];//设备相对轴
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];//设备支持的杂项设备事件
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];//设备存在的led位图
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];//设备支持的声音效果
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];//设备支持的力反馈效果位图
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];//设备存在的开关位图
APP可以从struct input_event 结构体
获取一系列输入事件
struct input_event {
struct timeval time;
__u16 type; /*哪类事件*/
__u16 code; /*哪个事件*/
__s32 value; /*事件值*/
};
① type:表示哪类事件
比如EV_KEY表示按键类、 EV_REL表示相对位移(比如鼠标)、 EV_ABS 表示绝对位置(比如触摸屏)
/* Event type */
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12