关于c ++:在Windows 10上为BLE GATT设备开发HID输入设备驱动程序

Developing an HID input device driver for a BLE GATT device on Windows 10

(这是来自MSDN论坛的交叉报道,因为在那里已经有一段时间没有任何回应了,我认为我会在这里得到更好的答案。)

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

我进行了一些研究,发现以下信息:

  • WDK 8.0中有BLE GATT Profile驱动程序示例,但它们已过时且无法与VS2017 / WDK10一起编译
  • 为了从非HID设备注入HID报告,您需要使用虚拟HID框架,该框架具有更详细的页面和示例。
  • Windows IoT核心版还有一个示例
  • 似乎不允许为BthLeEnum创建筛选器驱动程序
  • 适用于C ++的BLE GATT功能在MSDN上
  • 关于将它们用于客户端应用程序(而非驱动程序)的示例

我的问题是,这里需要哪种方法来创建此驱动程序?

  • 我是否需要创建两个驱动程序(虚拟HID驱动程序和GATT配置文件驱动程序),然后以某种方式将它们彼此连接?
  • 我是否需要从虚拟HID驱动程序进行Bluetooth LE API调用?
  • 我需要创建一个进行HID调用的GATT配置文件驱动程序吗?
  • 还是完全其他?

Windows 10上是否仍允许使用GATT Profile驱动程序,因为似乎不允许为BthLeEnum创建筛选器驱动程序?

更新资料

我非常感谢阿兰花时间回答问题,因此我将他的回答标记为对问题的回答。但是对我来说,这个问题尚未完全解决。看到这个问题已经获得超过10票,我认为它应该得到更广泛的答案。可以改进/添加的要点是:

  • 意见背后的论点(例如,为什么要用UMDF微型驱动程序而不是VHF驱动程序,为什么要使用需要使用cppwinrt而不是简单地使用我在研究中发现的C ++蓝牙功能的UWP蓝牙API,以及编写GATT Profile驱动程序等? )。没有这种说法,我将无法从建议中学到很多东西。
  • 我的子问题的答案
  • 在驱动程序中使用cppwinrt代码的示例,以及是否可以在其中访问这些API。是否有任何限制(因为代码不会从appx运行)? Cppwinrt在这里被介绍为新事物,但是我找不到在驱动程序上下文中使用cppwinrt的任何文档。
  • 对我自己的研究进行了一些思考-当前的答案与我发现的好点与否无关。这种思考将帮助我更好地理解该主题。

更新2

我认为Alain在VHF上推荐了UMDF HID微型驱动程序,因为VHF需要编写KMDF驱动程序。 UMDF的优点是易于调试(可以在本地PC上调试),较少的安全性(和签名)限制,并且在驱动程序中存在错误时不会对计算机进行错误检查。

更新3

为了能够创建一个注入RadialController事件的客户端应用程序(而不是必须编写驱动程序,这对于私有开发人员来说是一个很大的障碍),我在Feedback Hub上发布了对它的请求。如果您认为值得支持,请考虑投票。


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

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

我希望这有帮助!
阿兰


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

我能够编译WpdHealthHeartRateService。