XBEE ラジオで遊んでいます。Linux (Ubuntu 9.10) を使用していますが、MY コードを使用している場合、XBEE はシリアル ポート経由で NULL 値を送信していないようです。XCTU プログラム (別の Windows ボックスに XBEE に付属するストック ターム エミュレーター) を使用すると、新しい XBEE がネットワークに参加すると、シリアル ポートを介して次の出力が表示されます。
7E 00 20 95 00 13 A2 00 40 3B
など...完璧です。しかし、MY コードを使用すると、新しい XBEE がネットワークに参加すると、次のように表示されます。
7E 20 95 13 A2 40 3B
これがシリアルポートを開く方法です
struct termios options;
int port;
port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));
options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;
tcsetattr(port, TCSANOW, &options);
そのコードが何をするかについては私の理論がありますが、私の理論は明らかに間違っています。9600、8N1、フロー制御なしでポートを開こうとしています。serial->USB ドライバーも使用していることがわかりますが、データを取得しているように見えるので、その部分が機能していると確信しています。
私の推測では、オプションをゼロにすると、0x00 が制御文字になりますか? わからない。オプションをゼロにしないと、一度に 5 バイトしか読み取れず、データが失われます。フロー制御またはボー レートに問題があるように感じたので、bzero() を実行したところ、NULL が返されなくなりました。
また、Linux システムで Minicom を使用して、出力をキャプチャしました。同じ情報が得られますが、NULL はありません (プロトコルに慣れていない人にとっては、これは実際にパケット サイズを台無しにします)。私のコードは、ミニコムが変更されていない状態にシリアルポートを設定できましたか? 道に迷いました。
助けてくれてありがとう!