| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #include "stdint.h"
- #include <stdarg.h>
- #include "stdbool.h"
- #include "string.h"
- #include "sys_log.h"
- #include "sys_common.h"
- #define FW_LOG_DATA_LEN 1536
- #define FW_LOG_FILE_NAME_LEN 32
- #define MAX_BUF 128
- static char s_cLogBuf[FW_LOG_DATA_LEN];
- static uint8_t s_ucLogOut = true; ;
- static uint8_t s_ucLogLevel = FW_INFO_LEVEL;
- static int8_t* s_pcLogCacheFileName = NULL;
- static int8_t s_pcLogFileName[FW_LOG_FILE_NAME_LEN];
- static int s_siLogFileLine = 0;
- log_print_callback_fp g_s_log_print_callback;
- int FW_GetFileLine(const int8_t* __file__, const int __line__)
- {
- s_siLogFileLine = __line__;
- if (s_pcLogCacheFileName != __file__)
- {
- int i = 0;
- int8_t * p = NULL;
- s_pcLogCacheFileName = (int8_t*)__file__;
- p = SYS_Strstr(__file__, (int8_t*)".c");
- while (p != __file__)
- {
- if (*p == '\\' || *p == '/')
- {
- p ++;
- break;
- }
- p --;
- }
- while (*p != '\0')
- {
- if (i < FW_LOG_FILE_NAME_LEN)
- {
- s_pcLogFileName[i++] = *p++;
- }
- else
- {
- s_pcLogFileName[0] = 0;
- i = 0;
- break;
- }
- }
- s_pcLogFileName[i] = 0;
- }
- return true;
- }
- static void FW_Log(int level, const char* fmt, va_list ap)
- {
- int8_t level_text[10] = {0};
- memset(s_cLogBuf, 0, FW_LOG_DATA_LEN);
- switch(level)
- {
- case FW_DEBUG_LEVEL:
- SYS_Strcpy(level_text, (int8_t*)"D");
- break;
- case FW_INFO_LEVEL:
- SYS_Strcpy(level_text, (int8_t*)"I");
- break;
- case FW_WARN_LEVEL:
- SYS_Strcpy(level_text, (int8_t*)"W");
- break;
- case FW_ERROR_LEVEL:
- SYS_Strcpy(level_text, (int8_t*)"E");
- break;
- default:
- SYS_Strcpy(level_text, (int8_t*)"F");
- break;
- }
- HAL_Sprintf(s_cLogBuf, (const char* )"[%s][%s][%d]", level_text, s_pcLogFileName, s_siLogFileLine);
- HAL_Vsnprintf(s_cLogBuf + strlen(s_cLogBuf), MAX_BUF + 256, fmt, ap);
- strcat(s_cLogBuf, (const char*)"\r\n");
- g_s_log_print_callback((uint8_t* )s_cLogBuf, strlen(s_cLogBuf));
- }
- void _FW_LogDebug(const char* fmt, ...)
- {
- va_list ap;
- if ((s_ucLogLevel >= FW_DEBUG_LEVEL) && s_ucLogOut)
- {
- va_start(ap, fmt);
- FW_Log(FW_DEBUG_LEVEL, fmt, ap);
- va_end(ap);
- }
- }
- void _FW_LogInfo(const char* fmt, ...)
- {
- va_list ap;
- if ((s_ucLogLevel >= FW_INFO_LEVEL) && s_ucLogOut)
- {
- va_start(ap, fmt);
- FW_Log(FW_INFO_LEVEL, fmt, ap);
- va_end(ap);
- }
- }
- void _FW_LogWarn(const char* fmt, ...)
- {
- va_list ap;
- if ((s_ucLogLevel >= FW_WARN_LEVEL) && s_ucLogOut)
- {
- va_start(ap, fmt);
- FW_Log(FW_WARN_LEVEL, fmt, ap);
- va_end(ap);
- }
- }
- void _FW_LogError(const char* fmt, ...)
- {
- va_list ap;
- if ((s_ucLogLevel >= FW_ERROR_LEVEL) && s_ucLogOut)
- {
- va_start(ap, fmt);
- FW_Log(FW_ERROR_LEVEL, fmt, ap);
- va_end(ap);
- }
- }
- void _FW_LogFatal(const char* fmt, ...)
- {
- va_list ap;
- if ((s_ucLogLevel >= FW_FATAL_LEVEL) && s_ucLogOut)
- {
- va_start(ap, fmt);
- FW_Log(FW_FATAL_LEVEL, fmt, ap);
- va_end(ap);
- }
- }
- void Sys_LogPrintCallbackRegister(log_print_callback_fp fp)
- {
- if(NULL != fp)
- {
- g_s_log_print_callback = fp;
- }
- }
|