diff options
author | Tomek CEDRO <cederom@tlen.pl> | 2011-09-11 00:56:26 +0000 |
---|---|---|
committer | Tomek CEDRO <cederom@tlen.pl> | 2011-09-11 00:56:26 +0000 |
commit | 7fafb0add5d07540964cde734f41aff650eafefc (patch) | |
tree | 497701cee758c0fa16a6962c325c1f882cbd28fc /src/transport/swd_libswd_drv_openocd.c | |
parent | 7206efdd9e7aa79666ce599116872a5244d32d9e (diff) | |
download | openocd+libswd-7fafb0add5d07540964cde734f41aff650eafefc.tar.gz openocd+libswd-7fafb0add5d07540964cde734f41aff650eafefc.tar.bz2 openocd+libswd-7fafb0add5d07540964cde734f41aff650eafefc.tar.xz openocd+libswd-7fafb0add5d07540964cde734f41aff650eafefc.zip |
transport/swd: Changes in logging mechanism: 1. LogLevel is inherited during transport initialization and only if context is created. 2. swd_log() use vprintf as using openocd logging mechanisms caused program crash by va recurrence. 3. Fixed tcl interface to use/update loglevel configuration parameter from swdctx stored within dap.
Diffstat (limited to 'src/transport/swd_libswd_drv_openocd.c')
-rw-r--r-- | src/transport/swd_libswd_drv_openocd.c | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/src/transport/swd_libswd_drv_openocd.c b/src/transport/swd_libswd_drv_openocd.c index 5ab75c69..26e147b4 100644 --- a/src/transport/swd_libswd_drv_openocd.c +++ b/src/transport/swd_libswd_drv_openocd.c @@ -263,7 +263,11 @@ int swd_log_level_inherit(swd_ctx_t *swdctx, int loglevel){ } return new_swdlevel; } -/** We will use OpenOCD's logging mechanisms to show LibSWD messages. */ +/** We will use OpenOCD's logging mechanisms to show LibSWD messages. + * SWD can have different loglevel set than the OpenOCD itself, so we need to + * log all messages at openocd level that will not block swd messages. + * It is also possible to 'inherit' loglevel to swd from openocd. + */ int swd_log(swd_ctx_t *swdctx, swd_loglevel_t loglevel, char *msg, ...){ if (swdctx==NULL) return SWD_ERROR_NULLCONTEXT; if (loglevel > SWD_LOGLEVEL_MAX) return SWD_ERROR_PARAM; @@ -272,33 +276,9 @@ int swd_log(swd_ctx_t *swdctx, swd_loglevel_t loglevel, char *msg, ...){ int res; va_list ap; va_start(ap, msg); + // Calling OpenOCD log functions here will cause program crash (va recurrent). res=vprintf(msg, ap); va_end(ap); - return res; - - - LOG_DEBUG("swdctx=0x%08X, loglevel=0x%02X, msg=%s\n", (int)swdctx, (int)loglevel, msg); - switch(loglevel){ - case SWD_LOGLEVEL_NORMAL: - LOG_USER(msg, ap); - break; - case SWD_LOGLEVEL_ERROR: - LOG_ERROR(msg, ap); - break; - case SWD_LOGLEVEL_WARNING: - LOG_WARNING(msg, ap); - break; - case SWD_LOGLEVEL_INFO: - printf(msg, ap); - break; - case SWD_LOGLEVEL_DEBUG: - LOG_DEBUG(msg, ap); - break; - default: - LOG_USER(msg, ap); - } - va_end(ap); - return SWD_OK; } |