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