手机USB连接个人电脑时使用usbManager.getDevices获取的设备列表为空
[h2]问题现象
手机通过USB方式与个人电脑连接后,在手机侧使用usbManager.getDevices获取设备列表为空,未将个人电脑识别为USB设备。
[h2]可能原因
USB设备包括主设备(Host)和从设备(Device)。主设备负责数据传输以及端口管理,从设备为被管理的对象。
usbManager.getDevices接口的作用,是在当前设备作为主设备时去获取所连接的从设备列表。
基于上述情况:
- 设备(如手机)USB连接个人电脑时,个人电脑默认是主设备,手机是从设备。此时在手机侧调用usbManager.getDevices接口查询到设备列表为空,属于正常现象。
- 设备(如手机)USB连接鼠标键盘时,手机默认是主设备,鼠标键盘是从设备。此时在手机侧调用usbManager.getDevices接口可以查询到设备列表。
[h2]解决措施
确保当前设备作为主设备,所连接的设备为从设备。(部分设备支持主、从两种USB设备模式。此时需要将设备设置为从设备模式,方可被主设备获取。)
[h2]解决措施
检查两端的波特率是否一致,如不一致请重新配置。
[h2]问题现象
双方无法建立连接无任何数据收发或者传输的数据帧不完整(如仅接收部分字节)。
[h2]解决措施
检查两端校验位或停止位参数配置是否与设备要求完全一致。
[h2]解决措施
排查是否受到干扰,修改停止位增加抗干扰性(如从1位改为2位)。
调用ClaimInterface接口后对应的外设无法使用
[h2]可能原因
应用调用ClaimInterface接口后将USB接口从内核驱动中释放并交由用户空间程序控制,导致内核无法控制对应的设备。
[h2]解决措施
- 调用接口时可选参数传入false可以不强制获取。
- 出现该问题后重新插拔设备可以恢复。