Qt开发:UDP、TCP发送文字消息、检测U盘插拔、S

系统 1836 0

开发环境为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 ,而 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

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论