sat23 4 년 전
부모
커밋
e9d133d471
6개의 변경된 파일215개의 추가작업 그리고 94개의 파일을 삭제
  1. 2 2
      Serail-Demo/Demo/Demo.cpp
  2. 10 8
      Serail-Demo/Demo/Serial.cpp
  3. 43 42
      Serail-Demo/Demo/command.data
  4. 43 42
      Serail-Demo/Demo/stdafx.cpp
  5. 1 0
      Serail-Demo/Demo/stdafx.h
  6. 116 0
      Serail-Demo/串口通信.html

+ 2 - 2
Serail-Demo/Demo/Demo.cpp

@@ -32,7 +32,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		// TODO: 在此处为应用程序的行为编写代码。
 #if 1
 		CBaseSerial sb(0);
-		if ( sb.Open(23, _T("baud=115200 parity=N data=8 stop=1") ) )
+		if ( sb.Open(23, _T("baud=115200 parity=N data=8 stop=1")) )
 		{
 			sb.SetTimeouts();
 			std::vector<CommandParam> vtCommandParams;
@@ -54,7 +54,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 					Sleep(it->cmd_wait_time);
 				}
 
-				sb.ClearCommBuffer();
+				//sb.ClearCommBuffer();
 			}
 		}
 #else

+ 10 - 8
Serail-Demo/Demo/Serial.cpp

@@ -62,7 +62,13 @@ LPCOMMTIMEOUTS CBaseSerial::GetTimeouts()
 
 bool CBaseSerial::SetTimeouts(DWORD ReadIntervalTimeout /* = 0 */, DWORD ReadTotalTimeoutMultiplier /* = 10 */, DWORD ReadTotalTimeoutConstant /* = 1500 */, DWORD WriteTotalTimeoutMultiplier /* = 10 */, DWORD WriteTotalTimeoutConstant /* = 1500 */)
 {
-	COMMTIMEOUTS CO = {ReadIntervalTimeout, ReadTotalTimeoutMultiplier, ReadTotalTimeoutConstant, WriteTotalTimeoutMultiplier, WriteTotalTimeoutConstant};
+	COMMTIMEOUTS CO = {
+		ReadIntervalTimeout, 
+		ReadTotalTimeoutMultiplier, 
+		ReadTotalTimeoutConstant, 
+		WriteTotalTimeoutMultiplier, 
+		WriteTotalTimeoutConstant
+	};
 	return IsOpen() ? ::SetCommTimeouts(_hCommHandle, &CO) == TRUE : false;
 }
 
