1*76af099aSliuyi /* 2*76af099aSliuyi * (C) Copyright 2017 Fuzhou Rockchip Electronics Co., Ltd 3*76af099aSliuyi * Seth Liu 2017.03.01 4*76af099aSliuyi * 5*76af099aSliuyi * SPDX-License-Identifier: GPL-2.0+ 6*76af099aSliuyi */ 7*76af099aSliuyi #include "RKLog.h" 8*76af099aSliuyi int file_stat(string strPath) 9*76af099aSliuyi { 10*76af099aSliuyi struct stat statBuf; 11*76af099aSliuyi int ret; 12*76af099aSliuyi ret = stat(strPath.c_str(), &statBuf); 13*76af099aSliuyi if (ret != 0) { 14*76af099aSliuyi return STAT_NOT_EXIST; 15*76af099aSliuyi } 16*76af099aSliuyi if (S_ISDIR(statBuf.st_mode)) 17*76af099aSliuyi return STAT_DIR; 18*76af099aSliuyi return STAT_FILE; 19*76af099aSliuyi } 20*76af099aSliuyi string CRKLog::GetLogSavePath() 21*76af099aSliuyi { 22*76af099aSliuyi return m_path; 23*76af099aSliuyi } 24*76af099aSliuyi bool CRKLog::GetEnableLog() 25*76af099aSliuyi { 26*76af099aSliuyi return m_enable; 27*76af099aSliuyi } 28*76af099aSliuyi void CRKLog::SetEnableLog(bool bEnable) 29*76af099aSliuyi { 30*76af099aSliuyi m_enable = bEnable; 31*76af099aSliuyi } 32*76af099aSliuyi 33*76af099aSliuyi CRKLog::CRKLog(string logFilePath, string logFileName, bool enable) 34*76af099aSliuyi { 35*76af099aSliuyi LogSavePath.setContainer(this); 36*76af099aSliuyi LogSavePath.getter(&CRKLog::GetLogSavePath); 37*76af099aSliuyi 38*76af099aSliuyi EnableLog.setContainer(this); 39*76af099aSliuyi EnableLog.getter(&CRKLog::GetEnableLog); 40*76af099aSliuyi EnableLog.setter(&CRKLog::SetEnableLog); 41*76af099aSliuyi 42*76af099aSliuyi if (!opendir(logFilePath.c_str())) { 43*76af099aSliuyi m_path = ""; 44*76af099aSliuyi } else { 45*76af099aSliuyi if (logFilePath[logFilePath.size() - 1] != '/') { 46*76af099aSliuyi logFilePath += '/'; 47*76af099aSliuyi } 48*76af099aSliuyi m_path = logFilePath; 49*76af099aSliuyi } 50*76af099aSliuyi if (logFileName.size() <= 0) { 51*76af099aSliuyi m_name = "Log"; 52*76af099aSliuyi } else 53*76af099aSliuyi m_name = logFileName; 54*76af099aSliuyi m_enable = enable; 55*76af099aSliuyi 56*76af099aSliuyi } 57*76af099aSliuyi CRKLog::~CRKLog() 58*76af099aSliuyi { 59*76af099aSliuyi } 60*76af099aSliuyi void CRKLog::Record(const char *lpFmt,...) 61*76af099aSliuyi { 62*76af099aSliuyi /************************* �������־ ***********************/ 63*76af099aSliuyi char szBuf[1024] = ""; 64*76af099aSliuyi GET_FMT_STRING(lpFmt, szBuf); 65*76af099aSliuyi if ((m_enable) && (m_path.size() > 0)) 66*76af099aSliuyi { 67*76af099aSliuyi Write( szBuf); 68*76af099aSliuyi } 69*76af099aSliuyi } 70*76af099aSliuyi bool CRKLog::Write(string text) 71*76af099aSliuyi { 72*76af099aSliuyi time_t now; 73*76af099aSliuyi struct tm timeNow; 74*76af099aSliuyi char szDateTime[100]; 75*76af099aSliuyi string strName; 76*76af099aSliuyi FILE *file=NULL; 77*76af099aSliuyi time(&now); 78*76af099aSliuyi localtime_r(&now, &timeNow); 79*76af099aSliuyi sprintf(szDateTime, "%04d-%02d-%02d.txt", timeNow.tm_year + 1900, timeNow.tm_mon + 1, timeNow.tm_mday); 80*76af099aSliuyi strName = m_path + m_name+szDateTime; 81*76af099aSliuyi 82*76af099aSliuyi try { 83*76af099aSliuyi file = fopen(strName.c_str(), "ab+"); 84*76af099aSliuyi if (!file) { 85*76af099aSliuyi return false; 86*76af099aSliuyi } 87*76af099aSliuyi sprintf(szDateTime, "%02d:%02d:%02d \t", timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec); 88*76af099aSliuyi text = szDateTime + text + "\r\n"; 89*76af099aSliuyi fwrite(text.c_str(), 1, text.size() * sizeof(char), file); 90*76af099aSliuyi fclose(file); 91*76af099aSliuyi } catch (...) { 92*76af099aSliuyi fclose(file); 93*76af099aSliuyi return false; 94*76af099aSliuyi } 95*76af099aSliuyi return true; 96*76af099aSliuyi } 97*76af099aSliuyi bool CRKLog::SaveBuffer(string fileName, PBYTE lpBuffer, DWORD dwSize) 98*76af099aSliuyi { 99*76af099aSliuyi FILE *file; 100*76af099aSliuyi file = fopen(fileName.c_str(), "wb+"); 101*76af099aSliuyi if (!file) { 102*76af099aSliuyi return false; 103*76af099aSliuyi } 104*76af099aSliuyi fwrite(lpBuffer, 1, dwSize, file); 105*76af099aSliuyi fclose(file); 106*76af099aSliuyi return true; 107*76af099aSliuyi } 108*76af099aSliuyi void CRKLog::PrintBuffer(string &strOutput, PBYTE lpBuffer, DWORD dwSize, UINT uiLineCount) 109*76af099aSliuyi { 110*76af099aSliuyi UINT i,count; 111*76af099aSliuyi char strHex[32]; 112*76af099aSliuyi strOutput = ""; 113*76af099aSliuyi for (i = 0, count = 0; i < dwSize; i++, count++) { 114*76af099aSliuyi sprintf(strHex, "%X", lpBuffer[i]); 115*76af099aSliuyi strOutput = strOutput + " " + strHex; 116*76af099aSliuyi if (count >= uiLineCount) { 117*76af099aSliuyi strOutput += "\r\n"; 118*76af099aSliuyi count = 0; 119*76af099aSliuyi } 120*76af099aSliuyi } 121*76af099aSliuyi }