好的,所以我似乎在这里回答了我自己的问题,但我发现很多人对 USB 主机的明显支持和可以观察到的“奇怪”行为感到困惑,所以希望这个答案可以帮助一些人你出去。
我提出了 3 个问题,我对 1 和 3 有了明确的答案,但现阶段我对另一个不太确定。
1) 究竟缺少什么,为什么会导致不良索赔?
问题是该设备,一个Lindy IRDA 适配器主机(我的 Xperia Neo 手机)正在检测到该配置,但它支持的唯一配置需要太多电量,手机无法支持。
奇怪的是,这并不能阻止 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 库仍然提供它。