Redirecting LWIP debug trace to mbed-trace

This piece of code redirects LWIP debug trace to mbed-trace if configured.
This enables us to have universal traces.
pull/4119/head
Hasnain Virk 2017-03-13 13:28:40 +02:00
parent 3b44f4758d
commit f602c936ff
7 changed files with 115 additions and 14 deletions

View File

@ -339,6 +339,11 @@ void mbed_vtracef(uint8_t dlevel, const char* grp, const char *fmt, va_list ap)
if (plain == true || dlevel == TRACE_LEVEL_CMD) {
//add trace data
retval = vsnprintf(ptr, bLeft, fmt, ap);
//convenience - trim off one trailing \n. Useful if trying to directly
//connect debug layers that do expect callers to pass \n to mbed_trace.
if (retval > 0 && retval < bLeft && ptr[retval - 1] == '\n') {
ptr[--retval] = '\0';
}
if (dlevel == TRACE_LEVEL_CMD && m_trace.cmd_printf) {
m_trace.cmd_printf(m_trace.line);
m_trace.cmd_printf("\n");
@ -441,6 +446,12 @@ void mbed_vtracef(uint8_t dlevel, const char* grp, const char *fmt, va_list ap)
if (retval > 0) {
ptr += retval;
bLeft -= retval;
//convenience - trim off one trailing \n. Useful if trying to directly
//connect debug layers that do expect callers to pass \n to mbed_trace.
if (ptr[-1] == '\n') {
*--ptr = '\0';
++bLeft;
}
}
}

View File

@ -93,16 +93,28 @@
#ifdef LWIP_DEBUG
#include "stdio.h"
#if MBED_CONF_LWIP_USE_MBED_TRACE
void lwip_mbed_tracef_debug(const char *fmt, ...);
void lwip_mbed_tracef_error(const char *fmt, ...);
void lwip_mbed_tracef_warn(const char *fmt, ...);
void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line);
#define LWIP_PLATFORM_DIAG(vars) lwip_mbed_tracef_debug vars
#define LWIP_PLATFORM_DIAG_SEVERE(vars) lwip_mbed_tracef_error vars
#define LWIP_PLATFORM_DIAG_SERIOUS(vars) lwip_mbed_tracef_error vars
#define LWIP_PLATFORM_DIAG_WARNING(vars) lwip_mbed_tracef_warn vars
#define LWIP_PLATFORM_ASSERT(message) lwip_mbed_assert_fail(message, __func__, __FILE__, __LINE__)
#else // MBED_CONF_LWIP_USE_MBED_TRACE
#include <stdio.h>
void assert_printf(char *msg, int line, char *file);
/* Plaform specific diagnostic output */
#define LWIP_PLATFORM_DIAG(vars) printf vars
#define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); }
#else
#define LWIP_PLATFORM_DIAG(msg) { ; }
#define LWIP_PLATFORM_ASSERT(flag) { ; }
#endif // MBED_CONF_LWIP_USE_MBED_TRACE
#endif
#include "cmsis.h"

View File

@ -489,6 +489,42 @@ sys_thread_t sys_thread_new(const char *pcName,
#ifdef LWIP_DEBUG
#include <stdbool.h>
#if MBED_CONF_LWIP_USE_MBED_TRACE
#include "mbed-trace/mbed_trace.h"
void lwip_mbed_tracef_debug(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
mbed_vtracef(TRACE_LEVEL_DEBUG, "lwIP", fmt, ap);
va_end(ap);
}
void lwip_mbed_tracef_warn(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
mbed_vtracef(TRACE_LEVEL_WARN, "lwIP", fmt, ap);
va_end(ap);
}
void lwip_mbed_tracef_error(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
mbed_vtracef(TRACE_LEVEL_ERROR, "lwIP", fmt, ap);
va_end(ap);
}
void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line)
{
mbed_tracef(TRACE_LEVEL_ERROR, "lwIP", "Assertion failed: %s, function %s, file %s, line %u.", msg, func, file, line);
exit(EXIT_FAILURE); // XXX how about abort? mbed_assert uses exit, so follow suit
}
#else // MBED_CONF_LWIP_USE_MBED_TRACE
/** \brief Displays an error message on assertion
This function will display an error message on an assertion
@ -504,5 +540,6 @@ void assert_printf(char *msg, int line, char *file) {
else
error("LWIP ASSERT\n");
}
#endif // MBED_CONF_LWIP_USE_MBED_TRACE
#endif /* LWIP_DEBUG */

View File

