mcu_hi3321_watch/middleware/utils/dfx/log/log_oam_logger.c
2025-05-26 20:15:20 +08:00

329 lines
11 KiB
C

/*
* Copyright (c) @CompanyNameMagicTag 2018-2019. All rights reserved.
* Description: LOG OAM LOGGER MODULE
*/
#include "log_oam_logger.h"
#if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == NO)
#include <stdarg.h>
#include "log_common.h"
#if CORE == CORE_LOGGING
#include "log_uart.h"
#endif
#ifdef BTH_LOG_BUG_FIX
#define LOG_LEVEL_DEBUG_TO_ERROR 0x40
#endif
/* Module log level defination */
om_log_module_lev_t g_module_log_level[MODULEID_BUTT] = {
{ LOG_WIFIMODULE, LOG_LEVEL_INFO },
{ LOG_BTMODULE, LOG_LEVEL_INFO },
{ LOG_BTHMODULE, LOG_LEVEL_INFO },
{ LOG_NFCMODULE, LOG_LEVEL_INFO },
{ LOG_PFMODULE, LOG_LEVEL_INFO },
};
#ifdef CONFIG_DFX_SUPPORT_USERS_PRINT
static log_other_print_t g_other_print_func = NULL;
void log_other_print_register(log_other_print_t users_print_func)
{
if (users_print_func == NULL) {
return;
}
g_other_print_func = users_print_func;
}
void log_other_print0(uint32_t log_header, uint32_t log_level, const char *fmt)
{
if (g_other_print_func == NULL) {
return;
}
g_other_print_func(log_header, log_level, fmt, 0);
}
void log_other_print1(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0)
{
if (g_other_print_func == NULL) {
return;
}
g_other_print_func(log_header, log_level, fmt, 1, p0);
}
void log_other_print2(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0, uint32_t p1)
{
if (g_other_print_func == NULL) {
return;
}
g_other_print_func(log_header, log_level, fmt, LOG_OAM_INDEX_2, p0, p1);
}
void log_other_print3(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0, uint32_t p1, uint32_t p2)
{
if (g_other_print_func == NULL) {
return;
}
g_other_print_func(log_header, log_level, fmt, LOG_OAM_INDEX_3, p0, p1, p2);
}
void log_other_print4(uint32_t log_header, uint32_t log_level, const char *fmt,
uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3)
{
if (g_other_print_func == NULL) {
return;
}
g_other_print_func(log_header, log_level, fmt, LOG_OAM_INDEX_4, p0, p1, p2, p3);
}
#endif
void log_event_print0(uint32_t log_header, uint32_t presspara)
{
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_ZERO_ARG_SEND + OML_LOG_TAIL_LENTH];
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] =
(uint32_t)log_lenth_and_sn_press(OML_LOG_ZERO_ARG_SEND, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
log_oam_entry[LOG_OAM_INDEX_3] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(OML_LOG_ZERO_ARG_SEND));
}
void log_event_print1(uint32_t log_header, uint32_t presspara, uint32_t para1)
{
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_ONE_ARG_SEND + OML_LOG_TAIL_LENTH];
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] =
(uint32_t)log_lenth_and_sn_press(OML_LOG_ONE_ARG_SEND, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
log_oam_entry[LOG_OAM_INDEX_3] = para1;
log_oam_entry[LOG_OAM_INDEX_4] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(OML_LOG_ONE_ARG_SEND));
}
void log_event_print2(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2)
{
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_TWO_ARG_SEND + OML_LOG_TAIL_LENTH];
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] =
(uint32_t)log_lenth_and_sn_press(OML_LOG_TWO_ARG_SEND, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
log_oam_entry[LOG_OAM_INDEX_3] = para1;
log_oam_entry[LOG_OAM_INDEX_4] = para2;
log_oam_entry[LOG_OAM_INDEX_5] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(OML_LOG_TWO_ARG_SEND));
}
void log_event_print3(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3)
{
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_THREE_ARG_SEND + OML_LOG_TAIL_LENTH];
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] =
(uint32_t)log_lenth_and_sn_press(OML_LOG_THREE_ARG_SEND, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
log_oam_entry[LOG_OAM_INDEX_3] = para1;
log_oam_entry[LOG_OAM_INDEX_4] = para2;
log_oam_entry[LOG_OAM_INDEX_5] = para3;
log_oam_entry[LOG_OAM_INDEX_6] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(OML_LOG_THREE_ARG_SEND));
}
void log_event_print4(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2,
uint32_t para3, uint32_t para4)
{
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_FOUR_ARG_SEND + OML_LOG_TAIL_LENTH];
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] =
(uint32_t)log_lenth_and_sn_press(OML_LOG_FOUR_ARG_SEND, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
log_oam_entry[LOG_OAM_INDEX_3] = para1;
log_oam_entry[LOG_OAM_INDEX_4] = para2;
log_oam_entry[LOG_OAM_INDEX_5] = para3;
log_oam_entry[LOG_OAM_INDEX_6] = para4;
log_oam_entry[LOG_OAM_INDEX_7] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(OML_LOG_FOUR_ARG_SEND));
}
void log_event_print_alterable_para_press(uint32_t log_header, uint32_t presspara, uint32_t paranum, ...)
{
uint8_t uc_para_num;
uint8_t uc_loop;
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_ALTER_PARA_MAX_NUM + OML_LOG_TAIL_LENTH];
va_list args;
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
#ifdef BTH_LOG_BUG_FIX
if (get_module_id(presspara) == LOG_BTHMODULE && getlog_level(presspara) == LOG_LEVEL_NONE) {
presspara |= LOG_LEVEL_DEBUG_TO_ERROR;
}
#endif
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
uc_para_num = (uint8_t)((paranum > OML_LOG_ALTER_PARA_MAX_NUM) ? (OML_LOG_ALTER_PARA_MAX_NUM) : paranum);
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] = (uint32_t)log_lenth_and_sn_press(uc_para_num, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
va_start(args, paranum);
for (uc_loop = 0; uc_loop < uc_para_num; uc_loop++) {
log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = (uint32_t)va_arg(args, uint32_t);
}
va_end(args);
log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = OM_FRAME_DELIMITER;
log_event((uint8_t *)log_oam_entry, oal_log_lenth(uc_para_num));
}
void log_event_wifi_print0(uint32_t presspara)
{
log_event_print0(log_head_press(OM_WIFI), presspara);
}
void log_event_wifi_print1(uint32_t presspara, uint32_t para1)
{
log_event_print1(log_head_press(OM_WIFI), presspara, para1);
}
void log_event_wifi_print2(uint32_t presspara, uint32_t para1, uint32_t para2)
{
log_event_print2(log_head_press(OM_WIFI), presspara, para1, para2);
}
void log_event_wifi_print3(uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3)
{
log_event_print3(log_head_press(OM_WIFI), presspara, para1, para2, para3);
}
void log_event_wifi_print4(uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3, uint32_t para4)
{
log_event_print4(log_head_press(OM_WIFI), presspara, para1, para2, para3, para4);
}
#if CORE == CORE_LOGGING
void log_event_print_alterable_para_press_by_write_uart_fifo(uint32_t log_header, uint32_t presspara,
uint32_t paranum, ...)
{
uint8_t uc_para_num;
uint8_t uc_loop;
uint32_t log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + OML_LOG_ALTER_PARA_MAX_NUM + OML_LOG_TAIL_LENTH];
va_list args;
// Module ID is unknown
if (get_module_id(presspara) >= MODULEID_BUTT) {
return;
}
if (getlog_level(presspara) > (uint8_t)log_get_local_log_level()) {
return;
}
uc_para_num = (uint8_t)((paranum > OML_LOG_ALTER_PARA_MAX_NUM) ? (OML_LOG_ALTER_PARA_MAX_NUM) : paranum);
log_oam_entry[LOG_OAM_INDEX_0] = log_header;
log_oam_entry[LOG_OAM_INDEX_1] = (uint32_t)log_lenth_and_sn_press(uc_para_num, (uint32_t)get_log_sn_number());
log_oam_entry[LOG_OAM_INDEX_2] = presspara;
va_start(args, paranum);
for (uc_loop = 0; uc_loop < uc_para_num; uc_loop++) {
log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = (uint32_t)va_arg(args, uint32_t);
}
va_end(args);
log_oam_entry[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = OM_FRAME_DELIMITER;
log_uart_send_buffer((uint8_t *)log_oam_entry, oal_log_lenth(uc_para_num));
}
#endif
#endif /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG */