摘要 提出一种在嵌入式系统上由硬件同时实现中文手写输入法和触摸屏控制器的设计方案,给出硬件结构图以及软件从底层到应用层所实现功能的概要说明;同时对设计过程中出现的问题给出了合理的解决方案,并验证了该设计方案的可行性和实用性。
关键词 中文手写芯片 HW006 触摸屏 进程通信 Qtopia
引言
◇ 软件方面将触摸屏驱动和手写识别的工作合二为一。
◇ 完全在用户空间实现触摸屏的驱动,减少了硬件平台的依赖性,降低了驱动设计的难度,分层的驱动设计思想也不会破坏原有程序的完整性。
◇ 硬件方面,省去了专用的触摸屏控制器芯片,降低了成本。
因此,该方案在工作量、成本、难度方面均有着明显的优势,从而大大缩短了开发周期,增强了实用性。
1 HW006简介
HW006是一款汉王手写芯片,它内置了触摸屏控制电路和对外的UART接口,同时提供了灵活的控制命令接口,可以满足触摸屏LCD分离型、触摸屏LCD一体型等不同情况下的各种应用需求。
1.1 HW006主要功能
◇ 支持6 763个简体中文(GB2312)、52个英文大小写字母、10个数字、12个常用符 的手写识别输入,并可自由组合,设置识别范围;
◇ 支持点击模式、手写模式和混合模式;
◇ 内嵌触摸屏控制硬件和软件,可直接与触摸屏相连接;
◇ 支持异步串行通信接口(UART),通信波特率可设置,便于与各种CPU进行通信;
◇ 在手写状态下,识别参数可设置。
可见,HW006完全可以实现预想的功能。根据实际需要,选用混合模式。
1.2 HW006的通信协议
HW006为从设备,主设备对该芯片发送控制命令,HW006可以执行相应的功能。
(1) 主设备向手写芯片发送命令
格式如下:
在混合模式下,手写芯片先发送轨迹坐标,属性表示该点的状态:0x00,落笔;0x05,移笔;0x0f,抬笔。EOF表示发送轨迹结束标志,其值为0xff。之后发送识别字的编码,低字节在前,高字节在后。
1.3 命令码的简单介绍
对HW006进行操作控制的主要命令码如表1所列。
表1 HW006的主要命令码
UART通信格式: 上电默认波特率,9 600 bps;数据位,8位;校验位,无;停止位,1位;先低位后高位。触摸屏采用了4线电阻屏,在触摸屏与HW006连线处,需要加上滤波电容。
上电初始化时,默认工作模式为点击模式。用户可根据应用需要,设置相应工作模式。使用混合模式时必须通过UART给系统发送4个数据X1、Y1、X2、Y2,以确定矩形手写区域的范围。
3 手写输入法及触摸屏驱动的实现
选用的图形界面系统Qtopia是由Trolltech公司所开发的专门用于嵌入式Linux操作系统电子设备的应用平台,这里使用开放源代码的Qtopia PDA版。它具有可定制的用户界面和集成的组件,其组件包括窗口操作界面、游戏和多媒体、PIM应用程序、输入法、本地化支持和无线支持等。对于输入法,它提供了一系列的通用API,便于开发用户自己的输入法。
Qtopia软件平台可分为4个层次,如图2所示。
3.3 完成手写显示和识别字显示界面
手写输入法的具体实现是在Qtopia层,利用Qtopia提供的API来完成中文手写输入法的手写显示及识别字显示。在这里利用输入法插件接口——InputMethodInterface类,通过对该类的继承以及对该类成员函数的重载,完成手写输入法,最终编译成链接库形式,被Qtopia服务器自动调用。
class QTOPIA_PLUGIN_EXPORT UniKeyboardImpl : public InputMethodInterface {
public:
…
Q_REFCOUNT
virtual QWidget*inputMethod(QWidget*parent, Qt::WFlags f);
//需要重载的虚函数,在该函数中可以添加用户自定义的输入法类
…
private:
HandWrKeyboard *input;
//HandWrKeyboard是手写输入法的类
…
};
函数virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f )重载为:
QWidget *UniKeyboardImpl::inputMethod( QWidget *parent, Qt::WFlags f ) {
if ( !input )
input=new HandWrKeyboard( parent, “HandWriting”, f );
return input;
}
从功能上手写输入法软件部分可分为两种:显示笔划轨迹与显示识别候选字。
触摸屏和HW006连接部分是完全的模拟量,由于液晶逆变器高频高压的干扰,笔划轨迹变得明显,与实际所写轨迹不符。除了需要在硬件上加滤波电容外,软件中也需要进行一定的修正。这里,采用3点均值滤波的方式来减小噪声干扰的影响。

在读到第一个点时,不做处理;读到2个点时,取这2个值的平均。这样,得到的坐标数据量不会不足,而且均值滤波可以很好地消除噪声的影响。
读汉字码是通过读有名管道来实现的。经过实验,发现HW006在发送汉字码时,偶尔会出现发送的个数与所设置的不符。我们设置的识别字个数是5个,共10字节的数据。但如果所写的汉字比较简单,HW006可能识别不了5个汉字,这样发送给管道的数据不足10字节,结果会造成最终显示错误。为此,在读取汉字码的开始和结束处分别加一个起始位和结束位,这样根据读取管道得到的汉字码个数和起始位、结束位来判断识别结束,将最终得到的识别汉字正确地显示出来。
4 结论
在“PXA255+Linux+Qtopia”平台上的运行及测试结果表明手写识别率能达到95%以上。由于HW006也实现了触摸屏控制器的功能,在硬件结构上完全可以代替原来的触摸屏控制器,因此并没有增加硬件的成本和复杂度。从上面的分析可以清楚地看出,此设计方案具有实用性和普遍意义,完全可以应用于其他嵌入式平台上。
参考文献
[1] 倪继利. Qt及Linux操作系统窗口设计[M]. 北京:电子工业出版 ,2006.
[2] Rubini A. Linux设备驱动程序[M]. 聊鸿斌,等译. 北京:中国电力出版 ,2000.
[3] Richard W Stevens. UNIX 络编程第2卷:进程间通信[M]. 杨继张,译. 北京:清华大学出版 ,1999.
杨自锋(硕士),主要研究方向为嵌入式系统;
赵建业(教授),主要研究方向为神经 络、DSP、嵌入式系统。
(收修改稿日期:2007-01-21)
原文地址:http://diangong.jdzj.com/article/2009-9-7/12496-1.htm
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24731 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!