Linux のシリアル ポートで BREAK 状態を検出できるようにしたいと考えています。これはどのように行われますか?
BREAK 条件がいつ開始され、いつ停止するかを検出したいと思います。
もしそうなら、私はそれを望んでいました:
int serial_status;
ioctl(serial_fd, TIOCMGET, &serial_status);
その場合、BREAK 状態を示すビット値が表示されますが、そのようなことはないようです。
休憩を送るために見つけましtcsendbreak()た。また、ブレークの送信方法を説明しているマニュアル ページも見つけました。しかし、休憩を取るのはどうですか?termios.htty_ioctl
注: BRKINTが提案されています (SIGINTブレークが発生したときに信号を生成します)。しかしSIGINT、いくつかの理由から、 を取得することはそれほど有用な API ではありません。
- 複数のシリアルポートのシナリオでは、どのシリアルポートからのものかわかりません。
SIGINT端末でプログラムを実行しているときに、ユーザーが Ctrl-C を押して取得することもできます。- プログラムをデーモンとして実行している場合、「端末がフォアグラウンド プロセス グループの制御端末である場合」という但し書きは当てはまりませんね。
- BREAK 状態がどのくらい続くか、いつ停止するかを知ることはできません。