@ -148,6 +148,24 @@
#ifndef LWIP_PLATFORM_DIAG
#error "If you want to use LWIP_DEBUG, LWIP_PLATFORM_DIAG(message) needs to be defined in your arch/cc.h"
#endif
#ifdef LWIP_PLATFORM_DIAG_SERIOUS
#define LWIP_DEBUGF(debug, message) do { \
if ( \
((debug) & LWIP_DBG_ON) && \
((debug) & LWIP_DBG_TYPES_ON) && \
((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
switch ((debug) & LWIP_DBG_MASK_LEVEL) { \
case LWIP_DBG_LEVEL_SERIOUS: LWIP_PLATFORM_DIAG_SERIOUS(message); break; \
case LWIP_DBG_LEVEL_SEVERE: LWIP_PLATFORM_DIAG_SEVERE(message); break; \
case LWIP_DBG_LEVEL_WARNING: LWIP_PLATFORM_DIAG_WARNING(message); break; \
default: LWIP_PLATFORM_DIAG(message); break; \
} \
if ((debug) & LWIP_DBG_HALT) { \
while(1); \
} \
} \
} while(0)
#else
#define LWIP_DEBUGF(debug, message) do { \
if ( \
((debug) & LWIP_DBG_ON) && \
@ -159,7 +177,7 @@
} \
} \
} while(0)
#endif
#else /* LWIP_DEBUG */
#define LWIP_DEBUGF(debug, message)
#endif /* LWIP_DEBUG */

View File

@ -65,7 +65,11 @@
#error "Either IPv4 or IPv6 must be preferred."
#endif
//#define LWIP_DEBUG
#if defined(MBED_CONF_LWIP_DEBUG_ENABLED)
#define LWIP_DEBUG MBED_CONF_LWIP_DEBUG_ENABLED
#else
#define LWIP_DEBUG 0
#endif
#if NO_SYS == 0
#include "cmsis_os.h"
@ -85,7 +89,7 @@
#define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200
#endif
#ifdef LWIP_DEBUG
#if LWIP_DEBUG
#define TCPIP_THREAD_STACKSIZE MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE*2
#else
#define TCPIP_THREAD_STACKSIZE MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE
@ -98,7 +102,7 @@
#define MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE 512
#endif
#ifdef LWIP_DEBUG
#if LWIP_DEBUG
#define DEFAULT_THREAD_STACKSIZE MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE*2
#else
#define DEFAULT_THREAD_STACKSIZE MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE
@ -227,22 +231,24 @@
#define AUTOIP_DEBUG LWIP_DBG_OFF
#define DNS_DEBUG LWIP_DBG_OFF
#define IP6_DEBUG LWIP_DBG_OFF
#if MBED_CONF_LWIP_ENABLE_PPP_TRACE
#define PPP_DEBUG LWIP_DBG_ON
#else
#define PPP_DEBUG LWIP_DBG_OFF
#endif //MBED_CONF_LWIP_ENABLE_PPP_TRACE
#define ETHARP_DEBUG LWIP_DBG_OFF
#define UDP_LPC_EMAC LWIP_DBG_OFF
#ifdef LWIP_DEBUG
#if LWIP_DEBUG
#define MEMP_OVERFLOW_CHECK 1
#define MEMP_SANITY_CHECK 1
#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL
#else
#define LWIP_NOASSERT 1
#define LWIP_STATS 0
#endif
#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL
#define LWIP_PLATFORM_BYTESWAP 1
#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 1
@ -263,6 +269,7 @@
// Save RAM
#define PAP_SUPPORT 0
#define VJ_SUPPORT 0
#define PRINTPKT_SUPPORT 0
#define PPP_LOGIT_BUFSIZE 512
//Hate the config hassle.

View File

@ -21,10 +21,22 @@
"help": "Enable support for Ethernet interfaces",
"value": true
},
"debug-enabled": {
"help": "Enable debug trace support",
"value": false
},
"ppp-enabled": {
"help": "Enable support for PPP interfaces",
"value": false
},
"use-mbed-trace": {
"help": "Use mbed trace for debug, rather than printf",
"value": false
},
"enable-ppp-trace": {
"help": "Enable trace support for PPP interfaces",
"value": false
},
"socket-max": {
"help": "Maximum number of open TCPServer, TCPSocket and UDPSocket instances allowed, including one used internally for DNS. Each requires 236 bytes of pre-allocated RAM",
"value": 4

View File

@ -71,7 +71,11 @@ static EventQueue *prepare_event_queue()
// Only need to queue 1 event. new blows on failure.
event_queue = new EventQueue(2 * EVENTS_EVENT_SIZE, NULL);
event_thread = new Thread(osPriorityNormal, 900);
#if LWIP_DEBUG
event_thread = new Thread(osPriorityNormal, 900*2);
#else
event_thread = new Thread(osPriorityNormal, 900*1);
#endif
if (event_thread->start(callback(event_queue, &EventQueue::dispatch_forever)) != osOK) {
delete event_thread;