一种“道”系统下多点触控的实现方法与流程

文档序号:12732758阅读:277来源:国知局

本发明涉及一种“道”系统下多点触控的实现方法。



背景技术:

多点触控技术自1982年至今,已经发展成为了一个主流的应用领域,在各种指挥控制、展会等领域上得到了广泛的应用。苹果公司的ioS、微软公司的Windows7/8等操作系统,均提供了支持多点触控屏的驱动。

近年来,为实现软件国产化,北京科银京成技术有限公司提供了嵌入式实时操作系统“道”系统,并已经在舰船/航空/航天等高可靠性设备中得到了应用。“道”系统板级支持包提供了如USB、串口、鼠标、键盘等设备驱动,但未提供支持多点触控屏的驱动。按照多点触控屏相应数据接口设备驱动架构编写的驱动程序,操作系统加载后,可将触控屏获取到的触控操作的单个数据分别进行上传,应用程序接收到的是一些分离的数据,应用程序仅可将其当做单点触控操作来响应。

因此,有必要设计一种“道”系统下多点触控的实现方法。



技术实现要素:

本发明所解决的技术问题是,针对现有技术的不足,提供一种“道”系统下多点触控的实现方法,使得“道”系统下的GUI层界面用户程序可以响应多点触控操作。

一种“道”系统下多点触控的实现方法,多点触控屏采用数据传输模块,通过通用接口和主板通讯,“道”系统运行在主板上;在“道”系统的多点触控屏驱动程序之上提供一个数据处理中间层,用于完成以下工作:1)向操作系统I/O子系统注册一个虚拟设备,将该虚拟设备注册为“道”系统下的标准设备,以使应用层能调用通用接口read函数对其进行访问,对该虚拟设备的打开、读数据、关闭的操作均链接至实际的多点触控屏;2)创建数据接收线程,等待多点触控操作,将接收到的多点触控操作产生的数据进行解析;3)根据数据处理中间层提供的通讯协议,将解析后的数据重新封装上报至应用层,供GUI层用户程序读取、解析和处理。

多点触控屏和GUI层用户程序通讯流程如下:

A、操作系统启动完成后,加载多点触控屏驱动程序;

B、多点触控屏驱动程序获取数据,基于数据处理中间层提供的通讯协议(借鉴linux 下的MTP协议),首先将一次多点触控操作产生的多个数据,按照多点触控屏驱动程序接收到的顺序、以输入事件结构体为基本的数据单元打包成多个事件包,然后将一次多点触控操作中所有数据包进行组合,并存入内存环形缓冲区中;然后调用input_event函数来产生相应的事件上报至应用层;

C、应用层调用通用接口read函数从内存环形缓冲区中取出打包的事件包数据(即读取上报的数据),置于消息队列中;

D、GUI层用户程序从消息队列中取出触控事件,基于数据处理中间层提供的通讯协议进行解析,并执行相应的操作。

所述步骤B中,将一次多点触控操作产生的多个数据(包括多点触控操作中各个单点对应的数据),按照多点触控屏驱动程序接收到的顺序、以输入事件结构体为基本的数据单元打包成多个事件包,然后将一次多点触控操作中所有数据包进行组合的方法为:

1)在每个事件包开始,产生第一标志来标识当前事件包开始,并携带参数标识当前触点槽;在每个事件包结束,产生一个第二结束标志来标识当前事件包结束;开始标志和结束标志之间,传递触点的详细信息,包括触点ID、X坐标和Y坐标;

2)产生一个第三标志来标识一次多点触控操作产生的多个事件包传送结束,以通知GUI层用户程序对上一个第三标志以来所有累积的事件包进行响应,并准备接收新的数据。

有益效果:

