GP-101と併せて入手したBilora Photo Geotagger GT-01、初期不良につき交換してもらうことになりました。輝け!GPSの10周年記念セールで保証無しの特別価格で売られていたために、もしかすると初期不良でもアウトかなーと思っていたのですが…対応して頂けてもうひたすら感謝です。
EX-H20Gの一件に加え、GT-01も初期不良引いちゃう辺り、今年は運が良いんだか悪いんだかもう分からなくなっています。
OpenBSD-5.2のportsに入っているGPSBabel-1.4.3でGP-101(skytraq)からログを取ろうとすると、こんな風にgbser_init()の辺りで止まってしまいます。
uaa@framboise:~$ gpsbabel -D 9 -t -i skytraq,initbaud=38400,baud=38400 -f /dev/ttyU1 -o kml -F test.kml
GPSBabel Version: 1.4.3
options: module/option=value: skytraq/erase="0" (=default)
options: module/option=value: skytraq/targetlocation="" (=default)
options: module/option=value: skytraq/baud="38400"
options: module/option=value: skytraq/initbaud="38400"
options: module/option=value: skytraq/read-at-once="255" (=default)
options: module/option=value: skytraq/first-sector="0" (=default)
options: module/option=value: skytraq/last-sector="-1" (=default)
options: module/option=value: skytraq/no-output="0" (=default)
gbser_init("/dev/ttyU1")
|
gpsbabel-1.4.3/gbser_posix.cのvoid* gbser_init(const char* port_name)のopen(port_name, O_RDWR | O_NOCTTY)をopen(port_name, O_RDWR | O_NOCTTY | O_NDELAY)とすることでとりあえず動くようになるのですが、もう少し原因を追いかけてみた方が良いですかねえ。少なくともLinux(Debian6)ではO_NDELAY抜きでもきちんと動いていますし。
でも前にも何かシリアルポートを使ったコードで、とりあえずO_NDELAY突っ込んで解決したのがあったような…あんまり大声では言えないのですが、UNIXでシリアルポートを使ったコードを書くときのお作法ってよく知らないんですよね(汗。58.65kg(22:40)