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 */
721b25fd4SDave Murphy
821b25fd4SDave Murphy #ifdef __MINGW32__
921b25fd4SDave Murphy #define _POSIX_THREAD_SAFE_FUNCTIONS
1021b25fd4SDave Murphy #endif
1121b25fd4SDave Murphy
1276af099aSliuyi #include "RKLog.h"
1321b25fd4SDave Murphy
file_stat(string strPath)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 }
GetLogSavePath()2676af099aSliuyi string CRKLog::GetLogSavePath()
2776af099aSliuyi {
2876af099aSliuyi return m_path;
2976af099aSliuyi }
GetEnableLog()3076af099aSliuyi bool CRKLog::GetEnableLog()
3176af099aSliuyi {
3276af099aSliuyi return m_enable;
3376af099aSliuyi }
SetEnableLog(bool bEnable)3476af099aSliuyi void CRKLog::SetEnableLog(bool bEnable)
3576af099aSliuyi {
3676af099aSliuyi m_enable = bEnable;
3776af099aSliuyi }
3876af099aSliuyi
CRKLog(string logFilePath,string logFileName,bool enable)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 }
~CRKLog()6376af099aSliuyi CRKLog::~CRKLog()
6476af099aSliuyi {
6576af099aSliuyi }
Record(const char * lpFmt,...)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 }
Write(string text)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);
85*1831c99cSQuang Dang snprintf(szDateTime, sizeof(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 }
93*1831c99cSQuang Dang snprintf(szDateTime, sizeof(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 }
SaveBuffer(string fileName,PBYTE lpBuffer,DWORD dwSize)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 }
PrintBuffer(string & strOutput,PBYTE lpBuffer,DWORD dwSize,UINT uiLineCount)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++) {
120*1831c99cSQuang Dang snprintf(strHex, sizeof(strHex), "%X", lpBuffer[i]);
12176af099aSliuyi strOutput = strOutput + " " + strHex;
12276af099aSliuyi if (count >= uiLineCount) {
12376af099aSliuyi strOutput += "\r\n";
12476af099aSliuyi count = 0;
12576af099aSliuyi }
12676af099aSliuyi }
12776af099aSliuyi }
128