]> git.sur5r.net Git - openocd/blobdiff - src/helper/command.h
target: use correct target in target-prefixed commands and event handlers
[openocd] / src / helper / command.h
index 347441b5e5c6adc64101fbcc33277020651813da..1a26c069956af15e6d3302b444ccc5ff8d8e4aca 100644 (file)
@@ -19,8 +19,8 @@
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
-#ifndef COMMAND_H
-#define COMMAND_H
+#ifndef OPENOCD_HELPER_COMMAND_H
+#define OPENOCD_HELPER_COMMAND_H
 
 #include <jim-nvp.h>
 
@@ -49,7 +49,15 @@ struct command_context {
        Jim_Interp *interp;
        enum command_mode mode;
        struct command *commands;
-       int current_target;
+       struct target *current_target;
+               /* The target set by 'targets xx' command or the latest created */
+       struct target *current_target_override;
+               /* If set overrides current_target
+                * It happens during processing of
+                *      1) a target prefixed command
+                *      2) an event handler
+                * Pay attention to reentrancy when setting override.
+                */
        command_output_handler_t output_handler;
        void *output_handler_priv;
 };
@@ -168,6 +176,11 @@ struct command {
        command_handler_t handler;
        Jim_CmdProc *jim_handler;
        void *jim_handler_data;
+               /* Currently used only for target of target-prefixed cmd.
+                * Native OpenOCD commands use jim_handler_data exclusively
+                * as a target override.
+                * Jim handlers outside of target cmd tree can use
+                * jim_handler_data for any handler specific data */
        enum command_mode mode;
        struct command *next;
 };
@@ -307,6 +320,14 @@ struct command_context *current_command_context(Jim_Interp *interp);
  * creates a command interpreter.
  */
 struct command_context *command_init(const char *startup_tcl, Jim_Interp *interp);
+/**
+ * Shutdown a command context.
+ *
+ * Free the command context and the associated Jim interpreter.
+ *
+ * @param context The command_context that will be destroyed.
+ */
+void command_exit(struct command_context *context);
 /**
  * Creates a copy of an existing command context.  This does not create
  * a deep copy of the command list, so modifications in one context will
@@ -357,10 +378,13 @@ DECLARE_PARSE_WRAPPER(_u16, uint16_t);
 DECLARE_PARSE_WRAPPER(_u8, uint8_t);
 
 DECLARE_PARSE_WRAPPER(_int, int);
+DECLARE_PARSE_WRAPPER(_s64, int64_t);
 DECLARE_PARSE_WRAPPER(_s32, int32_t);
 DECLARE_PARSE_WRAPPER(_s16, int16_t);
 DECLARE_PARSE_WRAPPER(_s8, int8_t);
 
+DECLARE_PARSE_WRAPPER(_target_addr, target_addr_t);
+
 /**
  * @brief parses the string @a in into @a out as a @a type, or prints
  * a command error and passes the error code to the caller.  If an error
@@ -382,6 +406,9 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t);
                } \
        } while (0)
 
+#define COMMAND_PARSE_ADDRESS(in, out) \
+       COMMAND_PARSE_NUMBER(target_addr, in, out)
+
 /**
  * Parse the string @c as a binary parameter, storing the boolean value
  * in @c out.  The strings @c on and @c off are used to match different
@@ -415,4 +442,4 @@ COMMAND_HELPER(handle_command_parse_bool, bool *out, const char *label);
 void script_debug(Jim_Interp *interp, const char *cmd,
                  unsigned argc, Jim_Obj * const *argv);
 
-#endif /* COMMAND_H */
+#endif /* OPENOCD_HELPER_COMMAND_H */