Jelajahi Sumber

1、修复插入数据库时报错的bug;
2、完成串口、http的日志存储;

Jeff 5 tahun lalu
induk
melakukan
d5c56e2274

+ 42 - 2
TCL Copy Tool/TCL Copy Tool/Global.cpp

@@ -43,6 +43,10 @@ namespace Global
 			/************************************************************************/
 	void WriteTextLog(const TCHAR* format, ...)
 	{
+		if (Global::g_tConfig.com.size() == 0)
+		{
+			return;
+		}
 		// 将日志内容输入到文件中;
 		// 获取今年年份;
 		__time64_t gmt = time(NULL); // 获取当前日历时间(1900-01-01开始的Unix时间戳);
@@ -51,7 +55,7 @@ namespace Global
 
 		// 解析出日志路径;
 		TCHAR szlogpath[MAX_PATH] = { 0 };
-		_stprintf_s(szlogpath, _T("%slog\\Serial Port Log %02d%02d.txt"), g_szCurModuleDir, gmtm.tm_mon + 1, gmtm.tm_mday);
+		_stprintf_s(szlogpath, _T("%slog\\Serial Port%s Log %02d%02d.txt"), g_szCurModuleDir, Global::g_tConfig.com.substr(3, 1).c_str(), gmtm.tm_mon + 1, gmtm.tm_mday);
 		// 打开或创建文件;
 		FILE* fp = NULL;
 		//if (_taccess(szlogpath, 0) != -1)
@@ -95,6 +99,42 @@ namespace Global
 		free(old_locale); //还原区域设定;
 	}
 
+	void WriteReportLog(int type, std::string des, const TCHAR* format, ...)
+	{
+		if (Global::g_tConfig.com.size() == 0)
+			return;
+
+		TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
+		_tsetlocale(LC_CTYPE, _T("chs")); //设定中文;
+		// 格式化日志内容;
+		va_list args = NULL;
+		int len = 0;
+		TCHAR* buffer = NULL;
+		va_start(args, format);
+		// _vscprintf doesn't count. terminating '\0'
+		len = _vsctprintf(format, args) + 1;
+		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
+		if (buffer == NULL)
+		{
+			_tsetlocale(LC_CTYPE, old_locale);
+			free(old_locale); //还原区域设定;
+			return;
+		}
+		_vstprintf_s(buffer, len, format, args);
+
+		std::map<std::string, std::string> report_data;
+		report_data.insert(std::pair<std::string, std::string>(des, buffer));
+		if ( type == 0 )
+			g_db.InsertReportInfo("NetWork", report_data);
+		else if ( type == 1 )
+			g_db.InsertReportInfo("Serial", report_data);
+		
+		// 关闭文件,释放资源并设置回原语言区域;
+		free(buffer);
+		_tsetlocale(LC_CTYPE, old_locale);
+		free(old_locale); //还原区域设定;
+	}
+
 	// 读取配置文件-预留;
 	void GetConfig()
 	{
@@ -278,7 +318,7 @@ namespace Global
 					tchassis.MGKKeyType = cJSON_GetObjectItem(pItem, _T("MGKKeyType")) ? cJSON_GetObjectItem(pItem, _T("MGKKeyType"))->valuestring : "";
 					tchassis.NovaTakHDCPType = cJSON_GetObjectItem(pItem, _T("NovaTakHDCPType")) ? cJSON_GetObjectItem(pItem, _T("NovaTakHDCPType"))->valuestring : "";
 
-					g_tConfig.chassislist.insert(pair<std::string, CHASSIS>(name, tchassis));
+					g_tConfig.chassislist.insert(std::pair<std::string, CHASSIS>(name, tchassis));
 				}
 			}
 		}

+ 1 - 0
TCL Copy Tool/TCL Copy Tool/Global.h

@@ -288,6 +288,7 @@ namespace Global
 	bool GetVersion(IN const TCHAR* fname, OUT WORD* pdwFileVersion, OUT WORD* pdwProductVerion);
 	BOOL GetVersion(IN HMODULE hModule, OUT DWORD(&dwFVArray)[4], OUT DWORD(&dwPVArray)[4]);
 	void WriteTextLog(const TCHAR* format, ...);
+	void WriteReportLog(int type, std::string des, const TCHAR* format, ...);
 	std::string EnCode_UTF8URL(IN const CHAR* pText);
 	std::string& trim(std::string& str);
 	// »ñÈ¡Íø¿¨µØÖ·;

