目次: 自宅サーバー
先日(2015年5月8日の日記参照)の日記で壊れているのかと思っていたGlobalsat BU-353-S4ですが、実は壊れていませんでした。
GPS受信機が受信状態を伝える通信方式には、NMEA 0183という規格に基づいたテキストデータで送ってくるか、GPSの受信機メーカー独自のバイナリデータで送ってくるか、の2つがあるようです。
恐らく大抵のメーカーは両方に対応しており、NMEAか、メーカー独自バイナリかが選択できます。もちろんGlobalsat BU-353-S4が採用しているSiRF Star IVもどちらかを選ぶことができます。
どうも色々いじっているうちにバイナリモードになってしまっていたらしく、NMEAを期待していたGPSのデータ表示アプリなどが「何言ってるのかわからんわ、このデバイス」状態に陥っていました。故障じゃなくて良かったです。
stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,3,1,12,01,00,000,,02,00,000,,03,00,000,,04,00,000,*7C $GPGSV,3,2,12,05,00,000,,06,00,000,,07,00,000,,08,00,000,*77 $GPGSV,3,3,12,09,00,000,,10,00,000,,11,00,000,,12,00,000,*71 $GPRMC,,V,,,,,,,,,,N*53 ...
もし上記のようにテキストデータが受信されればNMEAモードになっています。もしグチャグチャの字が受信されるときは、ボーレートが間違っているか、バイナリモードになっている可能性が高いです。
GPSデータの通信方式を切り替えるにはgpsctlというコマンドを使います。GPSデバイスが /dev/ttyUSB0として認識されているとして、
# to NMEA gpsctl -f -n /dev/ttyUSB0 # to Binary gpsctl -f -b /dev/ttyUSB0
オプション-nはNMEAモードにする、-bはバイナリモードにするという意味で、-fはローレベル(gpsdを介さないという意味らしい)でGPSデバイスにアクセスするという意味です。
ちなみにSiRF Star IVはモード切り替えに数秒〜10秒近くの時間がかかることがあります。さすが「絶対買わない方が良いぜ」と言われるだけのことはある…。
これで終わりだとあまり面白くなかったので、Globalsat BU-353-S4の通信方式をgpsctl -n以外で切り替える方法も試してみます。
ありがたいことにGlobalsat USのサイトからSiRFバイナリデータの仕様書を入手できますので、NMEAモードへの切り替えコマンドを送ってみようと思います。仕様書のダウンロードはこちらのサイトの「SiRF Binary Protocol Document」からできます。
ちなみに仕様書の「Switch To NMEA Protocol – Message ID 129」にそのまま使える例が載っていますので、これをそのまま送ってみます。
このデータをバイナリエディタなどでファイル(to_nmeaというファイル名だとします)に書いておき、
# gpsctl -f -b /dev/ttyUSB0 /dev/ttyUSB0 identified as a SiRF 9GSD4e_4.1.2-B2_RPATCH.02-F-GPS-4R-1301151 01/17/2013 017 at 9600 baud. gpsctl:SHOUT: switching to mode BINARY. falcon:~# stty -F /dev/ttyUSB0 ispeed 9600 && cat < /dev/ttyUSB0 | hexdump -C 00000000 a0 a2 00 29 02 00 00 00 00 00 00 00 00 00 00 00 |...)............| 00000010 00 00 00 00 00 00 00 00 00 00 03 36 02 6a 9c 5a |...........6.j.Z| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 01 9d b0 |................| 00000030 b3 a0 a2 00 09 09 00 00 00 00 00 00 00 00 00 09 |................| ... # cat to_nmea > /dev/ttyUSB0 # stty -F /dev/ttyUSB0 ispeed 9600 && cat < /dev/ttyUSB0 $GPGGA,163721.731,,,,,0,00,,,M,0.0,M,,0000*53 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPRMC,163721.731,V,,,,,,,280515,,,N*43 ...
以上のようにバイナリをGPSデバイスに送りつけると、無事NMEAモードに切り替わります。ちなみに上記の設定例だとボーレートが4800bpsから9600bpsに変わってしまうので注意してください。
Debianのセットアップでユーザ名にピリオドを使ったら「不正なユーザ名」と言われるので、何故?と思って調べたら思いのほか歴史がありました。
元々BSDでは、chownのユーザ名とグループ名の区切りにピリオドを使っていたそうで、ユーザ名にピリオドを使うなど以ての外でした。
しかしPOSIXがユーザ名にピリオドも使えるよ、と決めてしまったので、哀れchownの区切りはピリオドからコロンになりました。
Debianのセットアップスクリプトは安全側、つまりユーザ名のピリオドに対応していない古いツールを考慮してBSD時代のルールを守っているのだろう、と思われます。
実は誰も直さずに放置されているだけかも知れませんけど…真相はわかりません。
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2015 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |
合計:
本日: