ザウルスをBluetooth分配器にしてみる――続×5シリアルポートマニアになりたい


GU-BT1を二つ以上のデバイスに同時接続できるか?」


掲示板での、GU-BT1スレッドからのお題です。結論からいうと、答えはノーのようです。Bluetooth規格自体は、以前の日記で書いたように、複数のデバイスからなるピコネットを形成することが可能です。が、実際に接続可能かどうかは、デバイス内部のファームウェアや設定によります。GU-BT1の場合は、一つのデバイスと接続を確立した後は、SDPでのシリアルポート公開を停止し、他デバイスとの応答を一切行わなくなる仕様のようです。


では、GU-BT1から受け取ったNMEAデータを、何らかの形で分配してやればどうでしょうか?そこで考え付くのがザウルス本体を分配器にする方法です。例えば当方では、


[GU-BT1]--[SL-C760+ibCard(1.1)]--[WindowsPC+GW-BH02U]
            |
            ∟[SL-B500+ibCard(1.0b+CE)]


こんな感じの構成になります。ちなみに、ザウルスにはBluetoothドライバのBlueZ、シリアルコンソールのcuが入っていることが前提です。SL-B500や、WindowsPCでは、単純にSL-C760相手に接続を行って、繋がった先のCOMポートをGPSとして指定すれば、qpeGPSやZ(ゼンリンの)等がそのまま認識をしてくれます(ただし、全てSL-C760に対して受け側:アクセプタである必要がある)。
問題は、分配器となるSL-C760です。初期設定として、


rfcomm bind 0 [GU-BT1のBTアドレス] 1
rfcomm bind 1 [PCのBTアドレス] 2
rfcomm bind 2 [SL-B500のBTアドレス] 3


という感じになる様にrfcomm.confを設定します。pinはGU-BT1に準じた設定を行ってください。
この時点で、SL-C760上で


# cu -l /dev/rfcomm0 -s 4800


等で、コンソール上にNMEAデータが流れてくることを確認します。
次に、PCとSL-B500の受け側設定を行います。PC側では、SPP(シリアルポート)のサービスのCOMポートを確認して、有効になっていることを確かめます。SL-B500側では、


# sdpd
# sdptool --channel=3 SP
# rfcomm listen 2 3


等として、SL-C760側からの接続要求に待機します(この場合は、rfcomm2のチャンネル3で接続待ち設定)。
ここまで行ったら、いよいよSL-C760でデータの分配を始めます。


# cu -l /dev/rfcomm0 -s 4800 | tee /dev/rfcomm1 | tee /dev/rfcomm2 > /mnt/card/nmealog.txt


とすると、rfcomm0でGU-BT1と接続し、rfcomm1のPC、rfcomm2のザウルスにそれぞれデータを分配し始めます(teeコマンドを教えてくれた某Linux板の方、感謝です)。さらに、この記述ではSDメモリーカードにNMEAデータの生ログをテキストファイルに保存するようになっています。が、現状の制限としてはSL-C760本体でqpeGPS等のソフトを動作させることが出来ません。



今のところ、PC上ではTeraTerm上でのデータ受信、ザウルスではqpeGPSでの接続を確認しました。が、このとき二番目の転送先であるザウルスには、途切れ途切れにしかデータが送信されません_| ̄|○。当方が確認した時、全てチャンネル1で行っていたのが原因かもしれません。いずれにせよ、リアルタイムにデータを見る方は、rfcomm1の側が良さそうです。



さらに、ザウルスをBluetoothGPSに見立ててPC等で接続し、上記で保存したNMEAデータの生ログをシリアルで流してやると、そのままGPSプレーヤーになってくれそうです。


#個人的には、GPS1台&複数のPDAで数人一緒に行動する時とかに使えるかな、等と
#思うのですが、ザウルス1台まるまる分配器にして使う意味があるかどうかは甚だ疑問です(^^;;;