bluetooth-HIDプロファイル

目次


PIC用ファームウェア(bluesoleil、Microsoft両用)

21バイトに限定しています。 PIC24FJ64GB002に書き込むためのファームウェアはhidblueM_firm4.zip ですが、以下の点につき、必要に応じて修正してから再コンパイルしてPICに書き込んでください。(注)

1.4MHzのセラミック発振子を用いていますが、もし8 MHzのものを用いたければ, main.cの中の_CONFIG2 の中のPLLDIV_NODIV をPLLDIV_DIV2としてください。

2.もし、PICがbluetooth USB ドングルを認識しない場合、main.cの上から145行目の delay_time=30;の数値30を大きい値に変えてみてください。なお、PCとPICが無線接続できた後(”case L2CAP_CON_REQ:”(main.c)以後)、delay_time=0;とすることによりデータ転送速度を元に戻しています。

3.RS232C基板を使用してデバック内容をPCに出力するためには、main.cの中の"//#define DEBUG_MODE"なる行のコメント(//だけ)を消してください。


PC用bluetoothスタック(Bluesoleil)

bluetoothドングルをPC上で操作するには、デバイス・ドライバーが必要で、それをbluetoothプロトコル(レーヤー)スタックと呼んでいます。bluesoleil、Microsoft、Toshibaなどがあります。まずは、bluesoleilから。 bluesoleil 6.4.275.0 (15日間無料)をダウンロードしてください。 bluesoleil6.4.314.3 は安定性に欠けますので避けてください。bluetooth USBドングルをPCから外してから、bluesoleil 6.4.275.0をインストールし(Total-Uninstallを併用する方法もあります。Webで検索してください)、求めに応じてPCを再起動します。PCでユーザー・パスワードを入れるときにでもbluetooth USBドングルをPCに付けてください。PCが立ち上がったら、ディスクトップ上にあらわれるBluetoothの場所アイコンをダブルクリックしてbluesoleilを起動します。

下図左のようなフォルダが現れます。もし、マイデバイスに×印が付いている場合は、マイデバイス・アイコンをダブルクリックしましょう。PICの電源を入れ、デバイスの検索アイコンをダブルクリックすると、下図右のように懐中電灯アイコンが現れサービスを探します。サービスが見つかると、ジョイスティック・アイコンが現れますので、それををダブルクリックすると、マイデバイスアイコンが緑色になります。これで、PICがPCにより認識されたことになります。


アプリケーション・ソフトウェア(Bluesoleil&Microsoft_HIDプロファイル両用)

アプリケーション・ソフトウェアPICkit2.zipを解凍して出てくるPICkit2.exeを実行してください。 PICとPCとが無線でつながると、2つのエディット・ボックスと1つのSENDボタンを持ったダイアログが現れます。上のエディット・ボックスに何か文字を入れ、SENDボタンを押すと、下のエディット・ボックスに文字列が現れる筈です。最初の1文字目だけが変わっていることに気が付くと思います。例えば、“123”と上のエディット・ボックスに記入してSENDボタンを押すと、下のエディット・ボックスに“223”と現れます。最初の文字は、アスキーコードで‘2’ = ‘1’ +1となっています。今回は、入出力できるデータの数は、21バイトに限定しています。


PC用bluetoothスタック(Microsoft)

bluesoleilをインストールしているならば、それをアンインストールしてください。インストールと同じようにすれば、途中で削除ボタンが現れるので、それを押下することにより、アンインストールできます。

Microsoftスタックは、Windoes XP SP3(サービスパック3)等に含まれているので、新たにインストールする必要はありません。ただ、Microsoftスタックを使えるbluetooth USBドングルは限られています。ドングルをPCに付けたときに認識されれば、Microsoftスタックが使用できます。PLANEX社のBT-MicroEDR1X等は認識されます。なお、C:\WINDOWS\inf\bth.infをメモ帳などのエディッタで開いて中身を見ると、使用可能なドングルが分かります。ここを一部書き換えると、そのほかのドングルでも使えるようになるという情報もありますので、webで探がしてみてください。手持ちの無名のドングルでも、書き換えにより認識されました。

Windoes XP SP3の場合、Microsoft社のBluetoothデバイスなるアイコンをダブルクリックします。"デバイス"というタグを選択して”追加”ボタンを押します。Bluetoothデバイスの追加ウィザードの開始ダイアログが現れるので、”セットアップを完了し、デバイスは発見可能になりました”なるチェックボックスに、チェックを入れ、”次へ”ボタンを押します。”yts新しいデバイス”と言うアイコンが現れるので、それをダブルクリックします。”パスキーを使用しない”を選択して、”次へ”ボタンを押し、しばらく待つと、次のような”Bluetoothデバイスの追加ウィザードの完了”ダイアログが現れます。

ここで、”完了”ボタンを押します。 しばらくすると次のような吹き出しが現れます。

これで、接続完了となります。アプリケーション・ソフトウェアの使い方は上で説明しましたので、省略します。


アプリケーション・ソフトウェア(Microsoft_HIDプロファイル専用)

Microsoft社のBluetoothデバイス・アイコンで起動するBluetoothウィザードを使わずに、Windows Bluetooth API関数を使ってアプリケーション・ソフトウェアを作ることができます。アプリケーション・ソフトウェアの中に、Bluetoothウィザードの機能を盛り込んだという説明の方が分かり易いと思います。まず、PIC基板の電源を入れてください。その後、アプリケーション・ソフトウェアhidblueM.zipを解凍して出てくるhidblueM.exeを実行してください。2つのエディット・ボックスと1つのSENDボタンを持ったダイアログが現れます。HID service is availableなる表示が現れるまで、しばらくお待ちください。もし、接続に成功しなければ、hidblueMDlg.cppの178行目のsearchparam.cTimeoutMultiplier= 5;の数値を増やしてみてください(現在の設定では5×1.28秒だけしかPCはPICを探しません)。HID service is availableなる表示が現れた後、上のエディット・ボックスに何か文字を入れ、SENDボタンを押すと、下のエディット・ボックスに文字列が現れる筈です。最初の1文字目だけが変わっているでしょう。今回は、入出力できるデータの数は、21バイトに限定しています。ところで、本アプリケーション・ソフトウェアは、小笠原氏の解説Windows Bluetooth API を参考にしました。


ファームウェアとソフトウェアの簡易説明

まず、PIC用ファームウェアhidblueM_firm4.zipのmain.cの1046行目以降をご覧下さい。case HID_READ_DATA://readとcase HID_READ_DATA_END:とcase HID_HANDSHAKE_SUCCESS:がPCから送られてくるデータを読んでいるところです。そのままの形で使用してください。PICがデータを受け取ったときに、受け取りに成功した旨をPCに伝えます。それが HID_HANDSHAKE_SUCCESS:のところです。また、それ以降、case HID_WRITE_DATA://writeのところがPCへデータを送る部分です。buf[0]からbuf[9]までは、そのまま使用下さい。buf[10]からbuf[30]にPCに送りたいデータを入れてください。

次に、PC用のアプリケーション・ソフトウェアPICkit2.zipのPICkit2.cppの中の関数CPICkit2Dlg::OnSend()の中身をご覧下さい。for(i=0;i<21;i++) buf[i]=0;から続く場所が23カ所あります。1番目の所は、コメントとしていますので、削除してもかまいません。2番目と3番目の所で、データの送受信をしています。

また、PC用のアプリケーション・ソフトウェアhidblueMDlg.zipのhidblueMDlg.cppの中の関数CHidblueMDlg::OnSend()の中身をご覧下さい。データの送受信の仕方がすぐに理解できると思います。

PIC用ファームウェア(HCIレイヤー)までで、HCIレーヤ上で”ACLで規定されているデータパケット形式”データの送受信が可能となっていました。PCとPIC間でのACL形式のデータパケットのやり取りで、以下のような作業を行うと、PC側から見てHIDに対応したアプリケーション・ソフトウェアで通信ができるようになります。なお、以下にでてくるhid_flagはhidblueM_firm4.zipのmain.cで定義され変数ですが、PIC側での、それぞれの作業段階を表しています。

1.L2CAP(logical link control and adaptation protocol)というプロトコル(通信手順)にしたがって、PICとPCの間で1つのチャンネル(通信路)を開きます(PCが通信路を開くよう要求して、PICが受諾する;そしてその逆を行う)。hid_flag=0

2.この通信路を使って、PCは、PICがどんなサービスが提供できるかの情報を、すなわちSDP(service discovery protocol)というプロトコルにしたがって書かれた情報を、PICから得ます(PCが情報要求をPICに出して、PICが応じる形で情報をPCに送る)。hid_flag=0

3.PCはPICが提供できるサービスの1つを選び(今回、PICには1個のHIDサービスしか持たせないので、選ぶと言っても選択肢は他に無い)、SDPにしたがって書かれたサービスの内容に関する情報(HIDサービスの場合、HIDレポート・ディスクリプタなどの情報)をPICから吸い上げます。hid_flag=1

4.HIDサービスの場合、コントロール用のチャンネルとインターラプト(データ送受信)用のチャンネルの2つが必要となりますので(普通のUSB通信と似てます;例えば、前者がエンドポイント0で後者がエンドポイント1と考えれば良いでしょう)、L2CAPにしたがって新たに、2つのチャンネル(通信路)を確保します。hid_flag=2とhid_flag=3

5.これら2つのチャンネルに対してデータを書き込んだり、読み込んだりすることで、PICとPCとの間でデータパケットのやり取りをします。

なお、ファームウェアhidblueM_firm4.zipにおいて、SDPに関する情報データには任天堂のwiiリモコンのものを用いました(データは、att2aなどの配列に書かれています。main.c)。HIDのリポートIDには、入力用として0x21を出力用として0x18を用いています。 これらのIDの制限から最大送受信できるデータのバイト数が21バイトに制限されています。ところで、Protocol and Service Multiplexor (PSM)には SDP 0x0001, HID_Control 0x0011, HID_Interrupt 0x0013 が、そして SDPには SDP 0x0001, HIDP 0x0011が関係します。さらに詳しい情報は以下のwebサイトから得ることが出来ます。

ところで、HID用のレポートディスクリプタを書き変えたければ(例えば、64バイト送受信可能なHID、キーボード,マウス,ジョイスティック,その他これらの複合など)、hidblueM_firm2.zipのSDPdata\microsoft\data.hの相当する部分を変えてください。書き換えたらSDP(Service Discovery Protocol)の説明に沿って配列化してください。

wiiリモコンのデータwiiリモコンのSDPSDPにおけるuuidBluetooth HID プロファイル
DEVICE IDENTIFICATION SPECIFICATION



標準bluetooth-HID(bluesoleil、Microsoft両用)

hidblueM_firm4.zipでは、一度の送受信できるデータ数は21バイトでした。ここでは、48バイトまで送受信できるようにします。これ以上のバイト数を一度に送受信しようとしても、たまに二回に分けて送受信されてしまうことがあります(データパケットが2つになる)。PIC用ファームウェアは、hid_standard4.zip で、アプリケーション・ソフトウェアはPICkit2_1.zip です。アプリケーション・ソフトウェアの使用法はPICkit2と同じです。もし、hidblueM_firm4.zip 等を使っていた場合には、使用する前に、以下に示すレジストリー・キーのうち関連するものだけを削除して、パーソナル・コンピュータを一度シャットダウンして、立ち上げ直してください。レジストリー・キーを操作する前には、必ずバックアップをお忘れなく(HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\HID)。

なお、hid_standard4.zipとhidblueM_firm4zipとの違いは、main.cファイルとSDPdataフォルダーの中身だけです。主にHIDレポート・ディスクリプタの違いによるSDPの違いです。ところで、Windoes Vistaや7では、安全性の向上のためレジストリ・キーの削除が難しくなりました。そこで、フリーウェアRegistrar Registry Manager を使用しています。電子メール・アドレスは入力しなくてもダウンロードできます。


bluetooth-Mouse(bluesoleil、Microsoft両用)

Microchip社のUSB関連のファームウェア(USBケーブル接続)に、マウス・カーソルがディスプレイ画面上で円を描くようにしたものがあります。ここでは、それを無線化します。PIC用ファームウェアは、hid_mouse4.zip です。アプリケーション・ソフトウェアは不要です。hidblueM_firm4.zipやhidblueM_firm4.zip を使っていた場合には、使用する前に、上記に示したレジストリー・キーのうち関連するものだけを削除して、パーソナル・コンピュータを一度シャットダウンして、立ち上げ直してください。レジストリー・キーを操作する前には、必ずバックアップをお忘れなく。 なお、hid_mouse4.zipとhidblueM_firm4.zipとの違いは、main.cファイルとSDPdataフォルダーの中身だけです。主にHIDレポート・ディスクリプタの違いによるSDPの違いです。

無線化するとマウス・カーソルの移動速度が遅くなりました。今のところ、原因は分かりません。


bluetooth-Keyboard(Microsoft専用)

注意: Windows XP SP3、Vista Business 32bit SP2、 Windows 7 64bit Professonal、Microsoft bluetooth プロトコルスタックだけにしか対応していません。

PIC回路において、PICの11番ピンとアース(GND)の間にタクトスイッチを付け加えます。PIC用ファームウェアは、hid_key5.zip です。このファームウェアを走らせると、11番ピンはプルアップされます(つまり、タクトスイッチを押すと11番ピンの電圧は0Vとなり、離すと11番ピンの電圧は3.3Vとなります)。 まず、最初にPCと接続するときは、これまでの接続法と同じですが(Bluetoothデバイス・アイコンで起動するBluetoothウィザードを使う)、タクトスイッチを押しながら、PIC回路の電源を入れ、ドングルのLEDが青く光るまでタクトスイッチを押し続けてください。2回目以降の接続は、タクトスイッチを離したまま、単にPIC回路の電源を入れるだけです。2回目以降の接続は、Bluetoothウィザードを使う必要はありません。自動的につながります。自動接続が可能となるのは、最初のPCとの接続で、必要な情報がPCの中に格納され、そして2回目以降の接続からは HID_Control 0x0011, HID_Interrupt 0x0013に対する2つのチャンネルを開けて、PCと接続すれば良いだけだからです。

使用方法は、適当なテキストエディタ(メモ帳など)を開き、PICの2、3、6、7ピン(ファームウェアでプルアップしています)のいずれかをGNDに接続すると、それぞれ、a、b、A、Bなる文字がエディタ画面に現れます。

hidblueM_firm4.zip、hidblueM_firm4.zip、hid_mouse4.zip を使っていた場合には、使用する前に、上記に示したレジストリー・キーのうち関連するものだけを削除して、パーソナル・コンピュータを一度シャットダウンして、立ち上げ直してください。レジストリー・キーを操作する前には、必ずバックアップをお忘れなく。なお、hid_mouse4.zip、hidblueM_firm4.zip、hid_mouse4.zipとの違いは、main.cファイルとSDPdataフォルダーの中身だけです。主に、2回目以降の接続に対応するコードを新しく追加したことによる違いと、HIDレポート・ディスクリプタの違いによるSDPの違いです。

ところで、a、b、A、Bなる文字コードを右矢印キー(0x4f)、左矢印キー(0x50)、ESPキー(0x29)、F5キー(0x3e)に対応するキーコードに置き換えれば、Microsoft社のパワーポイントの無線操作が可能となります。キーコードについては、hid_key5.zipを解凍して得られるtranslate.pdfを参照ください。


戻る