Updated TDF peripheral, register group instance and signal extraction to align with new TDF format

This commit is contained in:
Nav
2024-02-27 21:01:36 +00:00
parent 1b2f9b8194
commit 94c20b2978
5 changed files with 221 additions and 20 deletions

View File

@@ -0,0 +1,63 @@
#pragma once
#include <cstdint>
#include <string>
#include <map>
#include <functional>
#include <vector>
#include "RegisterGroupInstance.hpp"
#include "Signal.hpp"
#include "Exceptions/InvalidTargetDescriptionDataException.hpp"
namespace Targets::TargetDescription
{
struct Peripheral
{
std::string key;
std::string name;
std::string moduleKey;
std::map<std::string, RegisterGroupInstance, std::less<void>> registerGroupInstancesByKey;
std::vector<Signal> sigs;
Peripheral(
const std::string& key,
const std::string& name,
const std::string& moduleKey,
const std::map<std::string, RegisterGroupInstance, std::less<void>>& registerGroupInstancesByKey,
const std::vector<Signal>& sigs
)
: key(key)
, name(name)
, moduleKey(moduleKey)
, registerGroupInstancesByKey(registerGroupInstancesByKey)
, sigs(sigs)
{}
std::optional<std::reference_wrapper<const RegisterGroupInstance>> tryGetRegisterGroupInstance(
std::string_view key
) const {
const auto instanceIt = this->registerGroupInstancesByKey.find(key);
if (instanceIt == this->registerGroupInstancesByKey.end()) {
return std::nullopt;
}
return std::cref(instanceIt->second);
}
const RegisterGroupInstance& getRegisterGroupInstance(std::string_view key) const {
const auto instance = this->tryGetRegisterGroupInstance(key);
if (!instance.has_value()) {
throw Exceptions::InvalidTargetDescriptionDataException(
"Failed to get register group instance \"" + std::string(key)
+ "\" from peripheral in TDF - register group instance not found"
);
}
return instance->get();
}
};
}