I want to be able to read data from an USB pedometer. I'm trying this in Java and I'm using the LibUsb and Usb4Java libraries. I can't seem to claim the usb pipe or anything like that.
The code I'm using:
final Context context = new Context();
int result = LibUsb.init(context);
if (result < 0)
{
throw new LibUsbException("Unable to initialize libusb", result);
}
DeviceHandle handle = LibUsb.openDeviceWithVidPid(context, vid, pid);
if (handle != null)
{
Device d = LibUsb.getDevice(handle);
int res = LibUsb.claimInterface(handle, 0);
Int res returns '-3' which is 'LIBUSB_ERROR_ACCESS'
The device is found but not claimable.
The USB device has only 1 interface.
Any help would be appreciated!
LibUsb needs root permission to access usb devices. In Mac having admin account is not enough to access usb devices. You have to run it as root (admin and root is not same). When I was using it on my Mac (OSX EL Capitan) I was facing the same problem and I thought its the problem with devices or library is not working properly but later i realised that its the problem with permission. Guess your program name is myDevicesAccessor then run it like this.
sudo ./myDevicesAccessor
If you try it like
./myDevicesAccessor
It won't work.
It could be related to an issue due to wrong permissions.
Here is an interesting comment from someone that incurred in a similar problem.
They suggest to edit the file /etc/udev/rules.d/90-usbpermission.rules
by adding the following line:
SUBSYSTEM==“usb”,GROUP=“users”,MODE=“0666”
Hoping it helps, it mostly depends on the host system.
Another interesting thread is this one.
Someone simply got around the issue by not claiming the ownership of the interface.
I guess this would work also in your case, at least as a workaround until a definitive solution has been found.