繁体   English   中英

为 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 将其识别为另一台设备。 我该怎么做呢?

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

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

  • 我是否需要创建两个驱动程序(一个虚拟 HID 驱动程序和一个 GATT Profile 驱动程序),然后以某种方式将它们相互连接起来?
  • 我是否需要从虚拟 HID 驱动程序进行蓝牙 LE API 调用?
  • 我是否需要创建一个 GATT Profile 驱动程序来进行 HID 调用?
  • 或者完全是别的什么?

Windows 10 上是否仍然允许 GATT Profile 驱动程序,因为似乎不允许为BthLeEnum创建过滤器驱动程序

更新

我非常感谢 Alain 花时间回答这个问题,因此我将他的回答标记为对问题的回答; 然而对我来说,这个问题还没有完全回答。 看到这个问题已经获得了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/en-us/windows-hardware/drivers/wdf/creating-umdf-hid-minidrivers )为设备的自定义服务创建并使用新的蓝牙 LE UWP api ( https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile ) 的节点。

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

我希望这会有所帮助! 阿兰

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

我能够编译 WpdHealthHeartRateService。

我将此作为概念证明工作,但不可靠。 事实证明,开发 Windows 驱动程序的学习曲线太陡峭了,我有时间投资于此。

此外,作为个人,我永远无法将其分发给其他人,因为司机需要经过签名和发布过程。

为了知识交流:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM