|
@@ -281,12 +281,9 @@ DWORD CSynSerial::WriteComm(IN BYTE * pWirteBuf, IN CONST INT32 nWriteSize)
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_wrOverlapped, &dwBytesWritten, FALSE)){
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_wrOverlapped, &dwBytesWritten, FALSE)){
|
|
dwError = GetLastError();
|
|
dwError = GetLastError();
|
|
if ( ERROR_IO_PENDING == dwError || dwError == ERROR_IO_INCOMPLETE ) {
|
|
if ( ERROR_IO_PENDING == dwError || dwError == ERROR_IO_INCOMPLETE ) {
|
|
- printf("等待\n");
|
|
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- // 发生错误;
|
|
|
|
- printf("发生错误:%d\n", dwError);
|
|
|
|
ClearCommError(m_hSerialPort, &dwError, NULL);
|
|
ClearCommError(m_hSerialPort, &dwError, NULL);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -309,43 +306,6 @@ DWORD CSynSerial::ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD t
|
|
}
|
|
}
|
|
|
|
|
|
DWORD dwError = 0;
|
|
DWORD dwError = 0;
|
|
- DWORD dwBytesRead = 0;
|
|
|
|
- DWORD dwErrorFlags = 0;
|
|
|
|
-#if 0
|
|
|
|
- // ReadFile前,使用ClearCommError清除错误;
|
|
|
|
- COMSTAT ComStat = {0};
|
|
|
|
- DWORD dwLastLen = 0;
|
|
|
|
- ULONGLONG ulTick = GetTickCount64();
|
|
|
|
- // 直到有数据为止,超时3秒;
|
|
|
|
- while (true)
|
|
|
|
- {// cbInQue表示输入缓冲区的字节数;
|
|
|
|
- Sleep(timeout);
|
|
|
|
- ClearCommError(m_hSerialPort, &dwErrorFlags, &ComStat);
|
|
|
|
- if (GetTickCount64() - ulTick > 3000)
|
|
|
|
- break;
|
|
|
|
- // 防止读一次没读完,再读一次;二次长度一样表示读完;
|
|
|
|
- if (ComStat.cbInQue != 0 && dwLastLen == ComStat.cbInQue)
|
|
|
|
- break;
|
|
|
|
- dwLastLen = ComStat.cbInQue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (ComStat.cbInQue == 0)
|
|
|
|
- {
|
|
|
|
- // 串口超时,无数据返回;
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- dwBytesRead = ComStat.cbInQue;
|
|
|
|
- if (dwReadSize < dwBytesRead)
|
|
|
|
- {
|
|
|
|
- dwBytesRead = dwReadSize;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (ReadFile(m_hSerialPort, pReadBuf, dwBytesRead, &dwBytesRead, NULL))
|
|
|
|
- {
|
|
|
|
- return (INT)dwBytesRead;
|
|
|
|
- }
|
|
|
|
-#else
|
|
|
|
DWORD dwRealRead;
|
|
DWORD dwRealRead;
|
|
if ( !ClearCommError(m_hSerialPort, &dwError, NULL) ) {
|
|
if ( !ClearCommError(m_hSerialPort, &dwError, NULL) ) {
|
|
PurgeComm(m_hSerialPort, PURGE_TXABORT|PURGE_TXCLEAR);
|
|
PurgeComm(m_hSerialPort, PURGE_TXABORT|PURGE_TXCLEAR);
|
|
@@ -355,13 +315,10 @@ DWORD CSynSerial::ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD t
|
|
if ( GetLastError() == ERROR_IO_PENDING ) {
|
|
if ( GetLastError() == ERROR_IO_PENDING ) {
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_wrOverlapped, &dwRealRead, FALSE)){
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_wrOverlapped, &dwRealRead, FALSE)){
|
|
dwError = GetLastError();
|
|
dwError = GetLastError();
|
|
- printf("码值=%d, 长度=%d, 内容=%s\n", dwError, dwRealRead, pReadBuf);
|
|
|
|
|
|
+ printf("\t 码值=%d, 长度=%d, 内容=%s \n\n", dwError, dwRealRead, pReadBuf);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- pReadBuf[dwRealRead] = '\0';
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
return dwRealRead;
|
|
return dwRealRead;
|
|
}
|
|
}
|