1 /** 2 * @file 3 * Debug messages infrastructure 4 */ 5 6 /* 7 * Copyright (c) 2001-2004 Swedish Institute of Computer Science. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without modification, 11 * are permitted provided that the following conditions are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright notice, 14 * this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 3. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 30 * OF SUCH DAMAGE. 31 * 32 * This file is part of the lwIP TCP/IP stack. 33 * 34 * Author: Adam Dunkels <adam@sics.se> 35 * 36 */ 37 #ifndef LWIP_HDR_DEBUG_H 38 #define LWIP_HDR_DEBUG_H 39 40 #include "lwip/arch.h" 41 #include "lwip/opt.h" 42 43 /** 44 * @defgroup debugging_levels LWIP_DBG_MIN_LEVEL and LWIP_DBG_TYPES_ON values 45 * @ingroup lwip_opts_debugmsg 46 * @{ 47 */ 48 49 /** @name Debug level (LWIP_DBG_MIN_LEVEL) 50 * @{ 51 */ 52 /** Debug level: ALL messages*/ 53 #define LWIP_DBG_LEVEL_ALL 0x00 54 /** Debug level: Warnings. bad checksums, dropped packets, ... */ 55 #define LWIP_DBG_LEVEL_WARNING 0x01 56 /** Debug level: Serious. memory allocation failures, ... */ 57 #define LWIP_DBG_LEVEL_SERIOUS 0x02 58 /** Debug level: Severe */ 59 #define LWIP_DBG_LEVEL_SEVERE 0x03 60 /** 61 * @} 62 */ 63 64 #define LWIP_DBG_MASK_LEVEL 0x03 65 /* compatibility define only */ 66 #define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL 67 68 /** @name Enable/disable debug messages completely (LWIP_DBG_TYPES_ON) 69 * @{ 70 */ 71 /** flag for LWIP_DEBUGF to enable that debug message */ 72 #define LWIP_DBG_ON 0x80U 73 /** flag for LWIP_DEBUGF to disable that debug message */ 74 #define LWIP_DBG_OFF 0x00U 75 /** 76 * @} 77 */ 78 79 /** @name Debug message types (LWIP_DBG_TYPES_ON) 80 * @{ 81 */ 82 /** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ 83 #define LWIP_DBG_TRACE 0x40U 84 /** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ 85 #define LWIP_DBG_STATE 0x20U 86 /** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ 87 #define LWIP_DBG_FRESH 0x10U 88 /** flag for LWIP_DEBUGF to halt after printing this debug message */ 89 #define LWIP_DBG_HALT 0x08U 90 /** 91 * @} 92 */ 93 94 /** 95 * @} 96 */ 97 98 /** 99 * @defgroup lwip_assertions Assertion handling 100 * @ingroup lwip_opts_debug 101 * @{ 102 */ 103 /** 104 * LWIP_NOASSERT: Disable LWIP_ASSERT checks: 105 * To disable assertions define LWIP_NOASSERT in arch/cc.h. 106 */ 107 #ifdef __DOXYGEN__ 108 #define LWIP_NOASSERT 109 #undef LWIP_NOASSERT 110 #endif 111 /** 112 * @} 113 */ 114 115 #ifndef LWIP_NOASSERT 116 #define LWIP_ASSERT(message, assertion) do { if (!(assertion)) { \ 117 LWIP_PLATFORM_ASSERT(message); }} while(0) 118 #else /* LWIP_NOASSERT */ 119 #define LWIP_ASSERT(message, assertion) 120 #endif /* LWIP_NOASSERT */ 121 122 #ifndef LWIP_ERROR 123 #ifdef LWIP_DEBUG 124 #define LWIP_PLATFORM_ERROR(message) LWIP_PLATFORM_DIAG((message)) 125 #else 126 #define LWIP_PLATFORM_ERROR(message) 127 #endif 128 129 /* if "expression" isn't true, then print "message" and execute "handler" expression */ 130 #define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ 131 LWIP_PLATFORM_ERROR(message); handler;}} while(0) 132 #endif /* LWIP_ERROR */ 133 134 /** Enable debug message printing, but only if debug message type is enabled 135 * AND is of correct type AND is at least LWIP_DBG_LEVEL. 136 */ 137 #ifdef __DOXYGEN__ 138 #define LWIP_DEBUG 139 #undef LWIP_DEBUG 140 #endif 141 142 #ifdef LWIP_DEBUG 143 #define LWIP_DEBUG_ENABLED(debug) (((debug) & LWIP_DBG_ON) && \ 144 ((debug) & LWIP_DBG_TYPES_ON) && \ 145 ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) 146 147 #define LWIP_DEBUGF(debug, message) do { \ 148 if (LWIP_DEBUG_ENABLED(debug)) { \ 149 LWIP_PLATFORM_DIAG(message); \ 150 if ((debug) & LWIP_DBG_HALT) { \ 151 while(1); \ 152 } \ 153 } \ 154 } while(0) 155 156 #else /* LWIP_DEBUG */ 157 #define LWIP_DEBUG_ENABLED(debug) 0 158 #define LWIP_DEBUGF(debug, message) 159 #endif /* LWIP_DEBUG */ 160 161 #endif /* LWIP_HDR_DEBUG_H */ 162