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