+ 150 - 40
TCL Copy Tool/TCL Copy Tool/OTA.cpp

@@ -270,8 +270,6 @@ void CSIACP::LoadCommand()
 			}
 		}
 	}
-
-	Global::WriteTextLog("Load Comman xml");
 }
 
 void CSIACP::SaveCommand(std::vector<_SIACP_> &vtSiacp, std::string path)
@@ -329,7 +327,7 @@ BOOL CSIACP::OpenComm(LPCTSTR lpszCom, DWORD dwBaudrate)
 {
 	if (lpszCom == NULL || lpszCom[0] == '\0')
 	{
-		LOG4C((LOG_WARN, "(lpszCom) Invalid parameter!"));
+		Global::WriteReportLog(1, "Parameter error", "(lpszCom) Invalid parameter!");
 		return FALSE;
 	}
 
@@ -341,7 +339,7 @@ BOOL CSIACP::OpenComm(LPCTSTR lpszCom, DWORD dwBaudrate)
 	m_pSerial = new CSerialPort();
 	if (m_pSerial == NULL)
 	{
-		LOG4C((LOG_WARN, "(m_pSerial) Fail to create object!"));
+		Global::WriteReportLog(1, "Memory error", "(m_pSerial) Fail to create object!");
 		return FALSE;
 	}
 
@@ -350,7 +348,7 @@ BOOL CSIACP::OpenComm(LPCTSTR lpszCom, DWORD dwBaudrate)
 	{
 		delete m_pSerial;
 		m_pSerial = NULL;
-		LOG4C((LOG_WARN, "Open Serial Port Fail !"));
+		Global::WriteReportLog(1, "Serial port error", "Open Serial Port Fail !");
 		return FALSE;
 	}
 
@@ -377,7 +375,7 @@ BOOL CSIACP::ExecSerialCommand(const _SIACP_ &siacp, std::string command)
 {
 	if (m_pSerial == NULL || !m_pSerial->IsOpen())
 	{
-		LOG4C((LOG_ERROR, "Serial Port un't Open!"));
+		Global::WriteReportLog(1, "Serial port error", "Serial Port un't Open!");
 		return FALSE;
 	}
 
@@ -386,7 +384,8 @@ BOOL CSIACP::ExecSerialCommand(const _SIACP_ &siacp, std::string command)
 	Global::WriteTextLog(_T("COM Write:%s"), Bytes2HexString((const byte *)command.c_str(), command.size(), ' ').c_str());
 	if (dwWritten != command.size())
 	{
-		Global::WriteTextLog("COM Written Error!");
+		Global::WriteTextLog("COM Written Error");
+		Global::WriteReportLog(1, "Serial Writing Error", "COM Written Error, Buffer=%s", Bytes2HexString((const byte*)command.c_str(), command.size(), ' ').c_str());
 		return FALSE;
 	}
 
@@ -395,7 +394,8 @@ BOOL CSIACP::ExecSerialCommand(const _SIACP_ &siacp, std::string command)
 	DWORD dwBytesRead = m_pSerial->Read(szRecive, BUFFER_LEN);
 	if (dwBytesRead == 0)
 	{
-		Global::WriteTextLog("COM Read Error!");
+		Global::WriteTextLog("COM Read Error");
+		Global::WriteReportLog(1, "Serial Reading Error","COM Read Error(No Data Return), Write=%s!", Bytes2HexString((const byte*)command.c_str(), command.size(), ' ').c_str());
 		return FALSE;
 	}
 
@@ -411,7 +411,10 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 {
 	vtdata.clear();
 	if (pbuffer == NULL || dwlen < 5)
+	{
+		Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return length less than 5! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 		return FALSE;
+	}
 
 	// 返回码;
 	byte byReturn = TV_Return;
@@ -433,6 +436,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 	else
 	{
 		Global::WriteTextLog("COM Read Parser: Invalid return code!");
+		Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Invalid return code! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 		return FALSE;
 	}
 
@@ -467,6 +471,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 		if (package_len > (dwlen - nTookenLen))
 		{
 			Global::WriteTextLog("COM Read Parser: Incorrect length of returned data!");
+			Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Incorrect length of returned data! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 			return FALSE;
 		}
 
@@ -477,6 +482,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 		if (byte(package[0]) != byReturn)
 		{
 			Global::WriteTextLog("COM Read Parser: Data Header Check Error!");
+			Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Data Header Check Error! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 			return FALSE;
 		}
 
@@ -485,6 +491,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 		if (((usCRCValue >> 8) & 0xFF) != (unsigned char)package[package_len - 2] || (usCRCValue & 0xFF) != (unsigned char)package[package_len - 1])
 		{
 			Global::WriteTextLog("COM Read Parser: Data CRC validation failure!");
+			Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Data CRC validation failure! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 			return FALSE;
 		}
 
@@ -494,6 +501,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 			if (package[2] != RC_OK)
 			{
 				Global::WriteTextLog("COM Read Parser: The return code of the response data is invalid!");
+				Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,The return code of the response data is invalid! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 				return FALSE;
 			}
 		}
@@ -503,6 +511,7 @@ BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, by
 			if (byte(package[2 + nABFE] - 1) != byCode)
 			{
 				Global::WriteTextLog("COM Read Parser: The command code of response data does not match the command code of sending data!");
+				Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,The command code of response data does not match the command code of sending data! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
 				return FALSE;
 			}
 
@@ -628,14 +637,16 @@ BOOL CSIACP::SendCommand(std::string cmd_name, const byte *pszOthers, DWORD dwOt
 	const _SIACP_ *pSiacp = GetSiacp(cmd_name);
 	if (pSiacp == NULL)
 	{
-		LOG4C((LOG_ERROR, "This command is not supported!"));
+		Global::WriteTextLog("This command is not supported!");
+		Global::WriteReportLog(1, "Invalid command", "This command(%s) is not supported!", cmd_name.c_str());
 		return FALSE;
 	}
 
 	std::string command = GetSiacpCommand(*pSiacp, others, dwOthersLen);
 	if (command.size() == 0)
 	{
-		LOG4C((LOG_ERROR, "Generation command failed!"));
+		Global::WriteTextLog("Generation command failed!");
+		Global::WriteReportLog(1, "Generation command failed", "command=%s", cmd_name.c_str());
 		return FALSE;
 	}
 
@@ -648,14 +659,16 @@ BOOL CSIACP::SendCommand2(std::string cmd_name, std::string data /* = "" */, siz
 	const _SIACP_ *pSiacp = GetSiacp(cmd_name);
 	if (pSiacp == NULL)
 	{
-		LOG4C((LOG_ERROR, "This command is not supported!"));
+		Global::WriteTextLog("This command is not supported!");
+		Global::WriteReportLog(1, "Invalid command", "This command(%s) is not supported!", cmd_name.c_str());
 		return FALSE;
 	}
 
 	std::string command = GetSiacpCommand(*pSiacp, data, nlen);
 	if (command.size() == 0)
 	{
-		LOG4C((LOG_ERROR, "Generation command failed!"));
+		Global::WriteTextLog("Generation command failed!");
+		Global::WriteReportLog(1, "Generation command failed", "command=%s", cmd_name.c_str());
 		return FALSE;
 	}
 
@@ -671,7 +684,6 @@ BOOL CSIACP::SCBC_WaitTVBoot()
 		if ( SCBC_EnterFactory() )
 		{
 			SCBC_LeaveFactory();
-			Global::WriteTextLog("TV Boot OK!");
 			return TRUE;
 		}		
 	}
@@ -683,13 +695,15 @@ BOOL CSIACP::SCBC_MTKInit()
 {
 	if (m_pSerial == NULL)
 	{
-		LOG4C((LOG_ERROR, "CSerialPort对象未初始化"));
+		Global::WriteTextLog("串口对象未初始化");
+		Global::WriteReportLog(1, "MTKInit Error", "Serial port object uninitialized!");
 		return FALSE;
 	}
 
 	if (!m_pSerial->IsOpen())
 	{
-		LOG4C((LOG_ERROR, "CSerialPort对象未打开串口"));
+		Global::WriteTextLog("未打开串口");
+		Global::WriteReportLog(1, "MTKInit Error", "Unopened Serial Port!");
 		return FALSE;
 	}
 
@@ -723,7 +737,9 @@ BOOL CSIACP::SCBC_GetProjectId(int &pid)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -749,14 +765,18 @@ BOOL CSIACP::SCBC_GetSoftVersion(std::string &strVer)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
 		RTN rtn = m_vtdata.at(0);
 		if (!IsValidString(rtn.data.c_str()))
 		{
-			LOG4C((LOG_WARN, "tv version string is invalid!"));
+			Global::WriteTextLog("%s:%s%s!", __FUNCTION__, "tv version string is invalid=", rtn.data.c_str());
+			Global::WriteReportLog(1, "Copy Key", "%s:%s%s!", __FUNCTION__, "tv version string is invalid=", rtn.data.c_str());
+
 			return FALSE;
 		}
 
@@ -773,7 +793,8 @@ BOOL CSIACP::SCBC_GetDeviceId(std::string &strDid)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
 			return FALSE;
 		}
 
@@ -791,14 +812,17 @@ BOOL CSIACP::SCBC_GetClientType(std::string &strClt)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
 			return FALSE;
 		}
 
 		RTN rtn = m_vtdata.at(0);
 		if (!IsValidString(rtn.data.c_str()))
 		{
-			LOG4C((LOG_WARN, "tv client type string is invalid!"));
+			Global::WriteTextLog("%s:%s%s!", __FUNCTION__, "tv client string is invalid=", rtn.data.c_str());
+			Global::WriteReportLog(1, "Copy Key", "%s:%s%s!", __FUNCTION__, "tv client string is invalid=", rtn.data.c_str());
+
 			return FALSE;
 		}
 		strClt.append(rtn.data.c_str(), rtn.len);
@@ -814,7 +838,9 @@ BOOL CSIACP::SCBC_GetMAC(std::string &strMac)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -832,7 +858,9 @@ BOOL CSIACP::SCBC_GetHDCPKey(std::string &strHDCP)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -851,7 +879,9 @@ BOOL CSIACP::SCBC_GetHDCPKey22(std::string &strHDCP22)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -870,7 +900,9 @@ BOOL CSIACP::SCBC_GetWidi(std::string &strWidi)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -889,7 +921,9 @@ BOOL CSIACP::SCBC_GetNetflixESN(std::string &strESN)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -908,7 +942,9 @@ BOOL CSIACP::SCBC_GetWidevine(std::string &strWidevine)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -927,7 +963,9 @@ BOOL CSIACP::SCBC_GetCiKey(std::string &strCikey)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -946,7 +984,9 @@ BOOL CSIACP::SCBC_GetOSDLanguage(std::string &strOSDLan)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -965,7 +1005,9 @@ BOOL CSIACP::SCBC_GetShopLanguage(std::string &strShopLan)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -984,7 +1026,9 @@ BOOL CSIACP::SCBC_GetChannel(std::string& channel)
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1187,7 +1231,9 @@ BOOL CSIACP::SCBC_CheckDeviceId()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1214,7 +1260,9 @@ BOOL CSIACP::SCBC_CheckMAC()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1241,7 +1289,9 @@ BOOL CSIACP::SCBC_CheckHDCP()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1268,7 +1318,9 @@ BOOL CSIACP::SCBC_CheckHDCP22()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1295,7 +1347,9 @@ BOOL CSIACP::SCBC_CheckNetflixESN()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1322,7 +1376,9 @@ BOOL CSIACP::SCBC_CheckWidi()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1349,7 +1405,9 @@ BOOL CSIACP::SCBC_CheckWidevine()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1376,7 +1434,9 @@ BOOL CSIACP::SCBC_CheckCikey()
 	{
 		if (m_vtdata.size() == 0)
 		{
-			LOG4C((LOG_WARN, "No data return!"));
+			Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+
 			return FALSE;
 		}
 
@@ -1448,7 +1508,13 @@ BOOL COTA::HttpGet(std::string host, std::string context, std::string &result, D
 		nRecCode = m_curl.Get(host + context, result);
 
 	if (CURLE_OK != nRecCode)
+	{
+		TCHAR szMsg[250] = { 0 };
+		_stprintf_s(szMsg, _T("http(get) request failed, curl error code = %d\r"), nRecCode);
+		ShowMessage(szMsg);
 		LOG4C((LOG_NOTICE, "请求失败:%s, 错误码=%ld", context.c_str(), nRecCode));
+		Global::WriteReportLog(0, __FUNCTION__, "Request(get) Failure, Curl Error Code=%ld: host=%s, content=%s, result=%s", nRecCode, host.c_str(), context.c_str(),result.c_str());
+	}
 
 	return CURLE_OK == nRecCode;
 }
@@ -1473,9 +1539,10 @@ BOOL COTA::HttpPost(std::string host, std::string context, std::string &result,
 	if (CURLE_OK != nRecCode)
 	{
 		TCHAR szMsg[250] = {0};
-		_stprintf_s(szMsg, _T("http request failed, curl error code = %d\r"), nRecCode);
+		_stprintf_s(szMsg, _T("http(post) request failed, curl error code = %d\r"), nRecCode);
 		ShowMessage(szMsg);
 		LOG4C((LOG_NOTICE, "请求失败:%s, 错误码=%ld\n", context.c_str(), nRecCode));
+		Global::WriteReportLog(0, __FUNCTION__, "Request(post) Failure, Curl Error Code=%ld: host=%s, content=%s, result=%s", nRecCode, host.c_str(), context.c_str(), result.c_str());
 	}
 
 	std::string api = host.substr(host.find_last_of('/') + 1);
@@ -1523,6 +1590,8 @@ BOOL COTA::GetMIDInfo(MIDInfo &mid, std::string bid, std::string strMacs, std::s
 	{
 		bRet = FALSE;
 		LOG4C((LOG_WARN, "JSON parsing failure:post=%s;return=%s\n", context.c_str(), result.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "JSON Parsing Error: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		goto end;
 	}
 
@@ -1539,6 +1608,8 @@ BOOL COTA::GetMIDInfo(MIDInfo &mid, std::string bid, std::string strMacs, std::s
 	{
 		bRet = FALSE;
 		LOG4C((LOG_WARN, "JSON parsing failure:post=%s;return=%s\n", context.c_str(), result.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "JSON Parsing Error: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		goto end;
 	}
 
@@ -1546,6 +1617,8 @@ BOOL COTA::GetMIDInfo(MIDInfo &mid, std::string bid, std::string strMacs, std::s
 	{
 		bRet = FALSE;
 		LOG4C((LOG_WARN, "return invalid data:post=%s;return=%s\n", context.c_str(), result.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "return invalid data: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		goto end;
 	}
 
@@ -1553,6 +1626,8 @@ BOOL COTA::GetMIDInfo(MIDInfo &mid, std::string bid, std::string strMacs, std::s
 	{
 		bRet = FALSE;
 		LOG4C((LOG_WARN, "return invalid data:post=%s;return=%s\n", context.c_str(), result.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "return invalid data: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		goto end;
 	}
 
@@ -1662,6 +1737,8 @@ BOOL COTA::GetKeyInfo(std::string host, std::string context, std::string keyname
 	{
 		LOG4C((LOG_ERROR, "(http=%s) No data return!", context.c_str()));
 		ShowMessage(_T("http No data return!\r"));
+		Global::WriteReportLog(0, __FUNCTION__, "http No data return: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		return FALSE;
 	}
 
@@ -1671,6 +1748,8 @@ BOOL COTA::GetKeyInfo(std::string host, std::string context, std::string keyname
 	{
 		LOG4C((LOG_ERROR, "(http=%s) this post return xml invalid!", context.c_str()));
 		ShowMessage(_T("http return invalid xml data!\r"));
+		Global::WriteReportLog(0, __FUNCTION__, "http return invalid xml data: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 		return FALSE;
 	}
 
@@ -1704,9 +1783,13 @@ BOOL COTA::GetKeyInfo(std::string host, std::string context, std::string keyname
 				TCHAR szMsg[250] = { 0 };
 				_stprintf_s(szMsg, _T("http Code is not equal to 200, desc=%s\r"), desc.c_str());
 				ShowMessage(szMsg);
+
 				// 如果是上报接口,500表示成功;
 				if (host.rfind("/report.do?") != std::string::npos && _tcsicmp(code.c_str(), "500") == 0)
 					return TRUE;
+
+				Global::WriteReportLog(0, __FUNCTION__, "http Code is not equal to 200: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 				return FALSE;
 			}
 
@@ -1742,6 +1825,8 @@ BOOL COTA::GetKeyInfo(std::string host, std::string context, std::string keyname
 			{
 				LOG4C((LOG_ERROR, "(http=%s)xml value is empty!", context.c_str()));
 				ShowMessage(_T("http xml value is empty!\r"));
+				Global::WriteReportLog(0, __FUNCTION__, "http xml value is empty: host=%s, content=%s, result=%s", host.c_str(), context.c_str(), result.c_str());
+
 				return FALSE;
 			}
 		}
@@ -1786,6 +1871,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	if (strResHttp.size() == 0)
 	{
 		LOG4C((LOG_WARN, "返回结果空:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "http No data return: host=%s, content=%s, result=%s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		ReportUpgrade(FALSE, szVersion, factoryNum);
 		return;
 	}
@@ -1797,6 +1884,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	{
 		cJSON_Delete(pJson);
 		LOG4C((LOG_WARN, "cJSON解析时出错:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "JSON Parsing Error: host=%s, content=%s, result=%s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		ReportUpgrade(FALSE, szVersion, factoryNum);
 		return;
 	}
@@ -1811,6 +1900,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	{
 		cJSON_Delete(pJson);
 		LOG4C((LOG_WARN, "升级接口没有升级内容:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "Upgrade interface has no upgrade content: host = %s, content = %s, result = %s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		//ReportUpdateResult(FALSE, strVer);
 		return;
 	}
@@ -1835,6 +1926,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	if (upresult.status.compare("0000") != 0)
 	{
 		LOG4C((LOG_WARN, "升级接口http返回出错:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "Error upgrading interface: host = %s, content = %s, result = %s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		ReportUpgrade(FALSE, szVersion, factoryNum);
 		return;
 	}
@@ -1845,6 +1938,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	if (_tcsicmp(szVersion , upresult.upcontent.version.c_str()) > 0 )
 	{
 		LOG4C((LOG_NOTICE, "当前版本(%s)比服务器版本(%s)新", szVersion, upresult.upcontent.version.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "The current version (%s) is newer than the server version (%s).", szVersion, upresult.upcontent.version.c_str());
+
 		return;
 	}
 
@@ -1857,6 +1952,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 		LOG4C((LOG_NOTICE, "下载升级文件失败"));
 		MessageBox(NULL, _T("Download failure."), _T("Tips"), MB_OK | MB_TOPMOST | MB_ICONINFORMATION);
 		ReportUpgrade(FALSE, szVersion, factoryNum);
+		Global::WriteReportLog(0, __FUNCTION__, "Failed to download upgrade file=%s", upresult.upcontent.fileurl.c_str());
+
 		return;
 	}
 	else
@@ -1886,6 +1983,8 @@ void COTA::UpgradeCheck(std::string factoryNum)
 		DWORD dwError = GetLastError();
 		LOG4C((LOG_ERROR, "执行rename程序失败,错误码=%d", dwError));
 		MessageBox(NULL, _T("Upgrade failure."), _T("Tips"), MB_OK | MB_TOPMOST | MB_ICONINFORMATION);
+		Global::WriteReportLog(0, __FUNCTION__, "Upgrade failed, Error=%d", dwError);
+
 		return;
 	}
 
@@ -1893,7 +1992,10 @@ void COTA::UpgradeCheck(std::string factoryNum)
 	if (hProcess != NULL)
 		CloseHandle(hProcess);
 	else
+	{
 		LOG4C((LOG_WARN, "执行rename程序失败,进程句柄空"));
+		Global::WriteReportLog(0, __FUNCTION__, "Upgrade failed, Process handle empty");
+	}
 
 	// 提示升级程序执行;
 	LOG4C((LOG_NOTICE, "后台升级程序执行成功,程序退出后自动覆盖文件"));
@@ -1929,6 +2031,8 @@ void COTA::ReportUpgrade(BOOL bUpgrade, std::string ver, std::string num)
 	if (pJson == NULL)
 	{
 		LOG4C((LOG_WARN, "解析JSON失败:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "JSON Parsing Error: host=%s, content=%s, result=%s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		return;
 	}
 
@@ -1955,6 +2059,8 @@ BOOL COTA::DownloadFile(std::string url, std::string savePath)
 		}
 	}
 
+	Global::WriteReportLog(0, __FUNCTION__, "Failed to download file: host = %s", url.c_str());
+
 	return FALSE;
 }
 
@@ -1990,6 +2096,8 @@ BOOL COTA::ReportLog(TReportData& repdata)
 	if (pJson == NULL)
 	{
 		LOG4C((LOG_WARN, "解析JSON失败:post=%s;return=%s", strContext.c_str(), strResHttp.c_str()));
+		Global::WriteReportLog(0, __FUNCTION__, "JSON Parsing Error: host=%s, content=%s, result=%s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 		return FALSE;
 	}
 
@@ -2001,6 +2109,8 @@ BOOL COTA::ReportLog(TReportData& repdata)
 		return TRUE;
 	}
 
+	Global::WriteReportLog(0, __FUNCTION__, "http Code is not equal to 200: host=%s, content=%s, result=%s", strHttpUrl.c_str(), strContext.c_str(), strResHttp.c_str());
+
 	return FALSE;
 }
 

+ 10 - 7
TCL Copy Tool/TCL Copy Tool/TCL Copy Tool.cpp

@@ -58,10 +58,13 @@ BOOL CTCLToolsApp::InitInstance()
 	TCHAR szDrive[MAX_PATH] = { 0 };
 	TCHAR szDir[MAX_PATH] = { 0 };
 	TCHAR szExt[MAX_PATH] = { 0 };
+	
 	::GetModuleFileName(NULL, Global::g_szCurModulePath, sizeof(Global::g_szCurModulePath) / sizeof(TCHAR));
-	_tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
-	_tcscpy_s(Global::g_szCurModuleDir, szDrive);
-	_tcscat_s(Global::g_szCurModuleDir, szDir);
+	//_tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
+	//_tcscpy_s(Global::g_szCurModuleDir, szDrive);
+	//_tcscat_s(Global::g_szCurModuleDir, szDir);
+	::GetCurrentDirectory(MAX_PATH, Global::g_szCurModuleDir);
+	_tcscat_s(Global::g_szCurModuleDir, _T("\\"));
 	// config文件路径;
 	_stprintf_s(Global::g_szConfig, _T("%sconfig.ini"), Global::g_szCurModuleDir);
 
@@ -102,7 +105,7 @@ BOOL CTCLToolsApp::InitInstance()
 	Global::GetMacAddress();
 	AfxEnableControlContainer();
 
-	if (g_db.Open())
+	if (g_db.Open(Global::g_tConfig.com))
 		g_db.RemoveReportInfo();
 
 	// 启动线程上报;
@@ -114,9 +117,9 @@ BOOL CTCLToolsApp::InitInstance()
 		{
 			vt.clear();
 			g_db.QueryUnReportInfo(vt);
-			for (auto it: vt)
+			for (auto it : vt)
 			{
-				if (ota.GetKeyInfo(it.url, it.content, "", "", xml) )
+				if (ota.GetKeyInfo(it.url, it.content, "", "", xml))
 				{
 					// 上报成功;
 					g_db.UpdateKeyReportStatus(it);
@@ -126,7 +129,7 @@ BOOL CTCLToolsApp::InitInstance()
 			}
 			std::this_thread::sleep_for(std::chrono::seconds(10));
 		}
-	});
+		});
 	t.detach();
 	//std::string vcode;
 	//g_ota.GetVCode("CC-A1-2B-03-09-13", vcode);

+ 7 - 3
TCL Copy Tool/TCL Copy Tool/TCL Copy ToolDlg.cpp

@@ -252,6 +252,7 @@ BOOL CTCLCopyToolDlg::OnInitDialog()
 #ifdef TEST
 	SetTimer(1, 5000, NULL);
 #endif
+
 	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
 }
 
@@ -2776,7 +2777,7 @@ void CTCLCopyToolDlg::OnBnClickedHide()  // 隐藏界面;
 		}
 
 	bHide = !bHide;
-	}
+}
 
 void CTCLCopyToolDlg::OnCbnSelchangeMode() // 模式;
 {
@@ -3336,7 +3337,7 @@ void CTCLCopyToolDlg::OnBnClickedStart()  // 开始;
 						else
 						{
 							// 重新打开数据库;
-							g_db.Open();
+							g_db.Open(Global::g_tConfig.com);
 						}
 					}
 				}
@@ -3353,7 +3354,7 @@ void CTCLCopyToolDlg::OnBnClickedStart()  // 开始;
 						else
 						{
 							// 重新打开数据库;
-							g_db.Open();
+							g_db.Open(Global::g_tConfig.com);
 						}
 					}
 				}
@@ -3658,6 +3659,9 @@ void CTCLCopyToolDlg::OnCbnSelchangeCom()
 		}
 	}
 
+	if (g_db.Open(Global::g_tConfig.com))
+		g_db.RemoveReportInfo();
+
 	// 重新打开串口;
 	g_siacp.OpenComm(Global::g_tConfig.com.c_str(), _ttol(Global::g_tConfig.baudrate.c_str()));
 }

+ 24 - 9
TCL Copy Tool/TCL Copy Tool/db.cpp

@@ -3,16 +3,26 @@
 #include "Global.h"
 #include "CharEncoding.h"
 
-// MID±í;
-#define _CREATE_MID_TABLE_ \
+// Éϱ¨±í;
+#define _CREATE_REPORT_TABLE_ \
 	"CREATE TABLE report \
 (url  TEXT NOT NULL,\
 content  TEXT NOT NULL, \
 gener_date  DATETIME NOT NULL DEFAULT current_timestamp,\
 report_date  DATETIME NOT NULL DEFAULT '',\
 PRIMARY KEY (url, content));"
-#define _SELECT_MID_TABLE_ "SELECT url, content, report_status FROM report"
-#define _INSERT_MID_TABLE_ "INSERT INTO report(url, content, report_status) VALUES (%s, %s, %s);"
+#define _SELECT_REPORT_TABLE_ "SELECT url, content, report_status FROM report"
+#define _INSERT_REPORT_TABLE_ "INSERT INTO report(url, content, report_status) VALUES (%s, %s, %s);"
+
+// ÆÕͨÈÕÖ¾±í;
+#define _CREATE_LOG_TABLE_ \
+	"CREATE TABLE report \
+(type  TEXT(16) NOT NULL,\
+content  TEXT NOT NULL, \
+gener_date  DATETIME NOT NULL DEFAULT current_timestamp,\
+report_date  DATETIME NOT NULL DEFAULT '');"
+#define _SELECT_LOG_TABLE_ "SELECT url, content, report_status FROM log"
+#define _INSERT_LOG_TABLE_ "INSERT INTO log(url, content, report_status) VALUES (%s, %s, %s);"
 
 #define FREE_MSG if ( psqlite_error )  sqlite3_free(psqlite_error),psqlite_error = NULL
 
@@ -26,11 +36,16 @@ CDataImpl::~CDataImpl(void)
 	Close();
 }
 
-BOOL CDataImpl::Open()
+BOOL CDataImpl::Open(std::string com)
 {
+	if ( com.size() == 0 )
+		return FALSE;
+
+	com.replace(0, 3, "port");
+
 	Close();
 	CHAR szpath[MAX_PATH] = {0};
-	_stprintf_s(szpath, _T("%sdb\\report.db"), Global::g_szCurModuleDir);
+	_stprintf_s(szpath, _T("%sdb\\%s.db"), Global::g_szCurModuleDir, com.c_str());
 	std::string strPath;
 	if ( !CharEncoding::ASCII2UTF8(szpath,strPath))
 	{
@@ -45,7 +60,7 @@ BOOL CDataImpl::Open()
 	char* psqlite_error = NULL;
 	if ( !QueryTable("report"))
 	{
-		sqlite3_exec(m_psqlite3, _CREATE_MID_TABLE_, NULL, NULL, &psqlite_error);
+		sqlite3_exec(m_psqlite3, _CREATE_REPORT_TABLE_, NULL, NULL, &psqlite_error);
 		FREE_MSG;
 	}
 
@@ -240,7 +255,7 @@ INT CDataImpl::InsertReportInfo(std::string content)
 		return -1;
 
 	std::string strInsert = "INSERT INTO report(url, content)VALUES ('";
-	strInsert.append("'https://cn.ota.qhmoka.com/ota-services/upmp/reportToolsLog.do'");
+	strInsert.append("https://cn.ota.qhmoka.com/ota-services/upmp/reportToolsLog.do");
 	strInsert.append("','");
 	strInsert.append(content);
 	strInsert.append("');");
@@ -286,7 +301,7 @@ INT CDataImpl::InsertReportInfo(std::string report_type, std::map<std::string, s
 	cJSON_Delete(pJson);
 
 	std::string strInsert = "INSERT INTO report(url, content)VALUES ('";
-	strInsert.append("'https://cn.ota.qhmoka.com/ota-services/upmp/reportToolsLog.do'");
+	strInsert.append("https://cn.ota.qhmoka.com/ota-services/upmp/reportToolsLog.do");
 	strInsert.append("','");
 	strInsert.append(content);
 	strInsert.append("');");

+ 1 - 1
TCL Copy Tool/TCL Copy Tool/db.h

@@ -53,7 +53,7 @@ private:
 
 	// Óû§º¯Êý;
 public:
-	BOOL Open();
+	BOOL Open(std::string com);
 	void Close();
 
 	// begin;