summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-05-27 16:21:05 +0000
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-05-27 16:21:05 +0000
commit586e9e4ef144c8197987bc0a8183096493d1d55f (patch)
tree0ee6b7ac1ba29d7990cc952a0fd95c615a9a0f3f
parent923fdc6ff6b3be08075782fa56a4e146e1561fd8 (diff)
downloadopenocd+libswd-586e9e4ef144c8197987bc0a8183096493d1d55f.tar.gz
openocd+libswd-586e9e4ef144c8197987bc0a8183096493d1d55f.tar.bz2
openocd+libswd-586e9e4ef144c8197987bc0a8183096493d1d55f.tar.xz
openocd+libswd-586e9e4ef144c8197987bc0a8183096493d1d55f.zip
- 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
-rw-r--r--src/jtag/jlink.c52
1 files 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