ファームウェアのイベント・ドリブン化

はじめに

注意:以下のファームウェアはWindows XP SP3 ProfessionalとHome Edition、Windows 7 64bit ProfessionalをOSとするMicrosoft Bluetooth プロトコルスタックだけにしか対応していません。

bluetooth-HIDプロファイル節におけるhid_mouse4.zip、hid_key5.zip、hid_standard4.zipをイベント・ドリブン化しました。それぞれ、HidMouse1_1.zipHidKey1_1.zipHidStandard1_1.zipです。

使用法:PIC回路において、以下の回路図の様に、PICの11番ピンとアース(GND)の間にタクトスイッチを付け加えます。このファームウェアを走らせると、11番ピンはプルアップされます(つまり、タクトスイッチを押すと11番ピンの電圧は0Vとなり、離すと11番ピンの電圧は3.3Vとなります)。 まず、最初にPCと接続するときは、PIC回路の電源を入れる際、ドングルのLEDが青く光るまでタクトスイッチを押し続けてください。2回目以降の接続は、タクトスイッチを離したまま、単にPIC回路の電源を入れるだけです。なお、以下の回路図の様に、PICの26番PIN-220Ω-LED-GNDと配線すると、PCとの接続が完了するとLEDが光ります。

イベント・ドリブン(event driven)とは、何かイベント(出来事)が起こったときに、そのイベントに応じて適切な動作をさせるプログラミング手法のことです。Windowsでは当たり前のように使っている方法です。例えば、マウスの右ボタンを押された時に(マウスの右ボタンを押されたという出来事がイベントです)、そのことを伝えるメッセージがプログラムに送られます。このメッセージを受け取ったら、例えばメニューを表示するようにプログラムを作る、といった方法をとります。ドングルをPICで制御する場合を例にとると、PCからデータ・パケットが送られて来たこと、あるいはドングルからからイベント・パケットが送られて来たことがイベントになります。そして、イベント・ドリブンの場合、これらのイベントに対して即座に応答をドングルに送るようにプログラムを作ることになります。

PICにおけるイベント・ドリブン手法の利点は応答性が良くなることだと思います(結果としてデータ転送速度が速くなる)。一方、短所はファームウェアを開発するのが難しくなります。また、割り込み作業が必要なとき、イベント・ドリブン作業でPICが忙しくて、割り込みがうまくかからないかも知れません。その点、これまで用いてきたポーリング手法では、割り込みがうまくかかることは実証していますので安心です。 ところで、ポーリングという手法は次の様なものです。PCからデータ・パケットが送られて来ても、あるいはドングルからからイベント・パケットが送られて来ても、即座には応答しません。ただ、受け取ったデータやイベントの情報はPIC内部に記憶されます。ファームウェアの観点からは、データ・パケットやイベント・パケットを受け取ったかどうかをPIC内部に問い合わせ(ポーリング)、受けとっていれば、それらを引き出し、それらに応答するという方法をとります。ポーリング作業は、いつ行っても良いので、応答するまでに十分な時間をとれます。割り込み作業も安心してできます。

ファームウェアの基礎となっているMicrosoft社のUSB Host - MCHPUSB - Generic Driver Demoの部分はイベント・ドリブンで使用していますが、その上に構築するファームウェアはポーリングでもイベント・ドリブンでもかまいません。非常にうまく設計されています。それぞれの長短所を知って使い分けると良いと思います。

ところで、HidMouse1_1.zipに関して、マウスカーソルの速度が1回目の接続の時よりも、2回目以降の接続の時の方が速くなります。一回目の接続時には1データパケットを送るのに16msec(たまに20msec)かかっていましたが、二回目以降の接続時には、12msec(たまに20msec)しかかかりません。何故なのか分かりません。二回目以降の接続に限れば、市販のBluetoothマウスでは11msec、たまに20mseですから12msecは許容できる範囲です。


戻る