我正在研究嵌入式系统,我需要确定用户是否连接了模拟键盘(即条形码扫描仪)或实际键盘的HID设备。
我可以检查iManufacturer,iProduct,iSerialNumber和iInterface字符串描述符以获得一些线索。例如,当连接条形码阅读器时,已经观察到“阅读器”或“扫描仪”出现在iProduct字符串中。同样,在iInterface字符串中也可以看到“仿真”。但是,我有点不愿意完全依赖这些字符串(字符串情况很容易处理,但处理关键字/短语中的缩写很快就会变得繁重。)
我已经回顾了USB 1.10和1.11规范,发现报告描述符也提供了一些提示。例如,Global Usage项应该类似于通用桌面的0x0501,而Local Usage项应该是0x0906(键盘)。报告描述符中是否还有其他可能有助于检测差异的内容?
我希望避免依赖供应商ID和产品ID列表,因为这是一个资源有限的嵌入式系统。建议?有没有我错过的东西?
答案 0 :(得分:5)
没有绝对可靠的方法来做到这一点。不可能,因为没有绝对定义什么是键盘或不是键盘 - 也没有“模拟键盘”和“作为键盘”之间的区别。边缘在辅助设备和键盘等方面变得特别模糊,但除此之外,您还有一个基本问题,即模拟键盘的方式是通过USB电缆与键盘通信的方式进行通信。
您建议的方法是合理的启发式方法,用于识别明显非键盘的一些事物(在某些情况下具有微弱的误报风险),但寻找提示的启发式算法是最佳解决方案。是可能的。