开发环境为Linux+Qt, 功能是实现tcp 、udp发送消息,检测U盘插拔、同时在arm端移植syszuxpinyin软键盘出入法。下面是我当时的工作总结。下面是效果图:
关于tcp、udp:
工作
状况
和
总结
|
工作状况:
1, 调通了Qt下的TCP通信模块,并在板子上测试通过,A8开发板与PC通信良好,发送中文无乱码。
2, 将TCP模块和UDP模块整合到一起,做到一个GUI界面里。由于TCP的服务端和客户端是不同的,所以合到一起后代码分两份。
3, 解决Tiny210开发板上没有键盘的情况下不能输入的问题,尤其是不能输入中文。移植并改进了SYSZUXpinyin输入法,在Qt的程序里能正常调出软键盘,利用软键盘输入中文。由于SYSZUXpinyin的文字编码方式是GB2312,而linux下qt默认的正常显示中文编码方式是UTF-8,为了解决两者之间的冲突,费了一些功夫。最终顺利解决,发送和接收都能正常显示中文。
4, 利用Qt检测U盘的插拔情况。具体用到了Qt的dbus模块。在PC上已经初步检测成功,但移植到arm时发现默认的编译Qt时是不带dbus模块的。现在需要重新编译带dbus模块的arm版Qt。在编译时发现需要先安装dbus库。
总结:
1, 移植输入法后,由于既要解决GB2312和UTF-8编码的矛盾,又要解决UDP、TCP通信模块在对端收到文字时能正常解析,让我费了不少事。这方便网上资料基本没有,最后通过看qt自带的帮助文档参考众多资料,才得以解决。
2, 利用Qt检测U盘的插拔,通过研究发现,在linux下U盘插进去后会注册大约7个usb-device,只里面只有最后一个是真正的USB存储设备。也只有真正的USB存储设备注册成功后,用户才可以正常读写U盘。
|
关于检测U盘:
工作
状况
和
总结
|
工作状况:
1, 在PC机x86平台下,实现了基于HAL机制和UDISKS机制的qdbus检测U盘插拔的设计,在pc平台下能正常检测U盘插拔。
2, 在将以上两种方法移植到arm平台时,发现arm平台并不支持HAL和UDISKS。原因是HAL和UDISKS机制都是接收的udev的消息,而udev需要sysfs文件系统做支持,而现在的嵌入式文件系统大多数为yaffs系统。
3, 基于以上种种问题,最终选择了内核的hotplug机制,hotplug接收内核的消息。当有U盘插入或拔出时会有消息从内核发出。利用这些消息发出的关键字如“add”和“remove”可以检测U盘的插拔,及整个内核识别usb的过程。
4, 考虑到当用户还在U盘目录的下拔出U盘,此后若不重启开发板就会识别异常。在未重启开发板前,希望程序对U盘的这种情况进行检测并提醒用户。试验了很多种方法,最终采用了往U盘内写测试文件,来检验U盘是否真正识别。
总结:经过仔细研究发现,当用户还在U盘目录下直接拔出U盘,linux系统还来不及对U盘原挂载目录/udisk进行卸载,因此当未重启再次插入U盘,U盘依旧要访问申请挂载到/udisk就会出错。这种状况除了往/udisk里写数据进行测试外,很难检测。因此,不妨在检测拔出U盘时,判断/udisk目录是否存在,如果存在则执行umount /udisk,这样再次插入U盘就能正常访问。
|
代码分为服务器端和客户端,每个端都有x86版本和编译好的arm版本,共4份源码,供大家参考。
下面是说明:
Esto-client-arm.tar ----------交叉编译后arm版本的客户端程序,实现功能有:udp传输、tcp传输、U盘监测,交叉编译器为arm-linux-gcc-4.5.1
Esto-server-arm.tar ----------交叉编译后arm版本的服务器端程序,实现功能有:udp传输、tcp传输、软键盘移植
Esto-client-x86.tar ----------PC机上,客户端程序,实现功能有:udp传输、tcp传输、u盘监测
Esto-server-x86.tar ----------PC机上,服务器端程序,实现功能有:udp传输、tcp传输
备注:SYSZUXpinyin只能在arm上编译,无法再x86上编译运行,原因是其实现基于QWSInputMethod,这个类是arm版本的库所特有的。
客户端的两份源码:http://www.pudn.com/downloads529/sourcecode/embedded/detail2190912.html
服务器端的两份源码:http://www.pudn.com/downloads529/sourcecode/embedded/detail2190909.html
分享到:
相关推荐
syszuxpinyin1.0 qt4下输入法源码,
syszuxpinyin-demo(移植SYSZUXpinyin的一个官方demo)
自己根据syszuxpinyin和QT官方输入法源码写的一个基于QT4.8的输入法程序。
修改的syszuxpinyin输入法,支持退格删除等操作。
这个代码比较老了,不过可以用作参考,使用起来比较一般,不过可以二次开发。
syszuxpinyin是一款开源的嵌入式qt输入法,原版一直存在一个乱码的问题,现在qt一般设置为UTF-8编码,可是该输入法只支持GBK编码,所以对其进行稍微修改了下,支持UTF-8编码,亲测不再乱码,代码中需要指定编码方式...
自己设计的关于嵌入式ARM下运行界面,支持自定义控件的拖动,单击双击,旋转,支持syszuxpinyin键盘输入,支持串口功能,支持滚动条的自动滚动
基于ARM Qt5.4.1 网上资源SYSZUXpinyin 重新修改了软键盘UI,支持QLineEdit和QTextEdit输入。但还有中文乱码显示没有解决。