Serial Programming: Baudrateの設定
シリアルポートの通信速度の設定の仕方はOSによって違うようで、
Linuxでは:
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
のようにtermios構造体のc_cflagに直接設定するが、
cfsetspeed(&newtio,BAUDRATE);
のようにBaudrate設定関数を用いて設定するようだ。(cfsetispeed()/cfsetospeed()のように入出力を個別に設定することも可)。
linuxでもcfsetispeed()/cfsetospeed()が実装されているのでとりあえずこれ使っておけば問題ないかもしれない。
ちなみにtermios.hで例えばB115200はlinux(arm)では
#define B115200 10002
OSX 10.6では
#define B115200 115200
のようにOS/アーキテクチャによって異なって定義されている。
知らなかった。
参考:
(POSIX では、 termios 構造体に格納されたボーレートは正確なものではなく、 ボーレートを操作するために cfgetispeed() と cfsetispeed() が提供されている。 c_cflag 内の CBAUD で選択されたビットを使うシステムもあれば、 sg_ispeed や sg_ospeed といった独立したフィールドを使うものもある。)
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html