在Windows 10上为BLE GATT设备开发HID输入设备驱动程序

时间:2017-08-19 16:10:35

标签: c++ windows-10 bluetooth-lowenergy driver hid

(这是一个crosspost from the MSDN forums,因为很长一段时间没有任何回复,我想我会在这里得到更好的答案。)

我有一个包含自定义GATT服务的BLE设备,我无法修改固件。我想从该服务中侦听GATT特征事件,并使Windows将它们作为HID报告使用,以使Windows将其识别为另一个设备。我该怎么做呢?

我进行了一些研究,并找到了以下信息:

我的问题是,这里需要什么方法才能创建此驱动程序?

  • 我是否需要创建两个驱动程序(虚拟HID驱动程序和GATT配置文件驱动程序),然后以某种方式将它们相互连接?
  • 我是否需要从虚拟HID驱动程序进行蓝牙LE API调用?
  • 我是否需要创建一个可以进行HID呼叫的GATT配置文件驱动程序?
  • 还是别的什么?

GATT配置文件驱动程序是否仍然允许在Windows 10上使用,因为它似乎是not allowed to create filter drivers for BthLeEnum

更新

我真的很感激Alain花时间回答这个问题,因此我将答案标记为问题的答案;但对我来说,这个问题还没有完全回答。看到问题已经超过10票,我认为应该得到更广泛的答案。可以改进/添加的要点是:

  • 建议背后的论证(例如为什么UMDF minidriver而不是VHF驱动程序,为什么要使用UWP蓝牙API需要使用cppwinrt而不是简单地使用我在研究中找到的C ++蓝牙功能,那么编写GATT Profile驱动程序呢?等)。如果没有这种论证,我将不会从建议中学到很多东西。
  • 回答我的问题
  • 使用来自驱动程序的cppwinrt代码的示例以及是否可以在那里访问这些API。是否有任何限制(since the code will not be running from an appx)? Cppwinrt在这里作为新的东西,但我找不到任何在驱动程序的上下文中使用cppwinrt的文档。
  • 对我自己的研究进行了一些反思 - 目前的答案并没有触及我发现的好点与否。这种反思将有助于我更好地理解这个主题。

更新2

我认为Alain推荐使用UMFF HID微型驱动器而不是VHF,因为VHF需要编写KMDF驱动程序。 UMDF具有更容易调试(可以在本地PC上调试),安全性(和签名)限制更少的优点,并且当驱动程序中存在错误时没有错误检查机器的风险。

更新3

为了能够创建一个注入RadialController事件的客户端应用程序(而不是必须编写一个对私人开发人员来说是一个非常高的障碍的驱动程序),我发布了request for it on Feedback Hub。如果您认为值得支持,请考虑投票。

3 个答案:

答案 0 :(得分:1)

最好的方法是创建一个UMDF HID驱动程序(https://docs.microsoft.com/en-us/windows-hardware/drivers/wdf/creating-umdf-hid-minidrivers),该驱动程序安装在为设备自定义服务创建的bthleenum设备节点上,并使用新的蓝牙LE UWP apis (https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile)。

关于非商店应用程序使用UWP Apis存在一些歧义,但这是不正确的。这些Apis可用于几乎所有条件。如果您需要设置项目的帮助,这里有一个C ++ / UWP示例,可以帮助您入门。

我希望这有帮助! 阿兰

答案 1 :(得分:0)

关于WDK 8.0中的BLE GATT配置文件驱动程序示例,您可以按照here

步骤使用VS2017 / WDK10进行编译。

我能够编译WpdHealthHeartRateService。

答案 2 :(得分:0)

我将其作为概念验证工作,但并不可靠。在我有时间进行投资时,开发Windows驱动程序的学习曲线实在太陡了。

此外,作为私人,我永远无法将其分发给其他人,因为驾驶员需要经历签名和发布过程。

为了知识交流: