ifw-ccf 6.0.0
 
Loading...
Searching...
No Matches
config.hpp
Go to the documentation of this file.
1
6
7#ifndef CCF_COMMON_CONFIG_BASE_HPP_H_
8#define CCF_COMMON_CONFIG_BASE_HPP_H_
9
10#include <sstream>
11
12#include <boost/program_options.hpp>
13
14#include <ifw/core/utils/bat/config.hpp>
15
17
18
19namespace bpo = boost::program_options;
20
21namespace ifw::ccf::common {
22
23 // Note, no getter's and setter's + members public -- may be OK:
24 // https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c131-avoid-trivial-getters-and-setters
26 std::string ToString() const;
27
28 std::string m_name;
29 std::string m_value;
31 };
32
33 struct DeviceInfo {
34 std::string ToString() const;
35
36 std::string m_name;
37 std::string m_id;
38 std::string m_type;
39 std::string m_model;
40 std::string m_manufacturer;
41 int16_t m_width;
42 int16_t m_height;
45 std::string m_data_type; // Optional: explicit data type (e.g., "Uint16", "Byte")
46 std::string m_protocol;
47 std::string m_mapping;
48 std::string m_sdk;
49 std::string m_address;
50 std::string m_sim_address;
51 std::map<std::string, DeviceProperty> m_device_properties;
52 };
53
54 class Config : public Base {
55 public:
56 // Singleton instance.
58
59 static ifw::core::utils::bat::Config s_bat_cfg;
60
61 // Contains the devices defined.
62 static std::vector<std::string> s_devices;
63
64 // Maps "device" name into the associated properties.
65 static std::map<std::string, DeviceInfo> s_device_info;
66
68 static Config& Instance();
69
71 static ifw::core::utils::bat::Config& BatCfg();
72
74 const static elt::configng::CiiConfigInstanceNamespace& CiiCfg();
75
76 Config();
77
78 ~Config();
79
81 bool ParseOptions(int argc, char* argv[]);
82
84 void SetLogProperties(const std::string& filename);
85
87 void LoadConfig(const std::string& filename = "", bool reset = false);
88
90 void GetPars(std::map<std::string, std::string>& pars,
91 const std::string& pattern = "*");
92
94 elt::configng::CiiConfigInstanceNode& GetNode(const std::vector<std::string>& names);
95
97 bool HasNode(const std::vector<std::string>& names, elt::configng::CiiConfigInstanceNode& node);
98
100 template <class TYPE>
101 bool HasPar(const std::vector<std::string>& names, TYPE& value) {
102 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
103 elt::configng::CiiConfigInstanceNode node;
104 try {
105 node = GetNode(names);
106 } catch (...) {
107 return false;
108 }
109 value = node.As<TYPE>();
110 return true;
111 }
112
114 bool HasPar(const std::vector<std::string>& names);
115
117 template <class TYPE>
118 TYPE Get(const std::vector<std::string>& names) {
119 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
120 TYPE value;
121 if (!HasPar(names, value)) {
122 CCFTHROW("Parameter requested is not defined: " + BuildKey(names));
123 }
124 return value;
125 }
126
128 template <class TYPE>
129 void Set(const std::vector<std::string>& names, TYPE& value) {
130 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
131 auto node = GetNode(names);
132 node = value;
133 }
134
136 uint32_t GetMaxFrameSize(const std::string& device = "");
137
140 virtual uint32_t GetMaxFrameSizeUser(const std::string& device = "");
141
143 const DeviceInfo& GetDeviceInfo(const std::string& device = "") const;
144
146 void GetDeviceProperties(std::map<std::string, DeviceProperty>& device_properties,
147 const std::string& device = "") const;
148
151 template <class TYPE>
152 bool
153 HasDeviceProperty(const std::string& name, TYPE& value, const std::string& device = "") {
154 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
155 DeviceProperty prop;
156 if (HasDeviceProperty(name, prop, device)) {
157 ifw::core::utils::conversion::Convert(prop.m_value, value);
158 return true;
159 } else {
160 return false;
161 }
162 }
163
165 const bpo::variables_map& GetOptions() const;
166
168 // is returned (see server.devices in the configuration).
169 std::string GetDeviceName(const std::string& device = "") const;
170
172 bool HasDeviceProperty(const std::string& name,
173 DeviceProperty& property,
174 const std::string& device="");
175
176 template <class TYPE>
177 void SetDeviceProperty(const std::string& property, TYPE value, const std::string& device ="") {
178 TYPE cur_value;
179 if (HasDeviceProperty(property, cur_value, device)) {
180 std::stringstream svalue;
181 svalue << value;
182 auto tmp_device = GetDeviceName(device);
183 auto it = s_device_info[tmp_device].m_device_properties.find(property);
184 it->second.m_value= svalue.str();
185 }
186 else {
187 CCFTHROW("Trying to set non existing property");
188 }
189 }
190
191
192 protected:
193
194 private:
195 bpo::variables_map m_options_map;
196 };
197
202
203} // namespace ifw::ccf::common
204
205#endif // CCF_COMMON_CONFIG_BASE_HPP_H_
#define CCFTHROW(msg)
Definition base.hpp:399
Base()
Definition base.cpp:121
Definition config.hpp:54
~Config()
Definition config.cpp:37
void GetDeviceProperties(std::map< std::string, DeviceProperty > &device_properties, const std::string &device="") const
Get device properties.
Definition config.cpp:338
static const elt::configng::CiiConfigInstanceNamespace & CiiCfg()
Return reference to internal CII Configuration namespace object.
Definition config.cpp:29
bool HasDeviceProperty(const std::string &name, TYPE &value, const std::string &device="")
Definition config.hpp:153
void GetPars(std::map< std::string, std::string > &pars, const std::string &pattern="*")
Return map with all parameters in the object. Staging pars take precedence.
Definition config.cpp:376
void SetLogProperties(const std::string &filename)
Set the log properties file.
Definition config.cpp:121
TYPE Get(const std::vector< std::string > &names)
Get a parameter value from the configuration.
Definition config.hpp:118
bool ParseOptions(int argc, char *argv[])
Parse command line options.
Definition config.cpp:41
virtual uint32_t GetMaxFrameSizeUser(const std::string &device="")
Definition config.cpp:312
static std::map< std::string, DeviceInfo > s_device_info
Definition config.hpp:65
static ifw::core::utils::bat::Config & BatCfg()
Return reference to internal BAT configuration object.
Definition config.cpp:25
const bpo::variables_map & GetOptions() const
Return map with command line options.
Definition config.cpp:350
static std::vector< std::string > s_devices
Definition config.hpp:62
const DeviceInfo & GetDeviceInfo(const std::string &device="") const
Return reference to Device Info structure.
Definition config.cpp:345
void LoadConfig(const std::string &filename="", bool reset=false)
Load the configuration file.
Definition config.cpp:139
elt::configng::CiiConfigInstanceNode & GetNode(const std::vector< std::string > &names)
Get the reference to a specific node in the CII Cfg Service namespace.
Definition config.cpp:252
uint32_t GetMaxFrameSize(const std::string &device="")
Return the maximum frame size in bytes with the associated camera/configuration.
Definition config.cpp:291
static ifw::core::utils::bat::Config s_bat_cfg
Definition config.hpp:59
Config()
Definition config.cpp:33
bool HasNode(const std::vector< std::string > &names, elt::configng::CiiConfigInstanceNode &node)
Probe if a given node is defined. If yes, return the reference to the node.
Definition config.cpp:274
void SetDeviceProperty(const std::string &property, TYPE value, const std::string &device="")
Definition config.hpp:177
bool HasPar(const std::vector< std::string > &names, TYPE &value)
Probe if a given key is defined. Set the value variable if found and return true.
Definition config.hpp:101
static Config * s_instance
Definition config.hpp:57
static Config & Instance()
Return reference to unique instance of the configuration class.
Definition config.cpp:14
std::string GetDeviceName(const std::string &device="") const
Return name of a specific device. If "" is given the first (maybe only) device defined,...
Definition config.cpp:296
void Set(const std::vector< std::string > &names, TYPE &value)
Set the value of a parameter in the CII Cfg Service namespace.
Definition config.hpp:129
Definition appBase.cpp:10
ifw::ccf::common::Config & GetCfg()
Return reference to the singleton instance of the configuration.
Definition config.hpp:199
log4cplus::Logger & Logger()
Definition base.cpp:24
std::string BuildKey(const std::vector< std::string > &elements)
Build a concatenated key from a number of elements (<el1>.<el2.>...).
Definition base.cpp:241
Definition config.hpp:33
std::string m_id
Definition config.hpp:37
std::string m_type
Definition config.hpp:38
int8_t m_max_resolution
Definition config.hpp:43
int16_t m_width
Definition config.hpp:41
int8_t m_resolution
Definition config.hpp:44
std::string m_sdk
Definition config.hpp:48
std::string m_sim_address
Definition config.hpp:50
int16_t m_height
Definition config.hpp:42
std::string ToString() const
Definition config.cpp:355
std::string m_data_type
Definition config.hpp:45
std::string m_mapping
Definition config.hpp:47
std::string m_protocol
Definition config.hpp:46
std::string m_model
Definition config.hpp:39
std::string m_name
Definition config.hpp:36
std::map< std::string, DeviceProperty > m_device_properties
Definition config.hpp:51
std::string m_manufacturer
Definition config.hpp:40
std::string m_address
Definition config.hpp:49
Definition config.hpp:25
std::string m_name
Definition config.hpp:28
std::string ToString() const
Definition config.cpp:371
bool m_write_on_init
Definition config.hpp:30
std::string m_value
Definition config.hpp:29