usb4java-javax icon indicating copy to clipboard operation
usb4java-javax copied to clipboard

getActiveUsbConfiguration returns null

Open hamzeen opened this issue 1 year ago • 0 comments

The Issue:

Sporadically we run into an issue where usbDevice.getActiveUsbConfiguration(); returns null. The code was run on a virtual machine. Mostly, this issue occurs when the program is started on a PC without hardware & then the session is switched to a PC with the hardware.

tried the following:

  • list the usb devices using hub.getAttachedUsbDevices()
  • If the usb interface is still claimed, then release the usb interface
  • finally:
      private UsbConfiguration getUsbConfiguration() {
        UsbConfiguration config = null;

        if (usbDevice == null) {
          LOGGER.warn("The usbDevice is null!");
          return null;
        }

        synchronized (usbDevice) {
          config = usbDevice.getActiveUsbConfiguration();
          if (config != null) {
            return config;
          }

          List<UsbConfiguration> configs = getUsbDevice().getUsbConfigurations();
          if (!configs.isEmpty()) {
            for (UsbConfiguration temp : configs) {
              LOGGER.debug("UsbConfiguration:: {} \tis active: {} \tdevice: {}", 
                 temp.toString(), temp.isActive(), temp.getUsbDevice());
            }
            config = configs.get(0);
          }
          return config;
        }
      }

This is what we observe, when the above code runs following the issue:

  • in the first step, we see the device we need to communicate.

  • once we are in the last step to get a USB Configuration:

    1. getActiveUsbConfiguration() also returns null.
    2. Further down, when we loop through getUsbConfigurations() we can get hold of a UsbConfiguration. However, when we try to claim the usbInterface again, we end up with the following exception:
       java.util.concurrent.CompletionException: javax.usb.UsbNotActiveException: Pipe is not active.
    

I have 2 questions:

  • is this a known defect of the library, could it be related to: https://github.com/usb4java/usb4java/issues/51
  • if not, is there a way to get hold of an active UsbConfiguration from here.

hamzeen avatar Mar 22 '24 10:03 hamzeen