|
@@ -1,6 +1,8 @@
|
|
|
#include "StdAfx.h"
|
|
|
#include "SynSerial.h"
|
|
|
|
|
|
+int CSynSerial::s_nCurPos = 0;
|
|
|
+byte CSynSerial::s_byBuffer[BUFFER_LEN];
|
|
|
ThreadSection CSynSerial::s_csClearBuffer;
|
|
|
CSynSerial::CSynSerial(void) :m_hSerialPort(NULL)
|
|
|
, m_dwInQueue(1024)
|
|
@@ -284,7 +286,7 @@ bool CSynSerial::WriteComm(IN BYTE * pWirteBuf, IN CONST INT32 nWriteSize)
|
|
|
DWORD dwError = GetLastError();
|
|
|
if ( ERROR_IO_PENDING == GetLastError() ) {
|
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_writeOverlapped, &dwBytesWritten, FALSE)){
|
|
|
-#ifdef _DEBUG
|
|
|
+#if 0
|
|
|
printf("\t\t写串口出错: %d,%d,%d,%d,%d,%d\n",
|
|
|
GetLastError(), m_writeOverlapped.Internal, m_writeOverlapped.InternalHigh,
|
|
|
m_writeOverlapped.Offset, m_writeOverlapped.OffsetHigh,dwBytesWritten);
|
|
@@ -320,13 +322,13 @@ DWORD CSynSerial::ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD t
|
|
|
PurgeComm(m_hSerialPort, PURGE_TXABORT|PURGE_TXCLEAR);
|
|
|
}
|
|
|
|
|
|
- int i = 0;
|
|
|
- TCHAR szLog[MAX_PATH] ;
|
|
|
if ( !ReadFile(m_hSerialPort, pReadBuf, dwReadSize, &dwRealRead, &m_readOverlapped) ) {
|
|
|
if ( STATUS_PENDING == m_readOverlapped.Internal ) {
|
|
|
while(!GetOverlappedResult(m_hSerialPort, &m_readOverlapped, &dwRealRead, FALSE)){
|
|
|
|
|
|
-#ifdef _DEBUG
|
|
|
+#if 0
|
|
|
+ static int i = 0;
|
|
|
+ static TCHAR szLog[MAX_PATH] ;
|
|
|
Sleep(20);
|
|
|
_stprintf_s(szLog,"\t\t读串口出错: %d = %d,%d,%d,%d,%d,%d\n", ++i,
|
|
|
GetLastError(), m_readOverlapped.Internal, m_readOverlapped.InternalHigh,
|
|
@@ -387,15 +389,44 @@ void CSynSerial::EndofThread()
|
|
|
|
|
|
DWORD CSynSerial::ThreadWatch(LPVOID lpVoid)
|
|
|
{
|
|
|
+ int nLeft = 0;
|
|
|
+ bool bFist = true; // 是否填充完整过;
|
|
|
DWORD dwRealRead;
|
|
|
TCHAR szValue[1024] = {0};
|
|
|
CSynSerial *pthat = (CSynSerial*)lpVoid;
|
|
|
|
|
|
do
|
|
|
{
|
|
|
+ memset(szValue, 0, 1024);
|
|
|
if ( (dwRealRead = pthat->ReadComm((BYTE*)szValue, 1024)) > 0) {
|
|
|
AutoThreadSection aSection(&s_csClearBuffer);
|
|
|
+ OutputDebugString(_T("内容:"));
|
|
|
+ OutputDebugString(szValue);
|
|
|
+ OutputDebugString(_T("\n"));
|
|
|
+
|
|
|
+#if 1
|
|
|
+ if ( (s_nCurPos + dwRealRead) > BUFFER_LEN ) {
|
|
|
+ // 先复制尾部;
|
|
|
+ nLeft = dwRealRead - (BUFFER_LEN-s_nCurPos);
|
|
|
+ memcpy_s(&s_byBuffer[s_nCurPos], BUFFER_LEN-s_nCurPos, szValue, BUFFER_LEN-s_nCurPos);
|
|
|
+ s_nCurPos = 0;
|
|
|
+ memcpy_s(s_byBuffer, nLeft, &szValue[nLeft], nLeft);
|
|
|
+ s_nCurPos = nLeft;
|
|
|
+ bFist = false;
|
|
|
+ } else {
|
|
|
+ memcpy_s(&s_byBuffer[s_nCurPos], BUFFER_LEN-s_nCurPos, szValue, dwRealRead);
|
|
|
+ s_nCurPos += dwRealRead;
|
|
|
+ }
|
|
|
+
|
|
|
+ pthat->m_strbuffer.clear();
|
|
|
+ if ( !bFist )
|
|
|
+ pthat->m_strbuffer.append((char*)&s_byBuffer[s_nCurPos], BUFFER_LEN - s_nCurPos);
|
|
|
+ pthat->m_strbuffer.append((char*)s_byBuffer, s_nCurPos);
|
|
|
+
|
|
|
+ printf("内容:%s\n", pthat->m_strbuffer.c_str());
|
|
|
+#else // 这里如果不及时清除,内存越来越大;
|
|
|
pthat->m_strbuffer.append(szValue, dwRealRead);
|
|
|
+#endif
|
|
|
#ifdef _DEBUG
|
|
|
printf(_T("buffer=%s\n"), pthat->m_strbuffer.c_str());
|
|
|
#endif
|