aboutsummaryrefslogtreecommitdiff
path: root/nuttx/include/debug.h
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/include/debug.h')
-rw-r--r--nuttx/include/debug.h632
1 files changed, 632 insertions, 0 deletions
diff --git a/nuttx/include/debug.h b/nuttx/include/debug.h
new file mode 100644
index 000000000..1f8c7d7ca
--- /dev/null
+++ b/nuttx/include/debug.h
@@ -0,0 +1,632 @@
+/****************************************************************************
+ * include/debug.h
+ *
+ * Copyright (C) 2007-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __INCLUDE_DEBUG_H
+#define __INCLUDE_DEBUG_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/compiler.h>
+
+#include <stdint.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Debug macros to runtime filter the debug messages sent to the console. In
+ * general, there are four forms of the debug macros:
+ *
+ * [a-z]dbg() -- Outputs messages to the console similar to printf() except
+ * that the output is not buffered. The first character indicates the
+ * system system (e.g., n=network, f=filesystm, etc.). If the first
+ * character is missing (i.e., dbg()), then it is common. The common
+ * dbg() macro is enabled by CONFIG_DEBUG. Subystem debug requires an
+ * additional configuration setting to enable it (e.g., CONFIG_DEBUG_NET
+ * for the network, CONFIG_DEBUG_FS for the file syste, etc).
+ *
+ * In general, error messages and output of importance use [a-z]dbg().
+ * [a-z]dbg() is implementation dependent but usually uses file descriptors.
+ * (that is a problem only because the interrupt task may have re-
+ * directed stdout). Therefore [a-z]dbg() should not be used in interrupt
+ * handlers.
+ *
+ * [a-z]vdbg() -- Identifcal to [a-z]dbg() except that it also requires that
+ * CONFIG_DEBUG_VERBOSE be defined. This is intended for general debug
+ * output that you would normally want to suppress.
+ *
+ * [a-z]lldbg() -- Identical to [a-z]dbg() except this is uses special
+ * interfaces provided by architecture-specific logic to talk directly
+ * to the underlying console hardware. If the architecture provides such
+ * logic, it should define CONFIG_ARCH_LOWPUTC.
+ *
+ * [a-z]lldbg() should not be used in normal code because the implementation
+ * probably disables interrupts and does things that are not consistent with
+ * good real-time performance. However, [a-z]lldbg() is particularly useful
+ * in low-level code where it is inappropriate to use file descriptors. For
+ * example, only [a-z]lldbg() should be used in interrupt handlers.
+ *
+ * [a-z]llvdbg() -- Identifcal to [a-z]lldbg() except that it also requires that
+ * CONFIG_DEBUG_VERBOSE be defined. This is intended for general debug
+ * output that you would normally want to suppress.
+ */
+
+#ifdef CONFIG_HAVE_FUNCTIONNAME
+# define EXTRA_FMT "%s: "
+# define EXTRA_ARG ,__FUNCTION__
+#else
+# define EXTRA_FMT
+# define EXTRA_ARG
+#endif
+
+/* Debug macros will differ depending upon if the toolchain supports
+ * macros with a variable number of arguments or not.
+ */
+
+#ifdef CONFIG_CPP_HAVE_VARARGS
+
+/* Variable argument macros supported */
+
+#ifdef CONFIG_DEBUG
+# define dbg(format, arg...) \
+ lib_rawprintf(EXTRA_FMT format EXTRA_ARG, ##arg)
+
+# ifdef CONFIG_ARCH_LOWPUTC
+# define lldbg(format, arg...) \
+ lib_lowprintf(EXTRA_FMT format EXTRA_ARG, ##arg)
+# else
+# define lldbg(x...)
+# endif
+
+# ifdef CONFIG_DEBUG_VERBOSE
+# define vdbg(format, arg...) \
+ lib_rawprintf(EXTRA_FMT format EXTRA_ARG, ##arg)
+
+# ifdef CONFIG_ARCH_LOWPUTC
+# define llvdbg(format, arg...) \
+ lib_lowprintf(EXTRA_FMT format EXTRA_ARG, ##arg)
+# else
+# define llvdbg(x...)
+# endif
+
+# else
+# define vdbg(x...)
+# define llvdbg(x...)
+# endif
+
+#else /* CONFIG_DEBUG */
+
+# define dbg(x...)
+# define lldbg(x...)
+# define vdbg(x...)
+# define llvdbg(x...)
+
+#endif /* CONFIG_DEBUG */
+
+/* Subsystem specific debug */
+
+#ifdef CONFIG_DEBUG_MM
+# define mdbg(format, arg...) dbg(format, ##arg)
+# define mlldbg(format, arg...) lldbg(format, ##arg)
+# define mvdbg(format, arg...) vdbg(format, ##arg)
+# define mllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define mdbg(x...)
+# define mlldbg(x...)
+# define mvdbg(x...)
+# define mllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_SCHED
+# define sdbg(format, arg...) dbg(format, ##arg)
+# define slldbg(format, arg...) lldbg(format, ##arg)
+# define svdbg(format, arg...) vdbg(format, ##arg)
+# define sllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define sdbg(x...)
+# define slldbg(x...)
+# define svdbg(x...)
+# define sllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_PAGING
+# define pgdbg(format, arg...) dbg(format, ##arg)
+# define pglldbg(format, arg...) lldbg(format, ##arg)
+# define pgvdbg(format, arg...) vdbg(format, ##arg)
+# define pgllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define pgdbg(x...)
+# define pglldbg(x...)
+# define pgvdbg(x...)
+# define pgllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_DMA
+# define dmadbg(format, arg...) dbg(format, ##arg)
+# define dmalldbg(format, arg...) lldbg(format, ##arg)
+# define dmavdbg(format, arg...) vdbg(format, ##arg)
+# define dmallvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define dmadbg(x...)
+# define dmalldbg(x...)
+# define dmavdbg(x...)
+# define dmallvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_NET
+# define ndbg(format, arg...) dbg(format, ##arg)
+# define nlldbg(format, arg...) lldbg(format, ##arg)
+# define nvdbg(format, arg...) vdbg(format, ##arg)
+# define nllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define ndbg(x...)
+# define nlldbg(x...)
+# define nvdbg(x...)
+# define nllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_USB
+# define udbg(format, arg...) dbg(format, ##arg)
+# define ulldbg(format, arg...) lldbg(format, ##arg)
+# define uvdbg(format, arg...) vdbg(format, ##arg)
+# define ullvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define udbg(x...)
+# define ulldbg(x...)
+# define uvdbg(x...)
+# define ullvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_FS
+# define fdbg(format, arg...) dbg(format, ##arg)
+# define flldbg(format, arg...) lldbg(format, ##arg)
+# define fvdbg(format, arg...) vdbg(format, ##arg)
+# define fllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define fdbg(x...)
+# define flldbg(x...)
+# define fvdbg(x...)
+# define fllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_INPUT
+# define idbg(format, arg...) dbg(format, ##arg)
+# define illdbg(format, arg...) lldbg(format, ##arg)
+# define ivdbg(format, arg...) vdbg(format, ##arg)
+# define illvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define idbg(x...)
+# define illdbg(x...)
+# define ivdbg(x...)
+# define illvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_ANALOG
+# define adbg(format, arg...) dbg(format, ##arg)
+# define alldbg(format, arg...) lldbg(format, ##arg)
+# define avdbg(format, arg...) vdbg(format, ##arg)
+# define allvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define adbg(x...)
+# define alldbg(x...)
+# define avdbg(x...)
+# define allvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_GRAPHICS
+# define gdbg(format, arg...) dbg(format, ##arg)
+# define glldbg(format, arg...) lldbg(format, ##arg)
+# define gvdbg(format, arg...) vdbg(format, ##arg)
+# define gllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define gdbg(x...)
+# define glldbg(x...)
+# define gvdbg(x...)
+# define gllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_BINFMT
+# define bdbg(format, arg...) dbg(format, ##arg)
+# define blldbg(format, arg...) lldbg(format, ##arg)
+# define bvdbg(format, arg...) vdbg(format, ##arg)
+# define bllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define bdbg(x...)
+# define blldbg(x...)
+# define bvdbg(x...)
+# define bllvdbg(x...)
+#endif
+
+#ifdef CONFIG_DEBUG_LIB
+# define ldbg(format, arg...) dbg(format, ##arg)
+# define llldbg(format, arg...) lldbg(format, ##arg)
+# define lvdbg(format, arg...) vdbg(format, ##arg)
+# define lllvdbg(format, arg...) llvdbg(format, ##arg)
+#else
+# define ldbg(x...)
+# define llldbg(x...)
+# define lvdbg(x...)
+# define lllvdbg(x...)
+#endif
+
+#else /* CONFIG_CPP_HAVE_VARARGS */
+
+/* Variable argument macros NOT supported */
+
+#ifdef CONFIG_DEBUG
+# ifndef CONFIG_ARCH_LOWPUTC
+# define lldbg (void)
+# endif
+# ifndef CONFIG_DEBUG_VERBOSE
+# define vdbg (void)
+# define llvdbg (void)
+# else
+# ifndef CONFIG_ARCH_LOWPUTC
+# define llvdbg (void)
+# endif
+# endif
+#else
+# define dbg (void)
+# define lldbg (void)
+# define vdbg (void)
+# define llvdbg (void)
+#endif
+
+/* Subsystem specific debug */
+
+#ifdef CONFIG_DEBUG_MM
+# define mdbg dbg
+# define mlldbg lldbg
+# define mvdbg vdbg
+# define mllvdbg llvdbg
+#else
+# define mdbg (void)
+# define mlldbg (void)
+# define mvdbg (void)
+# define mllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_SCHED
+# define sdbg dbg
+# define slldbg lldbg
+# define svdbg vdbg
+# define sllvdbg llvdbg
+#else
+# define sdbg (void)
+# define slldbg (void)
+# define svdbg (void)
+# define sllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_PAGING
+# define pgdbg dbg
+# define pglldbg lldbg
+# define pgvdbg vdbg
+# define pgllvdbg llvdbg
+#else
+# define pgdbg (void)
+# define pglldbg (void)
+# define pgvdbg (void)
+# define pgllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_DMA
+# define dmadbg dbg
+# define dmalldbg lldbg
+# define dmavdbg vdbg
+# define dmallvdbg llvdbg
+#else
+# define dmadbg (void)
+# define dmalldbg (void)
+# define dmavdbg (void)
+# define dmallvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_NET
+# define ndbg dbg
+# define nlldbg lldbg
+# define nvdbg vdbg
+# define nllvdbg llvdbg
+#else
+# define ndbg (void)
+# define nlldbg (void)
+# define nvdbg (void)
+# define nllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_USB
+# define udbg dbg
+# define ulldbg lldbg
+# define uvdbg vdbg
+# define ullvdbg llvdbg
+#else
+# define udbg (void)
+# define ulldbg (void)
+# define uvdbg (void)
+# define ullvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_FS
+# define fdbg dbg
+# define flldbg lldbg
+# define fvdbg vdbg
+# define fllvdbg llvdbg
+#else
+# define fdbg (void)
+# define flldbg (void)
+# define fvdbg (void)
+# define fllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_INPUT
+# define idbg dbg
+# define illdbg lldbg
+# define ivdbg vdbg
+# define illvdbg llvdbg
+#else
+# define idbg (void)
+# define illdbg (void)
+# define ivdbg (void)
+# define illvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_ANALOG
+# define adbg dbg
+# define alldbg lldbg
+# define avdbg vdbg
+# define allvdbg llvdbg
+#else
+# define adbg (void)
+# define alldbg (void)
+# define avdbg (void)
+# define allvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_GRAPHICS
+# define gdbg dbg
+# define glldbg lldbg
+# define gvdbg vdbg
+# define gllvdbg llvdbg
+#else
+# define gdbg (void)
+# define glldbg (void)
+# define gvdbg (void)
+# define gllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_BINFMT
+# define bdbg dbg
+# define blldbg lldbg
+# define bvdbg vdbg
+# define bllvdbg llvdbg
+#else
+# define bdbg (void)
+# define blldbg (void)
+# define bvdbg (void)
+# define bllvdbg (void)
+#endif
+
+#ifdef CONFIG_DEBUG_LIB
+# define ldbg dbg
+# define llldbg lldbg
+# define lvdbg vdbg
+# define lllvdbg llvdbg
+#else
+# define ldbg (void)
+# define llldbg (void)
+# define lvdbg (void)
+# define lllvdbg (void)
+#endif
+
+#endif /* CONFIG_CPP_HAVE_VARARGS */
+
+/* Buffer dumping macros do not depend on varargs */
+
+#ifdef CONFIG_DEBUG
+# define dbgdumpbuffer(m,b,n) lib_dumpbuffer(m,b,n)
+# ifdef CONFIG_DEBUG_VERBOSE
+# define vdbgdumpbuffer(m,b,n) lib_dumpbuffer(m,b,n)
+# else
+# define vdbgdumpbuffer(m,b,n)
+# endif
+#else
+# define dbgdumpbuffer(m,b,n)
+# define vdbgdumpbuffer(m,b,n)
+# endif
+
+/* Subsystem specific debug */
+
+#ifdef CONFIG_DEBUG_MM
+# define mdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define mvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define mdbgdumpbuffer(m,b,n)
+# define mvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_SCHED
+# define sdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define svdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define sdbgdumpbuffer(m,b,n)
+# define svdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_PAGING
+# define pgdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define pgvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define pgdbgdumpbuffer(m,b,n)
+# define pgvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_DMA
+# define dmadbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define dmavdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define dmadbgdumpbuffer(m,b,n)
+# define dmavdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_NET
+# define ndbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define nvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define ndbgdumpbuffer(m,b,n)
+# define nvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_USB
+# define udbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define uvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define udbgdumpbuffer(m,b,n)
+# define uvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_FS
+# define fdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define fvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define fdbgdumpbuffer(m,b,n)
+# define fvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_INPUT
+# define idbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define ivdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define idbgdumpbuffer(m,b,n)
+# define ivdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_GRAPHICS
+# define gdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define gvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define gdbgdumpbuffer(m,b,n)
+# define gvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_BINFMT
+# define bdbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define bvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define bdbgdumpbuffer(m,b,n)
+# define bvdbgdumpbuffer(m,b,n)
+#endif
+
+#ifdef CONFIG_DEBUG_LIB
+# define ldbgdumpbuffer(m,b,n) dbgdumpbuffer(m,b,n)
+# define lvdbgdumpbuffer(m,b,n) vdbgdumpbuffer(m,b,n)
+#else
+# define ldbgdumpbuffer(m,b,n)
+# define lvdbgdumpbuffer(m,b,n)
+#endif
+
+/****************************************************************************
+ * Public Type Declarations
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/* These low-level debug APIs are provided by the NuttX library. If the
+ * cross-compiler's pre-processor supports a variable number of macro
+ * arguments, then the macros below will map all debug statements to one
+ * or the other of the following.
+ */
+
+EXTERN int lib_rawprintf(FAR const char *format, ...);
+
+#ifdef CONFIG_ARCH_LOWPUTC
+EXTERN int lib_lowprintf(FAR const char *format, ...);
+#endif
+
+/* Dump a buffer of data */
+
+EXTERN void lib_dumpbuffer(FAR const char *msg, FAR const uint8_t *buffer,
+ unsigned int buflen);
+
+/* Enable or disable debug output */
+
+#ifdef CONFIG_DEBUG_ENABLE
+EXTERN void dbg_enable(bool enable);
+#endif
+
+/* If the cross-compiler's pre-processor does not support variable length
+ * arguments, then these additional APIs will be built.
+ */
+
+#ifndef CONFIG_CPP_HAVE_VARARGS
+#ifdef CONFIG_DEBUG
+EXTERN int dbg(const char *format, ...);
+
+# ifdef CONFIG_ARCH_LOWPUTC
+EXTERN int lldbg(const char *format, ...);
+# endif
+
+# ifdef CONFIG_DEBUG_VERBOSE
+EXTERN int vdbg(const char *format, ...);
+
+# ifdef CONFIG_ARCH_LOWPUTC
+EXTERN int llvdbg(const char *format, ...);
+# endif
+#endif
+#endif /* CONFIG_DEBUG */
+#endif /* CONFIG_CPP_HAVE_VARARGS */
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __INCLUDE_DEBUG_H */