Files
BloomPatched/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/AvrResponse.cpp
Nav 6cdbfbe950 Massive refactor to accommodate RISC-V targets
- Refactored entire codebase (excluding the Insight component) to accommodate multiple target architectures (no longer specific to AVR)
- Deleted 'generate SVD' GDB monitor command - I will eventually move this functionality to the Bloom website
- Added unit size property to address spaces
- Many other changes which I couldn't be bothered to describe here
2024-07-23 21:14:22 +01:00

42 lines
1.4 KiB
C++

#include "AvrResponse.hpp"
#include "src/Exceptions/Exception.hpp"
namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
{
using namespace Exceptions;
AvrResponse::AvrResponse(const std::vector<unsigned char>& rawResponse)
: Response(rawResponse)
{
if (this->id != 0x81) {
throw Exception{"Failed to construct AvrResponse object - invalid response ID."};
}
if (this->data.empty()) {
// All AVR responses should contain at least one byte (the fragment info byte)
throw Exception{"Failed to construct AvrResponse object - malformed AVR_RSP data"};
}
if (this->data[0] == 0x00) {
// This AVR Response contains no data (the device had no data to send), so we can stop here.
return;
}
this->fragmentCount = static_cast<std::uint8_t>(this->data[0] & 0x0FU);
this->fragmentNumber = static_cast<std::uint8_t>(this->data[0] >> 4);
// Response size is two bytes, MSB
const auto responsePacketSize = static_cast<std::uint16_t>((this->data[1] << 8U) + this->data[2]);
if (responsePacketSize > 0) {
// Packet data
this->responsePacket.insert(
this->responsePacket.begin(),
this->data.begin() + 3,
this->data.begin() + 3 + responsePacketSize
);
}
}
}