X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Ftarget_request.c;h=b266fea5ed48d0854a1305f16eb7433df1f8dcb4;hb=df77b45054b7929b90f348481823d6b0b38fe219;hp=9dc58607986744b6c3e5d45553130ef68e1a48dd;hpb=29000b204d039bc1123027eba755329ab36a3dde;p=fw%2Fopenocd diff --git a/src/target/target_request.c b/src/target/target_request.c index 9dc586079..b266fea5e 100644 --- a/src/target/target_request.c +++ b/src/target/target_request.c @@ -2,6 +2,12 @@ * Copyright (C) 2007 by Dominic Rath * * Dominic.Rath@gmx.de * * * + * Copyright (C) 2007,2008 Øyvind Harboe * + * oyvind.harboe@zylin.com * + * * + * Copyright (C) 2008 by Spencer Oliver * + * spen@spen-soft.co.uk * + * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * @@ -42,7 +48,7 @@ int target_asciimsg(target_t *target, u32 length) target->type->target_request_data(target, CEIL(length, 4), (u8*)msg); msg[length] = 0; - DEBUG("%s", msg); + LOG_DEBUG("%s", msg); while (c) { @@ -53,6 +59,13 @@ int target_asciimsg(target_t *target, u32 length) return ERROR_OK; } +int target_charmsg(target_t *target, u8 msg) +{ + LOG_USER_N("%c", msg); + + return ERROR_OK; +} + int target_hexmsg(target_t *target, int size, u32 length) { u8 *data = malloc(CEIL(length * size, 4) * 4); @@ -61,7 +74,7 @@ int target_hexmsg(target_t *target, int size, u32 length) debug_msg_receiver_t *c = target->dbgmsg; int i; - DEBUG("size: %i, length: %i", size, length); + LOG_DEBUG("size: %i, length: %i", size, length); target->type->target_request_data(target, CEIL(length * size, 4), (u8*)data); @@ -83,6 +96,8 @@ int target_hexmsg(target_t *target, int size, u32 length) if ((i%8 == 7) || (i == length - 1)) { + LOG_DEBUG("%s", line); + while (c) { command_print(c->cmd_ctx, "%s", line); @@ -120,11 +135,14 @@ int target_request(target_t *target, u32 request) target_hexmsg(target, (request & 0xff00) >> 8, (request & 0xffff0000) >> 16); } break; + case TARGET_REQ_DEBUGCHAR: + target_charmsg(target, (request & 0x00ff0000) >> 16); + break; /* case TARGET_REQ_SEMIHOSTING: * break; */ default: - ERROR("unknown target request: %2.2x", target_req_cmd); + LOG_ERROR("unknown target request: %2.2x", target_req_cmd); break; } @@ -153,23 +171,26 @@ int add_debug_msg_receiver(struct command_context_s *cmd_ctx, target_t *target) (*p)->cmd_ctx = cmd_ctx; (*p)->next = NULL; + /* enable callback */ + target->dbg_msg_enabled = 1; + return ERROR_OK; } debug_msg_receiver_t* find_debug_msg_receiver(struct command_context_s *cmd_ctx, target_t *target) { - int all_targets = 0; + int do_all_targets = 0; debug_msg_receiver_t **p = &target->dbgmsg; /* if no target has been specified search all of them */ if (target == NULL) { /* if no targets haven been specified */ - if (targets == NULL) + if (all_targets == NULL) return NULL; - target = targets; - all_targets = 1; + target = all_targets; + do_all_targets = 1; } do @@ -184,7 +205,7 @@ debug_msg_receiver_t* find_debug_msg_receiver(struct command_context_s *cmd_ctx, } target = target->next; - } while (target && all_targets); + } while (target && do_all_targets); return NULL; } @@ -193,17 +214,17 @@ int delete_debug_msg_receiver(struct command_context_s *cmd_ctx, target_t *targe { debug_msg_receiver_t **p; debug_msg_receiver_t *c; - int all_targets = 0; + int do_all_targets = 0; /* if no target has been specified search all of them */ if (target == NULL) { /* if no targets haven been specified */ - if (targets == NULL) + if (all_targets == NULL) return ERROR_OK; - target = targets; - all_targets = 1; + target = all_targets; + do_all_targets = 1; } do @@ -217,6 +238,11 @@ int delete_debug_msg_receiver(struct command_context_s *cmd_ctx, target_t *targe { *p = next; free(c); + if (*p == NULL) + { + /* disable callback */ + target->dbg_msg_enabled = 0; + } return ERROR_OK; } else @@ -225,7 +251,7 @@ int delete_debug_msg_receiver(struct command_context_s *cmd_ctx, target_t *targe } target = target->next; - } while (target && all_targets); + } while (target && do_all_targets); return ERROR_OK; } @@ -278,7 +304,7 @@ int target_request_register_commands(struct command_context_s *cmd_ctx) register_command(cmd_ctx, NULL, "target_request", NULL, COMMAND_ANY, "target_request commands"); register_command(cmd_ctx, target_request_cmd, "debugmsgs", handle_target_request_debugmsgs_command, - COMMAND_EXEC, "enable/disable reception of debug messgages from target"); + COMMAND_EXEC, "enable/disable reception of debug messages from target"); return ERROR_OK; }