This is an automated email from Gerrit.

Tomasz CEDRO ([email protected]) just uploaded a new patch set to Gerrit, which 
you can find at http://openocd.zylin.com/1064

-- gerrit

commit 712e6d12f8a5bcc6446f36b3fd0cf10399ef0297
Author: Tomek CEDRO <[email protected]>
Date:   Tue Oct 30 20:29:47 2012 +0100

    Implemented TCL interface to interface_signal infrastructure.
    
    Change-Id: Ia769d4c6366742147d73505ffa655bf0dae9d3b3
    Signed-off-by: Tomek CEDRO <[email protected]>

diff --git a/src/interface/interface_signal.c b/src/interface/interface_signal.c
index e878b0b..e32eb0a 100644
--- a/src/interface/interface_signal.c
+++ b/src/interface/interface_signal.c
@@ -119,7 +119,7 @@ int oocd_interface_signal_add(char *name, unsigned int mask)
                LOG_ERROR("cannot allocate memory for new signal: %s", name);
                return ERROR_FAIL;
        }
-       newsignal->name = (char *)calloc(1, snlen+1);
+       newsignal->name = (char *)calloc(1, snlen + 1);
        if (!newsignal->name) {
                LOG_ERROR("cannot allocate memory for signal %s name", name);
                return ERROR_FAIL;
@@ -210,3 +210,107 @@ int oocd_interface_signal_del(char *name)
        return ERROR_OK;
 }
 
+/******************************************************************************
+ * TCL INTERFACE TO INTERFACE_SIGNAL INFRASTRUCTURE AND OPERATIONS
+ 
******************************************************************************/
+
+/** Interface signals handling routine that can add, delete and list signals.
+ * Signal ADD requires signal name string and 32-bit mask, optionally a value.
+ * Values are read as HEX. Signal DEL requires only signal name to delete.
+ * Signal LIST will show marvelous table wits signal names, masks and values.
+ * Interfaces should be defined in configuration file by TCL interface.
+ * Parameters are checked before function execution.
+ */
+COMMAND_HANDLER(handle_oocd_interface_signal_command)
+{
+       LOG_DEBUG("entering function...");
+
+       if (!jtag_interface) {
+               command_print(CMD_CTX, "You must initialize interface first!");
+               return ERROR_FAIL;
+       }
+
+       if (CMD_ARGC < 1 || CMD_ARGC > 3) {
+               command_print(CMD_CTX, "Bad syntax!");
+               return ERROR_COMMAND_SYNTAX_ERROR;
+       }
+
+       int sigmask;
+       char signame[32];
+
+       if (!strncasecmp(CMD_ARGV[0], "add", 3)) {
+               if (CMD_ARGC < 3) {
+                       LOG_ERROR("Usage: interface_signal add signal_name 
signal_mask");
+                       return ERROR_FAIL;
+               }
+               if (!strncpy(signame, CMD_ARGV[1], 32)) {
+                       LOG_ERROR("Unable to copy signal name from parameter 
list!");
+                       return ERROR_FAIL;
+               }
+               /* We are going to add interface signal. */
+               /* Check the mask parameter. */
+               if (!sscanf(CMD_ARGV[2], "%x", &sigmask)) {
+                       LOG_ERROR("Bad signal mask parameter! Use HEX value.");
+                       return ERROR_COMMAND_SYNTAX_ERROR;
+               }
+               /* Now add the inetrface signal with specified parameters. */
+               return oocd_interface_signal_add(signame, sigmask);
+
+       } else if (!strncasecmp(CMD_ARGV[0], "del", 3)) {
+               if (CMD_ARGC < 2) {
+                       LOG_ERROR("Usage: interface_signal del signal_name");
+                       return ERROR_FAIL;
+               }
+               /* We are going to delete specified signal. */
+               return oocd_interface_signal_del((char *)CMD_ARGV[1]);
+
+       } else if (!strncasecmp(CMD_ARGV[0], "list", 4)) {
+               /* We are going to list available signals. */
+               oocd_interface_signal_t *sig;
+               sig = jtag_interface->signal;
+               command_print(CMD_CTX, "      Interface Signal Name      |    
Mask    |   Value   ");
+               command_print(CMD_CTX, 
"----------------------------------------------------------");
+               while (sig) {
+                       command_print(CMD_CTX, "%32s | 0x%08X | 0x%08X", 
sig->name, sig->mask, sig->value);
+                       sig = sig->next;
+               }
+               /* Also print warning if interface driver does not support 
bit-baning. */
+               if (!jtag_interface->bitbang)
+                       command_print(CMD_CTX, "WARNING: This interface does 
not support bit-baning!");
+               return ERROR_OK;
+
+       } else if (!strncasecmp(CMD_ARGV[0], "find", 4)) {
+               if (CMD_ARGC < 2) {
+                       LOG_ERROR("Usage: interface_signal find signal_name");
+                       return ERROR_FAIL;
+               }
+               /* Find the signal and print its details. */
+               oocd_interface_signal_t *sig = oocd_interface_signal_find((char 
*)CMD_ARGV[1]);
+               if (sig != NULL) {
+                       command_print(CMD_CTX, "%s: mask=0x%08X value=0x%08X", 
sig->name, sig->mask, sig->value);
+                       return ERROR_OK;
+               }
+               /* Or return information and error if not found. */
+               command_print(CMD_CTX, "Signal not found!");
+               return ERROR_FAIL;
+       }
+       /* For unknown parameter print error and return error code. */
+       command_print(CMD_CTX, "Unknown parameter!");
+       return ERROR_COMMAND_SYNTAX_ERROR;
+}
+
+static const struct command_registration oocd_interface_signal_commands[] = {
+       {
+               .name = "interface_signal",
+               .handler = handle_oocd_interface_signal_command,
+               .mode = COMMAND_ANY,
+               .help = "List, Find, Remove and Add interface signal mask",
+               .usage = "(add|del|find|list) signal_name [mask]",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
+int oocd_interface_signal_register_commands(struct command_context *ctx)
+{
+       return register_commands(ctx, NULL, oocd_interface_signal_commands);
+}
diff --git a/src/interface/interface_signal.h b/src/interface/interface_signal.h
index 04294d2..01ec11b 100644
--- a/src/interface/interface_signal.h
+++ b/src/interface/interface_signal.h
@@ -46,4 +46,6 @@ int oocd_interface_signal_add(char *name, unsigned int mask);
 int oocd_interface_signal_del(char *name);
 oocd_interface_signal_t *oocd_interface_signal_find(char *name);
 
+int oocd_interface_signal_register_commands(struct command_context *ctx);
+
 #endif
diff --git a/src/openocd.c b/src/openocd.c
index 048ce85..6d18e61 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -32,6 +32,7 @@
 #include <jtag/driver.h>
 #include <jtag/jtag.h>
 #include <transport/transport.h>
+#include <interface/interface.h>
 #include <helper/ioutil.h>
 #include <helper/util.h>
 #include <helper/configuration.h>
@@ -240,6 +241,7 @@ struct command_context *setup_command_handler(Jim_Interp 
*interp)
                &log_register_commands,
                &transport_register_commands,
                &interface_register_commands,
+               &oocd_interface_signal_register_commands,
                &target_register_commands,
                &flash_register_commands,
                &nand_register_commands,

-- 

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to