Android usb hid 通讯点点滴滴

         一款IC卡读卡器,在windows上已经使用了很长一段时间,最近因业务需求,要在android平台下使用,于是开发了android平台上的的读卡器程序,在测试读卡器时确发现同样的指令(如:aa bb 05 00 00 00 04 01 05)在windows上一切正常,但在android系统上却始终不能正常通讯,仔细检查android系统上读卡器设备的权限、pid、vid等设备配置等信息均正常,如在android系统换上同样一款具有相同pid、vid的其他的usb设备通讯正常,说明usb读卡器的硬件连接是没有问题的,这是什么原因呢? 首先,我在windows系统上用MyUSB_HID help工具查看设备信息如下图:

从图中可以看出这是具有一个用户定义的hid的usb设备,输入输出包长均是0x200,换算成十进制就是512字节。
而在windows的读卡程序中监控到读卡器的报告表的长度是513,如下图:


应用程序每次发送了513个字节的数据,第一个字节均发送了一个0x00,这个值是hid报告描述符的Report ID。由此分析windows上我们每次发送的数据长度是513个字节,虽然一个指令只有几个字节,但程序是按这个长度发送数据的。
在android系统上测得读卡器通讯的最大包长如下图:

在此看来,android平台上数据传输的包长是512字节,这个值是和用MyUSB_HID help工具查到的max packet size(0x200)是一致的,由此分析在android平台上每次发送一包数据是512个字节,既然这样那么问题就来了,在windows中我们检测到报告表的长度是513,那么在android平台每包发512字节,尽管这512字节中已经包括了读卡器的完整指令(如:aa bb 05 00 00 00 04 01 05),但实际上读卡器认为还少一个字节,所以读卡器不会正确执行这个指令,经过这样的分析,做如下操作:
第一次发送:aa bb 05 00 00 00 04 01 05 00 00 00 00 ... 共512字节
再次发送:    00 00 00 00 ... 共512字节
第一次接收512 字节:0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...共512字节
再次接收512 字节:-86, -69, 18, 0, 0, 0, 4, 1, 0, 67, 82, 53, 51, 49, 66, 56, 50, 48, 45, 49, 50, 117, 0, 0, 0, 0, 0, 0, 0,...共512字节
可以看出,第二次读到了完整数据,通过这个发送和接收过程,验证了上述的分析是正确的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝知此事要躬行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值