本申请提出的一种“道”系统下多点触控实现方法,在触控屏设备驱动层之上,提供一个数据处理中间层,对触控屏获取的多点触控操作进行解析,并基于约定的协议重新封装上报,将多点触控屏获取到的一次触控操作的所有触点的数据进行打包、组合,一次性上传;GUI层用户程序基于该协议,对数据进行解析和处理,实现多点触控操作的响应。数据处理中间层向操作系统I/O子系统注册一个虚拟设备,注册为“道”系统下的标准设备,应用层可以调用通用接口read函数对其进行访问,无需多点触控屏驱动程序另外提供API函数供应用层操作,应用层亦无需通过直接操作驱动多点触控屏驱动程序中的缓冲区来获取数据。采用这种方法,实现了“道”系统下的多点触控,同时可以适用于各种接口类型的多点触控屏,且对于各种GUI层界面用户程序均可用。对于任意数据接口的多点触控屏,操作系统启动完成后,加载多点触控屏驱动程序,即可按照本发明提出的方法和GUI层用户程序进行通讯,从而该方法不受限于多点触控屏的类型。任意GUI层用户程序,按照约定的协议,可对多点触控数据进行解析。

附图说明

图1为“道”系统下多点触控实现流程。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明。

本发明公开了一种“道”系统下多点触控的实现方法,多点触控屏采用数据传输模块,通过通用接口和主板通讯,“道”系统运行在主板上。该方法包括如下步骤:A、系统启动完成后,加载多点触控屏驱动程序;B、在多点触控屏驱动程序之上提供一个数据处理中间层,该层完成以下工作:1)向操作系统I/O子系统注册一个虚拟设备,对该虚拟设备的打开、读数据、关闭的操作均链接至实际的触控屏设备;2)创建数据接收线程,等待多点触控操作,将接收到的多个触点的数据进行解析;3)根据该层提供的通讯协议,将解析后的数据重新封装上报至应用层;C、应用层调用通用接口read函数读取上报的数据,存入消息队列;D、GUI层用户程序从消息队列中取出数据,基于约定的协议进行解析,并执行相应的操作。

多点触控屏和GUI层用户程序通讯流程如下:

(1)多点触控屏驱动程序获取数据,经数据处理中间层解析,基于中间层提供的通讯协议(借鉴linux下的MTP协议),将一次多点触控操作产生的多个数据,按照多点触控屏驱动程序接收到的顺序以输入事件结构体为基本的数据单元打包成多个事件包,打包后的数据存入内存环形缓冲区中;然后调用input_event函数来产生相应的事件上报。

其中,输入事件结构体定义如下:

其中,time记录事件发生的时间;type代表事件类型,分为同步事件EV_SVN和触点信息事件EV_INFO;code代表事件编码,编码包括同步类事件的编码MT_REPORT、SYN_REPORT和信息类事件的编码MT_SLOT、MT_TRACKING_ID、MT_POSITION_X、MT_POSITION_Y;value代表事件值,传递事件参数。

input_event函数原型如下:

void input_event(MTP_PDEV pDev,UINT16type,UINT16code,INT32value);

具体步骤为:

1)在每个事件包开始,产生一个MT_SLOT事件(第一标志)标识当前事件包开始,并携带slot参数标识当前触点槽。在每个事件包结束,产生MT_REPORT事件(第二标志)标识当前事件包结束,通知当前事件包接收完毕,并准备接收下一个事件包。MT_SLOT事件和MT_REPORT事件之间,传递触点详细的信息,包括MT_TRACKING_ID(触点ID)、MT_POSITION_X(X坐标)、MT_POSITION_Y(Y坐标);

2)通过产生EV_SYN/SYN_REPORT事件((第三标志))标识一个多点触控操作产生的多个事件包数据传送的结束,通知接收者对上一个EV_SYN/SYN_REPORT事件以来所有累积的事件包进行响应,并准备接收新的数据;

以一组两点触控按下为例,上报的事件序列如下:

MT_SLOT 0

MT_TRACKING_ID id[0]

MT_POSITION_X x[0]

MT_POSITION_Y y[0]

MT_REPORT

MT_SLOT 1

MT_TRACKING_ID id[1]

MT_POSITION_X x[1]

MT_POSITION_Y y[1]

MT_REPORT

SYN_REPORT

第一个触点抬起,上报事件序列如下:

MT_SLOT 0

MT_TRACKING_ID-1

MT_REPORT

SYN_REPORT

(2)应用层调用通用接口read函数从环形缓冲区中取出打包的事件包数据,置于消息队列中;

(3)GUI层用户程序从消息队列中取出触控事件,进行解析和处理。

该方法可以实现“道”系统下对任意数据接口的触控屏的多点触控,通过这种方法,

任意GUI用户程序(如QT等)仅需遵守约定的协议,即可对多点触控操作进行响应。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1