(这是一个 crosspost from the MSDN forums,因为已经有一段时间没有任何回应了,我想我会在这里得到更好的答案。)
我有一个包含自定义 GATT 服务的 BLE 设备,我无法修改其中的固件。我想监听来自该服务的 GATT 特征事件,并使 Windows 将它们作为 HID 报告使用,以使 Windows 将其识别为另一台设备。我该怎么做呢?
我进行了一些研究,发现了以下信息:
- 有BLE GATT Profile driver samples in WDK 8.0 , 但它们已经过时并且 do not compile with VS2017 / WDK10
- 为了从非 HID 设备注入(inject) HID 报告,您需要使用 virtual HID framework有一个 more detailed page和 a sample .
- 还有一个sample for Windows IoT Core
- 好像是not allowed to create filter drivers for
BthLeEnum
- available BLE GATT functions for C++在 MSDN 上
- 有一个sample on using them for a client app (不是司机)
我的问题是,这里需要什么方法来创建这个驱动程序?
- 我是否需要创建两个驱动程序(一个虚拟 HID 驱动程序和一个 GATT Profile 驱动程序),然后以某种方式将它们相互连接?
- 我是否需要从虚拟 HID 驱动程序进行蓝牙 LE API 调用?
- 我是否需要创建一个 GATT Profile 驱动程序来进行 HID 调用?
- 或者完全是别的什么?
在 Windows 10 上是否仍然允许 GATT 配置文件驱动程序,因为它似乎是 not allowed to create filter drivers for BthLeEnum
?
更新
我非常感谢 Alain 花时间回答问题,因此我将他的回答标记为对问题的回答;但是对我来说,这个问题还没有完全回答。看到这个问题已经获得了 10 多票,我认为它应该得到一个更广泛的答案。可以改进/添加的要点是:
- 建议背后的论据(例如,为什么使用 UMDF 微型驱动程序而不是 VHF 驱动程序,为什么要使用需要使用 cppwinrt 而不是简单地使用我在研究中发现的 C++ 蓝牙功能的 UWP 蓝牙 API,编写 GATT 配置文件驱动程序怎么样? , ETC。)。如果没有这种争论,我不会从建议中学到很多东西。
- 回答我的子问题
- 使用驱动程序中的 cppwinrt 代码的示例以及是否可以在那里访问这些 API。是否有任何限制( since the code will not be running from an appx )? Cppwinrt 在这里被宣传为新事物,但我找不到在驱动程序上下文中使用 cppwinrt 的任何文档。
- 对我自己的研究的一些反射(reflection) - 目前的答案并未涉及我发现哪些点是好的或不好的。这种反射(reflection)将帮助我更好地理解这个主题。
更新 2
我想 Alain 建议使用 UMDF HID 微型驱动程序而不是 VHF,因为 VHF 需要编写 KMDF 驱动程序。 UMDF 的优点是更容易调试(可以在本地 pc 上调试),更少的安全(和签名)限制,并且在驱动程序中存在错误时没有错误检查机器的风险。
更新 3
为了能够创建一个注入(inject) RadialController 事件的客户端应用程序(而不是编写一个对私有(private)开发人员来说是一个非常高的障碍的驱动程序),我发布了一个 request for it on Feedback Hub .如果您认为值得支持,请考虑投票。
最佳答案
解决此问题的最佳方法是创建安装在为设备的自定义服务创建的 bthleenum 设备节点上的 UMDF HID 驱动程序 (https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/creating-umdf-hid-minidrivers),并使用新的蓝牙 LE UWP api (https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile)。
在非商店应用程序中使用 UWP API 存在一些歧义,但这是不正确的。这些 API 在几乎所有条件下都可用。如果您在设置项目时需要帮助,这里有一个可以帮助您入门的 C++/UWP 示例。
我希望这会有所帮助! 阿兰
关于c++ - 在 Windows 10 上为 BLE GATT 设备开发 HID 输入设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773666/