New base class for EDBG Control protocol response frame

This commit is contained in:
Nav
2022-03-16 17:09:43 +00:00
parent 7adfd47214
commit 1eccebd487
2 changed files with 57 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
#include "EdbgControlResponseFrame.hpp"
#include "src/Exceptions/Exception.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::EdbgControl
{
using namespace Bloom::Exceptions;
EdbgControlResponseId EdbgControlResponseFrame::getResponseId() {
const auto& payload = this->getPayload();
if (payload.empty()) {
throw Exception("Response ID missing from EDBG Control response frame payload.");
}
return static_cast<EdbgControlResponseId>(payload[0]);
}
std::vector<unsigned char> EdbgControlResponseFrame::getPayloadData() {
const auto& payload = this->getPayload();
/*
* EDBG Control data payloads include two bytes before the data (response ID and version byte) as well as an
* additional byte after the data, known as the 'status code'.
*/
auto data = std::vector<unsigned char>(
payload.begin() + 2,
payload.end() - 1
);
return data;
}
}

View File

@@ -0,0 +1,25 @@
#pragma once
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::EdbgControl
{
enum class EdbgControlResponseId: unsigned char
{
OK = 0x80,
DATA = 0x84,
FAILED = 0xA0,
};
class EdbgControlResponseFrame: public AvrResponseFrame
{
public:
EdbgControlResponseFrame() = default;
explicit EdbgControlResponseFrame(const std::vector<AvrResponse>& avrResponses)
: AvrResponseFrame(avrResponses) {}
[[nodiscard]] EdbgControlResponseId getResponseId();
[[nodiscard]] std::vector<unsigned char> getPayloadData() override;
};
}