Разработка драйвера устройства ввода HID для устройства BLE GATT в Windows 10
(Это crosspost с форумов MSDN, так как там не было никакого ответа там в течение некоторого времени, и я думал, что буду получите лучшие ответы здесь.)
У меня есть устройство BLE, содержащее пользовательскую службу GATT, из которой я не могу изменить прошивку. Я хочу прослушать характерные события GATT из этой службы и заставить Windows использовать их как отчеты HID, чтобы Windows распознала это как другое устройство. Как я могу это сделать?
Я провел некоторое исследование и нашел следующую информацию:
Мой вопрос: какой подход нужен здесь для создания этого драйвера?
- Нужно ли мне создавать два драйвера (виртуальный HID-драйвер и драйвер профиля GATT), а затем каким-то образом подключать их друг к другу?
- Нужно ли мне делать вызовы Bluetooth LE API от виртуального HID-драйвера?
- Нужно ли мне создавать драйвер профиля GATT, который делает вызовы HID?
- Или что-то еще?
В Windows 10 все еще разрешены драйверы профиля GATT, так как кажется, что не разрешено создавать драйверы фильтров для BthLeEnum
?
Update
Я очень признателен, что Ален нашел время, чтобы ответить на вопрос, и поэтому я отметил его ответ в качестве ответа на вопрос; однако для меня вопрос еще не полностью ответил. Увидев, что вопрос уже получил более 10 голосов, я думаю, что он заслуживает более широкого ответа. Точками, которые могут быть улучшены/добавлены, являются:
- аргументация за советом (например, почему мини-драйвер UMDF вместо VHF-драйвера, зачем использовать API-интерфейсы UWP bluetooth, требующие использовать cppwinrt вместо простого использования функций Bluetooth С++, которые я нашел в своих исследованиях, как насчет написания драйвера профиля GATT, и т.д.). Без этой аргументации я не буду многому научиться из совета.
- отвечает на мои подзапросы
- примеры использования кода cppwinrt из драйвера и есть ли доступ к этим API там. Существуют ли какие-либо ограничения для этого (поскольку код не будет запущен из приложения)? Cppwinrt здесь называется чем-то новым, но я не могу найти документацию об использовании cppwinrt в контексте драйвера.
- некоторые размышления о моих собственных исследованиях - текущий ответ не затрагивает, какие моменты я нашел, хорошие или нет. Это отражение поможет мне лучше понять эту тему.
Ответы
Ответ 1
Лучшим подходом к этому было бы создание драйвера HID UMDF (https://docs.microsoft.com/en-us/windows-hardware/drivers/wdf/creating-umdf-hid-minidrivers), который устанавливается на устройстве bthleenum node который создается для пользовательского сервиса устройства и использует новый интерфейс LE LE UWP (https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile).
Существует некоторая двусмысленность в отношении использования UWP Apis из приложения non store, но это неверно. Эти Apis можно использовать практически во всех условиях. Если вам нужна помощь в настройке вашего проекта, вот пример С++/UWP, который поможет вам начать работу.
Надеюсь, это поможет!
Ален