2017-08-19 1242 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波段)? –