Files
fml13v01-buildroot/package/starfive/v4l2_test/stf_log.c
T
mason.huo cf9c62a4f1 package: Move v4l2test to starfive package
1.Create starfive package, and move v4l2test into it.
2.Sync the latest v4l2test package from JH7100.

Signed-off-by: mason.huo <mason.huo@starfivetech.com>

(cherry-pick commit 87583e4004ba7ceefa317d939ea8004f38eb9570 from jh7110-mm-devel branch)
2022-06-10 10:49:06 +08:00

105 lines
2.6 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2021 StarFive Technology Co., Ltd.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "stf_log.h"
#define ANSI_COLOR_ERR "\x1b[31m" // RED
#define ANSI_COLOR_TRACE "\x1b[32m" // GREEN
#define ANSI_COLOR_WARN "\x1b[33m" // YELLOW
#define ANSI_COLOR_BLUE "\x1b[34m" // BLUE
#define ANSI_COLOR_INFO ""
// For future
#define ANSI_COLOR_MAGENTA "\x1b[35m" // MAGENTA
#define ANSI_COLOR_CYAN "\x1b[36m" // CYAN
#define ANSI_COLOR_RESET "\x1b[0m" // RESET
#define MAX_PRINT_LENGTH 512
#define STF_LOG_FILE_PATH "./STF_ErrorLog.txt"
#define STF_LOG_ENV_VARIABLE "V4L2_DEBUG"
// static unsigned int log_decor = LOG_HAS_TIME | LOG_HAS_FILE | LOG_HAS_COLOR;
static unsigned int log_decor = LOG_HAS_TIME | LOG_HAS_COLOR;
static FILE *fpLog = NULL;
static int max_log_level = STF_LEVEL_ERR;
int init_log()
{
char *strDebug_level = NULL;
int level;
if ((log_decor & LOG_HAS_FILE) && !fpLog) {
fpLog = fopen(STF_LOG_FILE_PATH, "w");
}
strDebug_level = getenv(STF_LOG_ENV_VARIABLE);
if (strDebug_level) {
level = atoi(strDebug_level);
if (level >=0) {
max_log_level = level;
}
}
return 0;
}
void deinit_log()
{
if (fpLog) {
fclose(fpLog);
fpLog = NULL;
}
}
void set_maxLogLevel(int level)
{
max_log_level = level;
}
int get_maxLogLevel()
{
return max_log_level;
}
void logmsg(int level, const char *format, ...)
{
va_list ptr;
char logBuf[MAX_PRINT_LENGTH] = {0};
char* prefix = "";
char* postfix= "";
if (level > max_log_level)
return;
if ((log_decor & LOG_HAS_COLOR)) {
postfix = ANSI_COLOR_RESET;
switch (level) {
case STF_LEVEL_ERR: prefix = ANSI_COLOR_ERR "[ERROR]"; break;
case STF_LEVEL_WARN: prefix = ANSI_COLOR_WARN"[WARN ]"; break;
case STF_LEVEL_INFO: prefix = ANSI_COLOR_INFO"[INFO ]"; break;
case STF_LEVEL_DEBUG: prefix = ANSI_COLOR_INFO"[DEBUG]"; break;
case STF_LEVEL_LOG: prefix = ANSI_COLOR_INFO"[LOG ]"; break;
case STF_LEVEL_TRACE: prefix = ANSI_COLOR_TRACE"[TRACE]"; break;
default: prefix = ""; break;
}
}
va_start(ptr, format);
vsnprintf(logBuf, MAX_PRINT_LENGTH, format, ptr);
va_end(ptr);
fputs(prefix, stderr);
fputs(logBuf, stderr);
fputs(postfix, stderr);
if ((log_decor & LOG_HAS_FILE) && fpLog) {
fwrite(logBuf, strlen(logBuf), 1,fpLog);
fflush(fpLog);
}
}