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の間のインタフェースがわからないので、アタッチしても、入力情報を認識することができません。

figure

参考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クラスの構造を十分に考察して無理のない開発を計画いただければ幸いです。

それではまた。