USB设备在MonoLibUsb中无效

时间:2016-06-04 19:12:14

标签: c# mono libusb libusbdotnet

我正在尝试在MonoLibUsb中打开USB设备句柄(在Linux上),但每次打开它时,我都会在设备句柄上获得IsInvalid == true

USB设备肯定与LibUsb兼容,因为我已经将它连接到我的Windows PC,并且可以成功使用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 -

1 个答案:

答案 0 :(得分:0)

文档中的这一行很容易被忽视:

  

用户必须具有对usb设备的适当访问权限才能与linux一起使用。

如果我以root身份(或通过sudo)启动应用程序,设备句柄就会生效。