diff --git a/src/bmd.cpp b/src/bmd.cpp index 82ef034..f125c1b 100644 --- a/src/bmd.cpp +++ b/src/bmd.cpp @@ -3,6 +3,7 @@ * Copyright (c) 2021 Uwe Bonnes */ +#include #include "bmd.hpp" #include #include @@ -23,14 +24,15 @@ #define FREQ_FIXED -1 -void Bmd::DEBUG_WIRE(const char *format, ...) +void Bmd::DEBUG_WIRE(const void *const data, const size_t length) { if (!_verbose) return; - va_list ap; - va_start(ap, format); - vfprintf(stderr, format, ap); - va_end(ap); + uint8_t *c = (uint8_t *) data; + for (unsigned int i = 0; i < length; i++) { + fprintf(stderr, "%c", c[i]); + } + fprintf(stderr, " -> "); } static const char hexdigits[] = "0123456789abcdef"; @@ -108,7 +110,7 @@ int Bmd::setClkFreq(uint32_t clkHZ) int s; s = snprintf(buffer, REMOTE_MAX_MSG_SIZE, REMOTE_FREQ_SET_STR, clkHZ); - platform_buffer_write(REMOTE_FREQ_SET_STR, sizeof(REMOTE_FREQ_SET_STR)); + platform_buffer_write(buffer, s); s = platform_buffer_read(buffer, REMOTE_MAX_MSG_SIZE); @@ -348,9 +350,9 @@ static void open_bmd(std::string dev, const std::string &serial) } } -int Bmd::platform_buffer_write(const char *data, int size) +int Bmd::platform_buffer_write(const void *const data, const size_t length) { - DEBUG_WIRE("%s\n",data); + DEBUG_WIRE(data, length); int s = 0; do { @@ -363,12 +365,6 @@ int Bmd::platform_buffer_write(const char *data, int size) } s += written; } while (s < size); - fprintf(stderr, "%c%c: ", data[0], data[1]), - for (int i = 2, i < size, i++) { - fprintf(stderr, "%02x", data[i]); - } - fprintf(stderr, "\n"); - } return 0; } @@ -395,10 +391,10 @@ int Bmd::platform_buffer_read(void *data, size_t size) return -3; } if (s > 0 ) { - Bmd::DEBUG_WIRE("%c", *c); + Bmd::DEBUG_WIRE(&c, 1); if (*c == REMOTE_EOM) { *c = 0; - Bmd::DEBUG_WIRE("\n"); + Bmd::DEBUG_WIRE("\n", 1); return (c - data); } else { c++; @@ -522,7 +518,7 @@ static void open_bmd(std::string dev, const std::string &serial) bool Bmd::platform_buffer_write(const void *const data, const size_t length) { - Bmd::DEBUG_WIRE("%s\n", data); + Bmd::DEBUG_WIRE(data, length); const ssize_t written = write(fd, data, length); if (written < 0) { fprintf(stdout, "Failed to write\n"); @@ -575,9 +571,10 @@ int Bmd::platform_buffer_read(void *data, const size_t length) return -5 ; } s = read(fd, c, 1); + fprintf(stderr, "%c", c[0]); if (*c==REMOTE_EOM) { *c = 0; - Bmd::DEBUG_WIRE(" %s\n",data); + fprintf(stderr, "\n"); return (c - anchor); } else { c++; diff --git a/src/bmd.hpp b/src/bmd.hpp index 5e15807..20d5cc9 100644 --- a/src/bmd.hpp +++ b/src/bmd.hpp @@ -39,7 +39,7 @@ private: int platform_buffer_read(void *data, const size_t length); char *unhexify(void *buf, const char *hex, size_t size); char *hexify(char *hex, const void *buf, size_t size); - void DEBUG_WIRE(const char *format, ...); + void DEBUG_WIRE(const void *const data, const size_t length); void remote_v0_jtag_tdi_tdo_seq(uint8_t *data_out, bool final_tms, const uint8_t *data_in, size_t clock_cycles); uint64_t remote_hex_string_to_num(const uint32_t max, const char *const str); protected: diff --git a/src/main.cpp b/src/main.cpp index 68bce8a..e7f5cff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -724,7 +724,7 @@ int parse_opt(int argc, char **argv, struct arguments *args, ("busdev-num", "select a probe by it bus and device number (bus_num:device_addr)", cxxopts::value>(bus_dev_num)) - ("S,serial", "Debugger serial number(FTDI)", + ("S,serial", "Debugger serial number(FTDI, BMD)", cxxopts::value(args->serial)) ("ftdi-channel", "FTDI chip channel number (channels 0-3 map to A-D)",