GU-BT1―Zaurus接続法――修正版

6/20の日記に記述していたのですが、BlueZドライバが古いものだったり、PINコードに関する記述が欠けていたり、各所での動作確認が抜けていたために、接続に失敗して困っている方がいらっしゃるようです。と言う訳で、その辺を修正した接続方法を書いておきます。


1.BlueZドライバのインストール
古いドライバではdepmodにより手動でカーネルモジュールをロードする必要があり、慣れない方はここでつまずく事があるので、今回はりなざうテクノウさんで紹介されているこちらのドライバを使用することを前提にします。このドライバでは、インストールするだけでRFCOMM(SPP)がすぐに使用可能になります。古いBlueZドライバのアンインストールは、カーネルモジュールの依存関係を全て断ち切る必要が出てくるため、難易度、危険度共に高めです。失敗の恐れが無い完全初期化からの再セットアップをお勧めします。


上記のページを参考にして、サスペンド―レジュームモジュールまでインストールしておけば、レジュームからの復帰時にもカードの抜き差しは必要なくなり、便利です。たまに失敗しますが・・・(^^;;


2.cuのインストール
これはシリアルコンソールと呼ばれるもので、コンソール上にシリアルポートの入出力データを表示するためのコマンドです。RFCOMMはシリアルポートと扱いが同じなので、BlueZの基本的な動作確認を行うためにも必須です。同じくりなざうテクノウさんのこちらで公開されているので、BlueZの導入後にインストールしてください(順番を間違えると動作しません)。


3.RFCOMMのバインド設定
BlueZドライバの動作確認のついでに、GU-BT1Bluetoothアドレスを検索します。まずGU-BT1の電源を入れ、Zaurus側の標準ターミナルや、コンソールを開いて


bash-2.05$ hcitool scan


と入力します。Scanning...の表示が出てしばらく経った後、


 xx:xx:xx:xx:xx:xx SONY GPS GU-BT1


という表示が出れば成功です。xxの所にはデバイス特有のBluetoothアドレス(16進数)が入ります。これが指定するアドレスになるので、忘れずにメモしておいてください。もし、


Device is not available : Success


と言う表示が出た場合はBlueZのインストール失敗か、レジューム復帰の失敗です。カードを抜き差ししたり、再起動しても同じ症状の場合は、BlueZの再インストールを行ってください。 アドレスが取得できたら、再びこちらを参考にして、rfcomm.confの編集を行ってください。記入するのは


rfcomm0{

# Automatically bind the device at startup
bind yes;

# Bluetooth address of the device
device 00:11:22:33:44:55;←機器アドレス

# RFCOMM channel for the connection
channel 1;

}


この部分になりますが、rfcomm0に限定する必要はなく、携帯電話にあらかじめ0を割り当てている場合等は、GU-BT1をrfcomm1に割り当てても構いません。割り当て後、Zaurusを再起動して、コンソールから


bash-2.05$ rfcomm


と入力してください。


rfcomm0: xx:xx:xx:xx:xx:xx channel 1 clear


と表示されて、rfcommの番号や、xxのアドレスがGU-BT1と一致していれば準備完了です。


4.PINコードの入力
三度こちらを参考に、GU-BT1のシリアル番号下四桁をPINコードとして、/etc/bluetooth/givepinと/etc/bluetooth/pinの両ファイルを編集してください。もし、携帯電話で別のPINコードを使いたい、という場合には、随時入力が必要になります。こちらに紹介されているbluepinを導入すれば、接続時にPINコードの入力ウィンドウが出せるようになるはずです。当方ではbluepinを使用していないため、あくまでなる「はず」、という事で(^^;;


5.HCIconfigの設定
ibCard(LSE039)のBluetooth1.1版のみで確認していますが、接続後、そのままだと数秒位で接続が切れる症状が頻発します。これを防ぐためには、Bluetoothの省電力モードを設定しなおす必要があります。
ファイルの書き換えはrfcomm.confと同じ要領で、hcid.confを編集します。


# Default settings for HCI devices
device{
....

# Default link policy
lp hold,park;

....
}


という風に記述して、sniffだけを消してください。これによりsniffモードが無効になり、接続が切れなくなるようです。


6.接続確認
再びZaurusを再起動させた後、コンソール上でsuを入力し、ユーザーをrootに変更します。GU-BT1の電源を入れてから、


# cu -l /dev/rfcomm0 -s 4800


と入力して、cu上からGU-BT1へ接続してみてください。ここでConnected.という表示が出た後、$から始まる大量の文字列(NMEAセンテンスと言います。詳しくは検索してください)が延々と出力されるようになれば成功です。「~.」と入力すればDisconnectedの表示と共に切断されます。


もしここで、Bluetoothカードのアクセスランプが点滅しつつPermission deniedと表示されたら、認証に失敗しています。/etc/bluetooth/givepin、/etc/bluetooth/pinの両ファイルをchmod 777して、いつでも読み出し/実行が可能なようになっていることを確認してください。そもそも点滅しない場合はBlueZのインストールかレジュームに失敗しています。カードの抜き差し/再起動で駄目な場合は再インストールしてください。以上のことをして、まだ点滅しつつもPermission deniedが出る場合は、コンソールのrootから、/etc/bluetooth/link_keyのファイルを削除してください。


# rm /etc/bluetooth/link_key


このファイルは、どうやら機器同士でペアリングした時に生成されるようですが、複数の機器と接続を行った際に、時々特定の機器間でしか繋がらなくなる問題が発生するようです。link_keyファイルは勝手に生成しなおしてくれるので、使用時にも接続が不能になった場合には、随時root上から削除してみてください。


7.qpeGPSとの接続
qpeGPSを、手順に従ってzlibと共にインストールしてください。起動後、GPSタブにあるArgsの項目内に


-p /dev/rfcomm0 -s 4800


と入力し、OKキーを押して下さい。Bluetoothカードのアクセスランプが点滅し、gpsd:OK、GPS:???の緑色表示が出て、衛星の捕捉状況が表示され始めたら成功です。もし点滅しない場合は、例によって抜き差しを行って再び動作確認を行ってください。


以上の手順で繋がるようになるはずです。また、問題が発生した場合にも、どの時点で駄目なのかの検討がつけやすいかと思います。もしこ手順で繋がらない症状が出た方は、状況を記したコメントをお願いします。解決するかは分かりませんが、こちらが出来る範囲でお答えしたいと思います(^^


#Zaurus上でのBluetoothは、日本語のドキュメントも少な目で、敷居はかなり高いように感じられます。
#しかし、設定ファイルやBluetoothの仕様を根気強く調べて見ると、どういう構成なのかが次第に分かってきます。
#より詳しく設定したい/知りたい方は、一読をお勧めします。