bmd.hpp: More work

This commit is contained in:
Uwe Bonnes 2023-06-26 17:51:37 +02:00
parent 08a9fa3263
commit 9053c05afd
3 changed files with 17 additions and 20 deletions

View File

@ -3,6 +3,7 @@
* Copyright (c) 2021 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
*/
#include <stdio.h>
#include "bmd.hpp"
#include <sys/types.h>
#include <dirent.h>
@ -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++;

View File

@ -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:

View File

@ -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<vector<string>>(bus_dev_num))
("S,serial", "Debugger serial number(FTDI)",
("S,serial", "Debugger serial number(FTDI, BMD)",
cxxopts::value<string>(args->serial))
("ftdi-channel",
"FTDI chip channel number (channels 0-3 map to A-D)",