Open
Description
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:
getActiveUsbConfiguration()
also returns null.- Further down, when we loop through
getUsbConfigurations()
we can get hold of aUsbConfiguration
. However, when we try toclaim
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: Can't claim device on Mac usb4java#51
- if not, is there a way to get hold of an active UsbConfiguration from here.
Metadata
Metadata
Assignees
Labels
No labels