X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/85690a3f9979e3614e46847053a60289eb990ef0..3f5287b7f725b0e90b8a29b4ed3e16cfdc8d6fbe:/jtagkey.c diff --git a/jtagkey.c b/jtagkey.c index b06b6b4..04cfb4c 100644 --- a/jtagkey.c +++ b/jtagkey.c @@ -208,8 +208,35 @@ int jtagkey_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, { DPRINTF("writing %d bytes\n", writepos-writebuf); for (i=0; i 0 && + tr[combine-1].cmdTrans == PP_READ) { + break; + } else { + combine++; + } + } while (combine < writepos-writebuf); + + DPRINTF("combined writes before read: %d\n", combine); + + if ((combine-i)-1 > 0) { + ftdi_write_data(&ftdic, writebuf+i, (combine-i)-1); + i = combine-1; + } +#endif + ftdi_write_data(&ftdic, writebuf+i, 1); - ftdi_read_pins(&ftdic, readbuf+i); + + if (i > 0 && tr[i].cmdTrans == PP_WRITE && tr[i-1].cmdTrans == PP_READ) + ftdi_read_pins(&ftdic, readbuf+i); + + if (i == (writepos-writebuf)-1 && tr[i].cmdTrans == PP_READ) { + ftdi_write_data(&ftdic, writebuf+i, 1); + ftdi_read_pins(&ftdic, readbuf+i+1); + } } #ifdef DEBUG @@ -225,7 +252,6 @@ int jtagkey_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, } readpos = readbuf; - readpos += 0; for (i = 0; i < num; i++) { DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",