2015年5月16日土曜日

Windows/OSX/Linux でのHIDデバイスの抜き差し検知

1. Windows

何もしなくても HIDデバイスの抜き差しで、ウィンドウプロシージャに WM_DEVICECHANGE メッセージが投げられてきます。何もしなければ、デバイスを差すと複数の WM_DEVICECHANGEメッセージが発生します。抜いた時も複数のメッセージが発生する場合があります。

確実に抜き差しで1回の WM_DEVICECHANGEメッセージが発生するようにするには、このURLが参考になります。

http://www.codeproject.com/Articles/14500/Detecting-Hardware-Insertion-and-or-Removal


2. OSX

検知する デバイスの ID を登録しておき、そのデバイスの抜き差し操作があったら呼び出される関数を登録しておきます。そのデバイスが抜き差しされたら OS が登録した関数を呼び出します。差し込みの時、抜き取りの時と別々に呼び出す関数を登録できます。IOKitが必要です。

Windowsと比較すると、セットアップ処理をするコードを追加しなければなりませんが、細かな制御ができます。


 HID デバイスの抜き差し検知は安定しています。


3 Linux

Windows/OSX のようにプログラム内で HID デバイスの検知する方法を知りません。そのようは方法があるかどうかも分かりません。

udev ルールで HIDデバイスの抜き差し操作があったときに実行されるプログラムを登録できますので、そのようなプログラムを作成して、そのプログラムとアプリケーションプログラム本体とがプロセス間通信をして検知した HID デバイス情報は受け渡したり、抜き差しイベントを発生させたりすることができます。

udev ルールでプログラムを実行させる設定については、

http://www.reactivated.net/writing_udev_rules.html

のページ内の Running external programs upon certain events を参照してみてください。

抜き差しを検知するルールをセットアップ、抜き差しで実行させるコードを指定するというモデルは OSX とまったく同じですが、 OSX ではすべてがライブラリで統合されていて、アプリケーションプログラムの1つのスレッドでデバイス検知が可能です。一方 Linux はそのような統合はされておらず、それぞれのコンポーネントを手動でつなぎ合わせなければなりません。


0 件のコメント:

コメントを投稿