From ccbcd97cdad9193dcf41510031a2dce2f0f49a57 Mon Sep 17 00:00:00 2001 From: aisuneko icecat Date: Fri, 1 May 2026 23:19:00 +0800 Subject: [PATCH] main: add argument cmsisdap-backend --- src/main.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f6bdcb7..d14e1bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,8 @@ * Copyright (C) 2019 Gwenhael Goavec-Merou */ +#include "cmsisDAP.hpp" +#include #include #include @@ -108,6 +110,7 @@ struct arguments { int16_t cable_index; uint8_t bus_addr; uint8_t device_addr; + std::string cmsisdap_backend; std::string ip_adr; uint32_t protect_flash; bool unprotect_flash; @@ -163,7 +166,7 @@ int main(int argc, char **argv) -1, 0, "primary", false, true, -1, /* vid, pid, index bus_addr, device_addr */ 0, 0, -1, 0, 0, - "127.0.0.1", 0, false, false, false, false, "", false, false, + "-", "127.0.0.1", 0, false, false, false, false, "", false, false, /* xvc server */ false, 3721, "-", "", false, {}, // mcufw conmcu, user_misc_dev_list @@ -245,6 +248,18 @@ int main(int argc, char **argv) if (args.freq == 0) args.freq = DEFAULT_FREQ; + cmsisdap_backend_type cmsisdap_backend; + if (args.cmsisdap_backend == "hid") + cmsisdap_backend = BACKEND_HID; + else if (args.cmsisdap_backend == "usbbulk") + cmsisdap_backend = BACKEND_USBBULK; + else if (args.cmsisdap_backend == "-") /* no USB backend specified, will autoselect later */ + cmsisdap_backend = BACKEND_AUTOSELECT; + else { + printError("Error: Unknown CMSIS-DAP usb backend \'" + args.cmsisdap_backend + "\'"); + return EXIT_FAILURE; + } + auto select_cable = cable_list.find(args.cable); if (select_cable == cable_list.end()) { printError("error : " + args.cable + " not found"); @@ -389,7 +404,7 @@ int main(int argc, char **argv) Jtag *jtag; try { - jtag = new Jtag(cable, &pins_config, args.device, args.ftdi_serial, + jtag = new Jtag(cable, &pins_config, args.device, cmsisdap_backend, args.ftdi_serial, args.freq, args.verbose, args.ip_adr, args.port, args.invert_read_edge, args.probe_firmware, args.user_misc_devs); @@ -932,6 +947,9 @@ int parse_opt(int argc, char **argv, struct arguments *args, ("ftdi-channel", "FTDI chip channel number (channels 0-3 map to A-D)", cxxopts::value(args->ftdi_channel)) + ("cmsisdap-backend", + "cmsisDAP USB backend (hid or usbbulk), leave blank for auto selection", + cxxopts::value(args->cmsisdap_backend)) ("d,device", "device to use (/dev/ttyUSBx)", cxxopts::value(args->device)) ("detect", "detect FPGA, add -f to show connected flash",