(Это crosspost с форумов MSDN, так как там не было никакого ответа там в течение некоторого времени, и я думал, что буду получите лучшие ответы здесь.)
У меня есть устройство BLE, содержащее пользовательскую службу GATT, из которой я не могу изменить прошивку. Я хочу прослушать характерные события GATT из этой службы и заставить Windows использовать их как отчеты HID, чтобы Windows распознала это как другое устройство. Как я могу это сделать?
Я провел некоторое исследование и нашел следующую информацию:
- Образцы драйверов BLE GATT в WDK 8.0, но они устарели и не компилируются с VS2017/WDK10
- Чтобы внедрить отчеты HID с не-HID-устройства, вам необходимо использовать виртуальную HID-инфраструктуру, для которой есть более подробная страница и образец.
- Существует также образец для Windows IoT Core
- Кажется, что не разрешено создавать драйверы фильтра для
BthLeEnum
- доступные функции BLE GATT для С++ находятся на MSDN
- Существует образец для использования их для клиентского приложения (а не для драйвера)
Мой вопрос: какой подход нужен здесь для создания этого драйвера?
- Нужно ли мне создавать два драйвера (виртуальный 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 в контексте драйвера.
- некоторые размышления о моих собственных исследованиях - текущий ответ не затрагивает, какие моменты я нашел, хорошие или нет. Это отражение поможет мне лучше понять эту тему.