ftdixx: allow verbose to be set
This commit is contained in:
parent
ab0d3169a8
commit
4b0a996c6d
14
ftdijtag.cpp
14
ftdijtag.cpp
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue