/*
 * @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 str[256];
    if(CORRECT_ENABLE){
        return;
    }
    char *buffer;
    int i;
    va_list v1; 
    if(GW_LOG_LEVEL<level){
        return;
    }
    // char* str=(char*)malloc(MALLOC_BUFF_MAX_SIZE);
    // if(str==NULL){
    //     return;
    // }
    //memset(str,0x00,sizeof(str));

    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，没什么实际用处，主要是为程序健壮性  
    // if(str!=NULL){
    //     free(str);
    //     str=NULL;
    // }
	#endif
}

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