Ver Fonte

临时提交

sat23 há 4 anos atrás
pai
commit
d53698ec3d

+ 1 - 0
Serail-Demo/Demo/Demo.cpp

@@ -28,6 +28,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 	}
 	else
 	{
+		parse_cmd_param_from_file("F:\\source\\scbc_repos\\Serail-Demo\\Demo\\command.data");
 		// TODO: 在此处为应用程序的行为编写代码。
 		CBaseSerial sb;
 		sb.Open(23, _T("baud=115200 parity=N data=8 stop=1") );

+ 9 - 1
Serail-Demo/Demo/Demo.vcproj

@@ -22,7 +22,7 @@
 			IntermediateDirectory="$(ConfigurationName)"
 			ConfigurationType="1"
 			UseOfMFC="2"
-			CharacterSet="1"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -200,6 +200,10 @@
 					/>
 				</FileConfiguration>
 			</File>
+			<File
+				RelativePath=".\TCLCommand.cpp"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Í·Îļþ"
@@ -226,6 +230,10 @@
 				RelativePath=".\targetver.h"
 				>
 			</File>
+			<File
+				RelativePath=".\TCLCommand.h"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="×ÊÔ´Îļþ"

+ 5 - 3
Serail-Demo/Demo/Serial.cpp

@@ -133,11 +133,13 @@ DWORD CBaseSerial::Read(LPVOID Buffer, DWORD dwBufferLength, DWORD dwWaitTime /*
 		{
 			WaitForSingleObject(_ReadOverlapped.hEvent, dwWaitTime);
 			// ½áÊøÒì²½I/O
-			if (!::GetOverlappedResult(_hCommHandle, &_ReadOverlapped, &uReadLength, false))
+			while (!::GetOverlappedResult(_hCommHandle, &_ReadOverlapped, &uReadLength, false))
 			{
-				if (::GetLastError() != ERROR_IO_INCOMPLETE)
-					uReadLength = 0;
+				Sleep(50);
 			}
+
+			if (::GetLastError() != ERROR_IO_INCOMPLETE)
+				uReadLength = 0;
 		}
 		else
 			uReadLength = 0;

+ 1 - 37
Serail-Demo/Demo/Serial.h

@@ -1,10 +1,4 @@
-/*
-Comm Base Library(WIN98/NT/2000) ver 1.1
-Compile by£º BC++ 5; C++ BUILDER 4, 5, 6, X; VC++ 5, 6; VC.NET; GCC;
-copyright(c) 2004.5 - 2005.8 llbird wushaojian@21cn.com
-*/
-#ifndef _CN_COMM_H_
-#define _CN_COMM_H_
+#pragma once
 
 #pragma warning(disable : 4530)
 #pragma warning(disable : 4786)
@@ -144,33 +138,3 @@ private:
     CBaseSerial &operator=(const CBaseSerial &);
 };
 
-/*
-
-#define _CRT_SECURE_NO_WARNINGS
-
-#include <stdio.h>
-#include <wtypes.h>
-
-#define BUFFCOUNT (10)
-
-void FormatOutput(LPCWSTR formatstring, ...)
-{
-	int nSize = 0;
-	wchar_t buff[BUFFCOUNT];
-	memset(buff, 0, sizeof(buff));
-	va_list args;
-	va_start(args, formatstring);
-	// Note: _vsnwprintf is deprecated; consider vsnwprintf_s instead
-	nSize = _vsnwprintf(buff, BUFFCOUNT - 1, formatstring, args); // C4996
-	wprintf(L"nSize: %d, buff: %ls\n", nSize, buff);
-	va_end(args);
-}
-
-int main() {
-	FormatOutput(L"%ls %ls", L"Hi", L"there");
-	FormatOutput(L"%ls %ls", L"Hi", L"there!");
-	FormatOutput(L"%ls %ls", L"Hi", L"there!!");
-}
-
-*/
-#endif //_CN_COMM_H_

+ 10 - 0
Serail-Demo/Demo/TCLCommand.cpp

@@ -0,0 +1,10 @@
+#include "StdAfx.h"
+#include "TCLCommand.h"
+
+TCLCommand::TCLCommand(void)
+{
+}
+
+TCLCommand::~TCLCommand(void)
+{
+}

+ 9 - 0
Serail-Demo/Demo/TCLCommand.h

@@ -0,0 +1,9 @@
+#pragma once
+#include "serial.h"
+
+class TCLCommand :public CBaseSerial
+{
+public:
+	TCLCommand(void);
+	~TCLCommand(void);
+};

+ 51 - 0
Serail-Demo/Demo/command.data

@@ -0,0 +1,51 @@
+# Get Info;
+Name=EnterFactory; HeadCode=AA; Command=10; CMDParam=01; MultiParams=false; 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=GetProjectID; HeadCode=AA; Command=84; CMDParam=00; MultiParams=false; ReadWaitTime=100ms; CMDWaitTime=100ms
+Name=GetSoftVersion; HeadCode=AA; Command=57; 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
+# 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
+
+
+
+
+
+
+

+ 85 - 0
Serail-Demo/Demo/stdafx.cpp

@@ -6,3 +6,88 @@
 
 // TODO: 在 STDAFX.H 中
 // 引用任何所需的附加头文件,而不是在此文件中引用
+
+bool parse_key(std::string &value, TCHAR *lpszBuffer, TCHAR *lpszText)
+{
+	TCHAR szText[MAX_PATH] = {0};
+	TCHAR szValue[MAX_PATH] = {0};
+
+	if ( 2 == _stscanf_s(lpszBuffer, _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) )
+	{
+		if ( _tcsstr(szText, lpszText) )
+		{
+			value = szValue;
+			return true;
+		}
+	}
+
+	return false;
+}
+
+int parse_cmd_param_from_file(char *file_name)
+{
+	char buf[256];
+	TCHAR name[MAX_PATH] = {0};
+	TCHAR head[MAX_PATH] = {0};
+	TCHAR code[MAX_PATH] = {0};
+	TCHAR mark[MAX_PATH] = {0};
+	TCHAR multicode[MAX_PATH] = {0};
+	TCHAR cmd_wait_time[MAX_PATH] = {0};
+	TCHAR read_wait_time[MAX_PATH] = {0};
+
+	int ret = -1;
+	FILE *fp = NULL;
+	
+	if(!file_name)
+		return ret;
+
+	fp = fopen(file_name, "r");
+	if(!fp)
+		goto EXIT;
+
+	while((fgets((char*)buf, MAX_PATH, fp) != NULL)) {
+		int tmp_len = 0;
+		unsigned short keycode = 0;
+		unsigned int protocol = 0;
+		unsigned int scancode = 0;
+
+		tmp_len = strlen((char*)buf);
+		if(tmp_len >= 1) {
+			if (buf[tmp_len - 1] == '\r' || buf[tmp_len - 1] == '\n')
+				buf[tmp_len - 1] = 0;
+			if(tmp_len >= 2) {
+				if(buf[tmp_len - 2] == '\r' || buf[tmp_len - 2] == '\n')
+					buf[tmp_len - 2] = 0;
+			} 
+		}
+
+		// 先去除空格;
+		//std::string strline = buf;
+		// strline.erase(std::remove_if(strline.begin(), strline.end(), [](unsigned char x){return std::isspace(x); }), strline.end()); //C++17
+
+#if _MSC_VER >= 1500 
+		//if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7)
+		if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7)
+#endif
+#if _MSC_VER < 1500 
+		if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, mark, multicode, cmd_wait_time, read_wait_time) == 7)
+#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.mark, mark, _T("CMDParam"));
+			std::string value;
+			parse_key(value, multicode, _T("MultiParams"));
+			parse_key(value, cmd_wait_time, _T("ReadWaitTime"));
+			parse_key(value, read_wait_time, _T("CMDWaitTime"));
+		}
+	}
+
+	ret = 0;
+EXIT:
+	if(fp)
+		fclose(fp);
+	return ret;
+}

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

@@ -26,7 +26,27 @@
 #endif // _AFX_NO_AFXCMN_SUPPORT
 
 #include <iostream>
+#include <string>
+#include <vector>
 #include "Serial.h"
 
 
+typedef struct __CMDPARAM__
+{
+	std::string name; // 命令描述;
+	std::string head; // 命令头;
+	std::string code; // 命令码;
+	std::string mark; // 特殊标记;
+	bool bMulticode ;	// 命令码是否多参数;
+	/*TCHAR name[MAX_PATH];
+	TCHAR head[MAX_PATH];
+	TCHAR code[MAX_PATH];
+	TCHAR mark[MAX_PATH];
+	TCHAR multicode[MAX_PATH];*/
+	int cmd_wait_time ;	// 两条串口指令间隔时间;
+	int read_wait_time ;	// 写完串口后,等待多久读;
+} CommandParam, *pCommandParam;
+
+bool parse_key(std::string &value, TCHAR *lpszBuffer, TCHAR *lpszText);
+int parse_cmd_param_from_file(char *file_name);
 // TODO: 在此处引用程序需要的其他头文件