com0comで作成されたシリアル ポートに書き込まれたデータを読み込もうとしています。現在の構成には、相互に接続された COM8 と COM9 という 2 つのシリアル ポートがあります。
PuTTYを使用してこれら 2 つのシリアル ポートを開き、一方の端末に何かを書き込むと、すぐに他方の端末に表示されます。ただし、プログラムで実行しようとすると、話は別です。
書き込みは問題なくできますが、何らかの理由で読み取りに失敗します。Tom Archer と Rick Leinecker による CSerial ライブラリを使用しています。
データを読み込む関数は以下のようなものです。
int CSerial::ReadData( void *buffer, int limit )
{
if( !m_bOpened || m_hIDComDev == NULL )
return( 0 );
BOOL bReadStatus;
DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat;
SetCommMask (m_hIDComDev, 0);
SetCommMask (m_hIDComDev, EV_RXCHAR);
ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return( 0 );
dwBytesRead = (DWORD) ComStat.cbInQue;
if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit;
bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead );
if( !bReadStatus ){
if (GetLastError() == ERROR_IO_PENDING ){
WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
cout<< "Read data" << endl;
return( (int) dwBytesRead );
}
return( 0 );
}
return( (int) dwBytesRead );
}
プログラムが次の行で終了するため、シリアル ポートからデータを読み取ることができません。
if( !ComStat.cbInQue )
return( 0 );
シリアル バッファにはデータがあるため、これは非常に奇妙cbInQue
ですが、読み取り操作に使用できるデータがゼロに設定されているかどうかがわかります。
このシナリオの回避策はありますか? または、com0com で変更する必要がある設定はありますか?
参考までに、Windows 7 64 ビットでMinGWコンパイラを使用してCode::Blocks IDE を使用しています。