无法声明界面:资源繁忙

时间:2014-05-20 15:58:39

标签: java linux eclipse usb4java

我正在使用USB4Java(低级版本),我基本上使用此代码here。 我在Ubuntu工作,我遇到了关于权限的问题但是能够通过终端使用gksu运行eclipse来解决。

现在我遇到了一个新问题: 当我在这里得到代码中的要点时:

public static void claimDevice(DeviceHandle handle, int interfaceNum){
    int r = LibUsb.claimInterface(handle, interfaceNum);
    .
    .
    .

我得到一个例外,告诉我'#34;资源忙碌":

USB error 6: Unable to claim interface: Resource busy

之前我曾经使用过Ubuntu(但从未进行过开发,所以我对此非常陌生)。 如果这不是应该处理这个问题的,那么请告诉我在哪里接受它以便我得到答案。

具体来说,问题是,这是什么意思,我该如何解决? 我的目标,在这种情况下,这是一个自定义的USB设备,是创建一个低级别的跨平台...基于java ..."驱动程序" (松散地使用该术语)。我现在正在使用Ubuntu,因为终端lsusb命令在相关设备上提供了大量信息。

2 个答案:

答案 0 :(得分:6)

我能够(感谢一些哄骗)找到谷歌的答案:对于遇到此错误并且不想挖掘的其他人,在我工作的环境中我需要分离界面在我声明它之前从内核开始,就像这样:

public static void claimDevice(DeviceHandle handle, int interfaceNum){
    int r = LibUsb.detachKernelDriver(handle, interfaceNum);
    if (r != LibUsb.SUCCESS && 
        r != LibUsb.ERROR_NOT_SUPPORTED && 
        r != LibUsb.ERROR_NOT_FOUND) throw new LibUsbException("Unable to detach kernel     driver", r);
    .
    .
    .

希望这对你也有帮助。

答案 1 :(得分:0)

声称设备的一种更简单的方法是使用usb4java documentation

中所述的强制声明
    UsbConfiguration configuration = device.getActiveUsbConfiguration();
    UsbInterface iface = configuration.getUsbInterface((byte) 0);
    iface.claim(new UsbInterfacePolicy()
    {            
        @Override
        public boolean forceClaim(UsbInterface usbInterface)
        {
            return true;
        }
    });

    try
    {

        System.out.println("is active: " + iface.isActive());

    }
    finally        
    {
        iface.release();
    }