--- /dev/null
+#include <sstream>\r
+#include "message_set.hpp"\r
+\r
+namespace openxc\r
+{\r
+ message_set::message_set()\r
+ : name_{""}\r
+ , bit_numbering_inverted_{false}\r
+ , max_message_frequency_{0}\r
+ , raw_can_mode_{can_bus_mode::off}\r
+ , parents_{}\r
+ , initializers_{}\r
+ , loopers_{}\r
+ , buses_{}\r
+ , messages_{}\r
+ , diagnostic_messages_{}\r
+ , mappings_{}\r
+ , extra_sources_{}\r
+ , commands_{}\r
+ {\r
+ }\r
+ \r
+ std::string message_set::name() const\r
+ {\r
+ return name_;\r
+ }\r
+ \r
+ bool message_set::bit_numbering_inverted() const\r
+ {\r
+ return bit_numbering_inverted_;\r
+ }\r
+ \r
+ float message_set::max_message_frequency() const\r
+ {\r
+ return max_message_frequency_;\r
+ }\r
+ \r
+ can_bus_mode message_set::raw_can_mode() const\r
+ {\r
+ return raw_can_mode_;\r
+ }\r
+ \r
+ const std::vector<std::string>& message_set::parents() const\r
+ {\r
+ return parents_;\r
+ }\r
+ \r
+ const std::vector<std::string>& message_set::initializers() const\r
+ {\r
+ return initializers_;\r
+ }\r
+ \r
+ const std::vector<std::string>& message_set::loopers() const\r
+ {\r
+ return loopers_;\r
+ }\r
+ \r
+ const std::map<std::string, can_bus>& message_set::buses() const\r
+ {\r
+ return buses_;\r
+ }\r
+ \r
+ const std::vector<can_message>& message_set::messages() const\r
+ {\r
+ return messages_;\r
+ }\r
+ \r
+ const std::vector<diagnostic_message>& message_set::diagnostic_messages() const\r
+ {\r
+ return diagnostic_messages_;\r
+ }\r
+ \r
+ const std::vector<mapping>& message_set::mappings() const\r
+ {\r
+ return mappings_;\r
+ }\r
+ \r
+ const std::vector<std::string>& message_set::extra_sources() const\r
+ {\r
+ return extra_sources_;\r
+ }\r
+ \r
+ const std::vector<command>& message_set::commands() const\r
+ {\r
+ return commands_;\r
+ }\r
+\r
+ void message_set::from_json(const nlohmann::json& j)\r
+ {\r
+ name_ = j["name"].get<std::string>();\r
+ bit_numbering_inverted_ = j.count("bit_numbering_inverted") ? j["bit_numbering_inverted"].get<bool>() : false; // TODO: should be true by default if database-backed.\r
+ max_message_frequency_ = j.count("max_message_frequency") ? j["max_message_frequency"].get<float>() : 0.0f;\r
+ raw_can_mode_ = j.count("raw_can_mode") ? j["raw_can_mode"].get<can_bus_mode>() : can_bus_mode::off;\r
+ parents_ = j.count("parents") ? j["parents"].get<std::vector<std::string>>() : std::vector<std::string>();\r
+ initializers_ = j.count("initializers") ? j["initializers"].get<std::vector<std::string>>() : std::vector<std::string>();\r
+ loopers_ = j.count("loopers") ? j["loopers"].get<std::vector<std::string>>() : std::vector<std::string>();\r
+ buses_ = j.count("buses") ? j["buses"].get<std::map<std::string, can_bus>>() : std::map<std::string, can_bus>();\r
+ //messages_ = j.count("messages") ? j["messages"].get<std::map<std::string, can_message>>() : std::map<std::string, can_message>();\r
+ diagnostic_messages_ = j.count("diagnostic_messages") ? j["diagnostic_messages"].get<std::vector<diagnostic_message>>() : std::vector<diagnostic_message>();\r
+ mappings_ = j.count("mappings") ? j["mappings"].get<std::vector<mapping>>() : std::vector<mapping>();\r
+ extra_sources_ = j.count("extra_sources") ? j["extra_sources"].get<std::vector<std::string>>() : std::vector<std::string>();\r
+ commands_ = j.count("commands") ? j["commands"].get<std::vector<command>>() : std::vector<command>();\r
+ \r
+ \r
+ if (j.count("messages"))\r
+ {\r
+ std::map<std::string, nlohmann::json> messages = j["messages"];\r
+ for(const std::map<std::string, nlohmann::json>::value_type& m : messages)\r
+ {\r
+ can_message cm = m.second.get<can_message>();\r
+ cm.id(m.first);\r
+ messages_.push_back(cm);\r
+ }\r
+ }\r
+ }\r
+\r
+ nlohmann::json message_set::to_json() const\r
+ {\r
+ nlohmann::json j;\r
+ j["name_"] = name_;\r
+ j["bit_numbering_inverted"] = bit_numbering_inverted_;\r
+ j["max_message_frequency"] = max_message_frequency_;\r
+ j["raw_can_mode"] = raw_can_mode_;\r
+ j["parents"] = parents_;\r
+ j["initializers"] = initializers_;\r
+ j["loopers"] = loopers_;\r
+ j["buses"] = buses_;\r
+ j["messages"] = messages_;\r
+ j["diagnostic_messages"] = diagnostic_messages_;\r
+ j["mappings"] = mappings_;\r
+ j["extra_sources"] = extra_sources_;\r
+ j["commands"] = commands_;\r
+ return j;\r
+ }\r
+\r
+ void to_json(nlohmann::json& j, const message_set& p)\r
+ {\r
+ j = p.to_json();\r
+ }\r
+\r
+ void from_json(const nlohmann::json& j, message_set& p)\r
+ {\r
+ p.from_json(j);\r
+ }\r
+}\r