input子系统

input子系统

  输入设备包括鼠标、键盘、触摸屏、按钮等,它们都能产生输入事件,产生输入数据给计算机系统。
  Linux 系统为了统一管理输入设备,实现了一套能够兼容所有输入设备的框架,这个框架就是input 子系统。
  驱动开发人员基于input 子系统开发输入设备的驱动程序,input 子系统可以屏蔽硬件的差异,向应用层提供一套统一的接口。
 
  查看input 子系统注册的输入设备
  基于input 子系统注册成功的输入设备,都会在/dev/input 目录下生成对应的设备节点(设备文件),
  设备节点名称通常为eventX( X 表示一个数字编号0、1、2、3 等)
 
  查看输入设备对应的设备节点
    cat /proc/bus/input/devices
 

读取数据

  如果我们要读取触摸屏的数据,假设触摸屏设备对应的设备节点为/dev/input/event0 , 那么数据读取流程如下:
    1.应用程序打开/dev/input/event0 设备文件;
    2.应用程序发起读操作(例如调用read),如果没有数据可读则会进入休眠(阻塞I/O 情况下;
    3.当有数据可读时,应用程序会被唤醒,读操作获取到数据返回;
    4.应用程序对读取到的数据进行解析。
 
获取到的数据格式  <linux/input.h> 
		struct timeval { 
			__time_t tv_sec; 		// 秒
			long int tv_usec; 		// 微秒(1 微秒 = 10-3毫秒 = 10-6秒)
		};
		struct input_event {
			struct timeval time;   // 表示输入时的时间 
			__u16 type;            // 表示输入设备时那个东西,常用的有鼠标,键盘等 
			__u16 code;            // 根据不同的type有code,类型比如键盘的那个按键,鼠标的那个按键等 
			__s32 value;           // 根据不同的type和code决定,比如键盘A键按下和松开,鼠标的移动方向等 
		};

 		types
			#define EV_SYN			0x00        // 同步事件,通常一个输入事件结束都会有一个同步事件,作为分隔两个输入事件 
			#define EV_KEY			0x01        // 按键类事件,作为描述设备的键值 
			#define EV_REL			0x02        // relative相对输入事件,主要是用来描述鼠标类设备这次移动相对上次移动的偏移值
			#define EV_ABS			0x03        // absoluate绝对输入事件,主要是用来描述触摸屏类设备的按键值 
			#define EV_MSC			0x04        // 其它事件 
			#define EV_SW			0x05        // 开关事件 
			#define EV_LED			0x11        // 灯光事件 
			#define EV_SND			0x12        // 声音事件,比如:hey,Siri 
			#define EV_REP			0x14        // 重复类事件 
			#define EV_FF			0x15        // 力反馈事件,比如指纹识别 
			#define EV_PWR			0x16        // 电源事件,比如我按了电源按键,手机就应该处于待机状态 
			#define EV_FF_STATUS		0x17    // 受力状态事件,比如按下电源键5s,就应该关机 
			#define EV_MAX			0x1f
			#define EV_CNT			(EV_MAX+1)

		EV_REL   // 相对位置类(主要是用于鼠标和笔记本电脑的触控板)   
			#define REL_X			0x00            /* x轴相对上次的x轴的偏移坐标 */
			#define REL_Y			0x01            /* y轴相对上次的y轴的偏移坐标 */
			#define REL_Z			0x02            /* z轴相对上次的z轴的偏移坐标 */
			#define REL_RX			0x03           
			#define REL_RY			0x04
			#define REL_RZ			0x05
			#define REL_HWHEEL		0x06
			#define REL_DIAL		0x07
			#define REL_WHEEL		0x08
			#define REL_MISC		0x09
			#define REL_MAX			0x0f
			#define REL_CNT			(REL_MAX+1)
 
 
驱动 https://blog.csdn.net/weixin_42031299/article/details/125111946
应用 https://blog.csdn.net/gdut_liujiangyi/article/details/123880416
https://blog.csdn.net/wkd_007/article/details/126729030

   

posted @ 2024-03-26 17:39  迷人的危险~  阅读(19)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css