ifw-slm 0.1.2
 
Loading...
Searching...
No Matches
slConfig.hpp
Go to the documentation of this file.
1
9
10#ifndef IFWSLM_SL_CONFIG_HPP
11#define IFWSLM_SL_CONFIG_HPP
12
13#include <rad/config.hpp>
14#include <sstream>
15#include <string>
16#include <type_traits>
17#include <vector>
18
19namespace ifw::slm {
20
25const int SL_MAX_NUM = 9;
26
30const std::string SL_DB_NUM_IN_USE = "config/SL_inUse";
31
43const std::string SL_KEY_LOOP_NUM = "sl/loop_num";
44const std::string SL_KEY_LOOP_PREFIX = "sl/loop/";
45
46// Per-loop runtime state OLDB key names (using new format with underscores)
47const std::string SL_KEY_ACTIVE = "active";
48const std::string SL_KEY_STATE = "state";
49const std::string SL_KEY_CYCLE_COUNTER = "cycle_counter";
50const std::string SL_KEY_CYCLE_LAST_SUCCESS = "cycle_last_success";
51const std::string SL_KEY_CYCLE_LAST = "cycle_last";
52const std::string SL_KEY_CYCLE_START = "cycle_start";
53const std::string SL_KEY_CYCLE_FAILURE = "cycle_failure";
54const std::string SL_KEY_CYCLE_NERRORS = "cycle_nerrors";
55const std::string SL_KEY_CYCLE_NSUCCESS = "cycle_nsuccess";
56const std::string SL_KEY_CYCLE_VALUE = "cycle_value";
57const std::string SL_KEY_CYCLE_LAST_ERROR = "cycle_last_error";
58const std::string SL_KEY_TIMER_PERIOD_SEC = "timer_period_sec";
59
68
76std::string GetLoopConfigKey(int loop_index, const std::string& param_name);
77
85std::string GetLoopOldbKey(const std::string& prefix, int loop_index, const std::string& param_name);
86
101
108int GetNumSecondaryLoops(const rad::Config& config);
109
116std::vector<int> GetEnabledLoopIndices(const rad::Config& config);
117
126std::string GetLoopParam(const rad::Config& config, int loop_index, const std::string& param_name);
127
135bool IsLoopEnabled(const rad::Config& config, int loop_index);
136
146void DecomposeStatus(const std::string& sm_status,
147 std::string& state,
148 std::string& substate);
149
160std::string ToSupervisorSubstate(const std::string& substate);
161
170std::string FormatSupervisorStatus(const std::string& sm_status);
171
188bool TryGetLoopVectorParam(const rad::Config& config, int loop_index,
189 const std::string& param_name, std::string& out);
190
191namespace detail {
192
195template <typename T>
196inline T ConvertLoopParamValue(const std::string& s) {
197 if constexpr (std::is_same_v<T, std::string>) {
198 return s;
199 } else {
200 T value{};
201 std::istringstream iss(s);
202 iss >> value;
203 return value;
204 }
205}
206
207} // namespace detail
208
216template <typename T>
217inline T GetLoopParamFromConfig(const rad::Config& config, int loop_index,
218 const std::string& name) {
219 std::string raw;
220 if (TryGetLoopVectorParam(config, loop_index, name, raw)) {
222 }
223 return config.GetParam<T>(GetLoopConfigKey(loop_index, name));
224}
225
227template <typename T>
228inline T GetLoopParamFromConfig(const rad::Config& config, int loop_index,
229 const std::string& name, const T& default_value) {
230 std::string raw;
231 if (TryGetLoopVectorParam(config, loop_index, name, raw)) {
233 }
234 std::string key = GetLoopConfigKey(loop_index, name);
235 if (config.HasParam(key)) {
236 return config.GetParam<T>(key);
237 }
238 return default_value;
239}
240
250void LoadLoopParamsIntoConfig(rad::Config& config, const std::string& config_filename = "");
251
252} // namespace ifw::slm
253
254#endif // IFWSLM_SL_CONFIG_HPP
Definition slConfig.hpp:191
T ConvertLoopParamValue(const std::string &s)
Definition slConfig.hpp:196
Definition actionMgr.cpp:29
void DecomposeStatus(const std::string &sm_status, std::string &state, std::string &substate)
Definition slConfig.cpp:147
const std::string SL_KEY_CYCLE_LAST_ERROR
Definition slConfig.hpp:57
SlIndex
Definition slConfig.hpp:90
@ SL_3
Definition slConfig.hpp:93
@ SL_6
Definition slConfig.hpp:96
@ SL_4
Definition slConfig.hpp:94
@ SL_1
Definition slConfig.hpp:91
@ SL_8
Definition slConfig.hpp:98
@ SL_5
Definition slConfig.hpp:95
@ SL_2
Definition slConfig.hpp:92
@ SL_9
Definition slConfig.hpp:99
@ SL_7
Definition slConfig.hpp:97
const std::string SL_KEY_CYCLE_NERRORS
Definition slConfig.hpp:54
const std::string SL_KEY_CYCLE_NSUCCESS
Definition slConfig.hpp:55
const std::string SL_KEY_CYCLE_VALUE
Definition slConfig.hpp:56
T GetLoopParamFromConfig(const rad::Config &config, int loop_index, const std::string &name)
Definition slConfig.hpp:217
std::string GetLoopOldbKey(int loop_index, const std::string &param_name)
Definition oldbInterface.cpp:23
const std::string SL_DB_NUM_IN_USE
Definition slConfig.hpp:30
const std::string SL_KEY_LOOP_PREFIX
Definition slConfig.hpp:44
std::string ToSupervisorSubstate(const std::string &substate)
Definition slConfig.cpp:173
int GetNumSecondaryLoops(const rad::Config &config)
Definition slConfig.cpp:43
void LoadLoopParamsIntoConfig(rad::Config &config, const std::string &config_filename="")
Definition slConfig.cpp:191
const std::string SL_KEY_CYCLE_LAST
Definition slConfig.hpp:51
LoopState
Definition slConfig.hpp:63
@ SL_SUSPENDED
Definition slConfig.hpp:66
@ SL_CLOSED
Definition slConfig.hpp:65
@ SL_OPEN
Definition slConfig.hpp:64
bool IsLoopEnabled(const rad::Config &config, int loop_index)
Definition slConfig.cpp:129
const std::string SL_KEY_CYCLE_LAST_SUCCESS
Definition slConfig.hpp:50
const std::string SL_KEY_CYCLE_START
Definition slConfig.hpp:52
std::string GetLoopParam(const rad::Config &config, int loop_index, const std::string &param_name)
Definition slConfig.cpp:109
const std::string SL_KEY_STATE
Definition slConfig.hpp:48
std::vector< int > GetEnabledLoopIndices(const rad::Config &config)
Definition slConfig.cpp:60
const std::string SL_KEY_TIMER_PERIOD_SEC
Definition slConfig.hpp:58
const std::string SL_KEY_CYCLE_FAILURE
Definition slConfig.hpp:53
const std::string SL_KEY_ACTIVE
Definition slConfig.hpp:47
const int SL_MAX_NUM
Definition slConfig.hpp:25
std::string GetLoopConfigKey(int loop_index, const std::string &param_name)
Definition slConfig.cpp:26
const std::string SL_KEY_CYCLE_COUNTER
Definition slConfig.hpp:49
const std::string SL_KEY_LOOP_NUM
Definition slConfig.hpp:43
std::string FormatSupervisorStatus(const std::string &sm_status)
Definition slConfig.cpp:184
bool TryGetLoopVectorParam(const rad::Config &config, int loop_index, const std::string &param_name, std::string &out)
Definition slConfig.cpp:77