2014年6月15日日曜日

ブルースクリーン召喚スイッチを作ってみました

動画はこちら
http://www.nicovideo.jp/watch/sm23786497
 



見ての通り、mbed FRDM-KL46Zにデッドマンスイッチ繋げて作りました。

・仕組み
Windowsにはデバッグ用としてのブルースクリーンを呼び出すキーコンビネーション(右ctrl押しながらScrollLock2回)があります。
(レジストリを設定して有効にしないといけないので、実はこのスイッチどのPCでも繋げたら即!・・・というわけではなかったりします)
   懐かしのWindowsブルースクリーン--その再現方法とは
   http://builder.japan.zdnet.com/os-admin/20379423/
   キーボード操作でメモリ ダンプ ファイルを作成できる Windows の機能
   http://support.microsoft.com/kb/244139/ja

それをmbedから叩いてあげているだけだったりします。
なので一応無害なブルースクリーンです。
とはいえ動作中の他のソフトの状態も完全無視で即発動、しかも本物なので復帰するには再起動するしかなかったりします。

・keyCode関数の実挙動の話
mbedのUSBKeybordライブラリを使えば簡単簡単♪と思っていましたが、実はそんなことはなく。
呼び出すキーコンビネーションが右ctrlを押しながらScrollLock2回
USBKeybordライブラリのキー入力の関数の挙動は、キーを押して離す挙動になっています。
ライブラリ弄る前にUSB規格のお勉強。
   スキャンコード - Wikipedia 
   マウス付きUSBキーボードのディスクリプタ構成を調べる 
USBキーボードの規格として、「キーの同時入力は6キーまで」、「PCに送信するデータは今キーが押されている状態」ということが今回ライブラリを修正するヒントになりました。
ライブラリのkeyCode関数の中身を見てみると、送信したキーの直後に、キーが押されていない状態を送信していました。これを削除すると、keyCode関数が実行されるまでキーが押されたままの状態にすることができました。

NT金沢に持って行ってデモします。
押したい方は、どうぞ

0 件のコメント :