bmd.hpp: More work
This commit is contained in:
parent
08a9fa3263
commit
9053c05afd
33
src/bmd.cpp
33
src/bmd.cpp
|
|
@ -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++;
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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)",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue