Target variant keys
This commit is contained in:
@@ -268,7 +268,7 @@ namespace Targets::Microchip::Avr8
|
|||||||
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
|
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetPadDescriptorsByKey(),
|
this->targetDescriptionFile.targetPadDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
|
this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetVariantDescriptors(),
|
this->targetDescriptionFile.targetVariantDescriptorsByKey(),
|
||||||
this->getBreakpointResources()
|
this->getBreakpointResources()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ namespace Targets::RiscV
|
|||||||
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
|
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetPadDescriptorsByKey(),
|
this->targetDescriptionFile.targetPadDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
|
this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
|
||||||
this->targetDescriptionFile.targetVariantDescriptors(),
|
this->targetDescriptionFile.targetVariantDescriptorsByKey(),
|
||||||
{} // TODO: populate this
|
{} // TODO: populate this
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -348,11 +348,14 @@ namespace Targets::TargetDescription
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<TargetVariantDescriptor> TargetDescriptionFile::targetVariantDescriptors() const {
|
std::map<std::string, TargetVariantDescriptor> TargetDescriptionFile::targetVariantDescriptorsByKey() const {
|
||||||
auto output = std::vector<TargetVariantDescriptor>{};
|
auto output = std::map<std::string, TargetVariantDescriptor>{};
|
||||||
|
|
||||||
for (const auto& variant : this->variants) {
|
for (const auto& [key, variant] : this->variantsByKey) {
|
||||||
output.emplace_back(TargetDescriptionFile::targetVariantDescriptorFromVariant(variant));
|
output.emplace(
|
||||||
|
key,
|
||||||
|
TargetDescriptionFile::targetVariantDescriptorFromVariant(variant)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
@@ -474,7 +477,8 @@ namespace Targets::TargetDescription
|
|||||||
!element.isNull();
|
!element.isNull();
|
||||||
element = element.nextSiblingElement("variant")
|
element = element.nextSiblingElement("variant")
|
||||||
) {
|
) {
|
||||||
this->variants.emplace_back(TargetDescriptionFile::variantFromXml(element));
|
auto variant = TargetDescriptionFile::variantFromXml(element);
|
||||||
|
this->variantsByKey.emplace(variant.key, std::move(variant));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -920,6 +924,7 @@ namespace Targets::TargetDescription
|
|||||||
|
|
||||||
Variant TargetDescriptionFile::variantFromXml(const QDomElement& xmlElement) {
|
Variant TargetDescriptionFile::variantFromXml(const QDomElement& xmlElement) {
|
||||||
return {
|
return {
|
||||||
|
TargetDescriptionFile::getAttribute(xmlElement, "key"),
|
||||||
TargetDescriptionFile::getAttribute(xmlElement, "name"),
|
TargetDescriptionFile::getAttribute(xmlElement, "name"),
|
||||||
TargetDescriptionFile::getAttribute(xmlElement, "pinout-key")
|
TargetDescriptionFile::getAttribute(xmlElement, "pinout-key")
|
||||||
};
|
};
|
||||||
@@ -1190,6 +1195,7 @@ namespace Targets::TargetDescription
|
|||||||
|
|
||||||
TargetVariantDescriptor TargetDescriptionFile::targetVariantDescriptorFromVariant(const Variant& variant) {
|
TargetVariantDescriptor TargetDescriptionFile::targetVariantDescriptorFromVariant(const Variant& variant) {
|
||||||
return {
|
return {
|
||||||
|
variant.key,
|
||||||
variant.name,
|
variant.name,
|
||||||
variant.pinoutKey
|
variant.pinoutKey
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ namespace Targets::TargetDescription
|
|||||||
[[nodiscard]] std::map<std::string, TargetPeripheralDescriptor> targetPeripheralDescriptorsByKey() const;
|
[[nodiscard]] std::map<std::string, TargetPeripheralDescriptor> targetPeripheralDescriptorsByKey() const;
|
||||||
[[nodiscard]] std::map<std::string, TargetPadDescriptor> targetPadDescriptorsByKey() const;
|
[[nodiscard]] std::map<std::string, TargetPadDescriptor> targetPadDescriptorsByKey() const;
|
||||||
[[nodiscard]] std::map<std::string, TargetPinoutDescriptor> targetPinoutDescriptorsByKey() const;
|
[[nodiscard]] std::map<std::string, TargetPinoutDescriptor> targetPinoutDescriptorsByKey() const;
|
||||||
[[nodiscard]] std::vector<TargetVariantDescriptor> targetVariantDescriptors() const;
|
[[nodiscard]] std::map<std::string, TargetVariantDescriptor> targetVariantDescriptorsByKey() const;
|
||||||
[[nodiscard]] std::vector<TargetPeripheralDescriptor> gpioPortPeripheralDescriptors() const;
|
[[nodiscard]] std::vector<TargetPeripheralDescriptor> gpioPortPeripheralDescriptors() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -165,7 +165,7 @@ namespace Targets::TargetDescription
|
|||||||
std::map<std::string, Peripheral, std::less<void>> peripheralsByKey;
|
std::map<std::string, Peripheral, std::less<void>> peripheralsByKey;
|
||||||
std::map<std::string, Pad, std::less<void>> padsByKey;
|
std::map<std::string, Pad, std::less<void>> padsByKey;
|
||||||
std::map<std::string, Pinout, std::less<void>> pinoutsByKey;
|
std::map<std::string, Pinout, std::less<void>> pinoutsByKey;
|
||||||
std::vector<Variant> variants;
|
std::map<std::string, Variant, std::less<void>> variantsByKey;
|
||||||
|
|
||||||
TargetDescriptionFile() = default;
|
TargetDescriptionFile() = default;
|
||||||
virtual ~TargetDescriptionFile() = default;
|
virtual ~TargetDescriptionFile() = default;
|
||||||
|
|||||||
@@ -6,14 +6,17 @@ namespace Targets::TargetDescription
|
|||||||
{
|
{
|
||||||
struct Variant
|
struct Variant
|
||||||
{
|
{
|
||||||
|
std::string key;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string pinoutKey;
|
std::string pinoutKey;
|
||||||
|
|
||||||
Variant(
|
Variant(
|
||||||
|
const std::string& key,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& pinoutKey
|
const std::string& pinoutKey
|
||||||
)
|
)
|
||||||
: name(name)
|
: key(key)
|
||||||
|
, name(name)
|
||||||
, pinoutKey(pinoutKey)
|
, pinoutKey(pinoutKey)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace Targets
|
|||||||
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
|
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
|
||||||
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
|
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
|
||||||
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
|
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
|
||||||
std::vector<TargetVariantDescriptor>&& variantDescriptors,
|
std::map<std::string, TargetVariantDescriptor>&& variantDescriptorsByKey,
|
||||||
const BreakpointResources& breakpointResources
|
const BreakpointResources& breakpointResources
|
||||||
)
|
)
|
||||||
: name(name)
|
: name(name)
|
||||||
@@ -26,7 +26,7 @@ namespace Targets
|
|||||||
, peripheralDescriptorsByKey(std::move(peripheralDescriptorsByKey))
|
, peripheralDescriptorsByKey(std::move(peripheralDescriptorsByKey))
|
||||||
, padDescriptorsByKey(std::move(padDescriptorsByKey))
|
, padDescriptorsByKey(std::move(padDescriptorsByKey))
|
||||||
, pinoutDescriptorsByKey(std::move(pinoutDescriptorsByKey))
|
, pinoutDescriptorsByKey(std::move(pinoutDescriptorsByKey))
|
||||||
, variantDescriptors(std::move(variantDescriptors))
|
, variantDescriptorsByKey(std::move(variantDescriptorsByKey))
|
||||||
, breakpointResources(breakpointResources)
|
, breakpointResources(breakpointResources)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -141,4 +141,28 @@ namespace Targets
|
|||||||
|
|
||||||
return descriptor->get();
|
return descriptor->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::optional<
|
||||||
|
std::reference_wrapper<const TargetVariantDescriptor>
|
||||||
|
> TargetDescriptor::tryGetVariantDescriptor(const std::string& key) const {
|
||||||
|
const auto descriptorIt = this->variantDescriptorsByKey.find(key);
|
||||||
|
|
||||||
|
if (descriptorIt == this->variantDescriptorsByKey.end()) {
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::cref(descriptorIt->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TargetVariantDescriptor& TargetDescriptor::getVariantDescriptor(const std::string& key) const {
|
||||||
|
const auto descriptor = this->tryGetVariantDescriptor(key);
|
||||||
|
if (!descriptor.has_value()) {
|
||||||
|
throw Exceptions::InternalFatalErrorException{
|
||||||
|
"Failed to get pinout descriptor \"" + std::string{key}
|
||||||
|
+ "\" from target descriptor - descriptor not found"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return descriptor->get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace Targets
|
|||||||
std::map<std::string, TargetPeripheralDescriptor> peripheralDescriptorsByKey;
|
std::map<std::string, TargetPeripheralDescriptor> peripheralDescriptorsByKey;
|
||||||
std::map<std::string, TargetPadDescriptor> padDescriptorsByKey;
|
std::map<std::string, TargetPadDescriptor> padDescriptorsByKey;
|
||||||
std::map<std::string, TargetPinoutDescriptor> pinoutDescriptorsByKey;
|
std::map<std::string, TargetPinoutDescriptor> pinoutDescriptorsByKey;
|
||||||
std::vector<TargetVariantDescriptor> variantDescriptors;
|
std::map<std::string, TargetVariantDescriptor> variantDescriptorsByKey;
|
||||||
BreakpointResources breakpointResources;
|
BreakpointResources breakpointResources;
|
||||||
|
|
||||||
TargetDescriptor(
|
TargetDescriptor(
|
||||||
@@ -40,7 +40,7 @@ namespace Targets
|
|||||||
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
|
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
|
||||||
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
|
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
|
||||||
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
|
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
|
||||||
std::vector<TargetVariantDescriptor>&& variantDescriptors,
|
std::map<std::string, TargetVariantDescriptor>&& variantDescriptorsByKey,
|
||||||
const BreakpointResources& breakpointResources
|
const BreakpointResources& breakpointResources
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -85,5 +85,11 @@ namespace Targets
|
|||||||
) const;
|
) const;
|
||||||
|
|
||||||
const TargetPinoutDescriptor& getPinoutDescriptor(const std::string& key) const;
|
const TargetPinoutDescriptor& getPinoutDescriptor(const std::string& key) const;
|
||||||
|
|
||||||
|
std::optional<std::reference_wrapper<const TargetVariantDescriptor>> tryGetVariantDescriptor(
|
||||||
|
const std::string& key
|
||||||
|
) const;
|
||||||
|
|
||||||
|
const TargetVariantDescriptor& getVariantDescriptor(const std::string& key) const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,12 @@
|
|||||||
namespace Targets
|
namespace Targets
|
||||||
{
|
{
|
||||||
TargetVariantDescriptor::TargetVariantDescriptor(
|
TargetVariantDescriptor::TargetVariantDescriptor(
|
||||||
|
const std::string& key,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& pinoutKey
|
const std::string& pinoutKey
|
||||||
)
|
)
|
||||||
: name(name)
|
: key(key)
|
||||||
|
, name(name)
|
||||||
, pinoutKey(pinoutKey)
|
, pinoutKey(pinoutKey)
|
||||||
{}
|
{}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ namespace Targets
|
|||||||
struct TargetVariantDescriptor
|
struct TargetVariantDescriptor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
const std::string key;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string pinoutKey;
|
std::string pinoutKey;
|
||||||
|
|
||||||
TargetVariantDescriptor(
|
TargetVariantDescriptor(
|
||||||
|
const std::string& key,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
const std::string& pinoutKey
|
const std::string& pinoutKey
|
||||||
);
|
);
|
||||||
@@ -19,6 +21,5 @@ namespace Targets
|
|||||||
TargetVariantDescriptor& operator = (const TargetVariantDescriptor& other) = delete;
|
TargetVariantDescriptor& operator = (const TargetVariantDescriptor& other) = delete;
|
||||||
|
|
||||||
TargetVariantDescriptor(TargetVariantDescriptor&& other) noexcept = default;
|
TargetVariantDescriptor(TargetVariantDescriptor&& other) noexcept = default;
|
||||||
TargetVariantDescriptor& operator = (TargetVariantDescriptor&& other) noexcept = default;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user