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> * Copyright (c) 2021 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
*/ */
#include <stdio.h>
#include "bmd.hpp" #include "bmd.hpp"
#include <sys/types.h> #include <sys/types.h>
#include <dirent.h> #include <dirent.h>
@ -23,14 +24,15 @@
#define FREQ_FIXED -1 #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) if (!_verbose)
return; return;
va_list ap; uint8_t *c = (uint8_t *) data;
va_start(ap, format); for (unsigned int i = 0; i < length; i++) {
vfprintf(stderr, format, ap); fprintf(stderr, "%c", c[i]);
va_end(ap); }
fprintf(stderr, " -> ");
} }
static const char hexdigits[] = "0123456789abcdef"; static const char hexdigits[] = "0123456789abcdef";
@ -108,7 +110,7 @@ int Bmd::setClkFreq(uint32_t clkHZ)
int s; int s;
s = snprintf(buffer, REMOTE_MAX_MSG_SIZE, REMOTE_FREQ_SET_STR, s = snprintf(buffer, REMOTE_MAX_MSG_SIZE, REMOTE_FREQ_SET_STR,
clkHZ); 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); 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; int s = 0;
do { do {
@ -363,12 +365,6 @@ int Bmd::platform_buffer_write(const char *data, int size)
} }
s += written; s += written;
} while (s < size); } 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; return 0;
} }
@ -395,10 +391,10 @@ int Bmd::platform_buffer_read(void *data, size_t size)
return -3; return -3;
} }
if (s > 0 ) { if (s > 0 ) {
Bmd::DEBUG_WIRE("%c", *c); Bmd::DEBUG_WIRE(&c, 1);
if (*c == REMOTE_EOM) { if (*c == REMOTE_EOM) {
*c = 0; *c = 0;
Bmd::DEBUG_WIRE("\n"); Bmd::DEBUG_WIRE("\n", 1);
return (c - data); return (c - data);
} else { } else {
c++; 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) 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); const ssize_t written = write(fd, data, length);
if (written < 0) { if (written < 0) {
fprintf(stdout, "Failed to write\n"); fprintf(stdout, "Failed to write\n");
@ -575,9 +571,10 @@ int Bmd::platform_buffer_read(void *data, const size_t length)
return -5 ; return -5 ;
} }
s = read(fd, c, 1); s = read(fd, c, 1);
fprintf(stderr, "%c", c[0]);
if (*c==REMOTE_EOM) { if (*c==REMOTE_EOM) {
*c = 0; *c = 0;
Bmd::DEBUG_WIRE(" %s\n",data); fprintf(stderr, "\n");
return (c - anchor); return (c - anchor);
} else { } else {
c++; c++;

View File

@ -39,7 +39,7 @@ private:
int platform_buffer_read(void *data, const size_t length); int platform_buffer_read(void *data, const size_t length);
char *unhexify(void *buf, const char *hex, size_t size); char *unhexify(void *buf, const char *hex, size_t size);
char *hexify(char *hex, const void *buf, 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); 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); uint64_t remote_hex_string_to_num(const uint32_t max, const char *const str);
protected: protected:

View File

@ -724,7 +724,7 @@ int parse_opt(int argc, char **argv, struct arguments *args,
("busdev-num", ("busdev-num",
"select a probe by it bus and device number (bus_num:device_addr)", "select a probe by it bus and device number (bus_num:device_addr)",
cxxopts::value<vector<string>>(bus_dev_num)) 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)) cxxopts::value<string>(args->serial))
("ftdi-channel", ("ftdi-channel",
"FTDI chip channel number (channels 0-3 map to A-D)", "FTDI chip channel number (channels 0-3 map to A-D)",