ftdixx: allow verbose to be set

This commit is contained in:
Gwenhael Goavec-Merou 2019-11-21 08:36:16 +01:00
parent ab0d3169a8
commit 4b0a996c6d
4 changed files with 33 additions and 31 deletions

View File

@ -43,17 +43,16 @@ using namespace std;
*/ */
FtdiJtag::FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, string dev, FtdiJtag::FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, string dev,
unsigned char interface, uint32_t clkHZ): unsigned char interface, uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(dev, interface, clkHZ), FTDIpp_MPSSE(dev, interface, clkHZ, verbose),
_state(RUN_TEST_IDLE), _state(RUN_TEST_IDLE),
_tms_buffer_size(128), _num_tms(0), _tms_buffer_size(128), _num_tms(0),
_board_name("nope"), _verbose(false) _board_name("nope")
{ {
display("%x\n", cable.bit_low_val); display("%x\n", cable.bit_low_val);
display("%x\n", cable.bit_low_dir); display("%x\n", cable.bit_low_dir);
display("%x\n", cable.bit_high_val); display("%x\n", cable.bit_high_val);
display("%x\n", cable.bit_high_dir); display("%x\n", cable.bit_high_dir);
_verbose = false;
_tms_buffer = (unsigned char *)malloc(sizeof(unsigned char) * _tms_buffer_size); _tms_buffer = (unsigned char *)malloc(sizeof(unsigned char) * _tms_buffer_size);
bzero(_tms_buffer, _tms_buffer_size); bzero(_tms_buffer, _tms_buffer_size);
@ -61,18 +60,17 @@ FtdiJtag::FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, string dev,
} }
FtdiJtag::FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, FtdiJtag::FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable,
unsigned char interface, uint32_t clkHZ): unsigned char interface, uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(cable.vid, cable.pid, interface, clkHZ), FTDIpp_MPSSE(cable.vid, cable.pid, interface, clkHZ, verbose),
_state(RUN_TEST_IDLE), _state(RUN_TEST_IDLE),
_tms_buffer_size(128), _num_tms(0), _tms_buffer_size(128), _num_tms(0),
_board_name("nope"), _verbose(false) _board_name("nope")
{ {
display("board_name %s\n", _board_name.c_str()); display("board_name %s\n", _board_name.c_str());
display("%x\n", cable.bit_low_val); display("%x\n", cable.bit_low_val);
display("%x\n", cable.bit_low_dir); display("%x\n", cable.bit_low_dir);
display("%x\n", cable.bit_high_val); display("%x\n", cable.bit_high_val);
display("%x\n", cable.bit_high_dir); display("%x\n", cable.bit_high_dir);
_verbose = false;
_tms_buffer = (unsigned char *)malloc(sizeof(unsigned char) * _tms_buffer_size); _tms_buffer = (unsigned char *)malloc(sizeof(unsigned char) * _tms_buffer_size);
bzero(_tms_buffer, _tms_buffer_size); bzero(_tms_buffer, _tms_buffer_size);

View File

@ -10,8 +10,9 @@ class FtdiJtag : public FTDIpp_MPSSE {
public: public:
//FtdiJtag(std::string board_name, int vid, int pid, unsigned char interface, uint32_t clkHZ); //FtdiJtag(std::string board_name, int vid, int pid, unsigned char interface, uint32_t clkHZ);
FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, std::string dev, FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, std::string dev,
unsigned char interface, uint32_t clkHZ); unsigned char interface, uint32_t clkHZ, bool verbose = false);
FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, unsigned char interface, uint32_t clkHZ); FtdiJtag(FTDIpp_MPSSE::mpsse_bit_config &cable, unsigned char interface, uint32_t clkHZ,
bool verbose);
~FtdiJtag(); ~FtdiJtag();
int detectChain(std::vector<int> &devices, int max_dev); int detectChain(std::vector<int> &devices, int max_dev);

View File

@ -24,9 +24,9 @@ using namespace std;
#endif #endif
FTDIpp_MPSSE::FTDIpp_MPSSE(const string &dev, unsigned char interface, FTDIpp_MPSSE::FTDIpp_MPSSE(const string &dev, unsigned char interface,
uint32_t clkHZ):_vid(0), _pid(0), _bus(-1), _addr(-1), _product(""), uint32_t clkHZ, bool verbose):_verbose(verbose), _vid(0),
_interface(interface), _pid(0), _bus(-1), _addr(-1), _product(""), _interface(interface),
_clkHZ(clkHZ), _buffer_size(2*32768), _num(0), _verbose(false) _clkHZ(clkHZ), _buffer_size(2*32768), _num(0)
{ {
if (!search_with_dev(dev)) { if (!search_with_dev(dev)) {
cerr << "No cable found" << endl; cerr << "No cable found" << endl;
@ -43,9 +43,10 @@ FTDIpp_MPSSE::FTDIpp_MPSSE(const string &dev, unsigned char interface,
} }
FTDIpp_MPSSE::FTDIpp_MPSSE(int vid, int pid, unsigned char interface, FTDIpp_MPSSE::FTDIpp_MPSSE(int vid, int pid, unsigned char interface,
uint32_t clkHZ):_vid(vid), _pid(pid), _bus(-1), _addr(-1), _product(""), uint32_t clkHZ, bool verbose):_verbose(verbose), _vid(vid),
_interface(interface), _pid(pid), _bus(-1),
_clkHZ(clkHZ), _buffer_size(2*32768), _num(0), _verbose(false) _addr(-1), _product(""), _interface(interface),
_clkHZ(clkHZ), _buffer_size(2*32768), _num(0)
{ {
open_device(115200); open_device(115200);
@ -69,7 +70,7 @@ void FTDIpp_MPSSE::open_device(unsigned int baudrate)
{ {
int ret; int ret;
printf("try to open %x %x %d %d\n", _vid, _pid, _bus, _addr); display("try to open %x %x %d %d\n", _vid, _pid, _bus, _addr);
_ftdi = ftdi_new(); _ftdi = ftdi_new();
if (_ftdi == NULL) { if (_ftdi == NULL) {
@ -78,7 +79,7 @@ void FTDIpp_MPSSE::open_device(unsigned int baudrate)
} }
ftdi_set_interface(_ftdi, (ftdi_interface)_interface); ftdi_set_interface(_ftdi, (ftdi_interface)_interface);
if (_bus == -1 or _addr == -1) if (_bus == -1 || _addr == -1)
ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, NULL, NULL); ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, NULL, NULL);
else else
#if (OLD_FTDI_VERSION == 1) #if (OLD_FTDI_VERSION == 1)
@ -100,7 +101,7 @@ void FTDIpp_MPSSE::open_device(unsigned int baudrate)
} }
/* cf. ftdi.c same function */ /* cf. ftdi.c same function */
void FTDIpp_MPSSE::ftdi_usb_close_internal () void FTDIpp_MPSSE::ftdi_usb_close_internal()
{ {
libusb_close(_ftdi->usb_dev); libusb_close(_ftdi->usb_dev);
_ftdi->usb_dev = NULL; _ftdi->usb_dev = NULL;
@ -128,7 +129,7 @@ int FTDIpp_MPSSE::close_device()
if (_ftdi->module_detach_mode == AUTO_DETACH_SIO_MODULE) { if (_ftdi->module_detach_mode == AUTO_DETACH_SIO_MODULE) {
rtn = libusb_attach_kernel_driver(_ftdi->usb_dev, _ftdi->interface); rtn = libusb_attach_kernel_driver(_ftdi->usb_dev, _ftdi->interface);
if( rtn != 0) if( rtn != 0)
fprintf(stderr, "detach error %d\n",rtn); fprintf(stderr, "detach error %d\n", rtn);
} }
} }
ftdi_usb_close_internal(); ftdi_usb_close_internal();
@ -175,11 +176,11 @@ int FTDIpp_MPSSE::init(unsigned char latency, unsigned char bitmask_mode,
if (setClkFreq(_clkHZ, 0) < 0) if (setClkFreq(_clkHZ, 0) < 0)
return -1; return -1;
buf_cmd[1] = bit_conf.bit_low_val; //0xe8; buf_cmd[1] = bit_conf.bit_low_val; // 0xe8;
buf_cmd[2] = bit_conf.bit_low_dir; //0xeb; buf_cmd[2] = bit_conf.bit_low_dir; // 0xeb;
buf_cmd[4] = bit_conf.bit_high_val; //0x00; buf_cmd[4] = bit_conf.bit_high_val; // 0x00;
buf_cmd[5] = bit_conf.bit_high_dir; //0x60; buf_cmd[5] = bit_conf.bit_high_dir; // 0x60;
mpsse_store(buf_cmd, 6); mpsse_store(buf_cmd, 6);
mpsse_write(); mpsse_write();
@ -212,8 +213,8 @@ int FTDIpp_MPSSE::setClkFreq(uint32_t clkHZ, char use_divide_by_5)
presc = (base_freq /(_clkHZ * 2)) -1; presc = (base_freq /(_clkHZ * 2)) -1;
real_freq = base_freq / ((1+presc)*2); real_freq = base_freq / ((1+presc)*2);
display("presc : %d input freq : %d requested freq : %d real freq : %d\n", presc, display("presc : %d input freq : %d requested freq : %d real freq : %d\n",
base_freq, _clkHZ, real_freq); presc, base_freq, _clkHZ, real_freq);
buffer[2] = presc & 0xff; buffer[2] = presc & 0xff;
buffer[3] = (presc >> 8) & 0xff; buffer[3] = (presc >> 8) & 0xff;
@ -249,7 +250,7 @@ int FTDIpp_MPSSE::mpsse_store(unsigned char *buff, int len)
return -1; return -1;
} }
} }
if (_verbose) cout << __func__ << " " << _num << " " << len << endl; display("%s %d %d\n", __func__, _num, len);
memcpy(_buffer + _num, ptr, len); memcpy(_buffer + _num, ptr, len);
_num += len; _num += len;
return 0; return 0;
@ -386,7 +387,7 @@ bool FTDIpp_MPSSE::search_with_dev(const string &device)
_pid = udevstufftoint(udev_device_get_sysattr_value( _pid = udevstufftoint(udev_device_get_sysattr_value(
usbdeviceparent, "idProduct"), 16); usbdeviceparent, "idProduct"), 16);
printf("vid %x pid %x bus %d addr %d product name : %s\n", _vid, _pid, _bus, _addr, _product); display("vid %x pid %x bus %d addr %d product name : %s\n", _vid, _pid, _bus, _addr, _product);
return true; return true;
} }

