diff --git a/osal/inc/mpp_log.h b/osal/inc/mpp_log.h index 011e3b89..06bf1bd3 100644 --- a/osal/inc/mpp_log.h +++ b/osal/inc/mpp_log.h @@ -27,11 +27,19 @@ * mpp_dbg is for all optional message. it can be controlled by debug and flag. */ -#define mpp_log(fmt, ...) _mpp_log(MODULE_TAG, fmt, ## __VA_ARGS__) -#define mpp_err(fmt, ...) _mpp_err(MODULE_TAG, fmt, ## __VA_ARGS__) +#define mpp_log(fmt, ...) _mpp_log(MODULE_TAG, fmt, NULL, ## __VA_ARGS__) +#define mpp_err(fmt, ...) _mpp_err(MODULE_TAG, fmt, NULL, ## __VA_ARGS__) #define _mpp_dbg(debug, flag, fmt, ...) \ - __mpp_dbg(debug, flag, MODULE_TAG, fmt, ## __VA_ARGS__) + __mpp_dbg(debug, flag, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) + +/* + * _f function will add function name to the log + */ +#define mpp_log_f(fmt, ...) _mpp_log(MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) +#define mpp_err_f(fmt, ...) _mpp_err(MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) +#define _mpp_dbg_f(debug, flag, fmt, ...) \ + __mpp_dbg(debug, flag, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) /* * mpp_dbg usage: @@ -83,9 +91,9 @@ extern "C" { void mpp_log_set_flag(RK_U32 flag); RK_U32 mpp_log_get_flag(); -void _mpp_log(const char *tag, const char *fmt, ...); -void _mpp_err(const char *tag, const char *fmt, ...); -void __mpp_dbg(RK_U32 debug, RK_U32 flag, const char *tag, const char *fmt, ...); +void _mpp_log(const char *tag, const char *fmt, const char *func, ...); +void _mpp_err(const char *tag, const char *fmt, const char *func, ...); +void __mpp_dbg(RK_U32 debug, RK_U32 flag, const char *tag, const char *fmt, const char *func, ...); #ifdef __cplusplus } diff --git a/osal/mpp_log.cpp b/osal/mpp_log.cpp index 930e0bc6..1221c1da 100644 --- a/osal/mpp_log.cpp +++ b/osal/mpp_log.cpp @@ -41,52 +41,65 @@ static RK_U32 mpp_log_flag = 0; static const char *msg_log_warning = "log message is long\n"; static const char *msg_log_nothing = "\n"; -void __mpp_log(mpp_log_callback func, const char *tag, const char *fmt, va_list args) +void __mpp_log(mpp_log_callback func, const char *tag, const char *fmt, const char *fname, va_list args) { + char msg[MPP_LOG_MAX_LEN + 1]; + char *tmp = msg; const char *buf = fmt; - size_t len = strnlen(fmt, MPP_LOG_MAX_LEN); + size_t len_fmt = strnlen(fmt, MPP_LOG_MAX_LEN); + size_t len_name = (fname) ? (strnlen(fname, MPP_LOG_MAX_LEN)) : (0); + size_t buf_left = MPP_LOG_MAX_LEN; + size_t len_all = len_fmt + len_name; if (NULL == tag) tag = MODULE_TAG; - if (len == 0) { + if (len_name) { + buf = msg; + buf_left -= snprintf(msg, buf_left, "%s ", fname); + tmp += len_name + 1; + } + + if (len_all == 0) { buf = msg_log_nothing; - } else if (len == MPP_LOG_MAX_LEN) { - buf = msg_log_warning; - } else if (fmt[len - 1] != '\n') { - char msg[MPP_LOG_MAX_LEN + 1]; - snprintf(msg, sizeof(msg), "%s", fmt); - msg[len] = '\n'; - msg[len + 1] = '\0'; + } else if (len_all >= MPP_LOG_MAX_LEN) { + buf_left -= snprintf(tmp, buf_left, "%s", msg_log_warning); + buf = msg; + } else { + snprintf(tmp, buf_left, "%s", fmt); + if (fmt[len_fmt - 1] != '\n') { + tmp[len_fmt] = '\n'; + tmp[len_fmt + 1] = '\0'; + } buf = msg; } func(tag, buf, args); } -void _mpp_log(const char *tag, const char *fmt, ...) +void _mpp_log(const char *tag, const char *fmt, const char *func, ...) { va_list args; va_start(args, fmt); - __mpp_log(os_log, tag, fmt, args); + __mpp_log(os_log, tag, fmt, func, args); va_end(args); } -void __mpp_dbg(RK_U32 debug, RK_U32 flag, const char *tag, const char *fmt, ...) +void __mpp_dbg(RK_U32 debug, RK_U32 flag, const char *tag, const char *fmt, const char *func, ...) { if (debug & flag) { va_list args; va_start(args, fmt); - __mpp_log(os_log, tag, fmt, args); + __mpp_log(os_log, tag, fmt, func, args); va_end(args); } } -void _mpp_err(const char *tag, const char *fmt, ...) +void _mpp_err(const char *tag, const char *fmt, const char *func, ...) { va_list args; va_start(args, fmt); - __mpp_log(os_err, tag, fmt, args); + __mpp_log(os_err, tag, fmt, func, args); va_end(args); } diff --git a/osal/test/mpp_log_test.c b/osal/test/mpp_log_test.c index 3d443dd2..7bf4f548 100644 --- a/osal/test/mpp_log_test.c +++ b/osal/test/mpp_log_test.c @@ -26,6 +26,8 @@ int main() mpp_err("mpp log test start\n"); + mpp_err_f("log_f test\n"); + mpp_log("mpp log flag_set: %08x\n", mpp_log_get_flag()); mpp_log("set flag_set to %08x\n", flag_set);