diff options
author | Tim Newsome <tim@sifive.com> | 2017-02-06 19:17:23 -0800 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2017-02-06 19:17:23 -0800 |
commit | 4695be7cea868b34082787d5728c35577d0c05d1 (patch) | |
tree | b9d730b3955e924e0b198ccc6c7d5014d06817f9 /riscv/remote_bitbang.cc | |
parent | 9be157042081e894e6c12dc96449cf865469bcfe (diff) | |
download | spike-4695be7cea868b34082787d5728c35577d0c05d1.zip spike-4695be7cea868b34082787d5728c35577d0c05d1.tar.gz spike-4695be7cea868b34082787d5728c35577d0c05d1.tar.bz2 |
Refactor remote bitbang code.
Diffstat (limited to 'riscv/remote_bitbang.cc')
-rw-r--r-- | riscv/remote_bitbang.cc | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/riscv/remote_bitbang.cc b/riscv/remote_bitbang.cc index 7f22cd3..acfd216 100644 --- a/riscv/remote_bitbang.cc +++ b/riscv/remote_bitbang.cc @@ -11,6 +11,12 @@ #include "remote_bitbang.h" +#if 1 +# define D(x) x +#else +# define D(x) +#endif + /////////// Circular buffer template <typename T> @@ -87,7 +93,8 @@ void circular_buffer_t<T>::append(T value) /////////// remote_bitbang_t -remote_bitbang_t::remote_bitbang_t(uint16_t port, sim_t *sim) : +remote_bitbang_t::remote_bitbang_t(uint16_t port, jtag_dtm_t *tap) : + tap(tap), socket_fd(0), client_fd(0), recv_buf(64 * 1024), @@ -212,22 +219,27 @@ void remote_bitbang_t::tick() void remote_bitbang_t::process_input() { + // TODO: get rid of the circular buffers, and just read/write here with + // simple local buffers. + // Each message is a single character, so there's never any need to keep a + // partially transmitted message around. + for (unsigned i = 0; i < recv_buf.size(); i++) { uint8_t command = recv_buf[i]; switch (command) { case 'B': fprintf(stderr, "*BLINK*\n"); break; case 'b': fprintf(stderr, "_______\n"); break; - case 'r': tap.reset(); break; - case '0': tap.set_pins(0, 0, 0); break; - case '1': tap.set_pins(0, 0, 1); break; - case '2': tap.set_pins(0, 1, 0); break; - case '3': tap.set_pins(0, 1, 1); break; - case '4': tap.set_pins(1, 0, 0); break; - case '5': tap.set_pins(1, 0, 1); break; - case '6': tap.set_pins(1, 1, 0); break; - case '7': tap.set_pins(1, 1, 1); break; - case 'R': send_buf.append(tap.tdo() ? '1' : '0'); break; + case 'r': tap->reset(); break; + case '0': tap->set_pins(0, 0, 0); break; + case '1': tap->set_pins(0, 0, 1); break; + case '2': tap->set_pins(0, 1, 0); break; + case '3': tap->set_pins(0, 1, 1); break; + case '4': tap->set_pins(1, 0, 0); break; + case '5': tap->set_pins(1, 0, 1); break; + case '6': tap->set_pins(1, 1, 0); break; + case '7': tap->set_pins(1, 1, 1); break; + case 'R': send_buf.append(tap->tdo() ? '1' : '0'); break; default: fprintf(stderr, "remote_bitbang got unsupported command '%c'\n", command); } |