基于Murphypinyin的嵌入式键盘设计
阵键盘驱动程序的读函数Read()来获取按键值。为了使得按键值能够传送给应用程序,要使用 QWSKeyboardHandler类的成员函数processKeyEvent(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat),各参数功能如下:
①Unicode:按键的Unicode编码,如数字1的unicode编码为1,字母A的unicode编码为A。如果该项为0,则为功能键Shift、Left、Right等;如果该项为0xFFFF,则只传送键值keycode,不打印编码。
②Keycode:Qt中使用的按键名称,如Qt::Key_Backspace、Qt::Key_Enter等。
③Modifiers:Qt所支持的键盘组合键。
④isPress:判断按键的状态是"按下"还是"弹起"。
⑤autoRepeat:判断本次事件是有自动重复机制产生,还是由一个现实中的按键产生。
通过processKeyEvent()函数可以发送数字、小写英文、大写英文,但是目前Qt/Embedded上没有中文输入法,不能输入中文。
2.3 Murphpinyin拼音输入法的移植
Murphypinyin 是目前为止基于Qt/Embedded的一个比较好的开源中文输入法,而且Murphypinyin带有软键盘,用户可以通过触摸屏输入中文、英文、数字和符号等。对于Murphypinyin到Qt/Embedded的移植,网络上有很多参考资料,这里不再作介绍。
但是将 Murphypinyin应用到手持终端上目前还有一个问题:Murphypinyin带有的软键盘是标准的PC101键盘,按键数量很多。在对体积、重量要求很苛刻的手持终端上,触摸屏本身的尺寸受到严重的制约,PC101键盘会占据触摸屏的大部分显示面积;而且单个按键所占面积很小,从而对触摸屏的定位精度要求很高。然而触摸屏本身受周围环境的影响较大,很容易造成定位不准。本系统将矩阵键盘映射到Murphypinyin上,通过矩阵键盘输入中文、英文和数字,这样在手持终端上可以使用普通的LCD,从而降低了系统成本、提高了系统的可靠性。
首先考虑的问题是:如何用键盘打开Murphypinyin输入法?这里可以修改Murphypinyin软件包中的PinyinFrame.cpp文件中的:
boot QPinyinFrame::filter(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat)
其中:if(!isHidden()&& isPress)语句用来判断Murphypinyin输入法是否已经打开并且有按键按下。如果是,则判断当前是中文模式、还是英文模式。中文模式则调用 GetKey(unicode,keycode)函数,根据输入的拼音搜索汉字;英文模式则调用SendKey(unicode,keycode)函数发送大写或小写英文字母。如果unicode==9&&keycode==Qt::Key_Tab,则进行中英文切换。在这里可以添加判断语句:if(keycode==Qt::Key NumLock)。当NumLock按键按下时,调用:QPinyinFrame::sizeHint()和QPinyinFrame::show()两个函数来开启Murphypinyin输入法界面。如果再次按下NumLock按键,则调用QPinyinFrame::hide()来隐藏输入法界面。
用键盘打开Murphypinyin输入法之后,可以通过键盘发送拼音字母来输入汉字。通过发送unicode=9&&keycode==Qt::Key_Tab来进行中英文切换。
2.4按键复用
由于手持终端设备对自身的体积有严格的要求,为了缩小键盘的体积,本系统模仿手机键盘的布局,采用按键复用的方式来缩小键盘大小。将26个英文字母按字母表顺序3个或4个一组依次排列在2~9这8个数字键上,并与阿拉伯数字进行复用(见图2)。
硬件上的简化必然导致软件复杂度的增加。为了使得系统能够在按下一个按键后自动识别是数字、英文大写字母、英文小写还是拼音字母,需要修改 Qt/Embedded中qkeyboard_qws.cpp的QWSKEYMATRIXHandler::ReadKeyboardData()函数。
当有按键按下后,首先需要判断当前是处于何种模式:数字、拼音、小写英文还是大写英文模式,实现流程如图5所示。通过NumLock按键和状态标志字 English-Mode来进行数字状态和其他几个状态的切换。通过Tab按键来进行中、英文模式的切换,通过CapsLock按键来进行英文大小写字母的切换。
为了使一个按键能够输入不同的字符,本系统使用不同的key_ID值来标识各个字符,这样,每按一次键都是不同的。图6是对于按键2的复用过程。根据不同的key_ID结合当前所处的输入模式,发送相应的数字、小写英文或大写英文字符。
3 总 结
本文介绍了基于S3C2440的矩阵键盘的硬件设计方法和软件的驱动开发方法,通过将Murphpinyin开源软件包与Qt/Embeded自带输入法的融合,使用按键复用的策略,采用较少的按键,构建了一款可输入数字、中/英文的嵌入式键盘,并在S3C2440上实现。为手持终端提供了一种嵌入式键盘的解决方案。
发布者:小宇
- 支持汽车电子的嵌入式软件编程接口库设计(11-29)
- 用IXP网络处理器设计的数字家庭媒体中心系统 (02-12)
- 基于DSP和CPLD的智能相机系统设计与研制(08-19)
- 基于DM642嵌入式无线视频监控硬件设计 (10-15)
- 基于AD7892SQ和CPLD的数据采集系统的设计(11-10)
- 嵌入式向产业上游迈进(01-06)