New GDB monitor command for Insight activation.

Created GdbHelpMonitorInfo.txt.in template for conditional commands
This commit is contained in:
Nav
2023-05-24 23:15:47 +01:00
parent 7eedc42cdc
commit d55756da72
7 changed files with 99 additions and 6 deletions

View File

@@ -17,6 +17,7 @@ set(CMAKE_SKIP_BUILD_RPATH false)
set(CMAKE_BUILD_RPATH_USE_ORIGIN true) set(CMAKE_BUILD_RPATH_USE_ORIGIN true)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib:/usr/local/lib") set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib:/usr/local/lib")
set(CMAKE_BUILD_RPATH ${CMAKE_INSTALL_RPATH}) set(CMAKE_BUILD_RPATH ${CMAKE_INSTALL_RPATH})
set(COMPILED_RESOURCES_BUILD_DIR ${CMAKE_BINARY_DIR}/compiled_resources/)
add_compile_definitions(BLOOM_VERSION="${CMAKE_PROJECT_VERSION}") add_compile_definitions(BLOOM_VERSION="${CMAKE_PROJECT_VERSION}")

View File

@@ -40,6 +40,30 @@ target_sources(
${CMAKE_CURRENT_SOURCE_DIR}/Gdb/AvrGdb/CommandPackets/FlashDone.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Gdb/AvrGdb/CommandPackets/FlashDone.cpp
) )
if (NOT EXCLUDE_INSIGHT)
target_sources(
Bloom
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/Gdb/CommandPackets/ActivateInsight.cpp
)
set(
ACTIVATE_INSIGHT_HELP_TEXT
"\n insight Activates the Insight GUI.\n"
)
endif ()
configure_file(
"./Gdb/Resources/GdbHelpMonitorInfo.txt.in"
"${COMPILED_RESOURCES_BUILD_DIR}/Gdb/GdbHelpMonitorInfo.txt"
@ONLY
)
set_source_files_properties(
"${COMPILED_RESOURCES_BUILD_DIR}/Gdb/GdbHelpMonitorInfo.txt"
PROPERTIES QT_RESOURCE_ALIAS "/Gdb/Resources/GdbHelpMonitorInfo.txt"
)
# DebugServer resources # DebugServer resources
qt_add_resources( qt_add_resources(
Bloom Bloom
@@ -48,5 +72,5 @@ qt_add_resources(
"/compiled/src/DebugServer" "/compiled/src/DebugServer"
FILES FILES
# GDB RSP Server # GDB RSP Server
"./Gdb/Resources/GdbHelpMonitorInfo.txt" "${COMPILED_RESOURCES_BUILD_DIR}/Gdb/GdbHelpMonitorInfo.txt"
) )

View File

@@ -0,0 +1,40 @@
#include "ActivateInsight.hpp"
#include "src/DebugServer/Gdb/ResponsePackets/ResponsePacket.hpp"
#include "src/DebugServer/Gdb/ResponsePackets/ErrorResponsePacket.hpp"
#include "src/EventManager/EventManager.hpp"
#include "src/EventManager/Events/InsightActivationRequested.hpp"
#include "src/Services/StringService.hpp"
#include "src/Logger/Logger.hpp"
#include "src/Exceptions/Exception.hpp"
namespace Bloom::DebugServer::Gdb::CommandPackets
{
using Services::TargetControllerService;
using ResponsePackets::ResponsePacket;
using ResponsePackets::ErrorResponsePacket;
using Bloom::Exceptions::Exception;
ActivateInsight::ActivateInsight(Monitor&& monitorPacket)
: Monitor(std::move(monitorPacket))
{}
void ActivateInsight::handle(DebugSession& debugSession, TargetControllerService&) {
Logger::info("Handling ActivateInsight packet");
try {
EventManager::triggerEvent(std::make_shared<Events::InsightActivationRequested>());
debugSession.connection.writePacket(ResponsePacket(Services::StringService::toHex(
"Insight requested\n"
)));
} catch (const Exception& exception) {
Logger::error("Failed to activate Insight - " + exception.getMessage());
debugSession.connection.writePacket(ErrorResponsePacket());
}
}
}

View File

@@ -0,0 +1,22 @@
#pragma once
#include "Monitor.hpp"
namespace Bloom::DebugServer::Gdb::CommandPackets
{
/**
* The ActivateInsight class implements a structure for the "monitor insight" GDB command.
*
* This command will activate the Insight GUI.
*/
class ActivateInsight: public Monitor
{
public:
explicit ActivateInsight(Monitor&& monitorPacket);
void handle(
DebugSession& debugSession,
Services::TargetControllerService& targetControllerService
) override;
};
}

View File

@@ -34,9 +34,7 @@ namespace Bloom::DebugServer::Gdb::CommandPackets
* See src/DebugServer/CMakeLists.txt for more. * See src/DebugServer/CMakeLists.txt for more.
*/ */
auto helpFile = QFile( auto helpFile = QFile(
QString::fromStdString( QString::fromStdString(":/compiled/src/DebugServer/Gdb/Resources/GdbHelpMonitorInfo.txt")
Services::PathService::compiledResourcesPath() + "/src/DebugServer/Gdb/Resources/GdbHelpMonitorInfo.txt"
)
); );
if (!helpFile.open(QIODevice::ReadOnly)) { if (!helpFile.open(QIODevice::ReadOnly)) {

View File

@@ -32,6 +32,10 @@
#include "CommandPackets/Detach.hpp" #include "CommandPackets/Detach.hpp"
#include "CommandPackets/EepromFill.hpp" #include "CommandPackets/EepromFill.hpp"
#ifndef EXCLUDE_INSIGHT
#include "CommandPackets/ActivateInsight.hpp"
#endif
// Response packets // Response packets
#include "ResponsePackets/TargetStopped.hpp" #include "ResponsePackets/TargetStopped.hpp"
@@ -321,7 +325,11 @@ namespace Bloom::DebugServer::Gdb
if (monitorCommand->command.find("eeprom fill") == 0) { if (monitorCommand->command.find("eeprom fill") == 0) {
return std::make_unique<CommandPackets::EepromFill>(std::move(*(monitorCommand.release()))); return std::make_unique<CommandPackets::EepromFill>(std::move(*(monitorCommand.release())));
} }
#ifndef EXCLUDE_INSIGHT
if (monitorCommand->command.find("insight") == 0) {
return std::make_unique<CommandPackets::ActivateInsight>(std::move(*(monitorCommand.release())));
}
#endif
return monitorCommand; return monitorCommand;
} }
} }

View File

@@ -3,7 +3,7 @@ Supported Bloom commands:
help Displays this help text. help Displays this help text.
version Outputs Bloom's version information. version Outputs Bloom's version information.
version machine Outputs Bloom's version information in JSON format. version machine Outputs Bloom's version information in JSON format.
@ACTIVATE_INSIGHT_HELP_TEXT@
svd Generates the System View Description (SVD) XML for the current target and saves it into a svd Generates the System View Description (SVD) XML for the current target and saves it into a
file located in the current project directory. file located in the current project directory.
svd --out Generates the System View Description (SVD) XML for the current target and sends it to GDB, as svd --out Generates the System View Description (SVD) XML for the current target and sends it to GDB, as