- fix issue if jlink sends result in single usb in packet
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 27 May 2008 16:21:05 +0000 (16:21 +0000)
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 27 May 2008 16:21:05 +0000 (16:21 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@691 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/jlink.c

index 7ca53d80f4890d7deecf7f2f668f239cfc2df8f1..943cfdc3aa45f9697b8b2ce3c8f007c26c29dc6a 100644 (file)
@@ -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