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

问题描述 投票:15回答:2

(这是一个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

Update

我真的很感激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。如果您认为值得支持,请考虑投票。

c++ windows-10 bluetooth-lowenergy driver hid
2个回答
2
投票

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

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

我希望这有帮助!阿兰


0
投票

关于WDK 8.0中的BLE GATT Profile驱动程序示例,您可以按照here的步骤使用VS2017 / WDK10进行编译

我能够编译WpdHealthHeartRateService。

© www.soinside.com 2019 - 2024. All rights reserved.