I am trying to create a driver for a USB-to-DMX converter (Velleman VM116.)
The problem I have is that when I try to open the USB device and configure it it returns a error: Configurating USB failed: Operation not permitted
, I cannot find what this error stands for. How can I configure the USB device the good way? This is my code:
int dmxOpen(){
int result;
struct usb_bus *busses;
struct usb_bus *bus;
usb_init();
usb_find_busses();
result = usb_find_devices();
if(result < 0){
perror("Finding USB devices failed");
return 0;
}
usb_set_debug(1);
busses = usb_get_busses();
for(bus = busses; bus; bus = bus->next){
for(dev = bus->devices; dev; dev = dev->next){
if ((dev->descriptor.idVendor == 0x10cf) && (dev->descriptor.idProduct == 0x8062)){
udev = usb_open(dev);
#if defined(LIBUSB_HAS_GET_DRIVER_NP) && defined(LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP)
usb_detach_kernel_driver_np(udev, 0);
#endif
result = usb_set_configuration(udev, dev->descriptor.bNumConfigurations);
if(result < 0){
usb_close(udev);
perror("Configurating USB failed");
return 0;
}
result = usb_claim_interface(udev, 0);
if(result < 0){
usb_release_interface(udev, 1);
usb_close(udev);
perror("Claiming USB failed");
return 0;
}
return 1;
}
}
}
return 0;
}
By the way my computer is running on Linux Debian 64 bit, and this are the device specs:
Bus 010 Device 002: ID 10cf:8062 Velleman Components, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x10cf Velleman Components, Inc.
idProduct 0x8062
bcdDevice 0.00
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 29
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
It was indeed a privilege problem, when I
sudo
it it works
You can use a UDEV script to change the permissions of your USB device on attach. This way you don't need to be root
to allow access via libusb
.