USB から RS422 へのコンバーター モジュール用のインターフェイス アプリケーションを開発しているときに、ショーが停止する問題に遭遇しました。
フレーミング、オーバーラン、パリティ、およびブレーク エラーの UART エラー カウンターを取得する必要があります。しかし、ioctl への呼び出しは常に -1 を返し、取得された構造体からのカウンター値は非常に大きな数値にジャンプしています。
カウンターを取得するために使用しているコードは次のとおりです。
struct serial_icounter_struct counters;
int ret = ioctl(portDescriptor, TIOCGICOUNT, &counters);
portDescriptor を設定するには、次のようなコードを使用しています。
int portDescriptor = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
struct termios new_port_settings;
//clear the new struct
memset(&new_port_settings, 0, sizeof(new_port_settings));
//set port settings
new_port_settings.c_cflag = B57600 | CS8 | CLOCAL | CREAD;
new_port_settings.c_oflag = 0;
new_port_settings.c_lflag = 0;
new_port_settings.c_cc[VMIN] = 0;
new_port_settings.c_cc[VTIME] = 0;
int error = tcsetattr(portDescriptor, TCSANOW, &new_port_settings)
フロー制御やパリティを有効にする必要がある場合もあります。
new_port_settings.c_cflag = new_port_settings.c_cflag | CRTSCTS;
Ubuntu 11.10 32 ビットと SLES11 SP1 64 ビットでコードを試しましたが、どちらも FTDI_SIO カーネル モジュールを使用しています。
TIOCGICOUNT の使用に関する何らかの問題を知っている人はいますか、それとも何か間違っていますか?