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

105 lines
2.8 KiB
C

/*
* Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.
* Description: LOG TRIGGER MODULE
* Author: @CompanyNameTag
* Create:
*/
#include "log_trigger.h"
#if ((CORE == CORE_LOGGING) && defined(BUILD_APPLICATION_STANDARD)) || (CORE_NUMS == 1)
#ifndef USE_CMSIS_OS
#error "log reader not implemented for non-os version"
#endif
static log_trigger_callback_t g_log_trigger_callback = NULL;
void log_trigger(void)
{
if (g_log_trigger_callback != NULL) {
g_log_trigger_callback();
}
}
void register_log_trigger(log_trigger_callback_t callback)
{
if (callback != NULL) {
g_log_trigger_callback = callback;
}
}
#else // (CORE != CORE_LOGGING) case
#include "ipc.h"
#ifdef IPC_NEW
#include "ipc_porting.h"
#endif
// Have a definition for the right cores_t enum in CORES_CORE_LOGGING
#if CORE_LOGGING == BT
#define CORES_CORE_LOGGING CORES_BT_CORE
#elif CORE_LOGGING == PROTOCOL
#define CORES_CORE_LOGGING CORES_PROTOCOL_CORE
#elif CORE_LOGGING == APPS
#define CORES_CORE_LOGGING CORES_APPS_CORE
#elif CORE_LOGGING == GNSS
#define CORES_CORE_LOGGING CORES_GNSS_CORE
#endif
#ifdef IPC_NEW
void log_trigger(void)
{
ipc_msg_info_t head;
head.dst_core = CORES_CORE_LOGGING;
head.priority = IPC_PRIORITY_LOWEST;
head.msg_id = IPC_MSG_LOG_INFO;
head.buf_addr = NULL;
head.buf_len = 0;
head.channel = 0;
(void)uapi_ipc_send_msg_async(&head);
}
#else
void log_trigger(void)
{
#if (BTH_WITH_SMART_WEAR == NO) && (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == YES)
if (ipc_check_status(CORES_CORE_LOGGING) == IPC_STATUS_OK) {
ipc_interrupt_core(CORES_CORE_LOGGING);
}
#else
(void)ipc_send_message(CORES_CORE_LOGGING,
IPC_ACTION_LOG_INFO,
NULL,
0,
IPC_PRIORITY_LOWEST, false);
#endif
}
#endif
#endif // (CORE == CORE_LOGGING)
#if (BTH_WITH_SMART_WEAR == NO && (CORE == BT))
#include "log_buffer.h"
#include "ipc.h"
void massdata_trigger(void *pay_i, uint8_t core, uint8_t type)
{
#define MASS_POINT_SIZE sizeof(system_event_s_t)
ipc_payload_mass_data_type ipc_pay;
system_event_s_t *pay = (system_event_s_t *)(pay_i);
ipc_pay.core = core;
ipc_pay.type = type;
ipc_pay.event_id = pay->event_id;
ipc_pay.time_stamp = pay->time_stamp;
ipc_pay.event_info = pay->event_info;
ipc_pay.subevent_info = pay->sub_event_info;
ipc_pay.chr_up_type = pay->chr_up_type;
ipc_pay.psn = pay->psn;
ipc_pay.role = pay->role;
(void)ipc_send_message(CORES_APPS_CORE,
IPC_ACTION_MASS_DATA_INFORM,
(ipc_payload *)((void *)&ipc_pay),
sizeof(ipc_payload_mass_data_type),
IPC_PRIORITY_LOWEST, false);
#undef MASS_POINT_SIZE
}
#endif