@@ -191,7 +197,6 @@ DWORD CBaseSerial::Write(LPVOID Buffer, DWORD dwBufferLength)
 	if (!::WriteFile(_hCommHandle, Buffer, dwBufferLength, &uWriteLength, &_WriteOverlapped)) {
 		if (ERROR_IO_PENDING == GetLastError()) {
 			while (!GetOverlappedResult(_hCommHandle, &_WriteOverlapped, &uWriteLength, FALSE)) {
-				_dprintf("GetOverlappedResult");
 				dwError = GetLastError();
 				if (ERROR_IO_PENDING == dwError) {
 					_dprintf("畇된덤");
@@ -296,8 +301,7 @@ DWORD CBaseSerial::Write(TCHAR *szBuffer, DWORD dwBufferLength, TCHAR *szFormat,
 	va_start(va, szFormat);
 #if _MSC_VER < 1500
 	_vsnprintf(szBuffer, dwBufferLength, szFormat, va);
-#endif
-#if _MSC_VER >=1500 // VC9.0鹿�경굶;
+#elif _MSC_VER >=1500 // VC9.0鹿�경굶;
 	//_vsntprintf(szBuffer, dwBufferLength, szFormat, va);
 	_vsntprintf_s(szBuffer, dwBufferLength, _TRUNCATE, szFormat, va);
 #endif
@@ -315,8 +319,7 @@ DWORD CBaseSerial::Write(TCHAR *szBuffer, TCHAR *szFormat, ...)
 	va_start(va, szFormat);
 #if _MSC_VER < 1500       
 	vsprintf(szBuffer, szFormat, va);
-#endif
-#if _MSC_VER >=1500 // VC9.0鹿�경굶;    
+#elif _MSC_VER >=1500 // VC9.0鹿�경굶;    
 	_vstprintf(szBuffer, szFormat, va);
 #endif
 	va_end(va);
@@ -390,8 +393,7 @@ void CBaseSerial::BindCommPort(DWORD dwPort)
 	strcpy(_szCommStr, _T("\\\\.\\COM"));
 	ltoa(_dwPort, p, 10);
 	strcat(_szCommStr, p);
-#endif
-#if _MSC_VER >= 1500
+#elif _MSC_VER >= 1500
 	_tcscpy_s(_szCommStr, _T("\\\\.\\COM"));
 	_ltot_s(_dwPort, p, 10);
 	_tcscat_s(_szCommStr, p);

+ 43 - 42
Serail-Demo/Demo/command.data

@@ -1,47 +1,48 @@
 # Get Info;
-Name=EnterFactory; HeadCode=AA; Command=10; CMDParam=01; MultiParams=false; ReadWaitTime=150ms; CMDWaitTime=100ms
-Name=GetSoftVersion; HeadCode=AA; Command=57; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetProjectID; HeadCode=AA; Command=84; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetDeviceId; HeadCode=AA; Command=BE; CMDParam=01; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetClientType; HeadCode=AA; Command=8C; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetMAC; HeadCode=AA; Command=BE; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetHDCPKey; HeadCode=AA; Command=EE; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetHDCPKey22; HeadCode=AA; Command=E7; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetWidi; HeadCode=AA; Command=E7; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetNetflixESN; HeadCode=AA; Command=BE; CMDParam=06; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetWidevine; HeadCode=AA; Command=EC; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetCiKey; HeadCode=AA; Command=EC; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetOSDLanguage; HeadCode=AA; Command=97; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetShopLanguage; HeadCode=AA; Command=97; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=GetChannel; HeadCode=AA; Command=97; CMDParam=13; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=LeaveFactory; HeadCode=AA; Command=10; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=WBInit; HeadCode=AA; Command=16; CMDParam=02; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=EnterFactory; Option=None; HeadCode=AA; Command=10; CMDParam=01; MultiParams=false; ReadWaitTime=150ms; CMDWaitTime=100ms
+Name=GetSoftVersion; Option=Get; HeadCode=AA; Command=57; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetProjectID; Option=Get; HeadCode=AA; Command=84; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetDeviceId; Option=Get; HeadCode=AA; Command=BE; CMDParam=01; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetClientType; Option=Get; HeadCode=AA; Command=8C; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetMAC; Option=Get; HeadCode=AA; Command=BE; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetHDCPKey; Option=Get; HeadCode=AA; Command=EE; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetHDCPKey22; Option=Get; HeadCode=AA; Command=E7; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetWidi; Option=Get; HeadCode=AA; Command=E7; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetNetflixESN; Option=Get; HeadCode=AA; Command=BE; CMDParam=06; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetWidevine; Option=Get; HeadCode=AA; Command=EC; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetCiKey; Option=Get; HeadCode=AA; Command=EC; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetOSDLanguage; Option=Get; HeadCode=AA; Command=97; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetShopLanguage; Option=Get; HeadCode=AA; Command=97; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetChannel; Option=Get; HeadCode=AA; Command=97; CMDParam=13; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+# Check is Get-Option
+Name=CheckMAC; Option=Get; HeadCode=AA; Command=B4; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckDeviceId; Option=Get; HeadCode=AA; Command=B4; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckHDCP; Option=Get; HeadCode=AA; Command=87; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckNetflixESN; Option=Get; HeadCode=AA; Command=9A; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckWidi; Option=Get; HeadCode=AA; Command=E5; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckWidevine; Option=Get; HeadCode=AA; Command=EA; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckCikey; Option=Get; HeadCode=AA; Command=EA; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=CheckHDCP22; Option=Get; HeadCode=AA; Command=E5; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=LeaveFactory; Option=None; HeadCode=AA; Command=10; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=WBInit; Option=Get; HeadCode=AA; Command=16; CMDParam=02; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
 # Set Info;
-Name=SetProjectId; HeadCode=AA; Command=70; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetDeviceID; HeadCode=AA; Command=B2; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetMAC; HeadCode=AA; Command=B3; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetHDCPKey; HeadCode=AA FE; Command=86; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetHDCPKey22; HeadCode=AA FE; Command=E4; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetNetflixESN; HeadCode=AA; Command=99 00; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetWidi; HeadCode=AA FE; Command=E4; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetWidevine; HeadCode=AA FE; Command=E9 00; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetCiKey; HeadCode=AA FE; Command=E9 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetOSDLanguage; HeadCode=AA; Command=99 00; CMDParam=/; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetShopLanguage; HeadCode=AA; Command=96 01; CMDParam=/; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetChannel; HeadCode=AA; Command=15; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetWBNormal; HeadCode=AA; Command=4D 04 01 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetWBCool; HeadCode=AA; Command=4D 04 02 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=SetWBWarm; HeadCode=AA; Command=4D 04 03 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckMAC; HeadCode=AA; Command=B4; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckDeviceId; HeadCode=AA; Command=B4; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckHDCP; HeadCode=AA; Command=87; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckNetflixESN; HeadCode=AA; Command=9A; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckWidi; HeadCode=AA; Command=E5; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckWidevine; HeadCode=AA; Command=EA; CMDParam=00; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckCikey; HeadCode=AA; Command=EA; CMDParam=01; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=CheckHDCP22; HeadCode=AA; Command=E5; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=StarWarmUpMode; HeadCode=AA; Command=13; CMDParam=01; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
-Name=StopWarmUpMode; HeadCode=AA; Command=13; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetProjectId; Option=Set; HeadCode=AA; Command=70; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetDeviceID; Option=Set; HeadCode=AA; Command=B2; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetMAC; Option=Set; HeadCode=AA; Command=B3; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetHDCPKey; Option=Set; HeadCode=AA FE; Command=86; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetHDCPKey22; Option=Set; HeadCode=AA FE; Command=E4; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetNetflixESN; Option=Set; HeadCode=AA; Command=99 00; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetWidi; Option=Set; HeadCode=AA FE; Command=E4; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetWidevine; Option=Set; HeadCode=AA FE; Command=E9 00; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetCiKey; Option=Set; HeadCode=AA FE; Command=E9 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetOSDLanguage; Option=Set; HeadCode=AA; Command=99 00; CMDParam=/; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetShopLanguage; Option=Set; HeadCode=AA; Command=96 01; CMDParam=/; MultiParams=true; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetChannel; Option=Set; HeadCode=AA; Command=15; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetWBNormal; Option=Set; HeadCode=AA; Command=4D 04 01 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetWBCool; Option=Set; HeadCode=AA; Command=4D 04 02 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=SetWBWarm; Option=Set; HeadCode=AA; Command=4D 04 03 01; CMDParam=/; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=StarWarmUpMode; Option=None; HeadCode=AA; Command=13; CMDParam=01; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=StopWarmUpMode; Option=None; HeadCode=AA; Command=13; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
 
 
 

+ 43 - 42
Serail-Demo/Demo/stdafx.cpp

@@ -59,8 +59,7 @@ int pares_time_value(std::string strTime)
 		// 不带单位或其他的,默认ms;
 		nTimes = atol(strTime.c_str());
 	}
-#endif
-#if _MSC_VER >= 1500
+#elif _MSC_VER >= 1500
 	if ( _tcsstr(strTime.c_str(), _T("ms")) || _tcsstr(strTime.c_str(), _T("MS")))
 	{
 		nTimes = _tstol(strTime.c_str());
@@ -87,6 +86,7 @@ int parse_cmd_param_from_file(TCHAR *file_name, std::vector<CommandParam> &vtCom
 {
 	TCHAR buf[MAX_PATH] = {0};
 	TCHAR name[MAX_PATH] = {0};
+	TCHAR option[MAX_PATH] = {0};
 	TCHAR head[MAX_PATH] = {0};
 	TCHAR code[MAX_PATH] = {0};
 	TCHAR param[MAX_PATH] = {0};
@@ -120,32 +120,39 @@ int parse_cmd_param_from_file(TCHAR *file_name, std::vector<CommandParam> &vtCom
 			} 
 		}
 
-#if _MSC_VER >= 1500 
-		//if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 7) // 等价下面;
-		if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 7)
-#endif
 #if _MSC_VER >= 1200 && _MSC_VER < 1500 // VC6.0~8.0 
-			if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, param, multicode, read_wait_time, cmd_wait_time) == 7)
+		if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, option, head, code, param, multicode, read_wait_time, cmd_wait_time) == 8)
+#elif _MSC_VER >= 1500 
+		//if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, option, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 8) // 等价下面;
+		if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, option, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 8)
 #endif
