Added telnet_async command to enable/disable asynchronous
messages. git-svn-id: svn://svn.berlios.de/openocd/trunk@1117 b42882b7-edfa-0310-969c-e2dbd0fdcd60__archive__
parent
e4218ebb8f
commit
c2120ba28a
|
@ -265,6 +265,10 @@ OpenOCD command line using the @option{-c} command line switch.
|
||||||
@item @b{telnet_port} <@var{number}>
|
@item @b{telnet_port} <@var{number}>
|
||||||
@cindex telnet_port
|
@cindex telnet_port
|
||||||
@*Port on which to listen for incoming telnet connections
|
@*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}>
|
@item @b{tcl_port} <@var{number}>
|
||||||
@cindex tcl_port
|
@cindex tcl_port
|
||||||
@*Port on which to listen for incoming TCL syntax. This port is intended as
|
@*Port on which to listen for incoming TCL syntax. This port is intended as
|
||||||
|
|
|
@ -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, cmd_entry, Jim_NewStringObj(interp, help, -1));
|
||||||
Jim_ListAppendElement(interp, helptext, cmd_entry);
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -38,16 +38,16 @@ typedef struct command_context_s
|
||||||
struct command_s *commands;
|
struct command_s *commands;
|
||||||
int current_target;
|
int current_target;
|
||||||
/* Execute a command.
|
/* Execute a command.
|
||||||
*
|
*
|
||||||
* If the command fails, it *MUST* return a value != ERROR_OK
|
* If the command fails, it *MUST* return a value != ERROR_OK
|
||||||
* (many commands break this rule, patches welcome!)
|
* (many commands break this rule, patches welcome!)
|
||||||
*
|
*
|
||||||
* This is *especially* important for commands such as writing
|
* This is *especially* important for commands such as writing
|
||||||
* to flash or verifying memory. The reason is that those commands
|
* to flash or verifying memory. The reason is that those commands
|
||||||
* can be used by programs to determine if the operation succeded
|
* can be used by programs to determine if the operation succeded
|
||||||
* or not. If the operation failed, then a program can try
|
* or not. If the operation failed, then a program can try
|
||||||
* an alternative approach.
|
* an alternative approach.
|
||||||
*
|
*
|
||||||
* Returning ERROR_COMMAND_SYNTAX_ERROR will have the effect of
|
* Returning ERROR_COMMAND_SYNTAX_ERROR will have the effect of
|
||||||
* printing out the syntax of the command.
|
* 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);
|
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 */
|
#endif /* COMMAND_H */
|
||||||
|
|
|
@ -300,3 +300,19 @@ proc verify {args} {
|
||||||
}
|
}
|
||||||
|
|
||||||
add_help_text verify "synonym to verify_image"
|
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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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_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);
|
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 =
|
static char *negotiate =
|
||||||
"\xFF\xFB\x03" /* IAC WILL Suppress Go Ahead */
|
"\xFF\xFB\x03" /* IAC WILL Suppress Go Ahead */
|
||||||
"\xFF\xFB\x01" /* IAC WILL Echo */
|
"\xFF\xFB\x01" /* IAC WILL Echo */
|
||||||
|
@ -186,7 +191,8 @@ int telnet_new_connection(connection_t *connection)
|
||||||
telnet_connection->next_history = 0;
|
telnet_connection->next_history = 0;
|
||||||
telnet_connection->current_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_size = 0;
|
||||||
|
|
||||||
t_con->line_cursor = -1; /* to supress prompt in log callback during command execution */
|
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);
|
retval = command_run_line(command_context, t_con->line);
|
||||||
|
|
||||||
|
if (!telnet_async())
|
||||||
|
log_remove_callback(telnet_log_callback, connection);
|
||||||
|
|
||||||
t_con->line_cursor = 0;
|
t_con->line_cursor = 0;
|
||||||
|
|
||||||
if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
|
if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
|
||||||
|
|
Loading…
Reference in New Issue