diff --git a/src/jtag.hpp b/src/jtag.hpp index 6bc918a..4fe31b7 100644 --- a/src/jtag.hpp +++ b/src/jtag.hpp @@ -72,8 +72,18 @@ class Jtag { //bool insert_first(uint32_t device_id, uint16_t irlength); bool insert_first(uint32_t idcode, bool is_misc, uint16_t irlength, device_model *device); - int get_nb_targets() { - int nb = 0; + /*! + * \brief return hown many devices were detected (supported and misc devices) + * \return device list length + */ + size_t get_chain_length() { return _f_device_list.size(); } + + /*! + * \brief return hown many supported devices were detected (misc devices not included) + * \return device list length + */ + size_t get_nb_targets() { + size_t nb = 0; for (auto t: _f_device_list) if (!t.is_misc) nb++; diff --git a/src/main.cpp b/src/main.cpp index 4dc4708..8d8f273 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -453,8 +453,7 @@ int main(int argc, char **argv) } /* chain detection */ - //vector listDev = jtag->get_devices_list(); - int found = listDev.size(); + int found = jtag->get_chain_length(); int idcode = -1, index = 0; if (args.verbose > 0) @@ -484,26 +483,11 @@ int main(int argc, char **argv) if (jtag->get_nb_targets() != 1) { printError("Error: more than one FPGA found"); printError("Use --index-chain to force selection"); - for (int i = 0; i < found; i++) - printf("0x%08x\n", listDev[i]); + for (auto f: jtag->get_devices_list()) + printf("0x%08x\n", f.idcode); delete(jtag); return EXIT_FAILURE; } - /*for (int i = 0; i < found; i++) { - if (fpga_list.find(listDev[i]) != fpga_list.end()) { - index = i; - if (idcode != -1) { - printError("Error: more than one FPGA found"); - printError("Use --index-chain to force selection"); - for (int i = 0; i < found; i++) - printf("0x%08x\n", listDev[i]); - delete(jtag); - return EXIT_FAILURE; - } else { - idcode = listDev[i]; - } - } - }*/ } else { index = args.index_chain; if (index > found || index < 0) { diff --git a/src/xilinx.cpp b/src/xilinx.cpp index bcd6f4b..42eaada 100644 --- a/src/xilinx.cpp +++ b/src/xilinx.cpp @@ -283,7 +283,7 @@ bool Xilinx::zynqmp_init(const std::string &family) * ARM at position 1 */ char mess[256]; - std::vector listDev = _jtag->get_devices_list(); + std::vector listDev = _jtag->get_devices_list(); if (listDev.size() != 2) { snprintf(mess, sizeof(mess), "ZynqMP error: wrong" " JTAG length: %zu instead of 2\n", @@ -292,18 +292,18 @@ bool Xilinx::zynqmp_init(const std::string &family) return false; } - if (fpga_list[listDev[0]].family != "zynqmp") { + if (listDev[0].model && listDev[0].model->family != "zynqmp") { snprintf(mess, sizeof(mess), "ZynqMP error: first device" " is not the PL TAP -> 0x%08x\n", - listDev[0]); + listDev[0].idcode); printError(mess); return false; } - if (listDev[1] != 0x5ba00477) { + if (listDev[1].idcode != 0x5ba00477) { snprintf(mess, sizeof(mess), "ZynqMP error: second device" " is not the ARM DAP cortex A53 -> 0x%08x\n", - listDev[1]); + listDev[1].idcode); printError(mess); return false; }