好的,所以我似乎已经在这里回答了我自己的问题,但是我看到很多人对 USB 主机的明显支持和可以观察到的“奇怪”行为感到困惑,所以希望这个答案可以帮助一些人你出去。
我提出了 3 个问题,我对 1 和 3 有一个明确的答案,但在这个阶段我对另一个问题不太确定。
1)究竟缺少什么,为什么这会导致错误的索赔?问题是主机(我的 Xperia Neo 手机)正在检测该设备,一个lindy IRDA 加密狗,但它支持的唯一配置是要求手机支持太多功率。
奇怪的是,这并不能阻止 a) 设备被 Android 库检测和枚举,或者 b) 设备似乎已通电(红色 LED 发光)
在任何系统库调用失败的 claimInterface() 时都没有报告,但是连接设备时运行的 dmesg|tail 提供了必要的洞察力。
dmesg | tail
<3>usb 1-1: device v066f p4200 is not supported
<6>usb 1-1: New USB device found, idVendor=066f, idProduct=4200
<6>usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
<6>usb 1-1: Product: IrDA/USB Bridge
<6>usb 1-1: Manufacturer: Sigmatel Inc
<6>usb 1-1: rejected 1 configuration due to insufficient available bus power
<4>usb 1-1: no configuration chosen from 1 choice
进一步的调查表明,这个小设备声称需要 440mA,这似乎相当多,但似乎几乎没有什么可以做的。
问题 2 可以做任何不需要 root 的事情来解决这个问题吗?似乎没有。从理论上讲,我可以通过使用 USB Y 电缆或类似的黑客技术为设备提供外部电源,但我认为这不会改变手机拒绝需求的根本问题。即使使用 root 也不清楚是否可以做任何事情来覆盖电源配置文件。
问题 3,有没有办法覆盖 claimInterface() 失败并强制通信?这是一个直截了当的不。该设备根本不是由内核创建的,因此首先没有什么可以覆盖的。这确实让 Android 库为什么仍然提供它有点令人费解。