You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spdlog/SpeedTest/BralLog.h

218 lines
5.2 KiB
C++

#pragma once
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <string>
//#include "BrlDataPath.h"
#include "VStringAp.h"
// #define FILE_STAY_OPEN
const DWORD LOG_BUF_SIZE = 1024;
const DWORD TIME_BUF_SIZE = 20;
const DWORD CF_ACCESS_FLAGS = GENERIC_WRITE;
const DWORD CF_SHARE_MODE = FILE_SHARE_WRITE;
const DWORD CF_CR_DISP = OPEN_ALWAYS;
typedef enum E_BRLLOG_FLAG
{
// Globale Flags, die modulübergreifend ein- und ausgeschaltet
// werden und in jedem Modul reserviert sind.
E_BRLLOG_GLOB_INIT = 0x0001,
E_BRLLOG_GLOB_PNP = 0x0002,
E_BRLLOG_GLOB_STATUS = 0x0004, // Status-Änderungen
E_BRLLOG_GLOB_DATAFLOW = 0x0008, // Daten-Übertragung Cl -> Srv -> Drv ...
E_BRLLOG_GLOB_ERROR = 0x0010,
E_BRLLOG_GLOB_ASSIGN = 0x0020, // Geräte-Zuweisungen etc
E_BRLLOG_GLOB_IPC = 0x0040, // Interprozess-Kommunikation
E_BRLLOG_BRL_PROCESS = 0x0080, // Bearbeitung der Brailledaten (Screen und Window)
E_BRLLOG_BRL_PROCESS_DUMPDATA = 0x0100, // Dump der Daten bei der Bearbeitung (HexDump)
E_BRLLOG_BDC_DEVMGMT = 0x0200, // DeviceManagment der BralDriverConfig.dll
E_BRLLOG_BTR_LIBLOUIS = 0x0400, // Logging von LibLouis einschalten (Kurzschriftübersetzer)
E_BRLLOG_BRSV_TIMERS = 0x0800,
E_BRLLOG_BRALDRV_IPC = 0x01000, // Interprozesskommunikation BrailleDriver.exe
}E_BRLLOG_FLAG;
// Standard für Braille-Treiber
const DWORD STD_DRIVER_LOGFLAG = 0x8000FFFF;
const DWORD STD_LOGFLAG = E_BRLLOG_GLOB_INIT|E_BRLLOG_GLOB_PNP|E_BRLLOG_GLOB_STATUS|E_BRLLOG_GLOB_ERROR|E_BRLLOG_GLOB_ASSIGN|E_BRLLOG_BRSV_TIMERS;
class CLoggingPath
{
public:
std::wstring Drive;
std::wstring Dir;
std::wstring FileName;
std::wstring FileExt;
BOOL Build(std::wstring& wsRes)
{
WSTRING_AP Path(_MAX_PATH);
_wmakepath(Path,Drive.c_str(),Dir.c_str(),FileName.c_str(),FileExt.c_str());
wsRes = Path;
return TRUE;
}
};
class CBralLog
{
private:
DWORD m_IniFlag;
DWORD m_Flag;
BOOL m_OutputDebugString;
DWORD m_ProcessId;
// CRITICAL_SECTION m_cs;
std::wstring m_FileName;
#ifdef BRLLOG_VFL
LONG m_hLog;
#endif
#ifdef FILE_STAY_OPEN
HANDLE m_hFile;
#endif
// wchar_t m_LogBuf[LOG_BUF_SIZE+1];
void InitPrivateData(void)
{
#ifdef BRLLOG_VFL
m_hLog = -1;
#endif
m_Flag = 0; m_IniFlag = 0;
// memset(m_LogBuf,0,sizeof(m_LogBuf));
m_OutputDebugString=FALSE;
m_ProcessId = GetCurrentProcessId();
}
wchar_t HexCharW(BYTE value)
{
value &= 0xF;
if (value >= 0 && value <= 9) return (CHAR)(L'0' + value);
else return (wchar_t)(L'A' + (value - 10));
}
#ifndef BRLLOG_VFL
HANDLE MyCreateFile(DWORD dwCreationDisposition = CF_CR_DISP)
{
#ifdef FILE_STAY_OPEN
return m_hFile;
#else
return CreateFileW(m_FileName.c_str(),CF_ACCESS_FLAGS,CF_SHARE_MODE,NULL,dwCreationDisposition,0,NULL);
#endif
}
#endif
public:
const std::wstring& GetFileName(void){return m_FileName;}
private:
void _Log(const wchar_t* str);
void _LogS2(const wchar_t* s1,const wchar_t* s2,const wchar_t* str);
void _vLogPrintf(const wchar_t* format,va_list parameter);
void _vLogPrintfS2(const wchar_t* s1,const wchar_t* s2,const wchar_t* format,va_list parameter);
void _LogHex8(const wchar_t* header,const void* data,DWORD DataSize);
void _LogHex16(const wchar_t* header,const void* data,DWORD DataSize);
void _LogPrintf(const wchar_t* format,...)
{
va_list Next;
va_start(Next, format);
_vLogPrintf(format,Next);
}
void _LogRaw(const wchar_t* str,DWORD dwLen);
public:
CBralLog(void);
~CBralLog(void);
//#ifdef BRAL_NO_GLOBAL_HELPERS
//void Init(HINSTANCE hModule,CBrlDataPath& BrlDataPath);
//#else
//void Init(HINSTANCE hModule);
//#endif
void Init(const std::wstring& IniFileName,CLoggingPath& LogFileName,const std::wstring& ModuleName);
void Free(void);
BOOL GetIniFileNameBd(std::wstring& Result,HINSTANCE hDll);
BOOL GetIniFileNameBs(std::wstring& Result,HINSTANCE hDll);
// BOOL GetLoggingPathBs(CLoggingPath& Result,CBrlDataPath& BrlDataPath,HINSTANCE hDll);
BOOL GetModuleNameBs(std::wstring& Result,HINSTANCE hInst);
void LogControl(LONG LogEnable,LONG LogClear);
const wchar_t* GetLogFileName(void)
{
return m_FileName.c_str();
}
void SetFlag(DWORD dwFl);
DWORD GetFlag(void){return m_Flag;}
void LogHex8(DWORD dwFlag,const wchar_t* header,const void* data,DWORD DataSize)
{
if (dwFlag&m_Flag)
{
_LogHex8(header, data, DataSize);
}
}
void LogHex16(DWORD dwFlag,const wchar_t* header,const void* data,DWORD DataSize)
{
if (dwFlag&m_Flag)
{
_LogHex16(header, data, DataSize);
}
}
// Bei diesen Funktionen haben wir evtl. eine Chance, dass der Compiler sie
// inline einbaut und daher schnell ausführt
void LogRaw(DWORD dwFlag,const wchar_t* str,DWORD dwLen)
{
if (dwFlag&m_Flag)
{
_LogRaw(str, dwLen);
}
}
void Log(DWORD dwFlag,const wchar_t* str)
{
if (dwFlag&m_Flag)
{
_Log(str);
}
}
void LogPrintf(DWORD dwFlag,const wchar_t* format,...)
{
if(dwFlag&m_Flag)
{
va_list Next;
va_start(Next, format);
_vLogPrintf(format,Next);
}
}
void vLogPrintf(DWORD dwFlag,const wchar_t* format,va_list parameter)
{
if(dwFlag&m_Flag)
_vLogPrintf(format,parameter);
}
};
#ifndef BRAL_NO_GLOBAL_HELPERS
extern CBralLog BralLog;
#endif