Import CAN generator from low-level-can-service
[src/low-level-can-generator.git] / src / openxc / signal.cpp
diff --git a/src/openxc/signal.cpp b/src/openxc/signal.cpp
new file mode 100755 (executable)
index 0000000..e9c1088
--- /dev/null
@@ -0,0 +1,142 @@
+#include "signal.hpp"\r
+\r
+namespace openxc\r
+{\r
+       std::string signal::id() const\r
+       {\r
+               return id_;\r
+       }\r
+       \r
+       void signal::id(const std::string& id)\r
+       {\r
+               id_ = id;\r
+       }\r
+       \r
+       void id(const std::string& id);\r
+       \r
+       std::string signal::generic_name() const\r
+       {\r
+               return generic_name_;\r
+       }\r
+       \r
+       std::uint32_t signal::bit_position() const\r
+       {\r
+               return bit_position_;\r
+       }\r
+       \r
+       std::uint32_t signal::bit_size() const\r
+       {\r
+               return bit_size_;\r
+       }\r
+       \r
+       float signal::factor() const\r
+       {\r
+               return factor_;\r
+       }\r
+       \r
+       float signal::offset() const\r
+       {\r
+               return offset_;\r
+       }\r
+       \r
+       std::string signal::decoder() const\r
+       {\r
+               return decoder_;\r
+       }\r
+       \r
+       bool signal::ignore() const\r
+       {\r
+               return ignore_;\r
+       }\r
+       \r
+       bool signal::enabled() const\r
+       {\r
+               return enabled_;\r
+       }\r
+       \r
+       const std::map<std::string, std::vector<std::uint32_t>>& signal::states() const\r
+       {\r
+               return states_;\r
+       }\r
+       \r
+       float signal::max_frequency() const\r
+       {\r
+               return max_frequency_;\r
+       }\r
+       \r
+       bool signal::send_same() const\r
+       {\r
+               return send_same_;\r
+       }\r
+       \r
+       bool signal::force_send_changed() const\r
+       {\r
+               return force_send_changed_;\r
+       }\r
+       \r
+       bool signal::writable() const\r
+       {\r
+               return writable_;\r
+       }\r
+       \r
+       std::string signal::encoder() const\r
+       {\r
+               return encoder_;\r
+       }\r
+       \r
+       void signal::from_json(const nlohmann::json& j)\r
+       {\r
+               generic_name_ = j.count("generic_name") ? j["generic_name"].get<std::string>() : "";\r
+               bit_position_ = j.count("bit_position") ? j["bit_position"].get<std::uint32_t>() : 0;\r
+               bit_size_ = j.count("bit_size") ? j["bit_size"].get<std::uint32_t>() : 0;\r
+               factor_ = j.count("factor") ? j["factor"].get<float>() : 1.0f;\r
+               offset_ = j.count("offset") ? j["offset"].get<float>() : 0.0f;\r
+               decoder_ = j.count("decoder") ? j["decoder"].get<std::string>() : "";\r
+               ignore_ = j.count("ignore") ? j["ignore"].get<bool>() : false;\r
+               enabled_ = j.count("enabled") ? j["enabled"].get<bool>() : true;\r
+               max_frequency_ = j.count("max_frequency") ? j["max_frequency"].get<float>() : 0.0f;\r
+               send_same_ = j.count("send_same") ? j["send_same"].get<bool>() : true;\r
+               force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get<bool>() : false;\r
+               writable_ = j.count("writable") ? j["writable"].get<bool>() : false;\r
+               encoder_ = j.count("encoder") ? j["encoder"].get<std::string>() : "";\r
+\r
+               if (j.count("states"))\r
+               {\r
+                       std::map<std::string, nlohmann::json> items = j["states"];\r
+                       for(const auto& i : items)\r
+                       {\r
+                               states_[i.first] = i.second.get<std::vector<std::uint32_t>>();\r
+                       }\r
+               }\r
+       }\r
+\r
+       nlohmann::json signal::to_json() const\r
+       {\r
+               nlohmann::json j;\r
+               j["generic_name"] = generic_name_;\r
+               j["bit_position"] = bit_position_;\r
+               j["bit_size"] = bit_size_;\r
+               j["factor"] = factor_;\r
+               j["offset"] = offset_;\r
+               j["decoder"] = decoder_;\r
+               j["ignore"] = ignore_;\r
+               j["enabled"] = enabled_;\r
+               j["states"] = states_;\r
+               j["max_frequency"] = max_frequency_;\r
+               j["send_same"] = send_same_;\r
+               j["force_send_changed"] = force_send_changed_;\r
+               j["writable"] = writable_;\r
+               j["encoder"] = encoder_;\r
+               return j;\r
+       }\r
+\r
+       void to_json(nlohmann::json& j, const signal& p)\r
+       {\r
+               j = p.to_json();\r
+       }\r
+\r
+       void from_json(const nlohmann::json& j, signal& p)\r
+       {\r
+               p.from_json(j);\r
+       }\r
+}\r