@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
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;
+}
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.
*/
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 */
}
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
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 */
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);
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)