Я работаю над проектом, который имитирует 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 (в соответствии со свойствами файла).
Заранее спасибо за любые предложения!