Android USBHost模式-为什么我的IRDA设备在claimInterface上失败?

Android USBHost模式-为什么我的IRDA设备在claimInterface上失败?,usb,Usb,我有一个Lindy IRDA USB桥接器连接到我的Xperia Neo(氰Mod 9)。我已经改变了功能,以支持主机模式等。所有的代码看起来不错。我检测到了这个装置。我可以看到接口和两个端点(一进一出),但只要我尝试claimInterface,它就会失败,无论我是否尝试强制声明 似乎没有简单的方法来找出索赔失败的原因。尽管strace给了我一个线索,因为claim接口的ioctl调用失败,出现了一个device not found错误 忽略失败只会使我到达请求的最远位置,而请求随后无法排队或

我有一个Lindy IRDA USB桥接器连接到我的Xperia Neo(氰Mod 9)。我已经改变了功能,以支持主机模式等。所有的代码看起来不错。我检测到了这个装置。我可以看到接口和两个端点(一进一出),但只要我尝试claimInterface,它就会失败,无论我是否尝试强制声明

似乎没有简单的方法来找出索赔失败的原因。尽管strace给了我一个线索,因为claim接口的ioctl调用失败,出现了一个device not found错误

忽略失败只会使我到达请求的最远位置,而请求随后无法排队或发送

我的问题是(我认为):-

  • 导致索赔失败的具体原因是什么
  • 有没有一种方法可以在理想情况下不需要root
  • 有没有办法以某种方式推翻这一主张

  • 好的,我似乎已经开始回答我自己的问题了,但是我看到很多人对USB主机的明显支持和可以观察到的“奇怪”行为感到困惑,所以希望这个答案可以帮助你们中的一些人

    我提出了3个问题,我对1和3有一个明确的答案,但在这个阶段我对另一个问题不太确定

    1) 究竟遗漏了什么,为什么会导致错误的索赔? 问题是主机(我的Xperia Neo手机)正在检测设备a,但它支持的唯一配置是要求手机支持太多的电源

    奇怪的是,这并不能阻止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
    
    dmesg | tail
    usb 1-1:不支持设备v066f p4200
    usb 1-1:找到新的usb设备,idVendor=066f,idProduct=4200
    usb 1-1:新的usb设备字符串:Mfr=1,Product=2,SerialNumber=0
    usb 1-1:产品:IrDA/usb桥接器
    usb 1-1:制造商:Sigmatel公司
    usb 1-1:由于可用总线电源不足,1配置被拒绝
    usb 1-1:没有从1个选项中选择任何配置
    
    进一步的调查表明,这个小装置要求440mA的电流,这似乎很多,但对此似乎无能为力

    问题2:可以做任何不需要root的事情来解决这个问题吗? 似乎不是。理论上,我可以通过使用USB Y电缆或类似的黑客手段为设备提供外部电源,但我不认为这会改变手机拒绝需求的根本问题。即使使用root,也不清楚是否可以执行任何操作来覆盖电源配置文件

    问题3,是否有方法覆盖claimInterface()失败并强制通信?
    这是一个直截了当的否定。这个设备根本不是由内核创建的,因此没有什么可以覆盖的。这确实让人有点困惑,为什么Android库仍然提供它。

    至于问题2和电源需求

    我遇到过的大多数支持主机/OTG的android设备,其最大电流消耗仅为100mA左右。你能通过一些内核源代码黑客强迫它工作吗?很可能,但是你会冒着烧坏android设备中USB支持电路的风险。这是因为此类设备用于为外部usb设备供电的升压转换器仅在物理上支持最大100 mA电流消耗


    您能用Y形电缆从外部提供所需的电流吗?是的,我以前在没有boost converter的设备上做过这项工作,但是您需要在内核中找到一个解决方法,告诉它您有这样的外部电源,现在可以给设备通电了。

    回答您自己的问题非常好,因此,事实上我们鼓励您这样做!没有什么比一个没有答案的问题更糟糕的了…谢谢亚当,我同意寻找并找到一个问题的完美匹配是件令人沮丧的事,而你却发现它没有答案。如果询问者在一个月或六个月后没有解决问题,并且找到了其他解决方法,那就好了。也许值得一看,也许已经提出了这样的功能,或者你可以提出?