-			{
-				CommandParam cp;
-				parse_key(cp.name, name, _T("Name"));
-				parse_key(cp.head, head, _T("HeadCode"));
-				parse_key(cp.code, code, _T("Command"));
-				parse_key(cp.param, param, _T("CMDParam"));
-
-				std::string value;
-				parse_key(value, multicode, _T("MultiParams"));
-				cp.bMulticode = !_tcsicmp(value.c_str(), _T("true")) ? true : false;
-
-				parse_key(value, read_wait_time, _T("ReadWaitTime"));
-				cp.read_wait_time = pares_time_value(value.c_str());
-
-				parse_key(value, cmd_wait_time, _T("CMDWaitTime"));
-				cp.cmd_wait_time = pares_time_value(value.c_str());
-
-				vtCommandParams.push_back(cp);
-			}
+		{
+			CommandParam cp;
+			parse_key(cp.name, name, _T("Name"));
+			parse_key(cp.head, head, _T("HeadCode"));
+			parse_key(cp.code, code, _T("Command"));
+			parse_key(cp.param, param, _T("CMDParam"));
+
+			std::string value;
+			parse_key(value, option, _T("Option"));
+			if ( !_tcsicmp(value.c_str(), _T("None")) )
+				cp.nOption = 0;
+			else if (!_tcsicmp(value.c_str(), _T("Get")))
+				cp.nOption = 1;
+			else if (!_tcsicmp(value.c_str(), _T("Set")))
+				cp.nOption = 2;
+
+			parse_key(value, multicode, _T("MultiParams"));
+			cp.bMulticode = !_tcsicmp(value.c_str(), _T("true")) ? true : false;
+
+			parse_key(value, read_wait_time, _T("ReadWaitTime"));
+			cp.read_wait_time = pares_time_value(value.c_str());
+
+			parse_key(value, cmd_wait_time, _T("CMDWaitTime"));
+			cp.cmd_wait_time = pares_time_value(value.c_str());
+
+			vtCommandParams.push_back(cp);
+		}
 	}
 
 	ret = 0;
