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