Moved getResponseId() function out of AvrResponseFrame class and into derived classes

This commit is contained in:
Nav
2022-03-01 19:40:29 +00:00
parent 893a1d4ac1
commit e26af5ee7d
11 changed files with 129 additions and 49 deletions

View File

@@ -100,6 +100,9 @@ add_executable(Bloom
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ReadMemory.cpp
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.cpp
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.cpp
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/AvrEvent.cpp
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp
src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp

View File

@@ -1,7 +1,7 @@
#pragma once
#include "../AvrCommandFrame.hpp"
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/DiscoveryResponseFrame.hpp"
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp"
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/Discovery/DiscoveryResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery
{

View File

@@ -1,6 +1,7 @@
#pragma once
#include "../AvrCommandFrame.hpp"
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp"
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/HouseKeeping/HouseKeepingResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::HouseKeeping
{
@@ -25,6 +26,8 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames
class HouseKeepingCommandFrame: public AvrCommandFrame<PayloadContainerType>
{
public:
using ExpectedResponseFrameType = ResponseFrames::HouseKeepingResponseFrame;
HouseKeepingCommandFrame(): AvrCommandFrame<PayloadContainerType>(ProtocolHandlerId::HOUSE_KEEPING) {}
};
}

View File

@@ -0,0 +1,33 @@
#include "Avr8GenericResponseFrame.hpp"
#include "src/Exceptions/Exception.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic
{
using namespace Bloom::Exceptions;
unsigned char Avr8GenericResponseFrame::getResponseId() {
const auto& payload = this->getPayload();
if (payload.empty()) {
throw Exception("Response ID missing from AVR8 Generic response frame payload.");
}
return payload[0];
}
std::vector<unsigned char> Avr8GenericResponseFrame::getPayloadData() {
const auto& payload = this->getPayload();
/*
* AVR8 data payloads are in little endian form and 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
);
std::reverse(data.begin(), data.end());
return data;
}
}

View File

@@ -11,21 +11,11 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrame
explicit Avr8GenericResponseFrame(const std::vector<AvrResponse>& AVRResponses)
: AvrResponseFrame(AVRResponses) {}
[[nodiscard]] unsigned char getResponseId();
/**
* See parent method.
*/
[[nodiscard]] std::vector<unsigned char> getPayloadData() override {
/*
* AVR8 data payloads are in little endian form and 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>(
this->getPayload().begin() + 2,
this->getPayload().end() - 1
);
std::reverse(data.begin(), data.end());
return data;
}
[[nodiscard]] std::vector<unsigned char> getPayloadData() override;
};
}

View File

@@ -29,7 +29,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
AvrResponseFrame& operator = (AvrResponseFrame&& other) = default;
/**
* An AVRResponse contains a single fragment of an AvrResponseFrame.
* An AvrResponse contains a single fragment of an AvrResponseFrame.
*
* This method will construct an AvrResponseFrame from a vector of AVRResponses.
*
@@ -49,10 +49,6 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
return this->payload;
}
unsigned char getResponseId() {
return this->payload[0];
}
[[nodiscard]] virtual std::vector<unsigned char> getPayloadData() {
return this->payload;
}

View File

@@ -0,0 +1,30 @@
#include "DiscoveryResponseFrame.hpp"
#include "src/Exceptions/Exception.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames
{
using namespace Bloom::Exceptions;
unsigned char DiscoveryResponseFrame::getResponseId() {
const auto& payload = this->getPayload();
if (payload.empty()) {
throw Exception("Response ID missing from DISCOVERY response frame payload.");
}
return payload[0];
}
std::vector<unsigned char> DiscoveryResponseFrame::getPayloadData() {
const auto& payload = this->getPayload();
// DISCOVERY payloads include two bytes before the data (response ID and version byte).
auto data = std::vector<unsigned char>(
payload.begin() + 2,
payload.end()
);
return data;
}
}

View File

@@ -0,0 +1,20 @@
#pragma once
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames
{
class DiscoveryResponseFrame: public AvrResponseFrame
{
public:
DiscoveryResponseFrame() = default;
explicit DiscoveryResponseFrame(const std::vector<AvrResponse>& AVRResponses): AvrResponseFrame(AVRResponses) {}
unsigned char getResponseId();
/**
* See parent method.
*/
std::vector<unsigned char> getPayloadData() override;
};
}

View File

@@ -1,28 +0,0 @@
#pragma once
#include "AvrResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames
{
class DiscoveryResponseFrame: public AvrResponseFrame
{
public:
DiscoveryResponseFrame() = default;
explicit DiscoveryResponseFrame(const std::vector<AvrResponse>& AVRResponses): AvrResponseFrame(AVRResponses) {}
/**
* See parent method.
*/
std::vector<unsigned char> getPayloadData() override {
/*
* DISCOVERY payloads include two bytes before the data (response ID and version byte).
*/
auto data = std::vector<unsigned char>(
this->getPayload().begin() + 2,
this->getPayload().end()
);
return data;
}
};
}

View File

@@ -0,0 +1,18 @@
#include "HouseKeepingResponseFrame.hpp"
#include "src/Exceptions/Exception.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames
{
using namespace Bloom::Exceptions;
unsigned char HouseKeepingResponseFrame::getResponseId() {
const auto& payload = this->getPayload();
if (payload.empty()) {
throw Exception("Response ID missing from HOUSEKEEPING response frame payload.");
}
return payload[0];
}
}

View File

@@ -0,0 +1,15 @@
#pragma once
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp"
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames
{
class HouseKeepingResponseFrame: public AvrResponseFrame
{
public:
HouseKeepingResponseFrame() = default;
explicit HouseKeepingResponseFrame(const std::vector<AvrResponse>& AVRResponses): AvrResponseFrame(AVRResponses) {}
unsigned char getResponseId();
};
}