xref: /rkdeveloptool/RKLog.cpp (revision 76af099afcbcafd97801028de2ba3421d3c12865)
1*76af099aSliuyi /*
2*76af099aSliuyi  * (C) Copyright 2017 Fuzhou Rockchip Electronics Co., Ltd
3*76af099aSliuyi  * Seth Liu 2017.03.01
4*76af099aSliuyi  *
5*76af099aSliuyi  * SPDX-License-Identifier:	GPL-2.0+
6*76af099aSliuyi  */
7*76af099aSliuyi #include "RKLog.h"
8*76af099aSliuyi int file_stat(string strPath)
9*76af099aSliuyi {
10*76af099aSliuyi 	struct stat statBuf;
11*76af099aSliuyi 	int ret;
12*76af099aSliuyi 	ret = stat(strPath.c_str(), &statBuf);
13*76af099aSliuyi 	if (ret != 0) {
14*76af099aSliuyi 		return STAT_NOT_EXIST;
15*76af099aSliuyi 	}
16*76af099aSliuyi 	if (S_ISDIR(statBuf.st_mode))
17*76af099aSliuyi 		return STAT_DIR;
18*76af099aSliuyi 	return STAT_FILE;
19*76af099aSliuyi }
20*76af099aSliuyi string CRKLog::GetLogSavePath()
21*76af099aSliuyi {
22*76af099aSliuyi 	return m_path;
23*76af099aSliuyi }
24*76af099aSliuyi bool CRKLog::GetEnableLog()
25*76af099aSliuyi {
26*76af099aSliuyi 	return m_enable;
27*76af099aSliuyi }
28*76af099aSliuyi void CRKLog::SetEnableLog(bool bEnable)
29*76af099aSliuyi {
30*76af099aSliuyi 	m_enable = bEnable;
31*76af099aSliuyi }
32*76af099aSliuyi 
33*76af099aSliuyi CRKLog::CRKLog(string logFilePath, string logFileName, bool enable)
34*76af099aSliuyi {
35*76af099aSliuyi 	LogSavePath.setContainer(this);
36*76af099aSliuyi  	LogSavePath.getter(&CRKLog::GetLogSavePath);
37*76af099aSliuyi 
38*76af099aSliuyi  	EnableLog.setContainer(this);
39*76af099aSliuyi 	EnableLog.getter(&CRKLog::GetEnableLog);
40*76af099aSliuyi  	EnableLog.setter(&CRKLog::SetEnableLog);
41*76af099aSliuyi 
42*76af099aSliuyi 	if (!opendir(logFilePath.c_str())) {
43*76af099aSliuyi 		m_path = "";
44*76af099aSliuyi 	} else {
45*76af099aSliuyi 		if (logFilePath[logFilePath.size() - 1] != '/') {
46*76af099aSliuyi 			logFilePath += '/';
47*76af099aSliuyi 		}
48*76af099aSliuyi 		m_path = logFilePath;
49*76af099aSliuyi 	}
50*76af099aSliuyi 	if (logFileName.size() <= 0) {
51*76af099aSliuyi 		m_name = "Log";
52*76af099aSliuyi 	} else
53*76af099aSliuyi 		m_name = logFileName;
54*76af099aSliuyi 	m_enable = enable;
55*76af099aSliuyi 
56*76af099aSliuyi }
57*76af099aSliuyi CRKLog::~CRKLog()
58*76af099aSliuyi {
59*76af099aSliuyi }
60*76af099aSliuyi void CRKLog::Record(const char *lpFmt,...)
61*76af099aSliuyi {
62*76af099aSliuyi /************************* �������־ ***********************/
63*76af099aSliuyi 	char szBuf[1024] = "";
64*76af099aSliuyi 	GET_FMT_STRING(lpFmt, szBuf);
65*76af099aSliuyi 	if ((m_enable) && (m_path.size() > 0))
66*76af099aSliuyi 	{
67*76af099aSliuyi 		Write( szBuf);
68*76af099aSliuyi 	}
69*76af099aSliuyi }
70*76af099aSliuyi bool CRKLog::Write(string text)
71*76af099aSliuyi {
72*76af099aSliuyi 	time_t	now;
73*76af099aSliuyi 	struct tm timeNow;
74*76af099aSliuyi 	char szDateTime[100];
75*76af099aSliuyi 	string  strName;
76*76af099aSliuyi 	FILE *file=NULL;
77*76af099aSliuyi 	time(&now);
78*76af099aSliuyi 	localtime_r(&now, &timeNow);
79*76af099aSliuyi 	sprintf(szDateTime, "%04d-%02d-%02d.txt", timeNow.tm_year + 1900, timeNow.tm_mon + 1, timeNow.tm_mday);
80*76af099aSliuyi 	strName = m_path + m_name+szDateTime;
81*76af099aSliuyi 
82*76af099aSliuyi 	try {
83*76af099aSliuyi 		file = fopen(strName.c_str(), "ab+");
84*76af099aSliuyi 		if (!file) {
85*76af099aSliuyi 			return false;
86*76af099aSliuyi 		}
87*76af099aSliuyi 		sprintf(szDateTime, "%02d:%02d:%02d \t", timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec);
88*76af099aSliuyi 		text = szDateTime + text + "\r\n";
89*76af099aSliuyi 		fwrite(text.c_str(), 1, text.size() * sizeof(char), file);
90*76af099aSliuyi 		fclose(file);
91*76af099aSliuyi 	} catch (...) {
92*76af099aSliuyi 		fclose(file);
93*76af099aSliuyi 		return false;
94*76af099aSliuyi 	}
95*76af099aSliuyi 	return true;
96*76af099aSliuyi }
97*76af099aSliuyi bool CRKLog::SaveBuffer(string fileName, PBYTE lpBuffer, DWORD dwSize)
98*76af099aSliuyi {
99*76af099aSliuyi 	FILE *file;
100*76af099aSliuyi 	file = fopen(fileName.c_str(), "wb+");
101*76af099aSliuyi 	if (!file) {
102*76af099aSliuyi 		return false;
103*76af099aSliuyi 	}
104*76af099aSliuyi 	fwrite(lpBuffer, 1, dwSize, file);
105*76af099aSliuyi 	fclose(file);
106*76af099aSliuyi 	return true;
107*76af099aSliuyi }
108*76af099aSliuyi void CRKLog::PrintBuffer(string &strOutput, PBYTE lpBuffer, DWORD dwSize, UINT uiLineCount)
109*76af099aSliuyi {
110*76af099aSliuyi 	UINT i,count;
111*76af099aSliuyi 	char strHex[32];
112*76af099aSliuyi 	strOutput = "";
113*76af099aSliuyi 	for (i = 0, count = 0; i < dwSize; i++, count++) {
114*76af099aSliuyi 		sprintf(strHex, "%X", lpBuffer[i]);
115*76af099aSliuyi 		strOutput = strOutput + " " + strHex;
116*76af099aSliuyi 		if (count >= uiLineCount) {
117*76af099aSliuyi 			strOutput += "\r\n";
118*76af099aSliuyi 			count = 0;
119*76af099aSliuyi 		}
120*76af099aSliuyi 	}
121*76af099aSliuyi }