Windows OS 標準ドライバが強化されたタッチデバイス
こんにちは、なおきお~です。
スマートフォンなどのペリフェラル デバイスは、インプット デバイスとしては、キーボードやマウス デバイスではなく、タッチ デバイスが、必須となってきていますが、寒い日の外出先では反応が悪くなって困っています。
さて、Windows OS でも、Windows標準ドライバとして、USB接続のHIDのタッチ ドライバを提供しており、Windows 7でBluetooth接続のタッチ ドライバを追加し、Windows 8でBluetooth LEやI2Cの接続のタッチ ドライバ追加しています。
このようにWindows標準ドライバを強化することでハードウェアメーカーさんがドライバを開発しなくてもよいシナリオを増やしていっています。
Transport |
Windows 7 |
Windows 8 |
Notes |
USB |
Yes |
Yes |
Support for USB HID 1.11+ is provided on Windows operating systems dating back to Windows 2000. |
Bluetooth |
Yes |
Yes |
Support for Bluetooth HID 1.1+ is provided on Windows operating systems dating back to Windows Vista. |
Bluetooth LE |
No |
Yes |
Windows 8 introduces support for HID over Bluetooth LE. |
I2C |
No |
Yes |
Windows 8 introduces support for HID over I2C |
参考URL: https://msdn.microsoft.com/en-us/library/windows/hardware/jj127210(v=vs.85).aspx
ドライバを開発しなくてもよいのでハードウェアメーカーさんのドライバ開発に関する負荷は減っていると思うのですが、その反面 デバイス固有の機能拡張が難しくなってきました。
マウスやキーボードであれば、それぞれのクラスのフィルター ドライバを開発すれば、デバイス固有の機能を拡張することができます。しかし、それと同じような考え方でタッチ ドライバにフィルター ドライバをアタッチしようとしてもうまくいきません。
うまくいかない理由を端的に言うと、マウスやキーボードのクラスとHIDクラスの構造が異なるからです。
マウスやキーボードのクラスドライバは、元々ハードウェアメーカーさんのフィルタードライバが介在できるようにインタフェースを設けて、マウスやキーボードの入力情報が取得できるような構造になっています。しかし、HIDクラスは、フィルタードライバを介在するインタフェースを設けていません。
HIDクラスのフィルタードライバが存在しないので、代わりに汎用的なWDMやWDFのフィルタードライバをアタッチするというアイディアもあります。しかし、HIDクラスとWIN32K.SYSの間のインタフェースがわからないので、アタッチしても、入力情報を認識することができません。
参考URL: https://msdn.microsoft.com/en-us/library/windows/hardware/jj131706(v=vs.85).aspx
もし、HIDUSB.SYSの代わりとなるドライバを開発すれば、タッチ デバイスのデバイス固有の機能拡張はできますが、マウスやキーボードのようにフィルタードライバでリーズナブルに拡張することができないので、同じような考え方で拡張できるかもしれない、という認識は、ちょっと立ち止まって再考いただいたほうがいいと思います。
ちなみにドライバでは難しいからアプリケーションで、グローバルフックして、入力情報を書き換えるというアイディアも難しいため、再考いただほうがいいと思います。
こちらの理由は、タッチデバイスやペンデバイスは、マウスやキーボードと同様にWIN32K.SYSが排他的に取り扱っているためです。
Usage Page |
Usage |
Windows 7 |
Windows 8 |
Notes |
Access Mode |
0x0001 |
0x0001 - 0x0002 |
Yes |
Yes |
Mouse class driver and mapper driver. |
Exclusive |
0x0001 |
0x0004 - 0x0005 |
Yes |
Yes |
Game Controllers* |
Shared |
0x0001 |
0x0006 - 0x0007 |
Yes |
Yes |
Keyboard / Keypad class driver and mapper driver. |
Exclusive |
0x0001 |
0x000C |
No |
Yes |
Flight Mode Switch |
Shared |
0x0001 |
0x0080 |
Yes |
Yes |
System Controls (Power) |
Shared |
0x000C |
0x0001 |
Yes |
Yes |
Consumer Controls (HIDServ.dll) |
Shared |
0x000D |
0x0002 |
Yes |
Yes |
Pen Device |
Exclusive |
0x000D |
0x0004 |
Yes |
Yes |
Touch Screen |
Exclusive |
0x0020 |
Multiple |
No |
Yes |
Sensors |
Shared |
0x0084 |
0x004 |
Yes |
Yes |
HID UPS Battery |
Shared |
参考URL: https://msdn.microsoft.com/en-us/library/windows/hardware/jj126194
以上のようにタッチデバイスでデバイス固有の機能拡張を検討する場合は、HIDクラスの構造を十分に考察して無理のない開発を計画いただければ幸いです。
それではまた。