|
|
@@ -773,11 +773,9 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states) |
|
|
|
/* this loop verifies that the path is legal and logs each state in the path */ |
|
|
|
while (num_states) |
|
|
|
{ |
|
|
|
unsigned char tms_byte = 0; /* zero this on each MPSSE batch */ |
|
|
|
|
|
|
|
int bit_count = 0; |
|
|
|
|
|
|
|
int num_states_batch = num_states > 7 ? 7 : num_states; |
|
|
|
unsigned char tms_byte = 0; /* zero this on each MPSSE batch */ |
|
|
|
int bit_count = 0; |
|
|
|
int num_states_batch = num_states > 7 ? 7 : num_states; |
|
|
|
|
|
|
|
/* command "Clock Data to TMS/CS Pin (no Read)" */ |
|
|
|
buffer_write(0x4b); |
|
|
@@ -785,26 +783,31 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states) |
|
|
|
/* number of states remaining */ |
|
|
|
buffer_write(num_states_batch - 1); |
|
|
|
|
|
|
|
while (num_states_batch--) |
|
|
|
{ |
|
|
|
if (tap_state_transition(tap_get_state(), false) == path[state_count]) |
|
|
|
while (num_states_batch--) { |
|
|
|
/* either TMS=0 or TMS=1 must work ... */ |
|
|
|
if (tap_state_transition(tap_get_state(), false) |
|
|
|
== path[state_count]) |
|
|
|
buf_set_u32(&tms_byte, bit_count++, 1, 0x0); |
|
|
|
else if (tap_state_transition(tap_get_state(), true) == path[state_count]) |
|
|
|
else if (tap_state_transition(tap_get_state(), true) |
|
|
|
== path[state_count]) |
|
|
|
buf_set_u32(&tms_byte, bit_count++, 1, 0x1); |
|
|
|
else |
|
|
|
{ |
|
|
|
LOG_ERROR( "BUG: %s -> %s isn't a valid TAP transition", tap_state_name( |
|
|
|
tap_get_state() ), tap_state_name(path[state_count]) ); |
|
|
|
|
|
|
|
/* ... or else the caller goofed BADLY */ |
|
|
|
else { |
|
|
|
LOG_ERROR("BUG: %s -> %s isn't a valid " |
|
|
|
"TAP state transition", |
|
|
|
tap_state_name(tap_get_state()), |
|
|
|
tap_state_name(path[state_count])); |
|
|
|
exit(-1); |
|
|
|
} |
|
|
|
|
|
|
|
tap_set_state(path[state_count]); |
|
|
|
tap_set_state(path[state_count]); |
|
|
|
state_count++; |
|
|
|
num_states--; |
|
|
|
} |
|
|
|
|
|
|
|
buffer_write(tms_byte); |
|
|
|
} |
|
|
|
} |
|
|
|
tap_set_end_state(tap_get_state()); |
|
|
|
} |
|
|
|
|
|
|
|