summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jtag/usbprog.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/jtag/usbprog.c b/src/jtag/usbprog.c
index 5d5518da..81666885 100644
--- a/src/jtag/usbprog.c
+++ b/src/jtag/usbprog.c
@@ -347,18 +347,16 @@ void usbprog_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size)
usbprog_jtag_tms_send(usbprog_jtag_handle);
- if (type == SCAN_OUT)
- {
- usbprog_jtag_write_tdi(usbprog_jtag_handle,buffer, scan_size);
- }
- if (type == SCAN_IN)
- {
- usbprog_jtag_read_tdo(usbprog_jtag_handle,buffer, scan_size);
- }
- if (type == SCAN_IO)
- {
- usbprog_jtag_write_and_read(usbprog_jtag_handle,buffer, scan_size);
+ void (*f)(struct usbprog_jtag *usbprog_jtag, char * buffer, int size);
+ switch (type) {
+ case SCAN_OUT: f = &usbprog_jtag_write_tdi; break;
+ case SCAN_IN: f = &usbprog_jtag_read_tdo; break;
+ case SCAN_IO: f = &usbprog_jtag_write_and_read; break;
+ default:
+ LOG_ERROR("unknown scan type: %i", type);
+ exit(-1);
}
+ f(usbprog_jtag_handle, (char *)buffer, scan_size);
if (ir_scan)
tap_set_state(TAP_IRPAUSE);