Lee Kai Xuan / mbed-os

Fork of mbed-os by erkin yucel

Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 /*
elessair 0:f269e3021894 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
elessair 0:f269e3021894 3 * SPDX-License-Identifier: Apache-2.0
elessair 0:f269e3021894 4 * Licensed under the Apache License, Version 2.0 (the License); you may
elessair 0:f269e3021894 5 * not use this file except in compliance with the License.
elessair 0:f269e3021894 6 * You may obtain a copy of the License at
elessair 0:f269e3021894 7 *
elessair 0:f269e3021894 8 * http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 9 *
elessair 0:f269e3021894 10 * Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
elessair 0:f269e3021894 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 13 * See the License for the specific language governing permissions and
elessair 0:f269e3021894 14 * limitations under the License.
elessair 0:f269e3021894 15 */
elessair 0:f269e3021894 16
elessair 0:f269e3021894 17 /**
elessair 0:f269e3021894 18 * \file mbed_trace.h
elessair 0:f269e3021894 19 * Trace interface for MbedOS applications.
elessair 0:f269e3021894 20 * This file provide simple but flexible way to handle software traces.
elessair 0:f269e3021894 21 * Trace library are abstract layer, which use stdout (printf) by default,
elessair 0:f269e3021894 22 * but outputs can be easily redirect to custom function, for example to
elessair 0:f269e3021894 23 * store traces to memory or other interfaces.
elessair 0:f269e3021894 24 *
elessair 0:f269e3021894 25 * usage example:
elessair 0:f269e3021894 26 * \code(main.c:)
elessair 0:f269e3021894 27 * #include "mbed_trace.h"
elessair 0:f269e3021894 28 * #define TRACE_GROUP "main"
elessair 0:f269e3021894 29 *
elessair 0:f269e3021894 30 * int main(void){
elessair 0:f269e3021894 31 * mbed_trace_init(); // initialize trace library
elessair 0:f269e3021894 32 * tr_debug("this is debug msg"); //print debug message to stdout: "[DBG]
elessair 0:f269e3021894 33 * tr_err("this is error msg");
elessair 0:f269e3021894 34 * tr_warn("this is warning msg");
elessair 0:f269e3021894 35 * tr_info("this is info msg");
elessair 0:f269e3021894 36 * return 0;
elessair 0:f269e3021894 37 * }
elessair 0:f269e3021894 38 * \endcode
elessair 0:f269e3021894 39 * Activate with compiler flag: YOTTA_CFG_MBED_TRACE
elessair 0:f269e3021894 40 * Configure trace line buffer size with compiler flag: YOTTA_CFG_MBED_TRACE_LINE_LENGTH. Default length: 1024.
elessair 0:f269e3021894 41 *
elessair 0:f269e3021894 42 */
elessair 0:f269e3021894 43 #ifndef MBED_TRACE_H_
elessair 0:f269e3021894 44 #define MBED_TRACE_H_
elessair 0:f269e3021894 45
elessair 0:f269e3021894 46 #ifdef __cplusplus
elessair 0:f269e3021894 47 extern "C" {
elessair 0:f269e3021894 48 #endif
elessair 0:f269e3021894 49
elessair 0:f269e3021894 50 #ifdef YOTTA_CFG
elessair 0:f269e3021894 51 #include <stdint.h>
elessair 0:f269e3021894 52 #include <stddef.h>
elessair 0:f269e3021894 53 #include <stdbool.h>
elessair 0:f269e3021894 54 #else
elessair 0:f269e3021894 55 #include "ns_types.h"
elessair 0:f269e3021894 56 #endif
elessair 0:f269e3021894 57
elessair 0:f269e3021894 58 #include <stdarg.h>
elessair 0:f269e3021894 59
elessair 0:f269e3021894 60 #ifndef YOTTA_CFG_MBED_TRACE
elessair 0:f269e3021894 61 #define YOTTA_CFG_MBED_TRACE 0
elessair 0:f269e3021894 62 #endif
elessair 0:f269e3021894 63
elessair 0:f269e3021894 64 #ifndef YOTTA_CFG_MBED_TRACE_FEA_IPV6
elessair 0:f269e3021894 65 #define YOTTA_CFG_MBED_TRACE_FEA_IPV6 1
elessair 0:f269e3021894 66 #endif
elessair 0:f269e3021894 67
elessair 0:f269e3021894 68 #ifndef MBED_CONF_MBED_TRACE_ENABLE
elessair 0:f269e3021894 69 #define MBED_CONF_MBED_TRACE_ENABLE 0
elessair 0:f269e3021894 70 #endif
elessair 0:f269e3021894 71
elessair 0:f269e3021894 72 /** 3 upper bits are trace modes related,
elessair 0:f269e3021894 73 and 5 lower bits are trace level configuration */
elessair 0:f269e3021894 74
elessair 0:f269e3021894 75 /** Config mask */
elessair 0:f269e3021894 76 #define TRACE_MASK_CONFIG 0xE0
elessair 0:f269e3021894 77 /** Trace level mask */
elessair 0:f269e3021894 78 #define TRACE_MASK_LEVEL 0x1F
elessair 0:f269e3021894 79
elessair 0:f269e3021894 80 /** plain trace data instead of "headers" */
elessair 0:f269e3021894 81 #define TRACE_MODE_PLAIN 0x80
elessair 0:f269e3021894 82 /** color mode */
elessair 0:f269e3021894 83 #define TRACE_MODE_COLOR 0x40
elessair 0:f269e3021894 84 /** Use print CR before trace line */
elessair 0:f269e3021894 85 #define TRACE_CARRIAGE_RETURN 0x20
elessair 0:f269e3021894 86
elessair 0:f269e3021894 87 /** used to activate all trace levels */
elessair 0:f269e3021894 88 #define TRACE_ACTIVE_LEVEL_ALL 0x1F
elessair 0:f269e3021894 89 /** print all traces same as above */
elessair 0:f269e3021894 90 #define TRACE_ACTIVE_LEVEL_DEBUG 0x1f
elessair 0:f269e3021894 91 /** print info,warn and error traces */
elessair 0:f269e3021894 92 #define TRACE_ACTIVE_LEVEL_INFO 0x0f
elessair 0:f269e3021894 93 /** print warn and error traces */
elessair 0:f269e3021894 94 #define TRACE_ACTIVE_LEVEL_WARN 0x07
elessair 0:f269e3021894 95 /** print only error trace */
elessair 0:f269e3021894 96 #define TRACE_ACTIVE_LEVEL_ERROR 0x03
elessair 0:f269e3021894 97 /** print only cmd line data */
elessair 0:f269e3021894 98 #define TRACE_ACTIVE_LEVEL_CMD 0x01
elessair 0:f269e3021894 99 /** trace nothing */
elessair 0:f269e3021894 100 #define TRACE_ACTIVE_LEVEL_NONE 0x00
elessair 0:f269e3021894 101
elessair 0:f269e3021894 102 /** this print is some deep information for debug purpose */
elessair 0:f269e3021894 103 #define TRACE_LEVEL_DEBUG 0x10
elessair 0:f269e3021894 104 /** Info print, for general purpose prints */
elessair 0:f269e3021894 105 #define TRACE_LEVEL_INFO 0x08
elessair 0:f269e3021894 106 /** warning prints, which shouldn't causes any huge problems */
elessair 0:f269e3021894 107 #define TRACE_LEVEL_WARN 0x04
elessair 0:f269e3021894 108 /** Error prints, which causes probably problems, e.g. out of mem. */
elessair 0:f269e3021894 109 #define TRACE_LEVEL_ERROR 0x02
elessair 0:f269e3021894 110 /** special level for cmdline. Behaviours like "plain mode" */
elessair 0:f269e3021894 111 #define TRACE_LEVEL_CMD 0x01
elessair 0:f269e3021894 112
elessair 0:f269e3021894 113 //usage macros:
elessair 0:f269e3021894 114 #define tr_info(...) mbed_tracef(TRACE_LEVEL_INFO, TRACE_GROUP, __VA_ARGS__) //!< Print info message
elessair 0:f269e3021894 115 #define tr_debug(...) mbed_tracef(TRACE_LEVEL_DEBUG, TRACE_GROUP, __VA_ARGS__) //!< Print debug message
elessair 0:f269e3021894 116 #define tr_warning(...) mbed_tracef(TRACE_LEVEL_WARN, TRACE_GROUP, __VA_ARGS__) //!< Print warning message
elessair 0:f269e3021894 117 #define tr_warn(...) mbed_tracef(TRACE_LEVEL_WARN, TRACE_GROUP, __VA_ARGS__) //!< Alternative warning message
elessair 0:f269e3021894 118 #define tr_error(...) mbed_tracef(TRACE_LEVEL_ERROR, TRACE_GROUP, __VA_ARGS__) //!< Print Error Message
elessair 0:f269e3021894 119 #define tr_err(...) mbed_tracef(TRACE_LEVEL_ERROR, TRACE_GROUP, __VA_ARGS__) //!< Alternative error message
elessair 0:f269e3021894 120 #define tr_cmdline(...) mbed_tracef(TRACE_LEVEL_CMD, TRACE_GROUP, __VA_ARGS__) //!< Special print for cmdline. See more from TRACE_LEVEL_CMD -level
elessair 0:f269e3021894 121
elessair 0:f269e3021894 122 //aliases for the most commonly used functions and the helper functions
elessair 0:f269e3021894 123 #define tracef(dlevel, grp, ...) mbed_tracef(dlevel, grp, __VA_ARGS__) //!< Alias for mbed_tracef()
elessair 0:f269e3021894 124 #define vtracef(dlevel, grp, fmt, ap) mbed_vtracef(dlevel, grp, fmt, ap) //!< Alias for mbed_vtracef()
elessair 0:f269e3021894 125 #define tr_array(buf, len) mbed_trace_array(buf, len) //!< Alias for mbed_trace_array()
elessair 0:f269e3021894 126 #define tr_ipv6(addr_ptr) mbed_trace_ipv6(addr_ptr) //!< Alias for mbed_trace_ipv6()
elessair 0:f269e3021894 127 #define tr_ipv6_prefix(prefix, prefix_len) mbed_trace_ipv6_prefix(prefix, prefix_len) //!< Alias for mbed_trace_ipv6_prefix()
elessair 0:f269e3021894 128 #define trace_array(buf, len) mbed_trace_array(buf, len) //!< Alias for mbed_trace_array()
elessair 0:f269e3021894 129 #define trace_ipv6(addr_ptr) mbed_trace_ipv6(addr_ptr) //!< Alias for mbed_trace_ipv6()
elessair 0:f269e3021894 130 #define trace_ipv6_prefix(prefix, prefix_len) mbed_trace_ipv6_prefix(prefix, prefix_len) //!< Alias for mbed_trace_ipv6_prefix()
elessair 0:f269e3021894 131
elessair 0:f269e3021894 132
elessair 0:f269e3021894 133 /**
elessair 0:f269e3021894 134 * Allow specification of default TRACE_GROUP to be used if not specified by application
elessair 0:f269e3021894 135 */
elessair 0:f269e3021894 136
elessair 0:f269e3021894 137 #ifndef TRACE_GROUP
elessair 0:f269e3021894 138 #ifdef YOTTA_CFG_MBED_TRACE_GROUP
elessair 0:f269e3021894 139 #define TRACE_GROUP_STR_HELPER(x) #x
elessair 0:f269e3021894 140 #define TRACE_GROUP_STR(x) TRACE_GROUP_STR_HELPER(x)
elessair 0:f269e3021894 141 #define TRACE_GROUP TRACE_GROUP_STR(YOTTA_CFG_MBED_TRACE_GROUP)
elessair 0:f269e3021894 142 #endif
elessair 0:f269e3021894 143 #endif
elessair 0:f269e3021894 144
elessair 0:f269e3021894 145 /**
elessair 0:f269e3021894 146 * Initialize trace functionality
elessair 0:f269e3021894 147 * @return 0 when all success, otherwise non zero
elessair 0:f269e3021894 148 */
elessair 0:f269e3021894 149 int mbed_trace_init( void );
elessair 0:f269e3021894 150 /**
elessair 0:f269e3021894 151 * Free trace memory
elessair 0:f269e3021894 152 */
elessair 0:f269e3021894 153 void mbed_trace_free( void );
elessair 0:f269e3021894 154 /**
elessair 0:f269e3021894 155 * Resize buffers (line / tmp ) sizes
elessair 0:f269e3021894 156 * @param lineLength new maximum length for trace line (0 = do no resize)
elessair 0:f269e3021894 157 * @param tmpLength new maximum length for trace tmp buffer (used for trace_array, etc) (0 = do no resize)
elessair 0:f269e3021894 158 */
elessair 0:f269e3021894 159 void mbed_trace_buffer_sizes(int lineLength, int tmpLength);
elessair 0:f269e3021894 160 /**
elessair 0:f269e3021894 161 * Set trace configurations
elessair 0:f269e3021894 162 * Possible parameters:
elessair 0:f269e3021894 163 *
elessair 0:f269e3021894 164 * TRACE_MODE_COLOR
elessair 0:f269e3021894 165 * TRACE_MODE_PLAIN (this exclude color mode)
elessair 0:f269e3021894 166 * TRACE_CARRIAGE_RETURN (print CR before trace line)
elessair 0:f269e3021894 167 *
elessair 0:f269e3021894 168 * TRACE_ACTIVE_LEVEL_ALL - to activate all trace levels
elessair 0:f269e3021894 169 * or TRACE_ACTIVE_LEVEL_DEBUG (alternative)
elessair 0:f269e3021894 170 * TRACE_ACTIVE_LEVEL_INFO
elessair 0:f269e3021894 171 * TRACE_ACTIVE_LEVEL_WARN
elessair 0:f269e3021894 172 * TRACE_ACTIVE_LEVEL_ERROR
elessair 0:f269e3021894 173 * TRACE_ACTIVE_LEVEL_CMD
elessair 0:f269e3021894 174 * TRACE_LEVEL_NONE - to deactivate all traces
elessair 0:f269e3021894 175 *
elessair 0:f269e3021894 176 * @param config Byte size Bit-mask. Bits are descripted above.
elessair 0:f269e3021894 177 * usage e.g.
elessair 0:f269e3021894 178 * @code
elessair 0:f269e3021894 179 * mbed_trace_config_set( TRACE_ACTIVE_LEVEL_ALL|TRACE_MODE_COLOR );
elessair 0:f269e3021894 180 * @endcode
elessair 0:f269e3021894 181 */
elessair 0:f269e3021894 182 void mbed_trace_config_set(uint8_t config);
elessair 0:f269e3021894 183 /** get trace configurations
elessair 0:f269e3021894 184 * @return trace configuration byte
elessair 0:f269e3021894 185 */
elessair 0:f269e3021894 186 uint8_t mbed_trace_config_get(void);
elessair 0:f269e3021894 187 /**
elessair 0:f269e3021894 188 * Set trace prefix function
elessair 0:f269e3021894 189 * pref_f -function return string with null terminated
elessair 0:f269e3021894 190 * Can be used for e.g. time string
elessair 0:f269e3021894 191 * e.g.
elessair 0:f269e3021894 192 * char* trace_time(){ return "rtc-time-in-string"; }
elessair 0:f269e3021894 193 * mbed_trace_prefix_function_set( &trace_time );
elessair 0:f269e3021894 194 */
elessair 0:f269e3021894 195 void mbed_trace_prefix_function_set( char* (*pref_f)(size_t) );
elessair 0:f269e3021894 196 /**
elessair 0:f269e3021894 197 * Set trace suffix function
elessair 0:f269e3021894 198 * suffix -function return string with null terminated
elessair 0:f269e3021894 199 * Can be used for e.g. time string
elessair 0:f269e3021894 200 * e.g.
elessair 0:f269e3021894 201 * char* trace_suffix(){ return " END"; }
elessair 0:f269e3021894 202 * mbed_trace_suffix_function_set( &trace_suffix );
elessair 0:f269e3021894 203 */
elessair 0:f269e3021894 204 void mbed_trace_suffix_function_set(char* (*suffix_f)(void) );
elessair 0:f269e3021894 205 /**
elessair 0:f269e3021894 206 * Set trace print function
elessair 0:f269e3021894 207 * By default, trace module print using printf() function,
elessair 0:f269e3021894 208 * but with this you can write own print function,
elessair 0:f269e3021894 209 * for e.g. to other IO device.
elessair 0:f269e3021894 210 */
elessair 0:f269e3021894 211 void mbed_trace_print_function_set( void (*print_f)(const char*) );
elessair 0:f269e3021894 212 /**
elessair 0:f269e3021894 213 * Set trace print function for tr_cmdline()
elessair 0:f269e3021894 214 */
elessair 0:f269e3021894 215 void mbed_trace_cmdprint_function_set( void (*printf)(const char*) );
elessair 0:f269e3021894 216 /**
elessair 0:f269e3021894 217 * Set trace mutex wait function
elessair 0:f269e3021894 218 * By default, trace calls are not thread safe.
elessair 0:f269e3021894 219 * If thread safety is required this can be used to set a callback function that will be called before each trace call.
elessair 0:f269e3021894 220 * The specific implementation is up to the application developer, but the mutex must count so it can
elessair 0:f269e3021894 221 * be acquired from a single thread repeatedly.
elessair 0:f269e3021894 222 */
elessair 0:f269e3021894 223 void mbed_trace_mutex_wait_function_set(void (*mutex_wait_f)(void));
elessair 0:f269e3021894 224 /**
elessair 0:f269e3021894 225 * Set trace mutex release function
elessair 0:f269e3021894 226 * By default, trace calls are not thread safe.
elessair 0:f269e3021894 227 * If thread safety is required this can be used to set a callback function that will be called before returning from
elessair 0:f269e3021894 228 * each trace call. The specific implementation is up to the application developer, but the mutex must count so it can
elessair 0:f269e3021894 229 * be acquired from a single thread repeatedly.
elessair 0:f269e3021894 230 */
elessair 0:f269e3021894 231 void mbed_trace_mutex_release_function_set(void (*mutex_release_f)(void));
elessair 0:f269e3021894 232 /**
elessair 0:f269e3021894 233 * When trace group contains text in filters,
elessair 0:f269e3021894 234 * trace print will be ignored.
elessair 0:f269e3021894 235 * e.g.:
elessair 0:f269e3021894 236 * mbed_trace_exclude_filters_set("mygr");
elessair 0:f269e3021894 237 * mbed_tracef(TRACE_ACTIVE_LEVEL_DEBUG, "ougr", "This is not printed");
elessair 0:f269e3021894 238 */
elessair 0:f269e3021894 239 void mbed_trace_exclude_filters_set(char* filters);
elessair 0:f269e3021894 240 /** get trace exclude filters
elessair 0:f269e3021894 241 */
elessair 0:f269e3021894 242 const char* mbed_trace_exclude_filters_get(void);
elessair 0:f269e3021894 243 /**
elessair 0:f269e3021894 244 * When trace group contains text in filter,
elessair 0:f269e3021894 245 * trace will be printed.
elessair 0:f269e3021894 246 * e.g.:
elessair 0:f269e3021894 247 * set_trace_include_filters("mygr");
elessair 0:f269e3021894 248 * mbed_tracef(TRACE_ACTIVE_LEVEL_DEBUG, "mygr", "Hi There");
elessair 0:f269e3021894 249 * mbed_tracef(TRACE_ACTIVE_LEVEL_DEBUG, "grp2", "This is not printed");
elessair 0:f269e3021894 250 */
elessair 0:f269e3021894 251 void mbed_trace_include_filters_set(char* filters);
elessair 0:f269e3021894 252 /** get trace include filters
elessair 0:f269e3021894 253 */
elessair 0:f269e3021894 254 const char* mbed_trace_include_filters_get(void);
elessair 0:f269e3021894 255 /**
elessair 0:f269e3021894 256 * General trace function
elessair 0:f269e3021894 257 * This should be used every time when user want to print out something important thing
elessair 0:f269e3021894 258 * Usage e.g.
elessair 0:f269e3021894 259 * mbed_tracef( TRACE_LEVEL_INFO, "mygr", "Hello world!");
elessair 0:f269e3021894 260 *
elessair 0:f269e3021894 261 * @param dlevel debug level
elessair 0:f269e3021894 262 * @param grp trace group
elessair 0:f269e3021894 263 * @param fmt trace format (like printf)
elessair 0:f269e3021894 264 * @param ... variable arguments related to fmt
elessair 0:f269e3021894 265 */
elessair 0:f269e3021894 266 #if defined(__GNUC__) || defined(__CC_ARM)
elessair 0:f269e3021894 267 void mbed_tracef(uint8_t dlevel, const char* grp, const char *fmt, ...) __attribute__ ((__format__(__printf__, 3, 4)));
elessair 0:f269e3021894 268 #else
elessair 0:f269e3021894 269 void mbed_tracef(uint8_t dlevel, const char* grp, const char *fmt, ...);
elessair 0:f269e3021894 270 #endif
elessair 0:f269e3021894 271 /**
elessair 0:f269e3021894 272 * General trace function
elessair 0:f269e3021894 273 * This should be used every time when user want to print out something important thing
elessair 0:f269e3021894 274 * and vprintf functionality is desired
elessair 0:f269e3021894 275 * Usage e.g.
elessair 0:f269e3021894 276 * va_list ap;
elessair 0:f269e3021894 277 * va_start (ap, fmt);
elessair 0:f269e3021894 278 * mbed_vtracef( TRACE_LEVEL_INFO, "mygr", fmt, ap );
elessair 0:f269e3021894 279 * va_end (ap);
elessair 0:f269e3021894 280 *
elessair 0:f269e3021894 281 * @param dlevel debug level
elessair 0:f269e3021894 282 * @param grp trace group
elessair 0:f269e3021894 283 * @param fmt trace format (like vprintf)
elessair 0:f269e3021894 284 * @param ap variable arguments list (like vprintf)
elessair 0:f269e3021894 285 */
elessair 0:f269e3021894 286 #if defined(__GNUC__) || defined(__CC_ARM)
elessair 0:f269e3021894 287 void mbed_vtracef(uint8_t dlevel, const char* grp, const char *fmt, va_list ap) __attribute__ ((__format__(__printf__, 3, 0)));
elessair 0:f269e3021894 288 #else
elessair 0:f269e3021894 289 void mbed_vtracef(uint8_t dlevel, const char* grp, const char *fmt, va_list ap);
elessair 0:f269e3021894 290 #endif
elessair 0:f269e3021894 291
elessair 0:f269e3021894 292
elessair 0:f269e3021894 293 /**
elessair 0:f269e3021894 294 * Get last trace from buffer
elessair 0:f269e3021894 295 */
elessair 0:f269e3021894 296 const char* mbed_trace_last(void);
elessair 0:f269e3021894 297 #if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1
elessair 0:f269e3021894 298 /**
elessair 0:f269e3021894 299 * mbed_tracef helping function for convert ipv6
elessair 0:f269e3021894 300 * table to human readable string.
elessair 0:f269e3021894 301 * usage e.g.
elessair 0:f269e3021894 302 * char ipv6[16] = {...}; // ! array length is 16 bytes !
elessair 0:f269e3021894 303 * mbed_tracef(TRACE_LEVEL_INFO, "mygr", "ipv6 addr: %s", mbed_trace_ipv6(ipv6));
elessair 0:f269e3021894 304 *
elessair 0:f269e3021894 305 * @param add_ptr IPv6 Address pointer
elessair 0:f269e3021894 306 * @return temporary buffer where ipv6 is in string format
elessair 0:f269e3021894 307 */
elessair 0:f269e3021894 308 char* mbed_trace_ipv6(const void *addr_ptr);
elessair 0:f269e3021894 309 /**
elessair 0:f269e3021894 310 * mbed_tracef helping function for print ipv6 prefix
elessair 0:f269e3021894 311 * usage e.g.
elessair 0:f269e3021894 312 * char ipv6[16] = {...}; // ! array length is 16 bytes !
elessair 0:f269e3021894 313 * mbed_tracef(TRACE_LEVEL_INFO, "mygr", "ipv6 addr: %s", mbed_trace_ipv6_prefix(ipv6, 4));
elessair 0:f269e3021894 314 *
elessair 0:f269e3021894 315 * @param prefix IPv6 Address pointer
elessair 0:f269e3021894 316 * @param prefix_len prefix length
elessair 0:f269e3021894 317 * @return temporary buffer where ipv6 is in string format
elessair 0:f269e3021894 318 */
elessair 0:f269e3021894 319 char* mbed_trace_ipv6_prefix(const uint8_t *prefix, uint8_t prefix_len);
elessair 0:f269e3021894 320 #endif
elessair 0:f269e3021894 321 /**
elessair 0:f269e3021894 322 * mbed_tracef helping function for convert hex-array to string.
elessair 0:f269e3021894 323 * usage e.g.
elessair 0:f269e3021894 324 * char myarr[] = {0x10, 0x20};
elessair 0:f269e3021894 325 * mbed_tracef(TRACE_LEVEL_INFO, "mygr", "arr: %s", mbed_trace_array(myarr, 2));
elessair 0:f269e3021894 326 *
elessair 0:f269e3021894 327 * @param buf hex array pointer
elessair 0:f269e3021894 328 * @param len buffer length
elessair 0:f269e3021894 329 * @return temporary buffer where string copied
elessair 0:f269e3021894 330 * if array as string not fit to temp buffer, this function write '*' as last character,
elessair 0:f269e3021894 331 * which indicate that buffer is too small for array.
elessair 0:f269e3021894 332 */
elessair 0:f269e3021894 333 char* mbed_trace_array(const uint8_t* buf, uint16_t len);
elessair 0:f269e3021894 334
elessair 0:f269e3021894 335 #ifdef __cplusplus
elessair 0:f269e3021894 336 }
elessair 0:f269e3021894 337 #endif
elessair 0:f269e3021894 338
elessair 0:f269e3021894 339 #endif /* MBED_TRACE_H_ */
elessair 0:f269e3021894 340
elessair 0:f269e3021894 341 /* These macros are outside the inclusion guard so they will be re-evaluated for every inclusion of the header.
elessair 0:f269e3021894 342 * If tracing is disabled, the dummies will hide the real functions. The real functions can still be reached by
elessair 0:f269e3021894 343 * surrounding the name of the function with brackets, e.g. "(mbed_tracef)(dlevel, grp, "like so");"
elessair 0:f269e3021894 344 * */
elessair 0:f269e3021894 345 #if defined(FEA_TRACE_SUPPORT) || MBED_CONF_MBED_TRACE_ENABLE || YOTTA_CFG_MBED_TRACE || (defined(YOTTA_CFG) && !defined(NDEBUG))
elessair 0:f269e3021894 346 // Make sure FEA_TRACE_SUPPORT is always set whenever traces are enabled.
elessair 0:f269e3021894 347 #ifndef FEA_TRACE_SUPPORT
elessair 0:f269e3021894 348 #define FEA_TRACE_SUPPORT
elessair 0:f269e3021894 349 #endif
elessair 0:f269e3021894 350 // undefine dummies, revealing the real functions
elessair 0:f269e3021894 351 #undef MBED_TRACE_DUMMIES_DEFINED
elessair 0:f269e3021894 352 #undef mbed_trace_init
elessair 0:f269e3021894 353 #undef mbed_trace_free
elessair 0:f269e3021894 354 #undef mbed_trace_buffer_sizes
elessair 0:f269e3021894 355 #undef mbed_trace_config_set
elessair 0:f269e3021894 356 #undef mbed_trace_config_get
elessair 0:f269e3021894 357 #undef mbed_trace_prefix_function_set
elessair 0:f269e3021894 358 #undef mbed_trace_suffix_function_set
elessair 0:f269e3021894 359 #undef mbed_trace_print_function_set
elessair 0:f269e3021894 360 #undef mbed_trace_cmdprint_function_set
elessair 0:f269e3021894 361 #undef mbed_trace_mutex_wait_function_set
elessair 0:f269e3021894 362 #undef mbed_trace_mutex_release_function_set
elessair 0:f269e3021894 363 #undef mbed_trace_exclude_filters_set
elessair 0:f269e3021894 364 #undef mbed_trace_exclude_filters_get
elessair 0:f269e3021894 365 #undef mbed_trace_include_filters_set
elessair 0:f269e3021894 366 #undef mbed_trace_include_filters_get
elessair 0:f269e3021894 367 #undef mbed_tracef
elessair 0:f269e3021894 368 #undef mbed_vtracef
elessair 0:f269e3021894 369 #undef mbed_trace_last
elessair 0:f269e3021894 370 #undef mbed_trace_ipv6
elessair 0:f269e3021894 371 #undef mbed_trace_ipv6_prefix
elessair 0:f269e3021894 372 #undef mbed_trace_array
elessair 0:f269e3021894 373
elessair 0:f269e3021894 374 #elif !defined(MBED_TRACE_DUMMIES_DEFINED)
elessair 0:f269e3021894 375 // define dummies, hiding the real functions
elessair 0:f269e3021894 376 #define MBED_TRACE_DUMMIES_DEFINED
elessair 0:f269e3021894 377 #define mbed_trace_init(...) ((void) 0)
elessair 0:f269e3021894 378 #define mbed_trace_free(...) ((void) 0)
elessair 0:f269e3021894 379 #define mbed_trace_buffer_sizes(...) ((void) 0)
elessair 0:f269e3021894 380 #define mbed_trace_config_set(...) ((void) 0)
elessair 0:f269e3021894 381 #define mbed_trace_config_get(...) ((uint8_t) 0)
elessair 0:f269e3021894 382 #define mbed_trace_prefix_function_set(...) ((void) 0)
elessair 0:f269e3021894 383 #define mbed_trace_suffix_function_set(...) ((void) 0)
elessair 0:f269e3021894 384 #define mbed_trace_print_function_set(...) ((void) 0)
elessair 0:f269e3021894 385 #define mbed_trace_cmdprint_function_set(...) ((void) 0)
elessair 0:f269e3021894 386 #define mbed_trace_mutex_wait_function_set(...) ((void) 0)
elessair 0:f269e3021894 387 #define mbed_trace_mutex_release_function_set(...) ((void) 0)
elessair 0:f269e3021894 388 #define mbed_trace_exclude_filters_set(...) ((void) 0)
elessair 0:f269e3021894 389 #define mbed_trace_exclude_filters_get(...) ((const char *) 0)
elessair 0:f269e3021894 390 #define mbed_trace_include_filters_set(...) ((void) 0)
elessair 0:f269e3021894 391 #define mbed_trace_include_filters_get(...) ((const char *) 0)
elessair 0:f269e3021894 392 #define mbed_trace_last(...) ((const char *) 0)
elessair 0:f269e3021894 393 #define mbed_tracef(...) ((void) 0)
elessair 0:f269e3021894 394 #define mbed_vtracef(...) ((void) 0)
elessair 0:f269e3021894 395 /**
elessair 0:f269e3021894 396 * These helper functions accumulate strings in a buffer that is only flushed by actual trace calls. Using these
elessair 0:f269e3021894 397 * functions outside trace calls could cause the buffer to overflow.
elessair 0:f269e3021894 398 */
elessair 0:f269e3021894 399 #define mbed_trace_ipv6(...) dont_use_trace_helpers_outside_trace_calls
elessair 0:f269e3021894 400 #define mbed_trace_ipv6_prefix(...) dont_use_trace_helpers_outside_trace_calls
elessair 0:f269e3021894 401 #define mbed_trace_array(...) dont_use_trace_helpers_outside_trace_calls
elessair 0:f269e3021894 402
elessair 0:f269e3021894 403 #endif /* FEA_TRACE_SUPPORT */