2016-11-11 4 views
2

Ошибка в Windows 10 UWP C# для доступа к USB-устройству HID.Windows 10 UWP HID DLL Read Input Report Fails

  • У меня нет проблем с поиском устройства (GetDeviceSelector, DeviceInformation) и без проблем открыть устройство (FromIdAsync).
  • Я также могу отправить выходной отчет без проблем (CreateOutputReport, добавить массив байтов для сообщения, SendOutputReportAsync), и устройство USB реагирует правильно, включив светодиод.
  • Я не могу прочитать входной отчет (GetInputReportAsync), независимо от того, что я пытаюсь включить в различные идентификаторы отчетов. При попытке этого устройства устройство по-прежнему действует и не имеет значения.

Я проверил двойной идентификатор VID, PID, страницу использования и идентификатор. Ничто из этого не нарушает ничего, что я могу найти в документах, не пытаясь использовать страницы использования верхнего уровня.

Я дважды проверил прошивку на устройстве и его дескриптор USB. Диспетчер устройств счастлив в Windows 7 или 10, никаких проблем не сообщалось. Я могу получить доступ к устройству в Windows 7 или 10 через DLL-интерфейс, который я написал с помощью Windows DDK для использования с Windows 7 и тестовым приложением, а также отправлять и получать в Windows 7 или 10. Я могу установить светодиод, и т. д., все функции работают.

Я подключен анализатор USB и пакеты есть, но функция GetInputReportAsync не будет возвращать данные, просто исключение «Устройство, подключенное к системе не работает (Исключение из HRESULT: 0x8007001F).»

Использование окна 10 Home, режим разработчика включен. Попробовали Visual Studio 2015 Community Edition и VS 2015 Pro. Я пробовал Windows-universal-samples-master на GitHub и проекте CustomHidDeviceAccess, не повезло, мое устройство немного отличается от того, которое используется в этой демонстрации.

Кто-нибудь видел это раньше? Есть ли какой-то трюк или особый способ сделать это? Есть ли параметр, отсутствующий в Windows 10 или моем проекте? Существуют ли определенные страницы использования в шестнадцатеричном формате FF? диапазон, который я не могу использовать с UWP? Или некоторые идентификаторы отчетов? Просто интересно, почему я всегда получаю исключение, пытаясь получить входной отчет через C# UWP и почему моя DLK DLL/приложение всегда работает. Предложения? Спасибо.

ответ

1

Очевидно, вы не можете просто вызвать функцию GetInputReportAsync(), чтобы прочитать отчет. Вместо этого единственный способ заставить его работать - добавить обработчик событий на мое устройство для обработки получения входного отчета через InputReportReceived. Затем после того, как я отправлю свой выходной отчет, дождитесь, пока обработчик события будет запускать и уведомлять данные входного отчета с устройства, ответ на мою команду. Кажется, это единственный способ заставить его работать над этой конфигурацией.