Files
BloomPatched/src/Targets/TargetDescriptor.hpp

73 lines
2.2 KiB
C++
Raw Normal View History

2021-04-04 21:04:12 +01:00
#pragma once
#include <string>
#include <cstdint>
#include <vector>
#include <map>
#include <algorithm>
#include <QMetaType>
2021-04-04 21:04:12 +01:00
2021-10-09 19:17:58 +01:00
#include "TargetMemory.hpp"
#include "TargetRegister.hpp"
2021-04-04 21:04:12 +01:00
#include "TargetVariant.hpp"
2023-09-20 23:37:54 +01:00
#include "TargetBreakpoint.hpp"
2021-04-04 21:04:12 +01:00
namespace Targets
2021-04-04 21:04:12 +01:00
{
enum class TargetFamily: std::uint8_t
{
AVR8,
RISC_V,
};
2021-04-04 21:04:12 +01:00
struct TargetDescriptor
{
std::string id;
TargetFamily family;
std::string name;
2022-08-30 02:51:10 +01:00
std::string vendorName;
2021-10-09 19:17:58 +01:00
std::map<TargetMemoryType, TargetMemoryDescriptor> memoryDescriptorsByType;
std::map<TargetRegisterDescriptorId, TargetRegisterDescriptor> registerDescriptorsById;
2023-09-20 23:37:54 +01:00
BreakpointResources breakpointResources;
2021-04-04 21:04:12 +01:00
std::vector<TargetVariant> variants;
TargetMemoryType programMemoryType;
TargetDescriptor(
2023-09-20 18:56:44 +01:00
const std::string& id,
TargetFamily family,
2023-09-20 18:56:44 +01:00
const std::string& name,
const std::string& vendorName,
const std::map<TargetMemoryType, TargetMemoryDescriptor>& memoryDescriptorsByType,
const std::map<TargetRegisterDescriptorId, TargetRegisterDescriptor>& registerDescriptorsById,
2023-09-20 23:37:54 +01:00
const BreakpointResources& breakpointResources,
2023-09-20 18:56:44 +01:00
const std::vector<TargetVariant>& variants,
TargetMemoryType programMemoryType
)
: id(id)
, family(family)
, name(name)
, vendorName(vendorName)
, memoryDescriptorsByType(memoryDescriptorsByType)
, registerDescriptorsById(registerDescriptorsById)
2023-09-20 23:37:54 +01:00
, breakpointResources(breakpointResources)
, variants(variants)
, programMemoryType(programMemoryType)
{}
TargetRegisterDescriptorIds registerDescriptorIdsForType(TargetRegisterType type) {
auto output = TargetRegisterDescriptorIds();
for (const auto& [descriptorId, descriptor] : this->registerDescriptorsById) {
if (descriptor.type == type) {
output.insert(descriptorId);
}
}
return output;
}
2021-04-04 21:04:12 +01:00
};
}
Q_DECLARE_METATYPE(Targets::TargetDescriptor)