|
一款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字节
可以看出,第二次读到了完整数据,通过这个发送和接收过程,验证了上述的分析是正确的。
————————————————
版权声明:本文为CSDN博主「绝知此事要躬行」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/donghailin/java/article/details/83827058
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|