@@ -200,11 +207,10 @@ std::string HexStringToBytes(std::string strHex, const int &len /* = 3 */)
 	int nSize = strHex.size();
 	for (int i = 0; i < nSize; i += len)
 	{
-#if _MSC_VER >=1500
-		strBytes.push_back((char)TwoHexCharToInteger(strHex[i], strHex[i + 1]));
-#endif
 #if _MSC_VER >=1200 && _MSC_VER < 1500
 		strBytes.append((char)TwoHexCharToInteger(strHex[i], strHex[i + 1]),1);
+#elif _MSC_VER >=1500
+		strBytes.push_back((char)TwoHexCharToInteger(strHex[i], strHex[i + 1]));
 #endif
 	}
 
@@ -220,8 +226,7 @@ std::string BytesToHexString(const unsigned char *pbuffer, int nLen, char chSpac
 		memset(szhex, 0, 5);
 #if _MSC_VER >= 1200 && _MSC_VER < 1500
 		sprintf(szhex, "%02X%c", pbuffer[i], chSpace);
-#endif
-#if _MSC_VER >= 1500
+#elif _MSC_VER >= 1500
 		_stprintf_s(szhex, "%02X%c", pbuffer[i], chSpace);
 #endif
 		hex.append(szhex);
@@ -240,8 +245,7 @@ std::string BytesToHexString(const unsigned char *pbuffer, int nLen)
 
 #if _MSC_VER >= 1200 && _MSC_VER < 1500
 		sprintf(szhex, "%02X", pbuffer[i]);
-#endif
-#if _MSC_VER >= 1500
+#elif _MSC_VER >= 1500
 		_stprintf_s(szhex, "%02X", pbuffer[i]);
 #endif
 		hex.append(szhex);
@@ -255,11 +259,9 @@ BOOL IsValidString(LPCTSTR lpszString)
 	if (lpszString == NULL)
 		return FALSE;
 
-	do
-	{
+	do {
 		// ASCII可显示的字符;
-		if (*lpszString < 32 || *lpszString > 126)
-		{
+		if (*lpszString < 32 || *lpszString > 126) {
 			return FALSE;
 		}
 	} while (*++lpszString);
@@ -278,13 +280,12 @@ std::string &trim(std::string &str)
 	return str;
 #endif
 
-#if _MSC_VER > 1900
-	str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char x) {return std::isspace(x); }), str.end()); //C++17
-#endif
 #if _MSC_VER >= 1200 && _MSC_VER < 1600
 	for (std::string::iterator it = str.begin(); it != str.end();)	{
 		!isspace(*it) ? it++ : it = it = str.erase(it);
 	}
