Как я могу определить, почему метод ControlTransfer в LibUsbDo tNet in C# возвращает false? - PullRequest
1 голос
/ 09 февраля 2020

Я пытаюсь использовать метод 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. Пробовал, все еще возвращает ложь.

Есть идеи?

1 Ответ

0 голосов
/ 09 февраля 2020

Вы пытались использовать следующие два:

LastErrorNumber

UsbDevice.LastErrorNumber

Возвращает последний номер ошибки, сообщенный LibUsbDo tNet.

И

LastErrorString

UsbDevice.LastErrorString

http://libusbdotnet.sourceforge.net/V2/html/f3942add-f073-3881-7146-0673415cee3b.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...