Newer
Older
PrismSoftware / ECTrainer2 / Logger.cpp
#include "Logger.h"
#include "nkcWinUtils.h"

const char* Logger::DATA_LOG_FILE = LOG_DIR "%s_%s_%d.csv";
const TCHAR* Logger::EVENT_LOG_FILE = _T(LOG_DIR "events.txt");

// コンストラクタ
Logger::Logger() 
	: _logFileName(_T(""))
{

}

// ログを追記
bool Logger::Append(const TCHAR* filename, const TCHAR* msg) {
	if (_tcslen(filename) < 1) return false;

	FILE* fp = NULL;
	if (_tfopen_s(&fp, filename, _T("a")) != 0) {
		nkc::wut::DebugPrintf(_T("Can't open data log file.\n"));
		return false;
	}

	_ftprintf(fp, msg);

	fclose(fp);
	return true;
}

// データログ開始
void Logger::StartRecord(std::string subject, int visit) {
	CreateDirectory(_T(LOG_DIR), NULL);

	_logFileName = nkc::wut::Multi2Wide(
		cv::format(DATA_LOG_FILE, nkc::wut::DateTimeStr().c_str(), subject.c_str(), visit));
	nkc::wut::DebugPrintf(_T("Log start: %s\n"), _logFileName.c_str());

	TCHAR msg[1024];
	_stprintf_s(msg, 1024, _T("time,stimNo,sceneNo,stimTime,gazeVx,gazeVy,shiftX,shiftY,"
		"gazeIx,gazeIy,target,contact time,Feedback,TrainLevel,RR,pupilR,pupilL,"
		"H11,H12,H13,H21,H22,H23,H31,H32,H33\n"));

	Append(_logFileName.c_str(), msg);
}

// データログ出力
void Logger::WriteRecord(Record& r) {
	_Records.push_back(r);

	double* ptr = r.H.ptr<double>(0);
	TCHAR msg[1024];
	_stprintf_s(msg, 1024, _T("%.3f,%d,%d,%.3f,%.1f,%.1f,%.1f,%.1f"
		",%.1f,%.1f,%d,%.2f,%d,%d,%d,%.1f,%.1f,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf\n"),
		r.ElapTime, r.StimNo, r.SceneNo, r.SceneTime, r.GazeV.x, r.GazeV.y, r.Shift.x, r.Shift.y,
		r.GazeI.x, r.GazeI.y, r.Target, r.ContactTime, r.Feedback, r.TrainingLevel,
		r.RR, r.PupilR, r.PupilL, *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4),
		*(ptr + 5), *(ptr + 6), *(ptr + 7), *(ptr + 8));

	Append(_logFileName.c_str(), msg);
}

// イベントログ出力
void Logger::WriteEvent(const TCHAR* msg) {
	CreateDirectory(_T(LOG_DIR), NULL);

	if (_tcslen(msg) < 1) {
		Append(EVENT_LOG_FILE, _T("\n"));
	} else {
		std::wstring datestr = nkc::wut::Multi2Wide(nkc::wut::DateTimeStr());
		TCHAR msgOut[1024];
		_stprintf_s(msgOut, 1024, _T("%s %s\n"), datestr.c_str(), msg);
		Append(EVENT_LOG_FILE, msgOut);
		nkc::wut::DebugPrintf(msgOut);
	}
}

// ログ停止
void Logger::Stop() {
	_logFileName = _T("");
}