1

完全なハンドシェイク (RTS、CTS、DTR) で RS232 経由でボード デバイスに接続する Windows ホスト上のアプリケーションがあります。RS232をUSBに置き換えたい。LinuxとUSBデバイス(g_serial)モジュールが組み込まれたボードを使用しています。端末の両側ですべてのデータを取得しますが、アプリケーションはそれを処理できません (ハンドシェイク信号の欠如)。どのようにそれを処理することが可能ですか? (ホストまたはデバイス側) PC ホスト側のハンドシェイクを気にするハンドシェイク「エミュレーター」がいくつかあるのではないでしょうか?

BR Bartlomiej Grzeskowiak

4

2 に答える 2

2

Linux カーネルのドライバーのカーネル (元は 3.8、その後は 4.11) のソース コードを調べてg_serial、Linux 側 API のハードウェア ハンドシェーク ラインを制御する API が実装されているかどうかを確認しました ( /dev/ttyGS0)。例えば:

#include <unistd.h>
#include <termios.h>

int fd;
int status;

...
ioctl(fd, TIOCMGET, &status);
status |= TIOCM_DTR;
ioctl(fd, TIOCMSET, &status);

ドライバーはそれをサポートしていないようです。で、上記のコードをサポートするために通常必要なまたはメンバーを定義していないものをdrivers/usb/gadget/function/u_serial.c参照してください。struct tty_operations gs_tty_ops.tiocmset.tiocmget

したがって、このサポートを追加するには、ドライバーを改善する必要があると思います。

于 2013-03-20T04:37:37.210 に答える
1

基盤となるドライバーがCDCACMクラスを実装している場合、制御ラインの状態はSET_CONTROL_LINE_STATE(0x22)要求を使用して設定されます。Windowsは、制御ラインの状態が設定されているときにこの要求を確実に発行し、デバイスからも要求に応答します。

ただし、基盤となるUSBプロトコルには独自のフロー制御メカニズムがあるため、これらの信号はUSB転送に影響を与えません。両端のアプリケーションは信号を処理する必要があります。たとえばWindowsでは、ポートに対してハードウェアフロー制御を明示的に有効にする必要があります。

于 2012-09-17T14:39:52.483 に答える