log: Add a new debug level (4) for verbose I/O debug 05/3805/9
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sun, 2 Apr 2017 10:54:43 +0000 (12:54 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 10 Aug 2017 08:29:06 +0000 (09:29 +0100)
Change ftdi SWD driver and CMSIS-DAP to use it instead of LOG_DEBUG().

Change-Id: I17ba3de2086c7159209db61fba3faf067dfc5023
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/3805
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
doc/openocd.texi
src/helper/log.c
src/helper/log.h
src/jtag/drivers/cmsis_dap_usb.c
src/jtag/drivers/ftdi.c

index 30d8aaeb4ab32026f2cb848134a8d5fe304ea5b8..959f718915699fe2e4c5905c5517e0f930c990e9 100644 (file)
@@ -682,7 +682,8 @@ bash$ openocd --help
 --version    | -v       display OpenOCD version
 --file       | -f       use configuration file <name>
 --search     | -s       dir to search for config files and scripts
---debug      | -d       set debug level <0-3>
+--debug      | -d       set debug level to 3
+             | -d<n>    set debug level to <level>
 --log_output | -l       redirect log output to file <name>
 --command    | -c       run <command>
 @end verbatim
@@ -6849,12 +6850,13 @@ non-zero exit code to the parent process.
 @deffn Command debug_level [n]
 @cindex message level
 Display debug level.
-If @var{n} (from 0..3) is provided, then set it to that level.
+If @var{n} (from 0..4) is provided, then set it to that level.
 This affects the kind of messages sent to the server log.
 Level 0 is error messages only;
 level 1 adds warnings;
 level 2 adds informational messages;
-and level 3 adds debugging messages.
+level 3 adds debugging messages;
+and level 4 adds verbose low-level debug messages.
 The default is level 2, but that can be overridden on
 the command line along with the location of that log
 file (which is normally the server's standard output).
index 891613d313cd8bb0a1c651c7ff5fca9e8b2af749..49b9bd98f63bedad2ba8948f7ed69b23d7918e39 100644 (file)
@@ -50,11 +50,12 @@ static int64_t current_time;
 
 static int64_t start;
 
-static const char * const log_strings[5] = {
+static const char * const log_strings[6] = {
        "User : ",
        "Error: ",
        "Warn : ",      /* want a space after each colon, all same width, colons aligned */
        "Info : ",
+       "Debug: ",
        "Debug: "
 };
 
@@ -234,8 +235,8 @@ COMMAND_HANDLER(handle_debug_level_command)
        if (CMD_ARGC == 1) {
                int new_level;
                COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], new_level);
-               if ((new_level > LOG_LVL_DEBUG) || (new_level < LOG_LVL_SILENT)) {
-                       LOG_ERROR("level must be between %d and %d", LOG_LVL_SILENT, LOG_LVL_DEBUG);
+               if ((new_level > LOG_LVL_DEBUG_IO) || (new_level < LOG_LVL_SILENT)) {
+                       LOG_ERROR("level must be between %d and %d", LOG_LVL_SILENT, LOG_LVL_DEBUG_IO);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
                debug_level = new_level;
@@ -279,7 +280,8 @@ static struct command_registration log_command_handlers[] = {
                .mode = COMMAND_ANY,
                .help = "Sets the verbosity level of debugging output. "
                        "0 shows errors only; 1 adds warnings; "
-                       "2 (default) adds other info; 3 adds debugging.",
+                       "2 (default) adds other info; 3 adds debugging; "
+                       "4 adds extra verbose debugging.",
                .usage = "number",
        },
        COMMAND_REGISTRATION_DONE
@@ -303,7 +305,7 @@ void log_init(void)
                int retval = parse_int(debug_env, &value);
                if (ERROR_OK == retval &&
                                debug_level >= LOG_LVL_SILENT &&
-                               debug_level <= LOG_LVL_DEBUG)
+                               debug_level <= LOG_LVL_DEBUG_IO)
                                debug_level = value;
        }
 
index 6b938165b45e46ef9f4fb5d61e8d605f8c4d0f28..512bcc5126d5bd9563c52899f0873d90c2d1462d 100644 (file)
@@ -46,6 +46,7 @@
  * LOG_LVL_WARNING - non-fatal errors, that may be resolved later
  * LOG_LVL_INFO - state information, etc.
  * LOG_LVL_DEBUG - debug statements, execution trace
+ * LOG_LVL_DEBUG_IO - verbose debug, low-level I/O trace
  */
 enum log_levels {
        LOG_LVL_SILENT = -3,
@@ -54,7 +55,8 @@ enum log_levels {
        LOG_LVL_ERROR = 0,
        LOG_LVL_WARNING = 1,
        LOG_LVL_INFO = 2,
-       LOG_LVL_DEBUG = 3
+       LOG_LVL_DEBUG = 3,
+       LOG_LVL_DEBUG_IO = 4,
 };
 
 void log_printf(enum log_levels level, const char *file, unsigned line,
@@ -102,6 +104,14 @@ extern int debug_level;
 
 #define LOG_LEVEL_IS(FOO)  ((debug_level) >= (FOO))
 
+#define LOG_DEBUG_IO(expr ...) \
+       do { \
+               if (debug_level >= LOG_LVL_DEBUG_IO) \
+                       log_printf_lf(LOG_LVL_DEBUG, \
+                               __FILE__, __LINE__, __func__, \
+                               expr); \
+       } while (0)
+
 #define LOG_DEBUG(expr ...) \
        do { \
                if (debug_level >= LOG_LVL_DEBUG) \
index 86f796877ba2e6dbae919d964863bd73c10fa39b..19c3b19c920ab7acddfa5cd59cf1ac92316e1dab 100644 (file)
@@ -596,7 +596,7 @@ static int cmsis_dap_swd_run_queue(void)
 {
        uint8_t *buffer = cmsis_dap_handle->packet_buffer;
 
-       LOG_DEBUG("Executing %d queued transactions", pending_transfer_count);
+       LOG_DEBUG_IO("Executing %d queued transactions", pending_transfer_count);
 
        if (queued_retval != ERROR_OK) {
                LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
@@ -616,7 +616,7 @@ static int cmsis_dap_swd_run_queue(void)
                uint8_t cmd = pending_transfers[i].cmd;
                uint32_t data = pending_transfers[i].data;
 
-               LOG_DEBUG("%s %s reg %x %"PRIx32,
+               LOG_DEBUG_IO("%s %s reg %x %"PRIx32,
                                cmd & SWD_CMD_APnDP ? "AP" : "DP",
                                cmd & SWD_CMD_RnW ? "read" : "write",
                          (cmd & SWD_CMD_A32) >> 1, data);
@@ -674,7 +674,7 @@ static int cmsis_dap_swd_run_queue(void)
                        uint32_t tmp = data;
                        idx += 4;
 
-                       LOG_DEBUG("Read result: %"PRIx32, data);
+                       LOG_DEBUG_IO("Read result: %"PRIx32, data);
 
                        /* Imitate posted AP reads */
                        if ((pending_transfers[i].cmd & SWD_CMD_APnDP) ||
index 00fe37faf599c7bb8c66726d5801c7d30044e01a..342e3210299e855ea1caa6fed583112cad07ea84 100644 (file)
@@ -1074,12 +1074,12 @@ static void ftdi_swd_swdio_en(bool enable)
  */
 static int ftdi_swd_run_queue(void)
 {
-       LOG_DEBUG("Executing %zu queued transactions", swd_cmd_queue_length);
+       LOG_DEBUG_IO("Executing %zu queued transactions", swd_cmd_queue_length);
        int retval;
        struct signal *led = find_signal_by_name("LED");
 
        if (queued_retval != ERROR_OK) {
-               LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
+               LOG_DEBUG_IO("Skipping due to previous errors: %d", queued_retval);
                goto skip;
        }
 
@@ -1100,7 +1100,7 @@ static int ftdi_swd_run_queue(void)
        for (size_t i = 0; i < swd_cmd_queue_length; i++) {
                int ack = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1, 3);
 
-               LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
+               LOG_DEBUG_IO("%s %s %s reg %X = %08"PRIx32,
                                ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
                                swd_cmd_queue[i].cmd & SWD_CMD_APnDP ? "AP" : "DP",
                                swd_cmd_queue[i].cmd & SWD_CMD_RnW ? "read" : "write",

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)