From 27bb6da374549ea67d89b50d0f7aacf543d2ce63 Mon Sep 17 00:00:00 2001 From: Nav Date: Wed, 2 Mar 2022 22:46:22 +0000 Subject: [PATCH] EDBG AVR response frames for the AVRISP sub-protocol. --- CMakeLists.txt | 1 + .../AVRISP/AvrIspResponseFrame.cpp | 18 ++++++++++++ .../AVRISP/AvrIspResponseFrame.hpp | 28 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.cpp create mode 100644 src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 66490d3c..c6c7938f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,7 @@ add_executable(Bloom src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.cpp src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/Discovery/DiscoveryResponseFrame.cpp src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/HouseKeeping/HouseKeepingResponseFrame.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.cpp src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.cpp src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.cpp new file mode 100644 index 00000000..9a1b5d61 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.cpp @@ -0,0 +1,18 @@ +#include "AvrIspResponseFrame.hpp" + +#include "src/Exceptions/Exception.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::AvrIsp +{ + using namespace Bloom::Exceptions; + + StatusCode AvrIspResponseFrame::getStatusCode() { + const auto& payload = this->getPayload(); + + if (payload.size() < 2) { + throw Exception("Status code missing from AVRISP response frame payload."); + } + + return static_cast(payload[1]); + } +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.hpp new file mode 100644 index 00000000..83822052 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVRISP/AvrIspResponseFrame.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::AvrIsp +{ + enum class StatusCode: unsigned char + { + OK = 0x00, + TIMEOUT = 0x80, + FAILED = 0xC0, + }; + + class AvrIspResponseFrame: public AvrResponseFrame + { + public: + AvrIspResponseFrame() = default; + explicit AvrIspResponseFrame(const std::vector& avrResponses) + : AvrResponseFrame(avrResponses) {} + + /** + * Extracts the status code from the response frame payload. + * + * @return + */ + [[nodiscard]] StatusCode getStatusCode(); + }; +}