summaryrefslogtreecommitdiff
path: root/components/utilities/logtrace/log_trace.h
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2014-07-19 06:46:39 +0800
committerBernard Xiong <[email protected]>2014-07-19 06:46:39 +0800
commit350b1080eafb565875f82bfe5da9173fa7f0f149 (patch)
treea044f04e1d200c2421a74e840ab6da143c431b55 /components/utilities/logtrace/log_trace.h
parent61712bbd13b7c820307f0570d49f1bc0fc6b857a (diff)
parent50e7ae7e875c28cdc65baf9c0ec7893a59211a23 (diff)
Merge pull request #303 from BernardXiong/stable-v1.2.xv1.2.2
Merge 2.0.0 modification to prepare v1.2.2 release.
Diffstat (limited to 'components/utilities/logtrace/log_trace.h')
-rw-r--r--components/utilities/logtrace/log_trace.h42
1 files changed, 39 insertions, 3 deletions
diff --git a/components/utilities/logtrace/log_trace.h b/components/utilities/logtrace/log_trace.h
index 77e1f08b6c..1e8cc4abae 100644
--- a/components/utilities/logtrace/log_trace.h
+++ b/components/utilities/logtrace/log_trace.h
@@ -1,7 +1,7 @@
/*
* File : log_trace.h
* This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2013, RT-Thread Development Team
+ * COPYRIGHT (C) 2013-2014, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -95,7 +95,7 @@ void log_trace_init(void);
*
* @return RT_EOK on success. -RT_EFULL if there is no space for registration.
*/
-rt_err_t log_trace_register_session(struct log_trace_session *session);
+rt_err_t log_trace_register_session(const struct log_trace_session *session);
/** find a session with name
*
@@ -130,7 +130,43 @@ void log_trace(const char *fmt, ...);
* "[systick][name]log messages". The name is the name of the session. It is
* faster than bare log_trace.
*/
-void log_session(struct log_trace_session *session, const char *fmt, ...);
+void log_session(const struct log_trace_session *session, const char *fmt, ...);
+
+extern void __logtrace_vfmtout(const struct log_trace_session *session,
+ const char *fmt,
+ va_list argptr);
+
+rt_inline void __logtrace_fmtout(const struct log_trace_session *session,
+ const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ __logtrace_vfmtout(session, fmt, args);
+ va_end(args);
+}
+
+/**
+ * log with numeric level
+ *
+ * The prototype of this function is:
+ *
+ * void log_session_lvl(struct log_trace_session *session,
+ * int lvl,
+ * const char *fmt, ...);
+ *
+ * If the @session is const and @level is greater than @session->lvl, the whole
+ * function will be optimized out. This is suitable for performance critical
+ * places where in most cases, the log is turned off by level.
+ */
+#define log_session_lvl(session, level, fmt, ...) \
+ do { \
+ if ((level) > (session)->lvl) \
+ { \
+ break; \
+ } \
+ __logtrace_fmtout(session, fmt, ##__VA_ARGS__); \
+ } while (0)
/* here comes the global part. All sessions share the some output backend. */