Moved getResponseId() function out of AvrResponseFrame class and into derived classes
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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) {}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user