]> git.sur5r.net Git - openocd/commitdiff
Added telnet_async command to enable/disable asynchronous
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 31 Oct 2008 13:40:02 +0000 (13:40 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 31 Oct 2008 13:40:02 +0000 (13:40 +0000)
messages.

git-svn-id: svn://svn.berlios.de/openocd/trunk@1117 b42882b7-edfa-0310-969c-e2dbd0fdcd60

doc/openocd.texi
src/helper/command.c
src/helper/command.h
src/helper/startup.tcl
src/server/telnet_server.c

index 902fb62c9f3f924962cf0fe8c95327ab70330beb..98ad644f77ac328ea3da66db40d33e9ea42d71b9 100644 (file)
@@ -265,6 +265,10 @@ OpenOCD command line using the @option{-c} command line switch.
 @item @b{telnet_port} <@var{number}>
 @cindex telnet_port
 @*Port on which to listen for incoming telnet connections 
+@item @b{telnet_async} <@var{enable/disable}>
+@cindex telnet_async
+@*Enable/disable asynchronous messages. Default off. Slows down debugging
+if enabled and telnet session is open while stepping.
 @item @b{tcl_port} <@var{number}>
 @cindex tcl_port
 @*Port on which to listen for incoming TCL syntax. This port is intended as
index 9ade320c669bfdc3442a290d1622fa094df73cfc..a8de14ee88bac62437a6735cdc83da8e70b8e4ad 100644 (file)
@@ -795,3 +795,16 @@ void register_jim(struct command_context_s *cmd_ctx, const char *name, int (*cmd
        Jim_ListAppendElement(interp, cmd_entry, Jim_NewStringObj(interp, help, -1));
        Jim_ListAppendElement(interp, helptext, cmd_entry);
 }
+
+
+/* return global variable long value or 0 upon failure */
+long jim_global_long(const char *variable)
+{
+       Jim_Obj *objPtr=Jim_GetGlobalVariableStr(interp, variable, JIM_ERRMSG);
+       long t;
+       if (Jim_GetLong(interp, objPtr, &t)==JIM_OK)
+       {
+               return t;
+       }
+       return 0;
+}
index a539c4607bfa2802c243994d882e6db888e222d1..49609a685f8cb7d15797bdc9fcfc223efdbaa931 100644 (file)
@@ -38,16 +38,16 @@ typedef struct command_context_s
        struct command_s *commands;
        int current_target;
        /* Execute a command.
-        * 
+        *
         * If the command fails, it *MUST* return a value != ERROR_OK
         * (many commands break this rule, patches welcome!)
-        * 
+        *
         * This is *especially* important for commands such as writing
         * to flash or verifying memory. The reason is that those commands
         * can be used by programs to determine if the operation succeded
         * or not. If the operation failed, then a program can try
         * an alternative approach.
-        * 
+        *
         * Returning ERROR_COMMAND_SYNTAX_ERROR will have the effect of
         * printing out the syntax of the command.
         */
@@ -101,4 +101,6 @@ extern Jim_Interp *interp;
 
 void register_jim(command_context_t *context, const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help);
 
+long jim_global_long(const char *variable);
+
 #endif /* COMMAND_H */
index eb1906661e865ccdcafb6f8b4e020f349b52c47b..0ac1ebd71d4f776173b8ff3e44166a0a89e3d432 100644 (file)
@@ -300,3 +300,19 @@ proc verify {args} {
 }
 
 add_help_text verify "synonym to verify_image"
+
+
+add_help_text telnet_async "<enable/disable> - enable/disable async messages. Default 0."
+
+global telnet_async_state
+set telnet_async_state 0
+proc telnet_async {state} {
+       global telnet_async_state
+       if {[string compare $state enable]==0} {
+               set telnet_async_state 1 
+       } elseif {[string compare $state disable]==0} {
+               set telnet_async_state 0 
+       } else {
+               return -code error "Illegal option $state"              
+       }
+}
\ No newline at end of file
index 85e1957f8599ce07be127be311d2ade1ae010b01..ef22348a9b7cd282cb9ed1caf498d1f4ba279370 100644 (file)
@@ -48,6 +48,11 @@ static unsigned short telnet_port = 0;
 int handle_exit_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 int handle_telnet_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 
+static int telnet_async()
+{
+       return jim_global_long("telnet_async_state");
+}
+
 static char *negotiate =
                "\xFF\xFB\x03"          /* IAC WILL Suppress Go Ahead */
                "\xFF\xFB\x01"          /* IAC WILL Echo */
@@ -186,7 +191,8 @@ int telnet_new_connection(connection_t *connection)
        telnet_connection->next_history = 0;
        telnet_connection->current_history = 0;
 
-       log_add_callback(telnet_log_callback, connection);
+       if (telnet_async())
+               log_add_callback(telnet_log_callback, connection);
 
 
 
@@ -341,7 +347,15 @@ int telnet_input(connection_t *connection)
                                                        t_con->line_size = 0;
 
                                                        t_con->line_cursor = -1; /* to supress prompt in log callback during command execution */
+
+                                                       if (!telnet_async())
+                                                               log_add_callback(telnet_log_callback, connection);
+
                                                        retval = command_run_line(command_context, t_con->line);
+
+                                                       if (!telnet_async())
+                                                               log_remove_callback(telnet_log_callback, connection);
+
                                                        t_con->line_cursor = 0;
 
                                                        if (retval == ERROR_COMMAND_CLOSE_CONNECTION)