From 586e9e4ef144c8197987bc0a8183096493d1d55f Mon Sep 17 00:00:00 2001 From: ntfreak Date: Tue, 27 May 2008 16:21:05 +0000 Subject: - fix issue if jlink sends result in single usb in packet git-svn-id: svn://svn.berlios.de/openocd/trunk@691 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/jlink.c | 52 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/src/jtag/jlink.c b/src/jtag/jlink.c index 7ca53d80..943cfdc3 100644 --- a/src/jtag/jlink.c +++ b/src/jtag/jlink.c @@ -170,8 +170,7 @@ int jlink_execute_queue(void) break; case JTAG_STATEMOVE: - DEBUG_JTAG_IO("statemove end in %i", - cmd->cmd.statemove->end_state); + DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state); if (cmd->cmd.statemove->end_state != -1) { @@ -181,9 +180,9 @@ int jlink_execute_queue(void) break; case JTAG_PATHMOVE: - DEBUG_JTAG_IO("pathmove: %i states, end in %i", - cmd->cmd.pathmove->num_states, - cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); + DEBUG_JTAG_IO("pathmove: %i states, end in %i", \ + cmd->cmd.pathmove->num_states, \ + cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); jlink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path); break; @@ -207,9 +206,7 @@ int jlink_execute_queue(void) break; case JTAG_RESET: - DEBUG_JTAG_IO("reset trst: %i srst %i", - cmd->cmd.reset->trst, - cmd->cmd.reset->srst); + DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst); jlink_tap_execute(); @@ -796,27 +793,43 @@ int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_length) if (result == out_length) { result = jlink_usb_read(jlink_jtag); - if (result == in_length) + if (result == in_length || result == in_length+1) { - /* Must read the result from the EMU too */ - result2 = jlink_usb_read_emu_result(jlink_jtag); - if (1 == result2) + if (result == in_length) { - /* Check the result itself */ - if (0 == usb_emu_result_buffer[0]) + /* Must read the result from the EMU too */ + result2 = jlink_usb_read_emu_result(jlink_jtag); + if (1 == result2) { - return result; + /* Check the result itself */ + if (0 == usb_emu_result_buffer[0]) + { + return result; + } + else + { + LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]); + return -1; + } } else { - LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]); - return -1; + LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2); + return -1; } } else { - LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2); - return -1; + /* Check the result itself */ + if (0 == usb_in_buffer[result]) + { + return result-1; + } + else + { + LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_in_buffer[result]); + return -1; + } } } else @@ -882,7 +895,6 @@ int jlink_usb_read_emu_result(jlink_jtag_t *jlink_jtag) return result; } - #ifdef _DEBUG_USB_COMMS_ #define BYTES_PER_LINE 16 -- cgit v1.2.3