xref: /rkdeveloptool/RKLog.cpp (revision 21b25fd4a70331819b557fe93015b635b9594543)
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  */
7*21b25fd4SDave Murphy 
8*21b25fd4SDave Murphy #ifdef __MINGW32__
9*21b25fd4SDave Murphy #define _POSIX_THREAD_SAFE_FUNCTIONS
10*21b25fd4SDave Murphy #endif
11*21b25fd4SDave Murphy 
1276af099aSliuyi #include "RKLog.h"
13*21b25fd4SDave Murphy 
1476af099aSliuyi int file_stat(string strPath)
1576af099aSliuyi {
1676af099aSliuyi 	struct stat statBuf;
1776af099aSliuyi 	int ret;
1876af099aSliuyi 	ret = stat(strPath.c_str(), &statBuf);
1976af099aSliuyi 	if (ret != 0) {
2076af099aSliuyi 		return STAT_NOT_EXIST;
2176af099aSliuyi 	}
2276af099aSliuyi 	if (S_ISDIR(statBuf.st_mode))
2376af099aSliuyi 		return STAT_DIR;
2476af099aSliuyi 	return STAT_FILE;
2576af099aSliuyi }
2676af099aSliuyi string CRKLog::GetLogSavePath()
2776af099aSliuyi {
2876af099aSliuyi 	return m_path;
2976af099aSliuyi }
3076af099aSliuyi bool CRKLog::GetEnableLog()
3176af099aSliuyi {
3276af099aSliuyi 	return m_enable;
3376af099aSliuyi }
3476af099aSliuyi void CRKLog::SetEnableLog(bool bEnable)
3576af099aSliuyi {
3676af099aSliuyi 	m_enable = bEnable;
3776af099aSliuyi }
3876af099aSliuyi 
3976af099aSliuyi CRKLog::CRKLog(string logFilePath, string logFileName, bool enable)
4076af099aSliuyi {
4176af099aSliuyi 	LogSavePath.setContainer(this);
4276af099aSliuyi  	LogSavePath.getter(&CRKLog::GetLogSavePath);
4376af099aSliuyi 
4476af099aSliuyi  	EnableLog.setContainer(this);
4576af099aSliuyi 	EnableLog.getter(&CRKLog::GetEnableLog);
4676af099aSliuyi  	EnableLog.setter(&CRKLog::SetEnableLog);
4776af099aSliuyi 
4876af099aSliuyi 	if (!opendir(logFilePath.c_str())) {
4976af099aSliuyi 		m_path = "";
5076af099aSliuyi 	} else {
5176af099aSliuyi 		if (logFilePath[logFilePath.size() - 1] != '/') {
5276af099aSliuyi 			logFilePath += '/';
5376af099aSliuyi 		}
5476af099aSliuyi 		m_path = logFilePath;
5576af099aSliuyi 	}
5676af099aSliuyi 	if (logFileName.size() <= 0) {
5776af099aSliuyi 		m_name = "Log";
5876af099aSliuyi 	} else
5976af099aSliuyi 		m_name = logFileName;
6076af099aSliuyi 	m_enable = enable;
6176af099aSliuyi 
6276af099aSliuyi }
6376af099aSliuyi CRKLog::~CRKLog()
6476af099aSliuyi {
6576af099aSliuyi }
6676af099aSliuyi void CRKLog::Record(const char *lpFmt,...)
6776af099aSliuyi {
6826edf856SEddie Cai /************************* �������־ ***********************/
6976af099aSliuyi 	char szBuf[1024] = "";
7076af099aSliuyi 	GET_FMT_STRING(lpFmt, szBuf);
7176af099aSliuyi 	if ((m_enable) && (m_path.size() > 0))
7276af099aSliuyi 	{
7376af099aSliuyi 		Write( szBuf);
7476af099aSliuyi 	}
7576af099aSliuyi }
7676af099aSliuyi bool CRKLog::Write(string text)
7776af099aSliuyi {
7876af099aSliuyi 	time_t	now;
7976af099aSliuyi 	struct tm timeNow;
8076af099aSliuyi 	char szDateTime[100];
8176af099aSliuyi 	string  strName;
8276af099aSliuyi 	FILE *file=NULL;
8376af099aSliuyi 	time(&now);
8476af099aSliuyi 	localtime_r(&now, &timeNow);
8576af099aSliuyi 	sprintf(szDateTime, "%04d-%02d-%02d.txt", timeNow.tm_year + 1900, timeNow.tm_mon + 1, timeNow.tm_mday);
8676af099aSliuyi 	strName = m_path + m_name+szDateTime;
8776af099aSliuyi 
8876af099aSliuyi 	try {
8976af099aSliuyi 		file = fopen(strName.c_str(), "ab+");
9076af099aSliuyi 		if (!file) {
9176af099aSliuyi 			return false;
9276af099aSliuyi 		}
9376af099aSliuyi 		sprintf(szDateTime, "%02d:%02d:%02d \t", timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec);
9476af099aSliuyi 		text = szDateTime + text + "\r\n";
9576af099aSliuyi 		fwrite(text.c_str(), 1, text.size() * sizeof(char), file);
9676af099aSliuyi 		fclose(file);
9776af099aSliuyi 	} catch (...) {
9876af099aSliuyi 		fclose(file);
9976af099aSliuyi 		return false;
10076af099aSliuyi 	}
10176af099aSliuyi 	return true;
10276af099aSliuyi }
10376af099aSliuyi bool CRKLog::SaveBuffer(string fileName, PBYTE lpBuffer, DWORD dwSize)
10476af099aSliuyi {
10576af099aSliuyi 	FILE *file;
10676af099aSliuyi 	file = fopen(fileName.c_str(), "wb+");
10776af099aSliuyi 	if (!file) {
10876af099aSliuyi 		return false;
10976af099aSliuyi 	}
11076af099aSliuyi 	fwrite(lpBuffer, 1, dwSize, file);
11176af099aSliuyi 	fclose(file);
11276af099aSliuyi 	return true;
11376af099aSliuyi }
11476af099aSliuyi void CRKLog::PrintBuffer(string &strOutput, PBYTE lpBuffer, DWORD dwSize, UINT uiLineCount)
11576af099aSliuyi {
11676af099aSliuyi 	UINT i,count;
11776af099aSliuyi 	char strHex[32];
11876af099aSliuyi 	strOutput = "";
11976af099aSliuyi 	for (i = 0, count = 0; i < dwSize; i++, count++) {
12076af099aSliuyi 		sprintf(strHex, "%X", lpBuffer[i]);
12176af099aSliuyi 		strOutput = strOutput + " " + strHex;
12276af099aSliuyi 		if (count >= uiLineCount) {
12376af099aSliuyi 			strOutput += "\r\n";
12476af099aSliuyi 			count = 0;
12576af099aSliuyi 		}
12676af099aSliuyi 	}
12776af099aSliuyi }
128