diff --git a/src/DebugToolDrivers/CMakeLists.txt b/src/DebugToolDrivers/CMakeLists.txt index faf0f242..7f035ce4 100755 --- a/src/DebugToolDrivers/CMakeLists.txt +++ b/src/DebugToolDrivers/CMakeLists.txt @@ -32,6 +32,7 @@ target_sources( # Microchip EDBG debug tools ${CMAKE_CURRENT_SOURCE_DIR}/Microchip/EdbgDevice.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/Microchip/EdbgToolConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Microchip/AtmelICE/AtmelIce.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Microchip/PowerDebugger/PowerDebugger.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Microchip/MplabSnap/MplabSnap.cpp diff --git a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp index 73e84433..9d633ecb 100644 --- a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp +++ b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - AtmelIce::AtmelIce() + AtmelIce::AtmelIce(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, AtmelIce::USB_VENDOR_ID, AtmelIce::USB_PRODUCT_ID, AtmelIce::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp index 14b68db3..a5837a05 100644 --- a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp +++ b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp @@ -22,7 +22,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint8_t USB_CONFIGURATION_INDEX = 0; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - AtmelIce(); + AtmelIce(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Atmel-ICE"; diff --git a/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.cpp b/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.cpp index 833ea8e1..6129c079 100644 --- a/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.cpp +++ b/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - CuriosityNano::CuriosityNano() + CuriosityNano::CuriosityNano(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, CuriosityNano::USB_VENDOR_ID, CuriosityNano::USB_PRODUCT_ID, CuriosityNano::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.hpp b/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.hpp index b6b831af..31fa9c5c 100644 --- a/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.hpp +++ b/src/DebugToolDrivers/Microchip/CuriosityNano/CuriosityNano.hpp @@ -21,7 +21,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t USB_PRODUCT_ID = 0x2175; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - CuriosityNano(); + CuriosityNano(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Curiosity Nano"; diff --git a/src/DebugToolDrivers/Microchip/EdbgDevice.cpp b/src/DebugToolDrivers/Microchip/EdbgDevice.cpp index 4765b3c4..2617dd0e 100644 --- a/src/DebugToolDrivers/Microchip/EdbgDevice.cpp +++ b/src/DebugToolDrivers/Microchip/EdbgDevice.cpp @@ -1,8 +1,10 @@ #include "EdbgDevice.hpp" #include "src/DebugToolDrivers/USB/HID/HidInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp" #include "src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp" +#include "src/Exceptions/InvalidConfig.hpp" #include "src/TargetController/Exceptions/DeviceFailure.hpp" #include "src/TargetController/Exceptions/DeviceInitializationFailure.hpp" @@ -14,6 +16,7 @@ namespace DebugToolDrivers::Microchip using Exceptions::DeviceInitializationFailure; EdbgDevice::EdbgDevice( + const DebugToolConfig& debugToolConfig, std::uint16_t vendorId, std::uint16_t productId, std::uint8_t cmsisHidInterfaceNumber, @@ -21,12 +24,14 @@ namespace DebugToolDrivers::Microchip std::optional configurationIndex ) : UsbDevice(vendorId, productId) + , toolConfig(EdbgToolConfig{debugToolConfig}) , cmsisHidInterfaceNumber(cmsisHidInterfaceNumber) , supportsTargetPowerManagement(supportsTargetPowerManagement) , configurationIndex(configurationIndex) {} void EdbgDevice::init() { + using ::DebugToolDrivers::Protocols::CmsisDap::CmsisDapInterface; using Microchip::Protocols::Edbg::EdbgInterface; using Microchip::Protocols::Edbg::EdbgTargetPowerManagementInterface; @@ -52,12 +57,29 @@ namespace DebugToolDrivers::Microchip this->edbgInterface = std::make_unique(std::move(cmsisHidInterface)); /* - * The EDBG/CMSIS-DAP interface doesn't operate properly when sending commands too quickly. + * Sometimes, some EDBG tools misbehave when we send commands too quickly, even though we wait for a response + * for each command we send... * - * Because of this, we have to enforce a minimum time gap between commands. See comment - * in CmsisDapInterface class declaration for more info. + * Because of this, we make available the option to enforce a minimum time gap between commands. This prevents + * the tool from misbehaving, but effectively chokes the EDBG driver, causing a drag on Bloom's performance. + * + * The command delay is disabled by default for all EDBG tools, but the user can enable it via their project + * config. */ - this->edbgInterface->setMinimumCommandTimeGap(std::chrono::milliseconds{35}); + if (this->toolConfig.cmsisCommandDelay.has_value()) { + const auto& cmsisCommandDelay = *(this->toolConfig.cmsisCommandDelay); + + if (cmsisCommandDelay > CmsisDapInterface::CMSIS_COMMAND_DELAY_MAX) { + throw Exceptions::InvalidConfig{ + "CMSIS command delay value (" + std::to_string(cmsisCommandDelay.count()) + + " ms) is too high. Maximum value: " + std::to_string( + CmsisDapInterface::CMSIS_COMMAND_DELAY_MAX.count() + ) + " ms" + }; + } + + this->edbgInterface->setCommandDelay(cmsisCommandDelay); + } // We don't need to claim the CMSISDAP interface here as the HIDAPI will have already done so. if (!this->sessionStarted) { diff --git a/src/DebugToolDrivers/Microchip/EdbgDevice.hpp b/src/DebugToolDrivers/Microchip/EdbgDevice.hpp index aa309678..0e0a9bc6 100644 --- a/src/DebugToolDrivers/Microchip/EdbgDevice.hpp +++ b/src/DebugToolDrivers/Microchip/EdbgDevice.hpp @@ -7,6 +7,9 @@ #include "src/DebugToolDrivers/DebugTool.hpp" #include "src/DebugToolDrivers/USB/UsbDevice.hpp" +#include "EdbgToolConfig.hpp" +#include "src/ProjectConfig.hpp" + #include "Protocols/EDBG/EdbgInterface.hpp" #include "Protocols/EDBG/AVR/EdbgAvr8Interface.hpp" #include "Protocols/EDBG/AVR/EdbgAvrIspInterface.hpp" @@ -30,6 +33,7 @@ namespace DebugToolDrivers::Microchip { public: EdbgDevice( + const DebugToolConfig& debugToolConfig, std::uint16_t vendorId, std::uint16_t productId, std::uint8_t cmsisHidInterfaceNumber, @@ -85,6 +89,7 @@ namespace DebugToolDrivers::Microchip void endSession(); protected: + EdbgToolConfig toolConfig; bool initialised = false; /** diff --git a/src/DebugToolDrivers/Microchip/EdbgToolConfig.cpp b/src/DebugToolDrivers/Microchip/EdbgToolConfig.cpp new file mode 100644 index 00000000..58f8ec64 --- /dev/null +++ b/src/DebugToolDrivers/Microchip/EdbgToolConfig.cpp @@ -0,0 +1,30 @@ +#include "EdbgToolConfig.hpp" + +#include "src/Helpers/YamlUtilities.hpp" +#include "src/Logger/Logger.hpp" + +namespace DebugToolDrivers::Microchip +{ + EdbgToolConfig::EdbgToolConfig(const DebugToolConfig& toolConfig) + : DebugToolConfig(toolConfig) + { + const auto& toolNode = toolConfig.toolNode; + + const auto edbgDriverNode = toolNode["edbgDriver"]; + if (edbgDriverNode) { + if (edbgDriverNode["cmsisCommandDelay"]) { + if (YamlUtilities::isCastable(edbgDriverNode["cmsisCommandDelay"])) { + this->cmsisCommandDelay = std::chrono::milliseconds{ + edbgDriverNode["cmsisCommandDelay"].as() + }; + + } else { + Logger::error( + "Invalid EDBG driver config parameter ('cmsisCommandDelay') provided - must be a 16-bit " + "unsigned integer. The parameter will be ignored." + ); + } + } + } + } +} diff --git a/src/DebugToolDrivers/Microchip/EdbgToolConfig.hpp b/src/DebugToolDrivers/Microchip/EdbgToolConfig.hpp new file mode 100644 index 00000000..4db4bd6e --- /dev/null +++ b/src/DebugToolDrivers/Microchip/EdbgToolConfig.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include + +#include "src/ProjectConfig.hpp" + +namespace DebugToolDrivers::Microchip +{ + /** + * Extending the generic DebugToolConfig struct to accommodate EDBG configuration parameters. + */ + struct EdbgToolConfig: public DebugToolConfig + { + public: + std::optional cmsisCommandDelay = std::nullopt; + + explicit EdbgToolConfig(const DebugToolConfig& toolConfig); + }; +} diff --git a/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.cpp b/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.cpp index df2bb2f3..e3ac6a65 100644 --- a/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.cpp +++ b/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - JtagIce3::JtagIce3() + JtagIce3::JtagIce3(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, JtagIce3::USB_VENDOR_ID, JtagIce3::USB_PRODUCT_ID, JtagIce3::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.hpp b/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.hpp index 58a738e1..1cb4cf9c 100644 --- a/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.hpp +++ b/src/DebugToolDrivers/Microchip/JtagIce3/JtagIce3.hpp @@ -22,7 +22,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint8_t USB_CONFIGURATION_INDEX = 0; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - JtagIce3(); + JtagIce3(const DebugToolConfig& debugToolConfig); std::string getName() override { return "JTAGICE3"; diff --git a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp index 15e7fd2c..94282c25 100644 --- a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp +++ b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.cpp @@ -5,8 +5,9 @@ namespace DebugToolDrivers::Microchip { - MplabPickit4::MplabPickit4() + MplabPickit4::MplabPickit4(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, MplabPickit4::USB_VENDOR_ID, MplabPickit4::USB_PRODUCT_ID, MplabPickit4::CMSIS_HID_INTERFACE_NUMBER diff --git a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.hpp b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.hpp index 2a142610..d2741396 100644 --- a/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.hpp +++ b/src/DebugToolDrivers/Microchip/MplabPickit4/MplabPickit4.hpp @@ -29,7 +29,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t NON_EDBG_USB_VENDOR_ID = 0x04d8; static const inline std::uint16_t NON_EDBG_USB_PRODUCT_ID = 0x9012; - MplabPickit4(); + MplabPickit4(const DebugToolConfig& debugToolConfig); std::string getName() override { return "MPLAB PICkit 4"; diff --git a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp index a2a8e96d..2cd7008d 100644 --- a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp +++ b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.cpp @@ -5,8 +5,9 @@ namespace DebugToolDrivers::Microchip { - MplabSnap::MplabSnap() + MplabSnap::MplabSnap(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, MplabSnap::USB_VENDOR_ID, MplabSnap::USB_PRODUCT_ID, MplabSnap::CMSIS_HID_INTERFACE_NUMBER diff --git a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.hpp b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.hpp index f38100ba..e68b8f2b 100644 --- a/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.hpp +++ b/src/DebugToolDrivers/Microchip/MplabSnap/MplabSnap.hpp @@ -32,7 +32,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t NON_EDBG_USB_PRODUCT_ID = 0x9018; static const inline std::uint16_t NON_EDBG_USB_PRODUCT_ID_ALTERNATIVE = 0x9017; - MplabSnap(); + MplabSnap(const DebugToolConfig& debugToolConfig); std::string getName() override { return "MPLAB Snap"; diff --git a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp index a03bd624..98384efc 100644 --- a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp +++ b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - PowerDebugger::PowerDebugger() + PowerDebugger::PowerDebugger(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, PowerDebugger::USB_VENDOR_ID, PowerDebugger::USB_PRODUCT_ID, PowerDebugger::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp index f4244b3a..3fe77c6c 100644 --- a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp +++ b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp @@ -22,7 +22,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint8_t USB_CONFIGURATION_INDEX = 0; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - PowerDebugger(); + PowerDebugger(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Power Debugger"; diff --git a/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.cpp b/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.cpp index 90adef06..04823346 100644 --- a/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.cpp +++ b/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - XplainedMini::XplainedMini() + XplainedMini::XplainedMini(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, XplainedMini::USB_VENDOR_ID, XplainedMini::USB_PRODUCT_ID, XplainedMini::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.hpp b/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.hpp index 5b4213a6..d0ace1d5 100644 --- a/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.hpp +++ b/src/DebugToolDrivers/Microchip/XplainedMini/XplainedMini.hpp @@ -21,7 +21,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t USB_PRODUCT_ID = 0x2145; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - XplainedMini(); + XplainedMini(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Xplained Mini"; diff --git a/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.cpp b/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.cpp index 2ed782e3..e372d88d 100644 --- a/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.cpp +++ b/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - XplainedNano::XplainedNano() + XplainedNano::XplainedNano(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, XplainedNano::USB_VENDOR_ID, XplainedNano::USB_PRODUCT_ID, XplainedNano::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.hpp b/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.hpp index 2089eaa1..4acfdf64 100644 --- a/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.hpp +++ b/src/DebugToolDrivers/Microchip/XplainedNano/XplainedNano.hpp @@ -21,7 +21,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t USB_PRODUCT_ID = 0x2145; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - XplainedNano(); + XplainedNano(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Xplained Nano"; diff --git a/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.cpp b/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.cpp index 7169f465..95bd2661 100644 --- a/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.cpp +++ b/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.cpp @@ -2,8 +2,9 @@ namespace DebugToolDrivers::Microchip { - XplainedPro::XplainedPro() + XplainedPro::XplainedPro(const DebugToolConfig& debugToolConfig) : EdbgDevice( + debugToolConfig, XplainedPro::USB_VENDOR_ID, XplainedPro::USB_PRODUCT_ID, XplainedPro::CMSIS_HID_INTERFACE_NUMBER, diff --git a/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.hpp b/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.hpp index 35704f26..75cd6785 100644 --- a/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.hpp +++ b/src/DebugToolDrivers/Microchip/XplainedPro/XplainedPro.hpp @@ -21,7 +21,7 @@ namespace DebugToolDrivers::Microchip static const inline std::uint16_t USB_PRODUCT_ID = 0x2111; static const inline std::uint8_t CMSIS_HID_INTERFACE_NUMBER = 0; - XplainedPro(); + XplainedPro(const DebugToolConfig& debugToolConfig); std::string getName() override { return "Xplained Pro"; diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp index c12ad48c..0e6d817a 100644 --- a/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp @@ -21,6 +21,8 @@ namespace DebugToolDrivers::Protocols::CmsisDap class CmsisDapInterface { public: + static constexpr auto CMSIS_COMMAND_DELAY_MAX = std::chrono::milliseconds{200}; + explicit CmsisDapInterface(Usb::HidInterface&& usbHidInterface); virtual ~CmsisDapInterface() = default; @@ -38,8 +40,8 @@ namespace DebugToolDrivers::Protocols::CmsisDap return this->usbHidInterface.inputReportSize; } - void setMinimumCommandTimeGap(std::chrono::milliseconds commandTimeGap) { - this->commandDelay = commandTimeGap; + void setCommandDelay(std::chrono::milliseconds commandDelay) { + this->commandDelay = commandDelay; } /** diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index 53a20dbb..428ce58f 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -315,66 +315,69 @@ namespace TargetController std::string, std::function()> > TargetControllerComponent::getSupportedDebugTools() { + using namespace DebugToolDrivers::Microchip; + using namespace DebugToolDrivers::Wch; + // The debug tool names in this mapping should always be lower-case. return std::map()>> { { "atmel-ice", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "power-debugger", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "snap", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "pickit-4", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "xplained-pro", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "xplained-mini", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "xplained-nano", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "curiosity-nano", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "jtagice3", - [] { - return std::make_unique(); + [this] { + return std::make_unique(this->environmentConfig.debugToolConfig); } }, { "wch-link-e", [this] { - return std::make_unique(this->environmentConfig.debugToolConfig); + return std::make_unique(this->environmentConfig.debugToolConfig); } }, };