2016-06-04 2 views
0

Я пытаюсь открыть дескриптор устройства USB в MonoLibUsb (в Linux), но каждый раз, когда я его открываю, я получаю IsInvalid == true на дескрипторе устройства.Устройство USB не действует в MonoLibUsb

USB-устройство, безусловно, совместимо с LibUsb, поскольку я подключил его к компьютеру с ОС Windows и могу успешно использовать LibUsbDotNet, чтобы поговорить с ним. Если я попытаюсь использовать LibUsbDotNet в Mono, приложение зависает при попытке открыть его, поэтому я решил, что LibUsbDotNet предназначен для Windows, а MonoLibUsb для Mono (имя типа отдает его). Однако даже MonoLibUsb не может правильно использовать устройство.

Так почему же дескриптор устройства недействителен?

Код

private void UsbInit() { 
    var sessionHandle = new MonoUsbSessionHandle(); 
    var profileList = new MonoUsbProfileList(); 
    profileList.Refresh(sessionHandle); 

    List<MonoUsbProfile> usbList = profileList.GetList().FindAll(MyVidPidPredicate); 

    foreach(MonoUsbProfile profile in usbList) { 
     var deviceHandle = profile.OpenDeviceHandle(); 

     if (deviceHandle.IsInvalid) { 
      Console.WriteLine(string.Format("IsInvalid: {0} - {1}", MonoUsbSessionHandle.LastErrorCode, MonoUsbSessionHandle.LastErrorString)); 
     } 
    } 
} 

private bool MyVidPidPredicate(MonoUsbProfile profile) { 
    if (profile.DeviceDescriptor.VendorID == 0xabcd && profile.DeviceDescriptor.ProductID == 0x1234) 
     return true; 
    return false; 
} 

Выход

IsInvalid: Success - 

ответ

0

Эта линия в документации очень легко упустить из виду:

пользователь должен иметь соответствующие права доступа к USB-устройство до его использования d с linux.

Если я запускаю приложение с правами root (или через sudo), то дескриптор устройства становится действительным.

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