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