ft2232: revert ft2232_read_scan changes
authorSpencer Oliver <ntfreak@users.sourceforge.net>
Fri, 2 Jul 2010 16:00:57 +0000 (17:00 +0100)
committerSpencer Oliver <ntfreak@users.sourceforge.net>
Fri, 2 Jul 2010 16:00:57 +0000 (17:00 +0100)
Revert change made in commit dd88b461da1cb8642200dd5c96fb1ff384ca9f7b.
Caused segfaults when using ftdi driver under win32.

Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
src/jtag/drivers/ft2232.c

index 90516a09bddb5d71bcd1aad6dd81cf2949a869b7..f315d69970bf3205675833d9267720bb7eea78d3 100644 (file)
@@ -714,24 +714,23 @@ static void ft2232_end_state(tap_state_t state)
 
 static void ft2232_read_scan(enum scan_type type, uint8_t* buffer, int scan_size)
 {
-       int num_bytes = scan_size / 8;
-       int bits_left = scan_size % 8;
-       int cur_byte;
+       int num_bytes = (scan_size + 7) / 8;
+       int bits_left = scan_size;
+       int cur_byte  = 0;
 
-       for (cur_byte = 0; cur_byte < num_bytes; cur_byte++)
+       while (num_bytes-- > 1)
        {
-               buffer[cur_byte] = buffer_read();
+               buffer[cur_byte++] = buffer_read();
+               bits_left -= 8;
        }
 
-       /* Manage partial byte left from the clock data in/out instructions, if any */
+       buffer[cur_byte] = 0x0;
+
+       /* There is one more partial byte left from the clock data in/out instructions */
        if (bits_left > 1)
        {
                buffer[cur_byte] = buffer_read() >> 1;
        }
-       else
-       {
-               buffer[cur_byte] = 0x0;
-       }
        /* This shift depends on the length of the clock data to tms instruction, insterted at end of the scan, now fixed to a two step transition in ft2232_add_scan */
        buffer[cur_byte] = (buffer[cur_byte] | (((buffer_read()) << 1) & 0x80)) >> (8 - bits_left);
 }