/* * 模块名称:主机侧单测桩 - dbg_log.h(sb_link 模块专用) * 模块功能:把 DBG_INFO / DBG_ERROR 换成"写进一个可读的行缓冲",于是用例能断言 * 「打了几行、第一行说了什么」,而不是只能靠人看台架串口。 * ⚠ 仅供 test/host/sb_link/ 使用,不参与 MCU 构建。 * 真实 dbg_log.h 会拉进 console_log.h / sys_clock.h(App 层)并带时间戳, * 本模块的用例只关心"有没有上报",故整份替换掉,不搬那条链。 * 创建日期:2026-10-29 */ #ifndef DBG_LOG_H #define DBG_LOG_H #include #include #include #include #define SB_LOG_MAX (32U) #define SB_LOG_LINE_MAX (192U) static char sb_log[SB_LOG_MAX][SB_LOG_LINE_MAX]; static uint32_t sb_log_n; static void sb_log_add(const char *p_lvl, const char *p_fmt, ...) { va_list ap; size_t used; if (sb_log_n >= SB_LOG_MAX) { return; } (void)snprintf(sb_log[sb_log_n], SB_LOG_LINE_MAX, "%s ", p_lvl); used = strlen(sb_log[sb_log_n]); va_start(ap, p_fmt); (void)vsnprintf(sb_log[sb_log_n] + used, (size_t)(SB_LOG_LINE_MAX - used), p_fmt, ap); va_end(ap); sb_log_n++; } static void sb_log_reset(void) { sb_log_n = 0U; sb_log[0][0] = '\0'; } /* 第 idx 行是否包含 needle(idx 越界返回 0) */ static int sb_log_has(uint32_t idx, const char *p_needle) { if ((idx >= sb_log_n) || (idx >= SB_LOG_MAX)) { return 0; } return (strstr(sb_log[idx], p_needle) != NULL) ? 1 : 0; } #define DBG_INFO(...) sb_log_add("INFO", __VA_ARGS__) #define DBG_ERROR(...) sb_log_add("ERR", __VA_ARGS__) #endif /* DBG_LOG_H */