From 623743995b40f2ba651005b4374ac252b7f0f0d9 Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 27 Oct 2024 00:25:42 +0100 Subject: [PATCH] Made the EDBG CMSIS-DAP command delay optional for all debug tools, and disabled it by default. The command delay was really choking Bloom's EDBG driver, causing a very noticeable drag on Bloom's performance. It's much faster with the command delay disabled. There was a good reason for why I introduced this some time ago. Without it, some EDBG debug tools were misbehaving - I remember that for certain. But now, I cannot seem to reproduce these issues. Very odd. If the issues do reappear, I may have to enable the command delay by default, again, for some debug tools. For now, if any users experience issues, I'll just suggest they manually enable the command delay via their project config. Also, I'm not going to document this new config option, as I would prefer the user to approach me if they experience issues as a result of this, so that I'll know if it needs revisiting. --- src/DebugToolDrivers/CMakeLists.txt | 1 + .../Microchip/AtmelICE/AtmelIce.cpp | 3 +- .../Microchip/AtmelICE/AtmelIce.hpp | 2 +- .../Microchip/CuriosityNano/CuriosityNano.cpp | 3 +- .../Microchip/CuriosityNano/CuriosityNano.hpp | 2 +- src/DebugToolDrivers/Microchip/EdbgDevice.cpp | 30 ++++++++++++-- src/DebugToolDrivers/Microchip/EdbgDevice.hpp | 5 +++ .../Microchip/EdbgToolConfig.cpp | 30 ++++++++++++++ .../Microchip/EdbgToolConfig.hpp | 21 ++++++++++ .../Microchip/JtagIce3/JtagIce3.cpp | 3 +- .../Microchip/JtagIce3/JtagIce3.hpp | 2 +- .../Microchip/MplabPickit4/MplabPickit4.cpp | 3 +- .../Microchip/MplabPickit4/MplabPickit4.hpp | 2 +- .../Microchip/MplabSnap/MplabSnap.cpp | 3 +- .../Microchip/MplabSnap/MplabSnap.hpp | 2 +- .../Microchip/PowerDebugger/PowerDebugger.cpp | 3 +- .../Microchip/PowerDebugger/PowerDebugger.hpp | 2 +- .../Microchip/XplainedMini/XplainedMini.cpp | 3 +- .../Microchip/XplainedMini/XplainedMini.hpp | 2 +- .../Microchip/XplainedNano/XplainedNano.cpp | 3 +- .../Microchip/XplainedNano/XplainedNano.hpp | 2 +- .../Microchip/XplainedPro/XplainedPro.cpp | 3 +- .../Microchip/XplainedPro/XplainedPro.hpp | 2 +- .../Protocols/CMSIS-DAP/CmsisDapInterface.hpp | 6 ++- .../TargetControllerComponent.cpp | 41 ++++++++++--------- 25 files changed, 136 insertions(+), 43 deletions(-) create mode 100644 src/DebugToolDrivers/Microchip/EdbgToolConfig.cpp create mode 100644 src/DebugToolDrivers/Microchip/EdbgToolConfig.hpp 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); } }, };