Browse Source

1、正规表达式,判断是否tim和ptn双命令,如果是超时值=1000ms;

scbc.sat2 5 years ago
parent
commit
0173ae6ad9

+ 10 - 2
SATHelper/SATHelper/Device.cpp

@@ -1,6 +1,6 @@
 #include "StdAfx.h"
 #include "Device.h"
-#include "Device.h"
+#include <regex> 
 
 std::map<int, CDevice*> g_dmap;
 CDevice::CDevice()
@@ -36,8 +36,16 @@ std::string CDevice::SendCommond(std::string cmd)
 	if ( dwRet != cmd.size() )
 		return std::string("写串口失败");
 
+	// 如果是tim和ptn同时运行;
+	std::string pattern{ "run tim (\\d{1,3});run ptn (\\d{1,3});\r" }; // fixed telephone 
+	std::regex re(pattern);
+	WORD timeout = 300;
+	if (std::regex_match(cmd, re))
+		timeout = 1000;
+	
+
 	byte szData[1024 * 4] = {0};
-	dwRet = m_obj.ReadComm(szData, 1024 * 4);
+	dwRet = m_obj.ReadComm(szData, 1024 * 4, timeout);
 	if (dwRet == 0 )
 		return std::string("读串口失败");
 

+ 2 - 2
SATHelper/SATHelper/SynSerial.cpp

@@ -255,7 +255,7 @@ DWORD CSynSerial::WriteComm(IN BYTE * pWirteBuf, IN CONST INT32 nWriteSize)
 	return dwBytesWritten;
 }
 
-DWORD CSynSerial::ReadComm(IN BYTE * pReadBuf, IN CONST DWORD & dwReadSize)
+DWORD CSynSerial::ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD timeout /* = 300 */)
 {
 	if (!IsOpen())
 		return 0;
@@ -274,7 +274,7 @@ DWORD CSynSerial::ReadComm(IN BYTE * pReadBuf, IN CONST DWORD & dwReadSize)
 	// 直到有数据为止,超时3秒;
 	while (true)
 	{// cbInQue表示输入缓冲区的字节数; 
-		Sleep(300);
+		Sleep(timeout);
 		if (GetTickCount64() - ulTick > 3000)
 			break;
 		ClearCommError(m_hSerialPort, &dwErrorFlags, &ComStat);

+ 1 - 1
SATHelper/SATHelper/SynSerial.h

@@ -77,7 +77,7 @@ public:
 	void SetSerialCommTimeouts(IN CONST COMMTIMEOUTS &commTimeouts);
 
 	virtual DWORD WriteComm(IN BYTE *pWirteBuf, IN CONST INT32 nWriteSize);
-	virtual DWORD ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& nReadSize);
+	virtual DWORD ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& dwReadSize, WORD timeout = 300);
 };
 
 #endif // __SYN_SERIAL__