linux嵌入式arm基础笔记3之触摸屏原理与输入子系统

==================== 输入子系统=================
触摸屏原理

从技术原理角度讲,触摸屏是一套透明的绝对定位系统,因此他必须具备三个特性:
第一是透明性能:透明材质的好坏会直接影响到触摸屏的视觉效果,主要体现在屏幕的反光性和清晰度。
第二是绝对坐标系统:我们传统的鼠标是一种相对的定位系统,定位只参照前一次的鼠标位置的坐标,而触摸屏需要选哪里就指哪里,这是一种绝对的坐标系统,
两者在坐标的本质上有绝对区别。

第三是检测与定位:触摸屏技术是依靠屏幕下面的传感器工作的,因此定位的原理和所采用的传感器决定了触摸屏的大部分技术指标,包括反应速度、可靠性、稳定性和寿命等。

电容屏和电阻屏区别

电容屏触控工作方式:
电容式触摸屏利用人体的电应进行工作,其触摸屏由一块四层复合玻璃屏构成,并在表面贴上一层透明的特殊金属导电物质。当手指触摸在触摸屏上时,由于人体电场、
用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏四角上的电极中流出,
并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置信息。

特点是屏幕是硬屏,触摸灵敏,不用用力按压屏幕,支持多点触摸。

电阻屏触控工作方式:
电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层(ITO膜),上面再盖有一层外表面经过硬化处理、光滑防刮的
塑料层。它的内表面也涂有一层ITO(导电玻璃),在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开。当手指接触屏幕时,两层 ITO发生接触,电阻发生变
化,在X和Y两个方向上产生信号,控制器根据检测到的电阻变化来计算接触点的XY坐标,再依照这个坐标来进行相应的操作,因此这种技术必须是要使用硬物施力到屏幕
上,才能获得触控效果。

特点是屏幕是软屏,按下去有轻微的凹陷,需稍用力触摸,可用任何手写笔,但不支持多点触控。

1.什么是子系统? //子公司
输入子系统:
定义:Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、
不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。
内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存、多任务、共享库、需求加载、共享写时拷贝(Copy-On-Write)以及网络功能等。
增加各种不同功能导致内核代码不断增加。 Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。
同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。

2.linux input子系统

input 子系统是对linux输入设备驱动进行了高度抽象最终分成了三层:包括input设备驱动层,核心层,事件处理层,触摸屏驱动代码也只是子系统的一部分,
input 子系统这种机制的出现,最大的优点我觉得就是为内核大大的简化了驱动程序!!!这个input子系统最神秘之处就是它的核心层部分,
linux输入子系统的体系结构可以分为三个层面,分别为:硬件驱动层、子系统核心层、事件处理层 ,意思就是每个层次只是负责单独的一个功能,无需参与其他的功能,

三个层面具体的功能如下:

硬件驱动层:其中硬件驱动层负责操作具体的硬件设备,这层的代码是针对具体的驱动程序的,需要驱动程序的作者来编写。
子系统核心层:子系统核心层是链接其他两个层之间的纽带与桥梁,向下提供驱动层的接口,向上提供事件处理层的接口。
事件处理层:事件处理层负责与用户程序打交道,将硬件驱动层传来的事件报告给用户程序。

输入子系统的实现需要满足以下需求:
①输入子系统要为每个输入设备在/dev/目录下生成一个设备文件,以方便应用程序读取指定输入设备产生的事件。
②对于每一个输入设备,在输入子系统只需要实现其事件获取即可,至于事件如何处理、如何到达设备文件则不需要考虑。
③Linux输入设备可以分为事件类(如USB鼠标、USB键盘、触摸屏等)、MOUSE类(特指PS/2接口的输入设备)、游戏杆类3种,
为这些输入设备实现的设备文件的接口必须有所差别。因此,输入子系统需要为不同类型的输入设备实现正确的设备文件接口。

触摸屏设备文件:/dev/input/event0

注意:一般来说,设备特殊,数据也是特殊的格式

输入子系统:
控制输入设备结构体如下:
struct input_event {
struct timeval time; //事件发生的时间 两个成员 一个ms us ----》时间戳
__u16 type; //事件的类型—》初次确定事件的类型
__u16 code; //事件码 ----》进一步确定是哪个事件
__s32 value; //值
};

常见的事件类型如下 type:

 EV_KEY,键盘
 EV_REL,相对坐标   (鼠标 )
 EV_ABS,绝对坐标   (触摸屏) (0,0)
 
 EV_SYN          0x00    表示设备支持所有的事件(同步事件)
 EV_KEY          0x01    键盘或者按键,表示一个键码  
 EV_REL          0x02    鼠标设备,表示一个相对的光标位置结果
 EV_ABS          0x03    手写板产生的值,其是一个绝对整数值 
 EV_MSC          0x04    其他类型 
 EV_LED          0x11    LED灯设备
 EV_SND          0x12    蜂鸣器,输入声音 
 EV_REP          0x14    允许重复按键类型 
 EV_PWR          0x16    电源管理事件 	 

常用的触摸屏的事件码如下 code :
触摸屏: ABS_X(X坐标) ABS_Y(Y坐标) ABS_PRESSURE(压力值)

获取坐标的流程
1、打开设备文件
2、定义一个结构体 struct input_event 用于保存读到 的数据
3、读取触摸屏设备文件(/dev/input/event0)将数据保存在 结构体
4、将数据打印
5、关闭设备文件

=================================
type:1 code:14a value:1 //按下的状态 1 按下 0松开
type:0 code:0 value:0 //同步事件
type:3 code:0 value:1ac // x 事件 1ac具体的坐标值
type:3 code:1 value:117 //y 事件
type:3 code:18 value:c8 // 压力值 200 按下
type:0 code:0 value:0 //同步事件
type:3 code:18 value:0 // 压力值 0 松开
type:1 code:14a value:0 //按下的状态 0松开

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值