基于MeeGo的电容式触摸屏驱动设计方案
ms(input,ABS_MAJOR,0,255,0,0);
//Y坐标范围0~640
(4)上报输入事件
触摸屏被触摸感应时,通过input_report_abs()函数上报发生的事件及坐标值。
3.3 驱动设计的主要函数
(1)void spi_init()函数
在该函数中通过spi_register_driver(strcut spi_driver*drv)来注册触摸屏SPI接口。
(2)Touch_probe()函数
在这个函数中,会对SPI总线的相关参数进行配置,并注册open()和close()函数。调用input_dev*input_allocate_device(void)进行输入设备分配;调用set_bit(EV_ABS,input_evbit)来设置触摸屏事件;调用input_set_params()设置坐标范围及接触点主轴长度范围;最后调用input_register_device(struct input_dev*dev)把触摸屏注册为输入子系统设备。
(3)触摸屏中断注册及中断处理函数
request_irq(TOUCH IRQ,Touch interrupt,0,"touch",NULL)为中断函数注册,其中Touch_interrupt是中断处理函数。当触摸屏有感应时将拉低INT引脚,此时便触发中断处理函数Touch_interrupt.该中断函数调用intput_report_abs()将采集到的坐标数据上报给输入子系统,当为单点触摸时,上报该触点;当为多点触摸时,依次将每个点的坐标上报。这里为了消除抖动带来的误操作,在中断处理程序中启用了一个定时器init_timer(),进入中断后将延时5 ms,然后才对数据读取。
3.4 数据的处理
电容式触摸屏支持多点识别,所以必须要处理好多点数据的采集,为此将采集到的数据放到事先分配好的缓存read_data[]中。该缓存存有触点的个数以及各个触点的坐标值,为了保证每一点的准确性和完整性,需要用内核函数input_mt_sync()进行同步。具体的读取代码如下:
结语
多点触控技术的使用将成为这个时代的标志。本文基于MecGo平台,对电容屏的原理及驱动开发进行了详细的分析讨论,并于Linux输入子系统的框架开发驱动,减少了驱动开发的工作量,提高了程序的可移植性。在此驱动基础上,并结合MeeGo提供的多点触摸界面框架(MeeGo Touch UI Framework,MTF),就可以实现多点触控的功能。
- 无所不在的触摸屏—家电中的电容式触摸感应技术(12-09)
- 电容式触摸传感器(2):布局设计和智能手机应用实例(12-05)
- 数字隔离器技术大观,原理、应用案例、设计技巧、选型要素(04-15)
- 电容式触摸屏设计难点及注意事项(01-21)
- 经验谈之解决电容式触摸屏应用中的噪声问题(01-17)
- 绝缘结构不俗气!电容式电压互感器耐压耐热不分离(01-17)