INFM HIL Interface
Interface between Artery simulation and DuTs
ConfigSerializer.h
1
28#ifndef SIM_TO_DUT_INTERFACE_CONFIGSERIALIZER_H
29#define SIM_TO_DUT_INTERFACE_CONFIGSERIALIZER_H
30
31#include <boost/archive/xml_oarchive.hpp>
32#include <boost/archive/xml_iarchive.hpp>
33#include <boost/serialization/set.hpp>
34//#include <boost/serialization/map.hpp>
35#include <boost/serialization/utility.hpp>
36#include <boost/serialization/scoped_ptr.hpp>
37#include <boost/serialization/shared_ptr.hpp>
38#include <boost/algorithm//string.hpp>
39#include <fstream>
40#include <linux/can.h>
41#include <linux/can/bcm.h>
42#include <boost/concept_check.hpp>
43
44#include "../DuT_Connectors/RESTDummyConnector/RESTConnectorConfig.h"
45#include "../DuT_Connectors/V2XConnector/V2XConnector.h"
46#include "../DuT_Connectors/CANConnector/CANConnectorConfig.h"
47#include "../DuT_Connectors/CANConnector/CANConnectorReceiveOperation.h"
48#include "../DuT_Connectors/CANConnector/CANConnectorSendOperation.h"
49#include "../DuT_Connectors/ConnectorConfig.h"
50#include "../Interface_Logger/InterfaceLogger.h"
51#include "ConfigSerializerCanConnector.h"
52
53namespace sim_interface {
54
63 public:
80 template<typename T>
81 static void deserialize(std::istringstream &ifs, const std::string &objName, T *obj) {
82 if (ifs.good()) {
83 try {
84 std::istringstream iss;
85 boost::archive::xml_iarchive ia(ifs, boost::archive::no_header);
86 ia & boost::serialization::make_nvp(objName.c_str(), *obj);
87
88 }
89 catch (boost::archive::archive_exception const &e) {
90 InterfaceLogger::logMessage(std::string("ConfigSerializer: Exception on deserialize: ", e.what()),
91 LOG_LEVEL::ERROR);
92 }
93
94 } else {
95 InterfaceLogger::logMessage("ConfigSerializer: input filestream not good", LOG_LEVEL::ERROR);
96 }
97 }
98
113 template<typename T>
114 static void serialize(const std::string &file, const std::string &objName, T &obj) {
115 std::ofstream ofs(file);
116 if (ofs.good()) {
117 {
118 boost::archive::xml_oarchive oa(ofs, boost::archive::no_header);
119 oa << boost::serialization::make_nvp(objName.c_str(), obj);
120 }
121 ofs.close();
122 } else {
123 InterfaceLogger::logMessage("ConfigSerializer: output filestream not good", LOG_LEVEL::ERROR);
124 }
125 }
126 };
127}
128
134
145 template<class Archive>
146 void serialize(Archive &ar, sim_interface::dut_connector::ConnectorConfig &config, const unsigned int version) {}
147
159 template<class Archive>
161 const unsigned int version) {
162 ar & boost::serialization::make_nvp("operations", config->operations);
163 ar & boost::serialization::make_nvp("periodicOperations", config->periodicOperations);
164 ar & boost::serialization::make_nvp("periodicTimerEnabled", config->periodicTimerEnabled);
165 }
166
179 template<class Archive>
181 const unsigned int file_version) {
182 std::set<std::string> _operations;
183 std::map<std::string, int> _periodicOperations;
184 bool _periodicTimerEnabled;
185
186 ar >> boost::serialization::make_nvp("operations", _operations);
187 ar >> boost::serialization::make_nvp("periodicOperations", _periodicOperations);
188 ar >> boost::serialization::make_nvp("periodicTimerEnabled", _periodicTimerEnabled);
189
190 ::new(instance)sim_interface::dut_connector::ConnectorConfig(_operations,
191 _periodicOperations,
192 _periodicTimerEnabled);
193 }
194
207 template<class Archive>
209 const unsigned int version) {}
210
221 template<class Archive>
222 inline void
224 const unsigned int version) {
225
226 ar & boost::serialization::make_nvp("baseUrlDuT", config->baseUrlDuT);
227 ar & boost::serialization::make_nvp("baseCallbackUrl", config->baseCallbackUrl);
228 ar & boost::serialization::make_nvp("port", config->port);
229 ar & boost::serialization::make_nvp("operations", config->operations);
230 ar & boost::serialization::make_nvp("periodicOperations", config->periodicOperations);
231 ar & boost::serialization::make_nvp("periodicTimerEnabled", config->periodicTimerEnabled);
232 }
233
245 template<class Archive>
246 inline void
248 const unsigned int file_version) {
249 std::string _baseUrlDuT;
250 std::string _baseCallbackUrl;
251 int _port;
252 std::set<std::string> _operations;
253 std::map<std::string, int> _periodicOperations;
254 bool _periodicTimerEnabled;
255
256 ar >> boost::serialization::make_nvp("baseUrlDuT", _baseUrlDuT);
257 ar >> boost::serialization::make_nvp("baseCallbackUrl", _baseCallbackUrl);
258 ar >> boost::serialization::make_nvp("port", _port);
259 ar >> boost::serialization::make_nvp("operations", _operations);
260 ar >> boost::serialization::make_nvp("periodicOperations", _periodicOperations);
261 ar >> boost::serialization::make_nvp("periodicTimerEnabled", _periodicTimerEnabled);
262
263 ::new(instance)sim_interface::dut_connector::rest_dummy::RESTConnectorConfig(_baseUrlDuT, _baseCallbackUrl,
264 _port, _operations,
265 _periodicOperations,
266 _periodicTimerEnabled);
267 }
268
269
281 template<class Archive>
283 const unsigned int version) {}
284
296 template<class Archive>
297 inline void
299 const unsigned int version) {
300
301 ar & boost::serialization::make_nvp("ifname", config->ifname);
302 ar & boost::serialization::make_nvp("ethernetFrameType", config->ethernetFrameType);
303
304 }
305
329 template<class Archive>
330 inline void
332 const unsigned int file_version) {
333 std::string _ifname;
334
335 unsigned short _ethernetFrameType;
336 std::string helper;
337 ar & boost::serialization::make_nvp("ifname", _ifname);
338 ar & boost::serialization::make_nvp("ethernetFrameType", helper);
339
340
341 // Logic that the key can be Hex value
342 if (boost::algorithm::contains(helper, "0x")) {
343 std::stringstream ss;
344 ss << std::hex << helper;
345 ss >> _ethernetFrameType;
346 } else {
347 std::stringstream ss;
348 ss << helper;
349 ss >> _ethernetFrameType;
350 }
351
352
353 ::new(instance)sim_interface::dut_connector::v2x::V2XConnectorConfig(_ifname, _ethernetFrameType);
354 }
355
356}
357
358#endif //SIM_TO_DUT_INTERFACE_CONFIGSERIALIZER_H
ConfigSerializer: This class is for de-/ serializing the different connectorConfig types and overwrit...
Definition: ConfigSerializer.h:62
static void serialize(const std::string &file, const std::string &objName, T &obj)
Definition: ConfigSerializer.h:114
static void deserialize(std::istringstream &ifs, const std::string &objName, T *obj)
Definition: ConfigSerializer.h:81
static void logMessage(const std::string &msg, LOG_LEVEL level)
Definition: InterfaceLogger.cpp:271
Configuration for a single DuTConnector
Definition: ConnectorConfig.h:43
std::map< std::string, int > periodicOperations
Definition: ConnectorConfig.h:66
std::set< std::string > operations
Definition: ConnectorConfig.h:63
bool periodicTimerEnabled
Definition: ConnectorConfig.h:69
Configuration for the RESTDummyConnector, contains all necessary setup configuration to connect to Du...
Definition: RESTConnectorConfig.h:40
std::string baseUrlDuT
Definition: RESTConnectorConfig.h:61
std::string baseCallbackUrl
Definition: RESTConnectorConfig.h:65
Configuration for the V2XConnector, contains all necessary setup configuration to open a raw socket a...
Definition: V2XConnectorConfig.h:40
std::string ifname
Definition: V2XConnectorConfig.h:60
unsigned short ethernetFrameType
Definition: V2XConnectorConfig.h:65
Definition: ConfigSerializer.h:133
void load_construct_data(Archive &ar, sim_interface::dut_connector::ConnectorConfig *instance, const unsigned int file_version)
Definition: ConfigSerializer.h:180
void serialize(Archive &ar, sim_interface::dut_connector::ConnectorConfig &config, const unsigned int version)
Definition: ConfigSerializer.h:146
void save_construct_data(Archive &ar, const sim_interface::dut_connector::ConnectorConfig *config, const unsigned int version)
Definition: ConfigSerializer.h:160
Definition: CANConnector.cpp:29