拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 214|回复: 0

Android usb hid 通讯点点滴滴

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2020-4-10 09:41:08 | 显示全部楼层 |阅读模式
   一款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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-26 01:29 , Processed in 0.200416 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表