2013-03-04 2 views
1

Я пытаюсь создать драйвер для USB-к-DMX преобразователя (Velleman VM116.)USB ошибка разрешения с помощью libusb

У меня есть проблема в том, что, когда я пытаюсь открыть устройство USB и настроить его его возвращает ошибку: Configurating USB failed: Operation not permitted, я не могу найти, что означает эта ошибка. Как я могу правильно настроить USB-устройство? Это мой код:

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; 
} 

Кстати мой компьютер работает на Linux Debian 64 бит, и это те характеристики устройства:

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 
+1

всегда, используйте perror вместо printf –

+0

Теперь я изменил все 'printf' на' perror', а ошибка 'Configurating USB failed: Operation not allowed ', как я могу получить разрешение? – tversteeg

+0

Не уверен, почему операция не разрешена, может быть проблемой с привилегиями, попробуйте запустить ее как root. Это метод драйвера или тестовое приложение для драйвера? –

ответ

2

It was indeed a privilege problem, when I sudo it it works

Вы можете использовать UDEV скрипт для изменения разрешения вашего USB-устройства при подключении. Таким образом, вам не нужно быть root, чтобы разрешить доступ через libusb.

Смежные вопросы