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/CommandFrames/AVR8Generic/ReadMemory.cpp
|
||||||
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.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/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/AvrEvent.cpp
|
||||||
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp
|
src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp
|
||||||
src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp
|
src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#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/DiscoveryResponseFrame.hpp"
|
#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/Discovery/DiscoveryResponseFrame.hpp"
|
||||||
|
|
||||||
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery
|
namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#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
|
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>
|
class HouseKeepingCommandFrame: public AvrCommandFrame<PayloadContainerType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
using ExpectedResponseFrameType = ResponseFrames::HouseKeepingResponseFrame;
|
||||||
|
|
||||||
HouseKeepingCommandFrame(): AvrCommandFrame<PayloadContainerType>(ProtocolHandlerId::HOUSE_KEEPING) {}
|
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)
|
explicit Avr8GenericResponseFrame(const std::vector<AvrResponse>& AVRResponses)
|
||||||
: AvrResponseFrame(AVRResponses) {}
|
: AvrResponseFrame(AVRResponses) {}
|
||||||
|
|
||||||
|
[[nodiscard]] unsigned char getResponseId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See parent method.
|
* See parent method.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] std::vector<unsigned char> getPayloadData() override {
|
[[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;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr
|
|||||||
AvrResponseFrame& operator = (AvrResponseFrame&& other) = default;
|
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.
|
* 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;
|
return this->payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char getResponseId() {
|
|
||||||
return this->payload[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] virtual std::vector<unsigned char> getPayloadData() {
|
[[nodiscard]] virtual std::vector<unsigned char> getPayloadData() {
|
||||||
return this->payload;
|
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