Import CAN generator from low-level-can-service
[src/low-level-can-generator.git] / src / openxc / can_bus.cpp
1 #include "can_bus.hpp"\r
2 \r
3 namespace openxc\r
4 {\r
5         std::uint32_t can_bus::controller() const\r
6         {\r
7                 return controller_;\r
8         }\r
9         \r
10         std::uint32_t can_bus::speed() const\r
11         {\r
12                 return speed_;\r
13         }\r
14         \r
15         can_bus_mode can_bus::raw_can_mode() const\r
16         {\r
17                 return raw_can_mode_;\r
18         }\r
19         \r
20         bool can_bus::raw_writable() const\r
21         {\r
22                 return raw_writable_;\r
23         }\r
24         \r
25         float can_bus::max_message_frequency() const\r
26         {\r
27                 return max_message_frequency_;\r
28         }\r
29         \r
30         bool can_bus::force_send_changed() const\r
31         {\r
32                 return force_send_changed_;\r
33         }\r
34         \r
35         void can_bus::from_json(const nlohmann::json& j)\r
36         {\r
37                 controller_ = j.count("controller") ? j["controller"].get<std::uint32_t>() : 1;\r
38                 speed_ = j.count("speed") ? j["speed"].get<std::uint32_t>() : 0;\r
39                 raw_can_mode_ = j.count("raw_can_mode") ? j["raw_can_mode"].get<can_bus_mode>() : can_bus_mode::off;\r
40                 raw_writable_ = j.count("raw_writable") ? j["raw_writable"].get<bool>() : false;\r
41                 max_message_frequency_ = j.count("max_message_frequency") ? j["max_message_frequency"].get<float>() : 0;\r
42                 force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get<bool>() : false;\r
43         }\r
44 \r
45         nlohmann::json can_bus::to_json() const\r
46         {\r
47                 nlohmann::json j;\r
48                 j["controller"] = controller_;\r
49                 j["speed"] = speed_;\r
50                 j["raw_can_mode"] = raw_can_mode_;\r
51                 j["raw_writable"] = raw_writable_;\r
52                 j["max_message_frequency"] = max_message_frequency_;\r
53                 j["force_send_changed"] = force_send_changed_;\r
54                 return j;\r
55         }\r
56 \r
57         void to_json(nlohmann::json& j, const can_bus& p)\r
58         {\r
59                 j = p.to_json();\r
60         }\r
61 \r
62         void from_json(const nlohmann::json& j, can_bus& p)\r
63         {\r
64                 p.from_json(j);\r
65         }\r
66 \r
67         void to_json(nlohmann::json& j, const can_bus_mode& p)\r
68         {\r
69                 switch (p)\r
70                 {\r
71                 case can_bus_mode::off:\r
72                         j = std::string("off");\r
73                         break;\r
74                 case can_bus_mode::filtered:\r
75                         j = std::string("filtered");\r
76                         break;\r
77                 case can_bus_mode::unfiltered:\r
78                         j = std::string("unfiltered");\r
79                         break;\r
80                 }\r
81         }\r
82 \r
83         void from_json(const nlohmann::json& j, can_bus_mode& p)\r
84         {\r
85                 if (j.get<std::string>() == "off") p = can_bus_mode::off;\r
86                 else if (j.get<std::string>() == "filtered") p = can_bus_mode::filtered;\r
87                 else p = can_bus_mode::unfiltered;\r
88         }\r
89 }\r