diff --git a/src/ftdipp_mpsse.cpp b/src/ftdipp_mpsse.cpp index 1eab50f..c65ec66 100644 --- a/src/ftdipp_mpsse.cpp +++ b/src/ftdipp_mpsse.cpp @@ -29,7 +29,7 @@ using namespace std; FTDIpp_MPSSE::FTDIpp_MPSSE(const mpsse_bit_config &cable, const string &dev, const std::string &serial, uint32_t clkHZ, int8_t verbose): _verbose(verbose > 2), _cable(cable), _vid(0), - _pid(0), _bus(-1), _addr(-1), + _pid(0), _index(0), _bus(-1), _addr(-1), _interface(cable.interface), _clkHZ(clkHZ), _buffer_size(2*32768), _num(0) { @@ -45,6 +45,7 @@ FTDIpp_MPSSE::FTDIpp_MPSSE(const mpsse_bit_config &cable, const string &dev, } else { _vid = cable.vid; _pid = cable.pid; + _index = cable.index; } open_device(serial, 115200); @@ -135,7 +136,7 @@ void FTDIpp_MPSSE::open_device(const std::string &serial, unsigned int baudrate) } if (_bus == -1 || _addr == -1) - ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, NULL, serial.empty() ? NULL : serial.c_str()); + ret = ftdi_usb_open_desc_index(_ftdi, _vid, _pid, NULL, serial.empty() ? NULL : serial.c_str(), _index); else #if (FTDI_VERSION < 104) ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, _product, NULL); diff --git a/src/ftdipp_mpsse.hpp b/src/ftdipp_mpsse.hpp index 522cc4b..46c3bdc 100644 --- a/src/ftdipp_mpsse.hpp +++ b/src/ftdipp_mpsse.hpp @@ -18,6 +18,7 @@ class FTDIpp_MPSSE { int bit_low_dir; int bit_high_val; int bit_high_dir; + int index; } mpsse_bit_config; FTDIpp_MPSSE(const mpsse_bit_config &cable, const std::string &dev, @@ -71,6 +72,7 @@ class FTDIpp_MPSSE { mpsse_bit_config _cable; int _vid; int _pid; + int _index; private: int _bus; int _addr; diff --git a/src/main.cpp b/src/main.cpp index c59bf4b..ea0fe6c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -64,6 +64,7 @@ struct arguments { int16_t altsetting; uint16_t vid; uint16_t pid; + uint16_t cable_index; string ip_adr; uint32_t protect_flash; bool unprotect_flash; @@ -85,7 +86,7 @@ int main(int argc, char **argv) /* command line args. */ struct arguments args = {0, false, false, false, 0, "", "", "-", "", -1, 0, false, "-", false, false, false, false, Device::PRG_NONE, false, - false, false, "", "", "", -1, 0, false, -1, 0, 0, "127.0.0.1", + false, false, "", "", "", -1, 0, false, -1, 0, 0, 0, "127.0.0.1", 0, false, "", false, false}; /* parse arguments */ try { @@ -198,6 +199,9 @@ int main(int argc, char **argv) cable.config.pid = args.pid; } + // always set this + cable.config.index = args.cable_index; + /* FLASH direct access */ if (args.spi || (board && board->mode == COMM_SPI)) { /* if no instruction from user -> select flash mode */ @@ -590,6 +594,7 @@ int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *p cxxopts::value(args->invert_read_edge)) ("vid", "probe Vendor ID", cxxopts::value(args->vid)) ("pid", "probe Product ID", cxxopts::value(args->pid)) + ("cable-index", "probe index", cxxopts::value(args->cable_index)) ("ftdi-serial", "FTDI chip serial number", cxxopts::value(args->ftdi_serial)) ("ftdi-channel", "FTDI chip channel number (channels 0-3 map to A-D)", cxxopts::value(args->ftdi_channel))