我正在尝试在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 -
答案 0 :(得分:0)
文档中的这一行很容易被忽视:
用户必须具有对usb设备的适当访问权限才能与linux一起使用。
如果我以root身份(或通过sudo)启动应用程序,设备句柄就会生效。