Hi all,
This patch unwinds the logic in jlink_usb_message.
Cheers,
Zach
Index: src/jtag/jlink.c
===================================================================
--- src/jtag/jlink.c (revision 1497)
+++ src/jtag/jlink.c (working copy)
@@ -792,59 +779,48 @@
int result2;
result = jlink_usb_write(jlink_jtag, out_length);
- if (result == out_length)
+ if (result != out_length)
{
- result = jlink_usb_read(jlink_jtag, in_length);
- if (result == in_length || result == in_length+1)
+ LOG_ERROR("usb_bulk_write failed (requested=%d, result=%d)",
+ out_length, result);
+ return ERROR_JTAG_DEVICE_ERROR;
+ }
+
+ result = jlink_usb_read(jlink_jtag, in_length);
+ if ((result != in_length) && (result != in_length + 1))
+ {
+ LOG_ERROR("usb_bulk_read failed (requested=%d, result=%d)",
+ in_length, result);
+ return ERROR_JTAG_DEVICE_ERROR;
+ }
+
+ if (result == in_length)
+ {
+ /* Must read the result from the EMU too */
+ result2 = jlink_usb_read_emu_result(jlink_jtag);
+ if (1 != result2)
{
- if (result == in_length)
- {
- /* Must read the result from the EMU too */
- result2 = jlink_usb_read_emu_result(jlink_jtag);
- if (1 == result2)
- {
- /* 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 len (requested=1, result=%d)", result2);
- return -1;
- }
- }
- else
- {
- /* Check the result itself */
- if (0 == usb_in_buffer[result-1])
- {
- return result-1;
- }
- else
- {
- LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_in_buffer[result]);
- return -1;
- }
- }
+ LOG_ERROR("jlink_usb_read_emu_result failed "
+ "(requested=1, result=%d)", result2);
+ return ERROR_JTAG_DEVICE_ERROR;
}
- else
- {
- LOG_ERROR("usb_bulk_read failed (requested=%d, result=%d)", in_length, result);
- return -1;
- }
+
+ /* Check the result itself */
+ result2 = usb_emu_result_buffer[0];
}
else
{
- LOG_ERROR("usb_bulk_write failed (requested=%d, result=%d)", out_length, result);
- return -1;
+ /* Save the result, then remove it from return value */
+ result2 = usb_in_buffer[result--];
}
+
+ if (result2)
+ {
+ LOG_ERROR("jlink_usb_message failed with result=%d)", result2);
+ return ERROR_JTAG_DEVICE_ERROR;
+ }
+
+ return result;
}
/* calls the given usb_bulk_* function, allowing for the data to trickle in with some timeouts */
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development