我如何确定为什么 C# returns 中 LibUsbDotNet 的 ControlTransfer 方法为 false?
How can I determine why ControlTransfer method of LibUsbDotNet in C# returns false?
我正在尝试使用 ControlTransfer method of the LibUsbDotNet C# 库与 USB 设备通信,但该方法一直返回 false。我的代码如下:
private bool writeCtrlMsg(int value, int index, byte[] buffer)
{
if (buffer == null || buffer.Length == 0)
throw new ArgumentException("Null or invalid length param.", "buffer");
if (_rtlUSBDongle == null)
throw new DongleNotOpeningException();
if (!_rtlUSBDongle.IsOpen && !_rtlUSBDongle.Open())
throw new DongleConnectionException();
var shortVal = (short)value;
var shortIndex = (short)index;
var usbSetupPacket = new UsbSetupPacket(
(byte)(UsbCtrlFlags.Direction_Out | UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device),
0,
value,
index,
buffer.Length
);
var result = _rtlUSBDongle.ControlTransfer(ref usbSetupPacket, buffer, buffer.Length, out var lengthTransferred);
var errorCode = GetLastError();
var errorCodeHex = errorCode.ToString("X");
return result;
}
方法调用的一个例子是:writeCtrlMsg(0x34, 0x619, new byte[] { 0x83 })
。无论我使用什么值,ControlTransfer
方法都会返回 false。我在文档中找不到任何关于错误处理或此方法 returns 错误的信息。我使用 GetLastError
调用来查看我是否收到任何错误,它一直是 returns 31(或 0x1F),但是我在网上找不到任何关于此错误的信息。
This 是我能够在 SO 上找到的唯一其他问题,答案建议使用 0x0 作为 UsbSetupPacket
构造函数调用中的最后一个参数。试过了,还是returns false.
有什么想法吗?
您是否尝试过使用以下两个:
UsbDevice.LastErrorNumber
Returns the last error number reported by LibUsbDotNet.
和
UsbDevice.LastErrorString
http://libusbdotnet.sourceforge.net/V2/html/f3942add-f073-3881-7146-0673415cee3b.htm
我正在尝试使用 ControlTransfer method of the LibUsbDotNet C# 库与 USB 设备通信,但该方法一直返回 false。我的代码如下:
private bool writeCtrlMsg(int value, int index, byte[] buffer)
{
if (buffer == null || buffer.Length == 0)
throw new ArgumentException("Null or invalid length param.", "buffer");
if (_rtlUSBDongle == null)
throw new DongleNotOpeningException();
if (!_rtlUSBDongle.IsOpen && !_rtlUSBDongle.Open())
throw new DongleConnectionException();
var shortVal = (short)value;
var shortIndex = (short)index;
var usbSetupPacket = new UsbSetupPacket(
(byte)(UsbCtrlFlags.Direction_Out | UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device),
0,
value,
index,
buffer.Length
);
var result = _rtlUSBDongle.ControlTransfer(ref usbSetupPacket, buffer, buffer.Length, out var lengthTransferred);
var errorCode = GetLastError();
var errorCodeHex = errorCode.ToString("X");
return result;
}
方法调用的一个例子是:writeCtrlMsg(0x34, 0x619, new byte[] { 0x83 })
。无论我使用什么值,ControlTransfer
方法都会返回 false。我在文档中找不到任何关于错误处理或此方法 returns 错误的信息。我使用 GetLastError
调用来查看我是否收到任何错误,它一直是 returns 31(或 0x1F),但是我在网上找不到任何关于此错误的信息。
This 是我能够在 SO 上找到的唯一其他问题,答案建议使用 0x0 作为 UsbSetupPacket
构造函数调用中的最后一个参数。试过了,还是returns false.
有什么想法吗?
您是否尝试过使用以下两个:
UsbDevice.LastErrorNumber
Returns the last error number reported by LibUsbDotNet.
和
UsbDevice.LastErrorString
http://libusbdotnet.sourceforge.net/V2/html/f3942add-f073-3881-7146-0673415cee3b.htm