(这是一个crosspost from the MSDN forums,因为还没有任何回应有相当长的一段时间,我想我会在这里得到更好的答案。)在Windows 10开发的BLE装置GATT的HID输入设备驱动程序
我有一个包含自定义GATT服务的BLE设备,其中我无法修改固件。我想要听取来自该服务的GATT特征事件,并使Windows将它们作为HID报告使用,以使Windows将其识别为另一设备。我会如何去做这件事?
我进行了一番调查,发现下面的信息:
- 有BLE GATT Profile driver samples in WDK 8.0,但他们已经过时,do not compile with VS2017/WDK10
- 为了从非HID设备注入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配置文件驱动程序),然后以某种方式将它们连接到对方?
- 我是否需要从虚拟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的任何文档。
- 对我自己的研究有一些反思 - 目前的答案没有涉及我发现的好点与不点。这个反思会帮助我更好地理解这个话题。
这里是C++/UWP示例:https://github.com/Microsoft/cppwinrt – Alain
谢谢! 您的意思是GATT/bthleenum设备节点的“外观事件”应该触发该UMDF HID驱动程序的安装?这些驱动程序/驱动程序节点之间是否有进一步的交互? 例如UMDF HID驱动程序能否以某种方式直接从GATT/bthleenum设备节点使用定制服务和特性,还是需要通过调用诸如'GattDeviceService.FromIdAsync'等来“从头开始”? –
另外,请你解释为什么你建议编写一个HID minidriver而不是使用[Virtual Hid Framework](https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/virtual-hid-框架 - VHF波段)? –