Import CAN generator from low-level-can-service
[src/low-level-can-generator.git] / src / openxc / can_bus.cpp
diff --git a/src/openxc/can_bus.cpp b/src/openxc/can_bus.cpp
new file mode 100755 (executable)
index 0000000..0a968a9
--- /dev/null
@@ -0,0 +1,89 @@
+#include "can_bus.hpp"\r
+\r
+namespace openxc\r
+{\r
+       std::uint32_t can_bus::controller() const\r
+       {\r
+               return controller_;\r
+       }\r
+       \r
+       std::uint32_t can_bus::speed() const\r
+       {\r
+               return speed_;\r
+       }\r
+       \r
+       can_bus_mode can_bus::raw_can_mode() const\r
+       {\r
+               return raw_can_mode_;\r
+       }\r
+       \r
+       bool can_bus::raw_writable() const\r
+       {\r
+               return raw_writable_;\r
+       }\r
+       \r
+       float can_bus::max_message_frequency() const\r
+       {\r
+               return max_message_frequency_;\r
+       }\r
+       \r
+       bool can_bus::force_send_changed() const\r
+       {\r
+               return force_send_changed_;\r
+       }\r
+       \r
+       void can_bus::from_json(const nlohmann::json& j)\r
+       {\r
+               controller_ = j.count("controller") ? j["controller"].get<std::uint32_t>() : 1;\r
+               speed_ = j.count("speed") ? j["speed"].get<std::uint32_t>() : 0;\r
+               raw_can_mode_ = j.count("raw_can_mode") ? j["raw_can_mode"].get<can_bus_mode>() : can_bus_mode::off;\r
+               raw_writable_ = j.count("raw_writable") ? j["raw_writable"].get<bool>() : false;\r
+               max_message_frequency_ = j.count("max_message_frequency") ? j["max_message_frequency"].get<float>() : 0;\r
+               force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get<bool>() : false;\r
+       }\r
+\r
+       nlohmann::json can_bus::to_json() const\r
+       {\r
+               nlohmann::json j;\r
+               j["controller"] = controller_;\r
+               j["speed"] = speed_;\r
+               j["raw_can_mode"] = raw_can_mode_;\r
+               j["raw_writable"] = raw_writable_;\r
+               j["max_message_frequency"] = max_message_frequency_;\r
+               j["force_send_changed"] = force_send_changed_;\r
+               return j;\r
+       }\r
+\r
+       void to_json(nlohmann::json& j, const can_bus& p)\r
+       {\r
+               j = p.to_json();\r
+       }\r
+\r
+       void from_json(const nlohmann::json& j, can_bus& p)\r
+       {\r
+               p.from_json(j);\r
+       }\r
+\r
+       void to_json(nlohmann::json& j, const can_bus_mode& p)\r
+       {\r
+               switch (p)\r
+               {\r
+               case can_bus_mode::off:\r
+                       j = std::string("off");\r
+                       break;\r
+               case can_bus_mode::filtered:\r
+                       j = std::string("filtered");\r
+                       break;\r
+               case can_bus_mode::unfiltered:\r
+                       j = std::string("unfiltered");\r
+                       break;\r
+               }\r
+       }\r
+\r
+       void from_json(const nlohmann::json& j, can_bus_mode& p)\r
+       {\r
+               if (j.get<std::string>() == "off") p = can_bus_mode::off;\r
+               else if (j.get<std::string>() == "filtered") p = can_bus_mode::filtered;\r
+               else p = can_bus_mode::unfiltered;\r
+       }\r
+}\r