173 lines
4.8 KiB
C
173 lines
4.8 KiB
C
/******************************************************************
|
||
* @file log_interface.s.c
|
||
* @brief: 物理层log相关函数定义
|
||
* @author: guicheng.liu
|
||
* @Date 2021年3月9日
|
||
* COPYRIGHT NOTICE: (c) smartlogictech. All rights reserved.
|
||
* Change_date Owner Change_content
|
||
* 2021年3月9日 guicheng.liu create file
|
||
|
||
*****************************************************************/
|
||
|
||
/**************************include******************************/
|
||
#include <type_define.h>
|
||
#include "log_interface.h"
|
||
#include "common.h"
|
||
#include "msg_interface.h"
|
||
#include "osp_ape.h"
|
||
#include "drv_ape.h"
|
||
|
||
/**************************function******************************/
|
||
log_level_e g_log_level = INFO;
|
||
uint32_t g_log_NO = 0;
|
||
|
||
uint8_t *g_ape_log_pool = NULLPTR;
|
||
uint8_t *g_ape_log_buffer[64] = {NULLPTR};
|
||
uint32_t g_ape_log_buf_index = 0;
|
||
uint32_t g_ape_log_buf_min_addr;
|
||
uint32_t g_ape_log_buf_max_addr;
|
||
|
||
//自定义空间的log头定义
|
||
extern uint32_t g_ape_log_header[(LOG_HEADER_SIZE + 3)>>2];
|
||
//静态申请log空间
|
||
extern uint32_t g_ape_log_static_buf[LOG_DM_BUF_NUM * LOG_MAX_LEN_WORD];
|
||
/*!
|
||
* @brief: 静态开16K空间,作为log buffer使用
|
||
* @author: bo.liu
|
||
* @Date: 2021年3月12日
|
||
*/
|
||
void log_pool_init()
|
||
{
|
||
int32_t buf_index = 0;
|
||
|
||
g_ape_log_pool = (uint8_t *)g_ape_log_static_buf;//dmalloc_unit(LOG_DM_BUF_NUM*(256+16), DM2);
|
||
|
||
for(buf_index = 0; buf_index < LOG_DM_BUF_NUM; buf_index++)
|
||
{
|
||
g_ape_log_buffer[buf_index] = g_ape_log_pool + buf_index * LOG_MAX_LEN_BYTE;
|
||
}
|
||
g_ape_log_buf_min_addr = (uint32_t)g_ape_log_buffer[0] + LOG_TOTAL_HDR_SIZE;
|
||
g_ape_log_buf_max_addr = (uint32_t)g_ape_log_buffer[LOG_DM_BUF_NUM - 1] + LOG_TOTAL_HDR_SIZE;
|
||
}
|
||
|
||
|
||
void set_log_level(log_level_e level)
|
||
{
|
||
if ((CMD <= level) && (DEBUG >= level))
|
||
{
|
||
g_log_level = level;
|
||
}
|
||
else
|
||
{
|
||
//osp_printf("invalid value\n");
|
||
}
|
||
}
|
||
|
||
char *log_buf_alloc_static()
|
||
{
|
||
char *msg_ptr;
|
||
#ifndef IDE_TEST
|
||
smart_int_disable();
|
||
#endif
|
||
//OSP_INTER_LOCK(); 等DD提供接口后打开注释
|
||
g_ape_log_buf_index = (g_ape_log_buf_index + 1)&(LOG_DM_BUF_NUM - 1);
|
||
msg_ptr = (char *)(g_ape_log_buffer[g_ape_log_buf_index] + LOG_TOTAL_HDR_SIZE);//预留4+2个int for DD Header & PHY Header
|
||
#ifndef IDE_TEST
|
||
smart_int_enable();
|
||
#endif
|
||
return msg_ptr;
|
||
}
|
||
|
||
|
||
void log_output(uint8_t level, uint8_t taskId, uint16_t msg_type,
|
||
uint16_t sfn, uint16_t slot, uint16_t slot_offset,
|
||
uint8_t buf_type, uint16_t msg_len, char* msg_body_addr)
|
||
{
|
||
char* msg_hdr = (char*)g_ape_log_header;
|
||
log_msg_header_t *log_hdr = (log_msg_header_t *)(&msg_hdr[LOG_DD_HEADER_SIZE]);//预留平台头
|
||
char* msg_tmp[2] = {NULLPTR};
|
||
uint32_t msg_len_tmp[2] = {0};
|
||
|
||
if ((level > g_log_level) || (msg_len > LOG_MAX_CONTENT_SIZE))
|
||
{
|
||
return;
|
||
}
|
||
|
||
if(0 == buf_type)
|
||
{
|
||
if((g_ape_log_buf_min_addr > (uint32_t)msg_body_addr)
|
||
||(g_ape_log_buf_max_addr < (uint32_t)msg_body_addr))
|
||
{
|
||
return;
|
||
}
|
||
msg_hdr = (msg_body_addr - LOG_TOTAL_HDR_SIZE);
|
||
log_hdr = (log_msg_header_t *)(msg_body_addr - LOG_HEADER_SIZE);
|
||
}
|
||
#ifndef IDE_TEST
|
||
smart_int_disable();
|
||
#endif
|
||
log_hdr->sync_flag = 0x13C;
|
||
log_hdr->msg_level = level;
|
||
log_hdr->msg_type = msg_type & 0xFFF;
|
||
log_hdr->msg_len = msg_len;
|
||
log_hdr->sfn = sfn;
|
||
log_hdr->slot = slot;
|
||
log_hdr->slot_offset = slot_offset & 0x3FF;
|
||
log_hdr->msgNo = (g_log_NO++) & 0x7;
|
||
|
||
//buf_type=0:表示使用log模块申请的内存
|
||
//buf_type=1:表示log header使用log模块申请的内存,log body使用各个链路的DM内存
|
||
if (0 == buf_type)
|
||
{
|
||
osp_sendLog_print(level, (char*)log_hdr, LOG_HEADER_SIZE + msg_len, 0);
|
||
osp_phy_msg_send(msg_hdr, LOG_TOTAL_HDR_SIZE + msg_len);
|
||
}
|
||
else
|
||
{
|
||
msg_len_tmp[0] = LOG_TOTAL_HDR_SIZE;
|
||
msg_len_tmp[1] = msg_len;
|
||
msg_tmp[0] = (char*)msg_hdr;
|
||
msg_tmp[1] = (char*)msg_body_addr;
|
||
|
||
osp_sendLog_print(level, (char*)log_hdr, LOG_HEADER_SIZE + msg_len, 0);
|
||
osp_phy_multi_msgs_send(UCP4008_OSP_LOG, msg_tmp, msg_len_tmp, 2);
|
||
}
|
||
#ifndef IDE_TEST
|
||
smart_int_enable();
|
||
#endif
|
||
}
|
||
|
||
void log_sprintf(log_level_e level, const char *fmt, ...)
|
||
{
|
||
char *buf = NULLPTR;
|
||
char* msg = NULLPTR;
|
||
va_list args;
|
||
int str_len = 0;
|
||
|
||
if (level > g_log_level)
|
||
{
|
||
return;
|
||
}
|
||
|
||
buf = (char *)log_buf_alloc_static() - LOG_HEADER_SIZE;
|
||
msg = buf - LOG_DD_HEADER_SIZE;
|
||
|
||
va_start(args, fmt);
|
||
vsprintf(buf, fmt, args);
|
||
va_end(args);
|
||
str_len = osp_strlen(buf);
|
||
|
||
if (LOG_MAX_CONTENT_SIZE < str_len)
|
||
{
|
||
return;
|
||
}
|
||
#ifndef IDE_TEST
|
||
smart_int_disable();
|
||
#endif
|
||
osp_sendLog(level, (char*)buf, str_len, 0);
|
||
//osp_phy_msg_send(UCP4008_OSP_LOG, (char*)msg, str_len+LOG_DD_HEADER_SIZE);
|
||
#ifndef IDE_TEST
|
||
smart_int_enable();
|
||
#endif
|
||
}
|