RTS/CTSピン(tcsetattrのCRTSCTSフラグ)を使用したハードウェアフロー制御を使用してシリアルポート通信をセットアップすることは可能ですが、信頼性が高く効率的な方法でフロー制御にDTR/DSRピンを使用する方法はありません。
TIOCMGET ioctl()を使用してピンの状態を確認できますが、一度に1バイトを送信する必要があるため、非常に遅くなります。
より良い方法はありませんか?独自のケーブルを作成することは拡張性がなく、DTR/DSRフロー制御のみを使用する多くのPOSシリアルプリンターが市場に出回っています。
P.S.- XON/XOFFを忘れて、信頼できる8ビット通信が必要です。
私自身の質問に答えると、@ ktfからのヒントのおかげで、少なくとも2.6.28 [1]以降、拡張属性を設定するためのIOCTL(TCGETX、TCSETX、TCSETXF、およびTCSETXW)があることがわかりました。
これらは2008年10月13日にアップストリームカーネルに追加されたようです[2]。
これらの追加のIOCTL(SYS5と互換性があります)を使用すると、追加の各ピンを個別に処理するように構成できます。
元のRHELパッチ[3]のリンクを参照し、その使用方法の例については、添付のテストケースを参照してください。
IOCTL定義は「asm-generic/ioctls.h」ファイルにあり、構造とフラグ定数は「linux/termios.h」(もちろん「/ usr/include」内)で定義されています。
[〜#〜]更新[〜#〜]
さらなる調査によると、このIOCTLの汎用シリアルサポートはアップストリームカーネルソースにマージされていません。 RHEL 5.3にはそれがありますが、アップストリーム3.0.6カーネルにはありません。
これは、RHELパッチを移植しなかった他のカーネルではioctl()呼び出しが失敗することを意味します[4]。
[1] http://lxr.free-electrons.com/ident?v=2.6.28;i=TCGETX
[2] https://lkml.org/lkml/2008/10/13/12
[3] https://bugzilla.redhat.com/show_bug.cgi?id=445211
[4] https://bugzilla.redhat.com/attachment.cgi?id=315300&action=diff