/*
 * @Description: 日志模块-svc层
 * @Author: yangsw
 * @Date: 2021-05-18 16:59:48
 * @LastEditTime: 2022-07-29 14:23:39
 * @LastEditors: 002389 yangsw@lierda.com
 * @Reference:
 */
#include "svc_log.h"
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include "../../com/svc/svc_com.h"

#if LOG_FUNC_ENABLE
static char str[100];
#endif

/**
 * @brief: 日志打印输出
 * @return {void}
 * @note: 只有打印等级高于设置的当前模块打印等级时才会打印
 * 不可打印超过数组str长度的数据，否则将会发生异常
 * @see: printf
 * @param {unsigned int} level 打印等级
 * @param {char} *fmt
 */
void Svc_Log_Printf(unsigned int level, char *fmt, ...)
{
#if LOG_FUNC_ENABLE
    char *buffer;
    int i;
    va_list v1;
    if (GW_LOG_LEVEL < level)
    {
        return;
    }
    switch (level & 0xFF)
    {
    case LOG_ERROR:
        i = 8;
        memcpy(str, "\r\nERROR ", i);
        buffer = str + i;
        break;
    case LOG_WARNING:
        i = 10;
        memcpy(str, "\r\nWARNING ", i);
        buffer = str + i;
        break;
    case LOG_INFO:
        i = 7;
        memcpy(str, "\r\nINFO ", i);
        buffer = str + i;
        break;
    case LOG_DEBUG:
        i = 8;
        memcpy(str, "\r\nDEBUG ", i);
        buffer = str + i;
        break;
    default:
        i = 0;
        buffer = str + i;
        break;
    }
    va_start(v1, fmt);
    vsprintf(buffer, fmt, v1); // 将参数fmt、ap指向的可变参数一起转换成格式化字符串，放string数组中，其作用同sprintf（），只是参数类型不同
    Bsp_Log_Send_Str((gw_u8 *)str);
    va_end(v1); // ap付值为0，没什么实际用处，主要是为程序健壮性
#endif
}

/**
 * @brief: 日志模块初始化
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
void Svc_Log_Init(void)
{
#if LOG_FUNC_ENABLE
    Bsp_Log_Tx_Init();
#endif
}
