2016-06-04 2 views
0

MonoLibUsb (Linux)에서 USB 장치 핸들을 열려고하는데 장치를 열 때마다 장치 핸들에 IsInvalid == true이 표시됩니다.MonoLibUsb에서 USB 장치가 유효하지 않습니다.

USB 장치는 내 Windows PC에 연결 했으므로 LibUsb와 확실히 호환되며 LibUsbDotNet을 사용하여 성공적으로 대화 할 수 있습니다. Mono에서 LibUsbDotNet을 사용하려고하면 응용 프로그램이 열리려고 할 때 정지되므로 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 장치를 사용하기 전에 리눅스와 함께.

root로 (또는 sudo를 통해) 응용 프로그램을 시작할 때 장치 핸들이 유효하게됩니다.

관련 문제