diff --git a/src/Targets/TargetDescription/TargetDescriptionFile.cpp b/src/Targets/TargetDescription/TargetDescriptionFile.cpp index 7182ab9c..1913ef88 100644 --- a/src/Targets/TargetDescription/TargetDescriptionFile.cpp +++ b/src/Targets/TargetDescription/TargetDescriptionFile.cpp @@ -256,6 +256,14 @@ namespace Targets::TargetDescription std::pair(pinout.key, std::move(pinout)) ); } + + for ( + auto element = deviceElement.firstChildElement("variants").firstChildElement("variant"); + !element.isNull(); + element = element.nextSiblingElement("variant") + ) { + this->variants.emplace_back(TargetDescriptionFile::variantFromXml(element)); + } } const std::string& TargetDescriptionFile::deviceAttribute(const std::string& attributeName) const { @@ -653,4 +661,12 @@ namespace Targets::TargetDescription TargetDescriptionFile::getAttribute(xmlElement, "pad") ); } + + Variant TargetDescriptionFile::variantFromXml(const QDomElement& xmlElement) { + return Variant( + TargetDescriptionFile::getAttribute(xmlElement, "name"), + TargetDescriptionFile::getAttribute(xmlElement, "pinout-key"), + TargetDescriptionFile::getAttribute(xmlElement, "package") + ); + } } diff --git a/src/Targets/TargetDescription/TargetDescriptionFile.hpp b/src/Targets/TargetDescription/TargetDescriptionFile.hpp index 29502ba5..77691622 100644 --- a/src/Targets/TargetDescription/TargetDescriptionFile.hpp +++ b/src/Targets/TargetDescription/TargetDescriptionFile.hpp @@ -111,6 +111,7 @@ namespace Targets::TargetDescription std::map> modulesByKey; std::map> peripheralsByKey; std::map> pinoutsByKey; + std::vector variants; TargetDescriptionFile() = default; virtual ~TargetDescriptionFile() = default; @@ -145,5 +146,6 @@ namespace Targets::TargetDescription static Signal signalFromXml(const QDomElement& xmlElement); static Pinout pinoutFromXml(const QDomElement& xmlElement); static Pin pinFromXml(const QDomElement& xmlElement); + static Variant variantFromXml(const QDomElement& xmlElement); }; } diff --git a/src/Targets/TargetDescription/Variant.hpp b/src/Targets/TargetDescription/Variant.hpp index 47f2dfa2..14c7f83c 100644 --- a/src/Targets/TargetDescription/Variant.hpp +++ b/src/Targets/TargetDescription/Variant.hpp @@ -7,8 +7,17 @@ namespace Targets::TargetDescription struct Variant { std::string name; - std::string pinoutName; + std::string pinoutKey; std::string package; - bool disabled = false; + + Variant( + const std::string& name, + const std::string& pinoutKey, + const std::string& package + ) + : name(name) + , pinoutKey(pinoutKey) + , package(package) + {} }; }