- 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
__archive__
ntfreak 2008-05-27 16:21:05 +00:00
parent 923fdc6ff6
commit 586e9e4ef1
1 changed files with 32 additions and 20 deletions

View File

@ -170,8 +170,7 @@ int jlink_execute_queue(void)
break; break;
case JTAG_STATEMOVE: case JTAG_STATEMOVE:
DEBUG_JTAG_IO("statemove end in %i", DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
cmd->cmd.statemove->end_state);
if (cmd->cmd.statemove->end_state != -1) if (cmd->cmd.statemove->end_state != -1)
{ {
@ -181,9 +180,9 @@ int jlink_execute_queue(void)
break; break;
case JTAG_PATHMOVE: case JTAG_PATHMOVE:
DEBUG_JTAG_IO("pathmove: %i states, end in %i", DEBUG_JTAG_IO("pathmove: %i states, end in %i", \
cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->num_states, \
cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
jlink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path); jlink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path);
break; break;
@ -207,9 +206,7 @@ int jlink_execute_queue(void)
break; break;
case JTAG_RESET: case JTAG_RESET:
DEBUG_JTAG_IO("reset trst: %i srst %i", DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
cmd->cmd.reset->trst,
cmd->cmd.reset->srst);
jlink_tap_execute(); 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) if (result == out_length)
{ {
result = jlink_usb_read(jlink_jtag); 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 */ if (result == in_length)
result2 = jlink_usb_read_emu_result(jlink_jtag);
if (1 == result2)
{ {
/* Check the result itself */ /* Must read the result from the EMU too */
if (0 == usb_emu_result_buffer[0]) 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 else
{ {
LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]); LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2);
return -1; return -1;
} }
} }
else else
{ {
LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2); /* Check the result itself */
return -1; 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 else
@ -882,7 +895,6 @@ int jlink_usb_read_emu_result(jlink_jtag_t *jlink_jtag)
return result; return result;
} }
#ifdef _DEBUG_USB_COMMS_ #ifdef _DEBUG_USB_COMMS_
#define BYTES_PER_LINE 16 #define BYTES_PER_LINE 16