xref: /rkdeveloptool/RKLog.cpp (revision 1831c99c8b23f58c10f4f27c0692d44df4ae796b)
176af099aSliuyi /*
276af099aSliuyi  * (C) Copyright 2017 Fuzhou Rockchip Electronics Co., Ltd
376af099aSliuyi  * Seth Liu 2017.03.01
476af099aSliuyi  *
576af099aSliuyi  * SPDX-License-Identifier:	GPL-2.0+
676af099aSliuyi  */
776af099aSliuyi #include "RKLog.h"
876af099aSliuyi int file_stat(string strPath)
976af099aSliuyi {
1076af099aSliuyi 	struct stat statBuf;
1176af099aSliuyi 	int ret;
1276af099aSliuyi 	ret = stat(strPath.c_str(), &statBuf);
1376af099aSliuyi 	if (ret != 0) {
1476af099aSliuyi 		return STAT_NOT_EXIST;
1576af099aSliuyi 	}
1676af099aSliuyi 	if (S_ISDIR(statBuf.st_mode))
1776af099aSliuyi 		return STAT_DIR;
1876af099aSliuyi 	return STAT_FILE;
1976af099aSliuyi }
2076af099aSliuyi string CRKLog::GetLogSavePath()
2176af099aSliuyi {
2276af099aSliuyi 	return m_path;
2376af099aSliuyi }
2476af099aSliuyi bool CRKLog::GetEnableLog()
2576af099aSliuyi {
2676af099aSliuyi 	return m_enable;
2776af099aSliuyi }
2876af099aSliuyi void CRKLog::SetEnableLog(bool bEnable)
2976af099aSliuyi {
3076af099aSliuyi 	m_enable = bEnable;
3176af099aSliuyi }
3276af099aSliuyi 
3376af099aSliuyi CRKLog::CRKLog(string logFilePath, string logFileName, bool enable)
3476af099aSliuyi {
3576af099aSliuyi 	LogSavePath.setContainer(this);
3676af099aSliuyi  	LogSavePath.getter(&CRKLog::GetLogSavePath);
3776af099aSliuyi 
3876af099aSliuyi  	EnableLog.setContainer(this);
3976af099aSliuyi 	EnableLog.getter(&CRKLog::GetEnableLog);
4076af099aSliuyi  	EnableLog.setter(&CRKLog::SetEnableLog);
4176af099aSliuyi 
4276af099aSliuyi 	if (!opendir(logFilePath.c_str())) {
4376af099aSliuyi 		m_path = "";
4476af099aSliuyi 	} else {
4576af099aSliuyi 		if (logFilePath[logFilePath.size() - 1] != '/') {
4676af099aSliuyi 			logFilePath += '/';
4776af099aSliuyi 		}
4876af099aSliuyi 		m_path = logFilePath;
4976af099aSliuyi 	}
5076af099aSliuyi 	if (logFileName.size() <= 0) {
5176af099aSliuyi 		m_name = "Log";
5276af099aSliuyi 	} else
5376af099aSliuyi 		m_name = logFileName;
5476af099aSliuyi 	m_enable = enable;
5576af099aSliuyi 
5676af099aSliuyi }
5776af099aSliuyi CRKLog::~CRKLog()
5876af099aSliuyi {
5976af099aSliuyi }
6076af099aSliuyi void CRKLog::Record(const char *lpFmt,...)
6176af099aSliuyi {
6226edf856SEddie Cai /************************* �������־ ***********************/
6376af099aSliuyi 	char szBuf[1024] = "";
6476af099aSliuyi 	GET_FMT_STRING(lpFmt, szBuf);
6576af099aSliuyi 	if ((m_enable) && (m_path.size() > 0))
6676af099aSliuyi 	{
6776af099aSliuyi 		Write( szBuf);
6876af099aSliuyi 	}
6976af099aSliuyi }
7076af099aSliuyi bool CRKLog::Write(string text)
7176af099aSliuyi {
7276af099aSliuyi 	time_t	now;
7376af099aSliuyi 	struct tm timeNow;
7476af099aSliuyi 	char szDateTime[100];
7576af099aSliuyi 	string  strName;
7676af099aSliuyi 	FILE *file=NULL;
7776af099aSliuyi 	time(&now);
7876af099aSliuyi 	localtime_r(&now, &timeNow);
79*1831c99cSQuang Dang 	snprintf(szDateTime, sizeof(szDateTime), "%04d-%02d-%02d.txt", timeNow.tm_year + 1900, timeNow.tm_mon + 1, timeNow.tm_mday);
8076af099aSliuyi 	strName = m_path + m_name+szDateTime;
8176af099aSliuyi 
8276af099aSliuyi 	try {
8376af099aSliuyi 		file = fopen(strName.c_str(), "ab+");
8476af099aSliuyi 		if (!file) {
8576af099aSliuyi 			return false;
8676af099aSliuyi 		}
87*1831c99cSQuang Dang 		snprintf(szDateTime, sizeof(szDateTime), "%02d:%02d:%02d \t", timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec);
8876af099aSliuyi 		text = szDateTime + text + "\r\n";
8976af099aSliuyi 		fwrite(text.c_str(), 1, text.size() * sizeof(char), file);
9076af099aSliuyi 		fclose(file);
9176af099aSliuyi 	} catch (...) {
9276af099aSliuyi 		fclose(file);
9376af099aSliuyi 		return false;
9476af099aSliuyi 	}
9576af099aSliuyi 	return true;
9676af099aSliuyi }
9776af099aSliuyi bool CRKLog::SaveBuffer(string fileName, PBYTE lpBuffer, DWORD dwSize)
9876af099aSliuyi {
9976af099aSliuyi 	FILE *file;
10076af099aSliuyi 	file = fopen(fileName.c_str(), "wb+");
10176af099aSliuyi 	if (!file) {
10276af099aSliuyi 		return false;
10376af099aSliuyi 	}
10476af099aSliuyi 	fwrite(lpBuffer, 1, dwSize, file);
10576af099aSliuyi 	fclose(file);
10676af099aSliuyi 	return true;
10776af099aSliuyi }
10876af099aSliuyi void CRKLog::PrintBuffer(string &strOutput, PBYTE lpBuffer, DWORD dwSize, UINT uiLineCount)
10976af099aSliuyi {
11076af099aSliuyi 	UINT i,count;
11176af099aSliuyi 	char strHex[32];
11276af099aSliuyi 	strOutput = "";
11376af099aSliuyi 	for (i = 0, count = 0; i < dwSize; i++, count++) {
114*1831c99cSQuang Dang 		snprintf(strHex, sizeof(strHex), "%X", lpBuffer[i]);
11576af099aSliuyi 		strOutput = strOutput + " " + strHex;
11676af099aSliuyi 		if (count >= uiLineCount) {
11776af099aSliuyi 			strOutput += "\r\n";
11876af099aSliuyi 			count = 0;
11976af099aSliuyi 		}
12076af099aSliuyi 	}
12176af099aSliuyi }
122