diff --git a/Tactility/Include/Tactility/hal/radio/ParameterSet.h b/Tactility/Include/Tactility/hal/radio/ParameterSet.h new file mode 100644 index 00000000..fa28e34d --- /dev/null +++ b/Tactility/Include/Tactility/hal/radio/ParameterSet.h @@ -0,0 +1,41 @@ +#pragma once + +#include "RadioDevice.h" + +#include + +namespace tt::hal::radio { + +class ParameterSet { +private: + using Map = std::unordered_map >; + Map parameters; + +public: + explicit ParameterSet() {} + explicit ParameterSet(const ParameterSet& other) { parameters = other.parameters; } + ~ParameterSet() override = default; + + float get(const RadioDevice::Parameter parameter) { return parameters[parameter]; } + void set(const RadioDevice::Parameter parameter, const float value) { parameters[parameter] = value; } + bool has(const RadioDevice::Parameter parameter) { return parameters.contains(parameter); } + bool erase(const RadioDevice::Parameter parameter) { + if (has(parameter)) { + parameters.erase(parameter); + return true; + } + return false; + } + + bool apply(RadioDevice &radio) { + bool successful = true; + for (const auto& [parameter, value] : parameters) { + // No break on error chosen to apply all parameters, + // a bad one doesn't make the successive tries any more invalid + successful &= radio.configure(parameter, value); + } + return successful; + } +}; + +}