+#elif _MSC_VER >= 1600
+	str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char x) {return std::isspace(x); }), str.end()); //C++17
 #endif
 	return str;
 }
@@ -332,8 +333,8 @@ std::string PackingCommand(CommandParam &cmdPara, std::string data, const int &d
 
 	// crc校验;
 	byte szcrc[2] = {0};
-	//WORD usCRCValue = CRC16Calculate((byte *)command.c_str(), command.size()); // 如果有0断开有危险;
-	WORD usCRCValue = CRC16Calculate((byte *)command.c_str(), len - 2);
+	WORD usCRCValue = CRC16Calculate((byte *)command.c_str(), command.size()); // 如果有0断开有危险;
+	//WORD usCRCValue = CRC16Calculate((byte *)command.c_str(), len - 2);
 	szcrc[0] = (usCRCValue >> 8) & 0xFF;
 	szcrc[1] = usCRCValue & 0xFF;
 	command.append((char *)szcrc, 2);

+ 1 - 0
Serail-Demo/Demo/stdafx.h

@@ -36,6 +36,7 @@ typedef struct __CMDPARAM__ {
 	std::string head;		// 命令头;
 	std::string code;		// 命令码;
 	std::string param;		// 命令码参数;
+	int nOption;			// 命令属性类型:0=None\1=Get\2=Set;
 	bool bMulticode ;		// 命令码是否多参数;
 	int cmd_wait_time ;		// 两条串口指令间隔时间;
 	int read_wait_time ;	// 写完串口后,等待多久读;

+ 116 - 0
Serail-Demo/串口通信.html

@@ -0,0 +1,116 @@
+<html>
+<head><title>COM23</title></head>
+<body>
+<style>
+.s0{color:#056464;}
+.s1{color:#500564;}
+.s2{color:#3232aa;}
+.s3{color:#000000;font-size:150%;}
+</style>
+<table>
+<tr class="s3"><td colspan="2">[14/04/2021 15:55:36] - Open port COM23 (f:\bin\Demo\Demo.exe)</td></tr>
+<tr class="s3"><td colspan="2"></td></tr>
+<tr class="s3"><td colspan="2">[14/04/2021 15:55:56] - Close port COM23</td></tr>
+<tr class="s3"><td colspan="2"></td></tr>
+<tr class="s3"><td colspan="2">[14/04/2021 16:01:47] - Open port COM23 (f:\bin\Demo\Demo.exe)</td></tr>
+<tr class="s3"><td colspan="2"></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:47] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 10 01 a7 ef                                 ?...CO          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:48] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e                                    ?..??           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:48] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 57 00 23 95                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:48] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 16 58 56 38 2d 54 38 34 31 54   ?..?XV.-T841T</pre></td></tr>
+<tr class="s0"><td width="5%" /><td><pre>30 31 2d 64 65 62 75 67 32 73 c3                  01-debug2s?     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:48] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 84 00 63 e1                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:48] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 85 0a 87 2e                  ?..???.     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:48] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 be 01 99 9e                                 ?.™ž.IR          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:48] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:49] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 8c 00 ea 48                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:49] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 19 8d 4d 4f 4b 41 2d 41 50 2d   ?..?�MO.A-AP-Çí?›Cª“</pre></td></tr>
+<tr class="s0"><td width="5%" /><td><pre>52 54 32 38 34 31 2d 30 30 30 30 41 b4 26         RT2841-0000A?.  </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:49] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 be 00 89 bf                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:49] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:49] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 ee 00 87 00                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:49] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:50] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 e7 00 3d 98                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:50] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:50] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 e7 00 3d 98                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:50] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..‰¿           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:50] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 be 06 e9 79                                 ?.éy.?          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:51] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:51] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 ec 00 e1 62                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:51] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:51] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 ec 01 f1 43                                 ?.ñC.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:51] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:51] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 97 00 35 c1                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:52] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 09 98 00 65 6e 67 57 54         ?..??  </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:52] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 97 01 25 e0                                 ?.%.??          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:52] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0e 9f ca                                    ?..           </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:52] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 97 13 17 93                                 ?...-          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:52] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 07 98 13 ff 1f f2               ?..??ÿ.?.?.    </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:52] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 b4 00 66 74                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:52] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 b5 00 23 f1                  ?..??     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:53] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 b4 00 66 74                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:53] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 b5 00 23 f1                  ?..??     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:53] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 87 00 36 b2                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:53] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 88 00 50 38                  ?..??     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:53] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 9a 00 43 9d                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:53] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 07 9b 00 00 0e 72               ?..??    </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:54] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 e5 00 5b fa                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:54] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 e6 00 78 1d                  ?..??     </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:54] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 ea 00 4b c4                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:54] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 07 eb 00 00 d6 7a               ?..??    </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:54] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 ea 01 5b e5                                 ?.[.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:54] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 07 eb 01 00 e5 4b               ?..??    </pre></td></tr>
+<tr class="s1"><td colspan="2">[14/04/2021 16:01:54] Written data (COM23)</td></tr>
+<tr class="s1"><td width="5%" /><td><pre>aa 06 e5 00 5b fa                                 ?.          </pre></td></tr>
+<tr class="s0"><td colspan="2">[14/04/2021 16:01:55] Read data (COM23)</td></tr>
+<tr class="s0"><td width="5%" /><td><pre>ab 05 0a df 4e ab 06 e6 00 78 1d                  ?..??     </pre></td></tr>
+<tr class="s3"><td colspan="2">[14/04/2021 16:01:59] - Close port COM23</td></tr>
+<tr class="s3"><td colspan="2"></td></tr>
+
+</table>
+</body>
+</html>