2017-08-19 183 views
15

(这是一个crosspost from the MSDN forums,因为还没有任何回应有相当长的一段时间,我想我会在这里得到更好的答案。)在Windows 10开发的BLE装置GATT的HID输入设备驱动程序

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

我进行了一番调查,发现下面的信息:

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

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

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

更新

我真的很感谢阿兰花时间来回答这个问题,所以我标志着他的答案回答的问题;但对于我来说,这个问题还没有完全解答。看到这个问题已经得到了10多票,我认为它应该得到更广泛的答案。可以改进/加点是:

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

回答

1

到这一点,最好的方法是创建一个是为设备的定制服务创建的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 Apis存在一些不明确的地方,但这是不正确的。这些Apis几乎适用于所有条件。如果你需要帮助建立你的项目,这里是一个C++/UWP示例,可以帮助你开始。

我希望这有助于! Alain

+0

这里是C++/UWP示例:https://github.com/Microsoft/cppwinrt – Alain

+0

谢谢! 您的意思是GATT/bthleenum设备节点的“外观事件”应该触发该UMDF HID驱动程序的安装?这些驱动程序/驱动程序节点之间是否有进一步的交互? 例如UMDF HID驱动程序能否以某种方式直接从GATT/bthleenum设备节点使用定制服务和特性,还是需要通过调用诸如'GattDeviceService.FromIdAsync'等来“从头开始”? –

+0

另外,请你解释为什么你建议编写一个HID minidriver而不是使用[Virtual Hid Framework](https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/virtual-hid-框架 - VHF波段)? –