xref: /rkdeveloptool/RKLog.cpp (revision 26edf8560157251a87ac2dba355d11ed8a1445de)
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 {
62*26edf856SEddie Cai /************************* �������־ ***********************/
6376af099aSliuyi 	char szBuf[1024] = "";
6476af099aSliuyi 	GET_FMT_STRING(lpFmt, szBuf);
6576af099aSliuyi 	if ((m_enable) && (m_path.size() > 0))
6676af099aSliuyi 	{
67*26edf856SEddie Cai 		printf("%s\n",szBuf);
6876af099aSliuyi 		Write( szBuf);
6976af099aSliuyi 	}
7076af099aSliuyi }
7176af099aSliuyi bool CRKLog::Write(string text)
7276af099aSliuyi {
7376af099aSliuyi 	time_t	now;
7476af099aSliuyi 	struct tm timeNow;
7576af099aSliuyi 	char szDateTime[100];
7676af099aSliuyi 	string  strName;
7776af099aSliuyi 	FILE *file=NULL;
7876af099aSliuyi 	time(&now);
7976af099aSliuyi 	localtime_r(&now, &timeNow);
8076af099aSliuyi 	sprintf(szDateTime, "%04d-%02d-%02d.txt", timeNow.tm_year + 1900, timeNow.tm_mon + 1, timeNow.tm_mday);
8176af099aSliuyi 	strName = m_path + m_name+szDateTime;
8276af099aSliuyi 
8376af099aSliuyi 	try {
8476af099aSliuyi 		file = fopen(strName.c_str(), "ab+");
8576af099aSliuyi 		if (!file) {
8676af099aSliuyi 			return false;
8776af099aSliuyi 		}
8876af099aSliuyi 		sprintf(szDateTime, "%02d:%02d:%02d \t", timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec);
8976af099aSliuyi 		text = szDateTime + text + "\r\n";
9076af099aSliuyi 		fwrite(text.c_str(), 1, text.size() * sizeof(char), file);
9176af099aSliuyi 		fclose(file);
9276af099aSliuyi 	} catch (...) {
9376af099aSliuyi 		fclose(file);
9476af099aSliuyi 		return false;
9576af099aSliuyi 	}
9676af099aSliuyi 	return true;
9776af099aSliuyi }
9876af099aSliuyi bool CRKLog::SaveBuffer(string fileName, PBYTE lpBuffer, DWORD dwSize)
9976af099aSliuyi {
10076af099aSliuyi 	FILE *file;
10176af099aSliuyi 	file = fopen(fileName.c_str(), "wb+");
10276af099aSliuyi 	if (!file) {
10376af099aSliuyi 		return false;
10476af099aSliuyi 	}
10576af099aSliuyi 	fwrite(lpBuffer, 1, dwSize, file);
10676af099aSliuyi 	fclose(file);
10776af099aSliuyi 	return true;
10876af099aSliuyi }
10976af099aSliuyi void CRKLog::PrintBuffer(string &strOutput, PBYTE lpBuffer, DWORD dwSize, UINT uiLineCount)
11076af099aSliuyi {
11176af099aSliuyi 	UINT i,count;
11276af099aSliuyi 	char strHex[32];
11376af099aSliuyi 	strOutput = "";
11476af099aSliuyi 	for (i = 0, count = 0; i < dwSize; i++, count++) {
11576af099aSliuyi 		sprintf(strHex, "%X", lpBuffer[i]);
11676af099aSliuyi 		strOutput = strOutput + " " + strHex;
11776af099aSliuyi 		if (count >= uiLineCount) {
11876af099aSliuyi 			strOutput += "\r\n";
11976af099aSliuyi 			count = 0;
12076af099aSliuyi 		}
12176af099aSliuyi 	}
12276af099aSliuyi }
123