前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让Qt5的USB触摸屏/键盘/鼠标支持热插拔

让Qt5的USB触摸屏/键盘/鼠标支持热插拔

作者头像
fensnote
发布2021-05-31 16:02:18
3.3K2
发布2021-05-31 16:02:18
举报

最近产品上线测试,遇到一个问题,查了好几天,今天终于解决了,记录一下,也分享给遇到同样问题的朋友。

我们的一款产品是移植的Qt5做的界面,使用HDMI输出,触摸屏是USB接口(在系统里和鼠标键盘一样,属于输入设备),在办公室测试时,没有出过问题,这几天上线测试安装在电气控制柜里面,和那些继电器、交流接触器在一个铁皮柜子里,这时候问题出现了,触摸屏点几下就不工作了,触摸没反应。

后来发现重启界面程序又可以工作了,于是怀疑是界面程序出问题了,在界面程序里加了一些调试日志,发现触摸没反应时,界面程序运行是正常的,那应该不是软件问题。

测试又发现,如果交流接触器不工作,触摸屏就不会出问题,交流接触器动作,触摸屏就容易出问题,这样判定,应该是交流接触器干扰了触摸屏的USB信号。重启界面程序可以恢复,可能是界面程序重启会对usb重新初始化。

查看界面程序日志,发现触摸屏出问题时,界面程序会输出这样的日志:

代码语言:javascript
复制
evdevmouse: Could not read from input device (No such device)

这个应该是USB断了,查看/dev/input/里的设备,event0是存在的,这说明USB受到干扰断开了一下,然后又自动上来了,但是界面对触摸屏不支持热插拔,所以就无法操作了。

基于此,可以从解决触摸屏热插拔的角度去解决这个问题。于是百度查了下相关的资料,有一篇文章帮助很大,原文链接:

代码语言:javascript
复制
https://www.it610.com/article/1305212461422514176.htm

作者把自己修改的代码也上传了,真是感谢这位大佬的分享。

按照他的代码修改了qt的源码,然后重新编译qt源码,这个编译有点慢(我这编译了3个小时)。编译后将库文件更新到设备上,设备的触摸屏USB线可以随便拔掉再插上,都可以用了!

本来同事在考虑怎么从硬件上去减少干扰,试了好多方法:加滤波电容、使用隔离电源、使用工业级开关电源……不过都没有彻底解决,其实用热插拔来解决,也是一个折中的办法。有些问题就是这样,无法从根本上解决,但是能做到让客户使用时感觉不到问题,就算是没问题了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档