Почему я не могу подключиться к своему USB-устройству с помощью HIDSharp? - PullRequest
0 голосов
/ 24 мая 2019

Я работаю над проектом, который имитирует USB-композитное устройство, состоящее из HID-клавиатуры и HID-мыши с использованием микропроцессора. У меня есть устройство, которое правильно перечисляет и работает с обоими хостами Windows 7 x64 и Raspbian, и все это выглядит хорошо, но я сталкиваюсь с проблемой: приложение winforms (использующее HidSharp) открывает открытое подключенное композитное устройство, чтобы я мог получить необработанные данные в конечной точке клавиатуры.

Проблема, похоже, связана с функцией TryOpen (), в которой я могу найти подключенное устройство, сопоставляя VID и PID, я назначаю информацию об устройстве и дескриптор отчета, но когда я пытаюсь открыть поток данных через TryOpen () это терпит неудачу, и я не знаю почему. К сожалению, функция возвращает только логическое значение, поэтому я не знаю, почему это происходит с ошибкой, просто она не может открыть поток данных. Мне интересно, может быть, есть что-то смешное с открытием композитного устройства, о котором я не знаю? Мой код для поиска устройства и открытия потока данных ниже:

/*These vars are part of the class*/
byte[] keyboardBuffer;  //EP1
HidSharp.Reports.Input.HidDeviceInputReceiver InputReceiver;
HidSharp.Reports.ReportDescriptor KeyboardRptDescriptor;
HidStream KeyboardStream;
HidDevice KeyboardDevice;

private void FindDevice()
{
    var list = DeviceList.Local;
    var stopwatch = Stopwatch.StartNew();
    var hidDeviceList = list.GetHidDevices().ToArray();

    foreach (HidDevice d in hidDeviceList)
    {

        if (d.VendorID == 0x0000 && d.ProductID == 0xA0A0)
        {
            /*Proper VID and PID Found*/
            if (d.GetProductName() == "Keyboard")
            {
                KeyboardDevice = d;
                KeyboardRptDescriptor = KeyboardDevice.GetReportDescriptor();

            }

        }

    }

    if (KeyboardDevice != null)
    {
        /*Device Found, open the datastream*/
        if (KeyboardDevice.TryOpen(out KeyboardStream))    //PROBLEM LINE - Always False?
        {
            KeyboardReport = KeyboardRptDescriptor.InputReports.FirstOrDefault();
            keyboardBuffer = new byte[KeyboardDevice.GetMaxInputReportLength()];
            InputParser = KeyboardReport.DeviceItem.CreateDeviceItemInputParser();
            InputReceiver = KeyboardRptDescriptor.CreateHidDeviceInputReceiver();
            InputReceiver.Received -= new EventHandler(HidInputReceived);
            InputReceiver.Received += new EventHandler(HidInputReceived);
            InputReceiver.Start(KeyboardStream);
        } else {
            rtb_hidLog.AppendText("Unable to connect to device\r\n");
        }


    }
    else
    {
        rtb_hidLog.AppendText("No Device Found\r\n");
    }

}

Прямо сейчас я пытаюсь читать только с клавиатуры HID и добавлю мышь, когда раскладываю клавиатуру. По-видимому, проблем с поиском устройства не возникает, но почему его открывают, если возникают проблемы? Моя библиотека HIDSharp выглядит как v2.0.2.0 (в соответствии со свойствами файла).

Заранее спасибо за любые предложения!

1 Ответ

1 голос
/ 29 мая 2019

Итак, я спросил об этом на форуме HIDSharp и получил ответ от dev :

Оказывается, Windows не позволяет открывать устройства HID Keyboard в качестве «функции» безопасности, поэтому HIDSharp всегда не сможет открыть поток данных устройства HID Keyboard.

...