View File

@ -5,8 +5,10 @@
class FTDIpp_MPSSE { class FTDIpp_MPSSE {
public: public:
FTDIpp_MPSSE(const std::string &dev, unsigned char interface, uint32_t clkHZ); FTDIpp_MPSSE(const std::string &dev, unsigned char interface,
FTDIpp_MPSSE(int vid, int pid, unsigned char interface, uint32_t clkHZ); uint32_t clkHZ, bool verbose = false);
FTDIpp_MPSSE(int vid, int pid, unsigned char interface,
uint32_t clkHZ, bool verbose = false);
~FTDIpp_MPSSE(); ~FTDIpp_MPSSE();
typedef struct { typedef struct {
@ -36,6 +38,7 @@ class FTDIpp_MPSSE {
int mpsse_get_buffer_size() {return _buffer_size;} int mpsse_get_buffer_size() {return _buffer_size;}
unsigned int udevstufftoint(const char *udevstring, int base); unsigned int udevstufftoint(const char *udevstring, int base);
bool search_with_dev(const std::string &device); bool search_with_dev(const std::string &device);
bool _verbose;
private: private:
int _vid; int _vid;
@ -47,7 +50,6 @@ class FTDIpp_MPSSE {
int _clkHZ; int _clkHZ;
int _buffer_size; int _buffer_size;
int _num; int _num;
bool _verbose;
unsigned char *_buffer; unsigned char *_buffer;
struct ftdi_context *_ftdi; struct ftdi_context *_ftdi;
}; };