39 #define _________________________________________VARIABLES_SECTION__________________________________________________________________________ 41 static char DebugLogs[CFG_UINT16_NUMBER_OF_DEBUG_LOGS][CFG_UINT16_MAX_DEBUGLOG_STRING_LENGTH];
42 static uint16_t PutIndex = 0;
43 static uint16_t GetIndex = 0;
44 static uint16_t GetOldestIndex = 0;
45 static uint16_t NumberOfLogs = 0;
46 static oC_LogType_t EnabledLogs = oC_LogType_Default;
47 static bool Locked =
false;
49 #undef _________________________________________VARIABLES_SECTION__________________________________________________________________________ 55 #define _________________________________________INTERFACE_FUNCTIOS_SECTION_________________________________________________________________ 64 EnabledLogs = LogType;
96 void _kdebuglog( oC_LogType_t LogType ,
const char * Function,
char * Format , ...)
98 #if CFG_ENABLE_DEBUG_PRINT == ON 99 if((EnabledLogs & LogType) && Locked ==
false)
101 oC_IntMan_EnterCriticalSection();
102 char * buffer = DebugLogs[PutIndex++];
103 if(NumberOfLogs < CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
108 if(GetIndex == CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
112 if(PutIndex == CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
116 oC_IntMan_ExitCriticalSection();
117 va_list argumentList;
118 oC_MemorySize_t size = CFG_UINT16_MAX_DEBUGLOG_STRING_LENGTH;
119 oC_MemorySize_t len = 0;
120 va_start(argumentList, Format);
121 memset(buffer,0,CFG_UINT16_MAX_DEBUGLOG_STRING_LENGTH);
122 if(LogType & oC_LogType_Error)
124 sprintf_s(buffer,size, oC_VT100_FG_GREEN
"%09.3f " oC_VT100_FG_WHITE
"|" oC_VT100_FG_BLUE
" %-30s" oC_VT100_FG_WHITE
": " oC_VT100_FG_RED , gettimestamp(), Function);
126 else if(LogType & oC_LogType_Warning)
128 sprintf_s(buffer,size, oC_VT100_FG_GREEN
"%09.3f " oC_VT100_FG_WHITE
"|" oC_VT100_FG_BLUE
" %-30s" oC_VT100_FG_WHITE
": " oC_VT100_FG_YELLOW , gettimestamp(), Function);
130 else if(LogType & oC_LogType_GoodNews)
132 sprintf_s(buffer,size, oC_VT100_FG_GREEN
"%09.3f " oC_VT100_FG_WHITE
"|" oC_VT100_FG_BLUE
" %-30s" oC_VT100_FG_WHITE
": " oC_VT100_FG_GREEN , gettimestamp(), Function);
136 sprintf_s(buffer,size, oC_VT100_FG_GREEN
"%09.3f " oC_VT100_FG_WHITE
"|" oC_VT100_FG_BLUE
" %-30s" oC_VT100_FG_WHITE
": " oC_VT100_FG_WHITE , gettimestamp(), Function);
138 len = strlen(buffer);
141 va_end(argumentList);
154 bool available =
false;
156 if(isram(outString) && NumberOfLogs > 0 && Size > 0)
158 oC_IntMan_EnterCriticalSection();
164 GetIndex = CFG_UINT16_NUMBER_OF_DEBUG_LOGS - 1;
170 char * buffer = DebugLogs[GetIndex];
171 oC_IntMan_ExitCriticalSection();
172 strncpy(outString,buffer,Size);
185 bool available =
false;
187 if(isram(outString) && NumberOfLogs > 0 && Size > 0)
189 oC_IntMan_EnterCriticalSection();
193 char * buffer = DebugLogs[GetOldestIndex++];
195 if(GetOldestIndex >= CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
199 oC_IntMan_ExitCriticalSection();
200 strncpy(outString,buffer,Size);
213 if(isaddresscorrect(Log) && strlen(Log) > 0)
215 oC_IntMan_EnterCriticalSection();
216 char * buffer = DebugLogs[PutIndex++];
217 if(NumberOfLogs < CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
222 if(GetIndex == CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
226 if(PutIndex == CFG_UINT16_NUMBER_OF_DEBUG_LOGS)
230 oC_IntMan_ExitCriticalSection();
231 strncpy(buffer,Log,CFG_UINT16_MAX_DEBUGLOG_STRING_LENGTH);
236 #undef _________________________________________INTERFACE_FUNCTIOS_SECTION_________________________________________________________________
void unlockkdebuglog(void)
bool readoldestkdebuglog(char *outString, oC_UInt_t Size)
The file with interface for kernel print operations.
The file with interface for interrupt manager.
void enkdebuglog(oC_LogType_t LogType)
void savekdebuglog(char *Log)
oC_ErrorCode_t oC_KPrint_Format(char *outBuffer, oC_UInt_t Size, const char *Format, va_list ArgumentList)
bool readlastkdebuglog(char *outString, oC_UInt_t Size)