(這是一個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波段)? –