From 9a10ac4d4870fba40855d3fb1635554e0b3ff664 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sun, 14 Jun 2020 15:05:47 +0200 Subject: [PATCH] ftdiJtagBitbang: implement toggleClk --- src/ftdiJtagBitbang.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/ftdiJtagBitbang.cpp b/src/ftdiJtagBitbang.cpp index 8cd54af..2f8344f 100644 --- a/src/ftdiJtagBitbang.cpp +++ b/src/ftdiJtagBitbang.cpp @@ -196,10 +196,25 @@ int FtdiJtagBitBang::writeTDI(uint8_t *tx, uint8_t *rx, uint32_t len, bool end) return len; } -int FtdiJtagBitBang::toggleClk(uint8_t tms, uint8_t tdo, uint32_t clk_len) +int FtdiJtagBitBang::toggleClk(uint8_t tms, uint8_t tdi, uint32_t clk_len) { - (void) tms; (void) tdo; (void) clk_len; - return -1; + int xfer_len = clk_len; + + int val = ((tms) ? _tms_pin : 0) | ((tdi) ? _tdi_pin : 0); + while (xfer_len > 0) { + if (_nb_bit + 2 > _buffer_size) + if (write(NULL, 0) < 0) + return -EXIT_FAILURE; + _in_buf[_nb_bit++] = val | _tck_pin; + _in_buf[_nb_bit++] = val; + + xfer_len--; + } + + /* flush */ + write(NULL, 0); + + return clk_len; } int FtdiJtagBitBang::flush()