Qt开发:UDP、TCP发送文字消息、检测U盘插拔、SYSZUXpinyin软键盘输入法移植------[源码奉送]

开发环境为Linux+Qt, 功能是实现tcp 、udp发送消息,检测U盘插拔、同时在arm端移植syszuxpinyin软键盘出入法。下面是我当时的工作总结。下面是效果图:

Qt开发:UDP、TCP发送文字消息、检测U盘插拔、SYSZUXpinyin软键盘输入法移植------[源码奉送]

关于tcp、udp:

工作

状况

总结

工作状况:

1, 调通了Qt下的TCP通信模块,并在板子上测试通过,A8开发板与PC通信良好,发送中文无乱码。

2, TCP模块和UDP模块整合到一起,做到一个GUI界面里。由于TCP的服务端和客户端是不同的,所以合到一起后代码分两份。

3, 解决Tiny210开发板上没有键盘的情况下不能输入的问题,尤其是不能输入中文。移植并改进了SYSZUXpinyin输入法,在Qt的程序里能正常调出软键盘,利用软键盘输入中文。由于SYSZUXpinyin的文字编码方式是GB2312,而linuxqt默认的正常显示中文编码方式是UTF-8,为了解决两者之间的冲突,费了一些功夫。最终顺利解决,发送和接收都能正常显示中文。

4, 利用Qt检测U盘的插拔情况。具体用到了Qtdbus模块。在PC上已经初步检测成功,但移植到arm时发现默认的编译Qt时是不带dbus模块的。现在需要重新编译带dbus模块的armQt。在编译时发现需要先安装dbus库。

总结:

1, 移植输入法后,由于既要解决GB2312UTF-8编码的矛盾,又要解决UDPTCP通信模块在对端收到文字时能正常解析,让我费了不少事。这方便网上资料基本没有,最后通过看qt自带的帮助文档参考众多资料,才得以解决。

2, 利用Qt检测U盘的插拔,通过研究发现,在linuxU盘插进去后会注册大约7usb-device,只里面只有最后一个是真正的USB存储设备。也只有真正的USB存储设备注册成功后,用户才可以正常读写U盘。

关于检测U盘:

工作

状况

总结

工作状况:

1, PCx86平台下,实现了基于HAL机制和UDISKS机制的qdbus检测U盘插拔的设计,在pc平台下能正常检测U盘插拔。

2, 在将以上两种方法移植到arm平台时,发现arm平台并不支持HALUDISKS。原因是HALUDISKS机制都是接收的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

你可能感兴趣的:(Pinyin)