Я пытаюсь использовать метод ControlTransfer библиотеки LibUsbDo tNet 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. Я не смог найти ничего в документации об обработке ошибок или когда этот метод возвращает false. Я использовал вызов GetLastError
, чтобы узнать, есть ли какие-либо ошибки, и он последовательно возвращает 31 (или 0x1F), однако я не смог найти в Интернете ничего об этой ошибке.
Этот является единственным другим вопросом, который мне удалось найти в SO по этому поводу, и в ответе предлагается использовать 0x0 для последнего параметра в вызове конструктора UsbSetupPacket
. Пробовал, все еще возвращает ложь.
Есть идеи?