4

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 の使用に関する何らかの問題を知っている人はいますか、それとも何か間違っていますか?

4

0 に答える 0