always pass cable configuration. Check if /dev if empty or not

This commit is contained in:
Gwenhael Goavec-Merou 2020-03-08 16:58:05 +01:00
parent deb3d0bed2
commit e0c19223c0
6 changed files with 32 additions and 22 deletions

View File

@ -42,14 +42,14 @@ using namespace std;
FtdiJtagBitBang::FtdiJtagBitBang(const FTDIpp_MPSSE::mpsse_bit_config &cable,
const jtag_pins_conf_t *pin_conf, string dev, uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(dev, cable.interface, clkHZ, verbose), _bitmode(0), _nb_bit(0)
FTDIpp_MPSSE(cable, dev, clkHZ, verbose), _bitmode(0), _nb_bit(0)
{
init_internal(cable, pin_conf);
}
FtdiJtagBitBang::FtdiJtagBitBang(const FTDIpp_MPSSE::mpsse_bit_config &cable,
const jtag_pins_conf_t *pin_conf, uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(cable.vid, cable.pid, cable.interface, clkHZ, verbose),
FTDIpp_MPSSE(cable, clkHZ, verbose),
_bitmode(0), _nb_bit(0)
{
init_internal(cable, pin_conf);

View File

@ -42,14 +42,14 @@ using namespace std;
FtdiJtagMPSSE::FtdiJtagMPSSE(const FTDIpp_MPSSE::mpsse_bit_config &cable,
string dev, uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(dev, cable.interface, clkHZ, verbose), _ch552WA(false)
FTDIpp_MPSSE(cable, dev, clkHZ, verbose), _ch552WA(false)
{
init_internal(cable);
}
FtdiJtagMPSSE::FtdiJtagMPSSE(const FTDIpp_MPSSE::mpsse_bit_config &cable,
uint32_t clkHZ, bool verbose):
FTDIpp_MPSSE(cable.vid, cable.pid, cable.interface, clkHZ, verbose),
FTDIpp_MPSSE(cable, clkHZ, verbose),
_ch552WA(false)
{
init_internal(cable);

View File

@ -18,14 +18,20 @@ using namespace std;
#define display(...) \
do { if (_verbose) fprintf(stdout, __VA_ARGS__);}while(0)
FTDIpp_MPSSE::FTDIpp_MPSSE(const string &dev, unsigned char interface,
FTDIpp_MPSSE::FTDIpp_MPSSE(const mpsse_bit_config &cable, const string &dev,
uint32_t clkHZ, bool verbose):_verbose(verbose), _vid(0),
_pid(0), _bus(-1), _addr(-1), _product(""), _interface(interface),
_pid(0), _bus(-1), _addr(-1), _product(""),
_interface(cable.interface),
_clkHZ(clkHZ), _buffer_size(2*32768), _num(0)
{
if (!search_with_dev(dev)) {
cerr << "No cable found" << endl;
throw std::exception();
if (!dev.empty()) {
if (!search_with_dev(dev)) {
cerr << "No cable found" << endl;
throw std::exception();
}
} else {
_vid = cable.vid;
_pid = cable.pid;
}
open_device(115200);
@ -38,10 +44,10 @@ FTDIpp_MPSSE::FTDIpp_MPSSE(const string &dev, unsigned char interface,
}
}
FTDIpp_MPSSE::FTDIpp_MPSSE(int vid, int pid, unsigned char interface,
uint32_t clkHZ, bool verbose):_verbose(verbose), _vid(vid),
_pid(pid), _bus(-1),
_addr(-1), _product(""), _interface(interface),
FTDIpp_MPSSE::FTDIpp_MPSSE(const mpsse_bit_config &cable,
uint32_t clkHZ, bool verbose):_verbose(verbose),
_vid(cable.vid), _pid(cable.pid), _bus(-1),
_addr(-1), _product(""), _interface(cable.interface),
_clkHZ(clkHZ), _buffer_size(2*32768), _num(0)
{
open_device(115200);
@ -186,6 +192,9 @@ int FTDIpp_MPSSE::init(unsigned char latency, unsigned char bitmask_mode,
mpsse_write();
}
ftdi_read_data_set_chunksize(_ftdi, _buffer_size);
ftdi_write_data_set_chunksize(_ftdi, _buffer_size);
return 0;
}
@ -242,6 +251,7 @@ int FTDIpp_MPSSE::setClkFreq(uint32_t clkHZ, char use_divide_by_5)
return -1;
}
ret = ftdi_read_data(_ftdi, buffer, 4);
ftdi_usb_purge_buffers(_ftdi);
return real_freq;
}

View File

@ -5,12 +5,6 @@
class FTDIpp_MPSSE {
public:
FTDIpp_MPSSE(const std::string &dev, unsigned char interface,
uint32_t clkHZ, bool verbose = false);
FTDIpp_MPSSE(int vid, int pid, unsigned char interface,
uint32_t clkHZ, bool verbose = false);
~FTDIpp_MPSSE();
typedef struct {
int vid;
int pid;
@ -21,6 +15,12 @@ class FTDIpp_MPSSE {
int bit_high_dir;
} mpsse_bit_config;
FTDIpp_MPSSE(const mpsse_bit_config &cable, const std::string &dev,
uint32_t clkHZ, bool verbose = false);
FTDIpp_MPSSE(const mpsse_bit_config &cablen,
uint32_t clkHZ, bool verbose = false);
~FTDIpp_MPSSE();
int init(unsigned char latency, unsigned char bitmask_mode, unsigned char mode,
mpsse_bit_config &bit_conf);
int setClkFreq(uint32_t clkHZ);

View File

@ -62,11 +62,11 @@ void FtdiSpi::setMode(uint8_t mode)
}
static FTDIpp_MPSSE::mpsse_bit_config bit_conf =
{0x08, 0x0B, 0x08, 0x0B};
{0x403, 0x6010, INTERFACE_B, 0x08, 0x0B, 0x08, 0x0B};
FtdiSpi::FtdiSpi(int vid, int pid, unsigned char interface, uint32_t clkHZ,
bool verbose):
FTDIpp_MPSSE(vid, pid, interface, clkHZ, verbose)
FTDIpp_MPSSE(bit_conf, clkHZ, verbose)
{
setCSmode(SPI_CS_AUTO);
setEndianness(SPI_MSB_FIRST);

View File

@ -80,7 +80,7 @@ Jtag::Jtag(cable_t &cable, const jtag_pins_conf_t *pin_conf,
_tms_buffer_size(128), _num_tms(0),
_board_name("nope")
{
init_internal(cable, NULL, pin_conf, clkHZ);
init_internal(cable, "", pin_conf, clkHZ);
}
Jtag::~Jtag()