From 49fe0eec8f17698fc5f86d0abe01777af1fb2b23 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Fri, 14 Apr 2017 13:24:07 +0200 Subject: Change directory architecture to use 2 separated projects. Each projects, binder and generator, has to be compiled separatly. CAN-binder will host high and low level binding CAN-config-generator only the generator used for low level binding. build.sh script just launch both build in their respective dir. Change-Id: Ic77932660fcca507b23a631d4e4e790f608880ae Signed-off-by: Romain Forlot --- CAN-config-generator/src/openxc/can_bus.cpp | 89 +++++++++++++ CAN-config-generator/src/openxc/can_bus.hpp | 42 ++++++ CAN-config-generator/src/openxc/can_message.cpp | 126 ++++++++++++++++++ CAN-config-generator/src/openxc/can_message.hpp | 49 +++++++ CAN-config-generator/src/openxc/command.cpp | 45 +++++++ CAN-config-generator/src/openxc/command.hpp | 25 ++++ .../src/openxc/diagnostic_message.cpp | 80 ++++++++++++ .../src/openxc/diagnostic_message.hpp | 35 +++++ CAN-config-generator/src/openxc/mapping.cpp | 59 +++++++++ CAN-config-generator/src/openxc/mapping.hpp | 29 +++++ CAN-config-generator/src/openxc/message_set.cpp | 145 +++++++++++++++++++++ CAN-config-generator/src/openxc/message_set.hpp | 59 +++++++++ CAN-config-generator/src/openxc/signal.cpp | 142 ++++++++++++++++++++ CAN-config-generator/src/openxc/signal.hpp | 53 ++++++++ 14 files changed, 978 insertions(+) create mode 100755 CAN-config-generator/src/openxc/can_bus.cpp create mode 100755 CAN-config-generator/src/openxc/can_bus.hpp create mode 100755 CAN-config-generator/src/openxc/can_message.cpp create mode 100755 CAN-config-generator/src/openxc/can_message.hpp create mode 100755 CAN-config-generator/src/openxc/command.cpp create mode 100755 CAN-config-generator/src/openxc/command.hpp create mode 100755 CAN-config-generator/src/openxc/diagnostic_message.cpp create mode 100755 CAN-config-generator/src/openxc/diagnostic_message.hpp create mode 100755 CAN-config-generator/src/openxc/mapping.cpp create mode 100755 CAN-config-generator/src/openxc/mapping.hpp create mode 100755 CAN-config-generator/src/openxc/message_set.cpp create mode 100755 CAN-config-generator/src/openxc/message_set.hpp create mode 100755 CAN-config-generator/src/openxc/signal.cpp create mode 100755 CAN-config-generator/src/openxc/signal.hpp (limited to 'CAN-config-generator/src/openxc') diff --git a/CAN-config-generator/src/openxc/can_bus.cpp b/CAN-config-generator/src/openxc/can_bus.cpp new file mode 100755 index 0000000..0a968a9 --- /dev/null +++ b/CAN-config-generator/src/openxc/can_bus.cpp @@ -0,0 +1,89 @@ +#include "can_bus.hpp" + +namespace openxc +{ + std::uint32_t can_bus::controller() const + { + return controller_; + } + + std::uint32_t can_bus::speed() const + { + return speed_; + } + + can_bus_mode can_bus::raw_can_mode() const + { + return raw_can_mode_; + } + + bool can_bus::raw_writable() const + { + return raw_writable_; + } + + float can_bus::max_message_frequency() const + { + return max_message_frequency_; + } + + bool can_bus::force_send_changed() const + { + return force_send_changed_; + } + + void can_bus::from_json(const nlohmann::json& j) + { + controller_ = j.count("controller") ? j["controller"].get() : 1; + speed_ = j.count("speed") ? j["speed"].get() : 0; + raw_can_mode_ = j.count("raw_can_mode") ? j["raw_can_mode"].get() : can_bus_mode::off; + raw_writable_ = j.count("raw_writable") ? j["raw_writable"].get() : false; + max_message_frequency_ = j.count("max_message_frequency") ? j["max_message_frequency"].get() : 0; + force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get() : false; + } + + nlohmann::json can_bus::to_json() const + { + nlohmann::json j; + j["controller"] = controller_; + j["speed"] = speed_; + j["raw_can_mode"] = raw_can_mode_; + j["raw_writable"] = raw_writable_; + j["max_message_frequency"] = max_message_frequency_; + j["force_send_changed"] = force_send_changed_; + return j; + } + + void to_json(nlohmann::json& j, const can_bus& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, can_bus& p) + { + p.from_json(j); + } + + void to_json(nlohmann::json& j, const can_bus_mode& p) + { + switch (p) + { + case can_bus_mode::off: + j = std::string("off"); + break; + case can_bus_mode::filtered: + j = std::string("filtered"); + break; + case can_bus_mode::unfiltered: + j = std::string("unfiltered"); + break; + } + } + + void from_json(const nlohmann::json& j, can_bus_mode& p) + { + if (j.get() == "off") p = can_bus_mode::off; + else if (j.get() == "filtered") p = can_bus_mode::filtered; + else p = can_bus_mode::unfiltered; + } +} diff --git a/CAN-config-generator/src/openxc/can_bus.hpp b/CAN-config-generator/src/openxc/can_bus.hpp new file mode 100755 index 0000000..74e1273 --- /dev/null +++ b/CAN-config-generator/src/openxc/can_bus.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +namespace openxc +{ + enum class can_bus_mode + { + off, + filtered, + unfiltered + }; + + class can_bus + { + private: + std::uint32_t controller_; + std::uint32_t speed_; + can_bus_mode raw_can_mode_; + bool raw_writable_; + float max_message_frequency_; + bool force_send_changed_; + + public: + std::uint32_t controller() const; + std::uint32_t speed() const; + can_bus_mode raw_can_mode() const; + bool raw_writable() const; + float max_message_frequency() const; + bool force_send_changed() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const can_bus& p); + void from_json(const nlohmann::json& j, can_bus& p); + + void to_json(nlohmann::json& j, const can_bus_mode& p); + void from_json(const nlohmann::json& j, can_bus_mode& p); +} diff --git a/CAN-config-generator/src/openxc/can_message.cpp b/CAN-config-generator/src/openxc/can_message.cpp new file mode 100755 index 0000000..fab5a85 --- /dev/null +++ b/CAN-config-generator/src/openxc/can_message.cpp @@ -0,0 +1,126 @@ +#include "can_message.hpp" + +namespace openxc +{ + std::string can_message::id() const + { + return id_; + } + + void can_message::id(const std::string& id) + { + id_ = id; + } + + std::string can_message::bus() const + { + return bus_; + } + + bool can_message::bit_numbering_inverted() const + { + return bit_numbering_inverted_; + } + + const std::vector& can_message::signals() const + { + return signals_; + } + + std::string can_message::name() const + { + return name_; + } + + std::vector can_message::handlers() const + { + return handlers_; + } + + bool can_message::enabled() const + { + return enabled_; + } + + float can_message::max_frequency() const + { + return max_frequency_; + } + + float can_message::max_signal_frequency() const + { + return max_signal_frequency_; + } + + bool can_message::force_send_changed() const + { + return force_send_changed_; + } + + bool can_message::force_send_changed_signals() const + { + return force_send_changed_; + } + + void can_message::from_json(const nlohmann::json& j) + { + bus_ = j.count("bus") ? j["bus"].get() : ""; + bit_numbering_inverted_ = j.count("bit_numbering_inverted") ? j["bit_numbering_inverted"].get() : false; + name_ = j.count("name") ? j["name"].get() : ""; + handlers_ = j.count("handlers") ? j["handlers"].get>() : std::vector(); + enabled_ = j.count("enabled") ? j["enabled"].get() : true; + max_frequency_ = j.count("max_frequency") ? j["max_frequency"].get() : 0; + max_signal_frequency_ = j.count("max_signal_frequency") ? j["max_signal_frequency"].get() : 0; + force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get() : true; + force_send_changed_signals_ = j.count("force_send_changed_signals") ? j["force_send_changed_signals"].get() : false; + + if(j.count("signals")) + { + std::map signals = j["signals"]; + for(const auto& s : signals) + { + signal sig = s.second.get(); + sig.id(s.first); + signals_.push_back(sig); + } + } + + } + + std::uint32_t can_message::get_signals_count() const + { + return signals_.size(); + } + + nlohmann::json can_message::to_json() const + { + nlohmann::json j; + j["bus"] = bus_; + j["bit_numbering_inverted"] = bit_numbering_inverted_; + j["signals"] = signals_; + j["name"] = name_; + j["handlers"] = handlers_; + j["enabled"] = enabled_; + j["max_frequency"] = max_frequency_; + j["max_signal_frequency"] = max_signal_frequency_; + j["force_send_changed"] = force_send_changed_; + j["force_send_changed_signals"] = force_send_changed_signals_; + return j; + } + + void to_json(nlohmann::json& j, const can_message& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, can_message& p) + { + p.from_json(j); + } + + void from_json(const nlohmann::json& j, can_message& p, const std::string& id) + { + p.from_json(j); + p.id(id); + } +} diff --git a/CAN-config-generator/src/openxc/can_message.hpp b/CAN-config-generator/src/openxc/can_message.hpp new file mode 100755 index 0000000..3f7b018 --- /dev/null +++ b/CAN-config-generator/src/openxc/can_message.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include + +#include "signal.hpp" + +namespace openxc +{ + class can_message + { + private: + std::string id_; + std::string bus_; + bool bit_numbering_inverted_; + std::vector signals_; + std::string name_; + std::vector handlers_; + bool enabled_; + float max_frequency_; + float max_signal_frequency_; + bool force_send_changed_; + bool force_send_changed_signals_; + + public: + std::string id() const; + void id(const std::string& id); + std::string bus() const; + bool bit_numbering_inverted() const; + const std::vector& signals() const; + std::string name() const; + std::vector handlers() const; + bool enabled() const; + float max_frequency() const; + float max_signal_frequency() const; + bool force_send_changed() const; + bool force_send_changed_signals() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + + std::uint32_t get_signals_count() const; + }; + + void to_json(nlohmann::json& j, const can_message& p); + void from_json(const nlohmann::json& j, can_message& p); + void from_json(const nlohmann::json& j, can_message& p, const std::string& id); +} diff --git a/CAN-config-generator/src/openxc/command.cpp b/CAN-config-generator/src/openxc/command.cpp new file mode 100755 index 0000000..4cc0682 --- /dev/null +++ b/CAN-config-generator/src/openxc/command.cpp @@ -0,0 +1,45 @@ +#include "command.hpp" + +namespace openxc +{ + std::string command::name() const + { + return name_; + } + + bool command::enabled() const + { + return enabled_; + } + + std::string command::handler() const + { + return handler_; + } + + void command::from_json(const nlohmann::json& j) + { + name_ = j.count("name") ? j["name"].get() : ""; + enabled_ = j.count("enabled") ? j["enabled"].get() : true; + handler_ = j.count("handler") ? j["handler"].get() : ""; + } + + nlohmann::json command::to_json() const + { + nlohmann::json j; + j["name"] = name_; + j["enabled"] = enabled_; + j["handler"] = handler_; + return j; + } + + void to_json(nlohmann::json& j, const command& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, command& p) + { + p.from_json(j); + } +} diff --git a/CAN-config-generator/src/openxc/command.hpp b/CAN-config-generator/src/openxc/command.hpp new file mode 100755 index 0000000..2c05226 --- /dev/null +++ b/CAN-config-generator/src/openxc/command.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include + +namespace openxc +{ + class command + { + private: + std::string name_; + bool enabled_; + std::string handler_; + public: + std::string name() const; + bool enabled() const; + std::string handler() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const command& p); + void from_json(const nlohmann::json& j, command& p); +} diff --git a/CAN-config-generator/src/openxc/diagnostic_message.cpp b/CAN-config-generator/src/openxc/diagnostic_message.cpp new file mode 100755 index 0000000..3881abe --- /dev/null +++ b/CAN-config-generator/src/openxc/diagnostic_message.cpp @@ -0,0 +1,80 @@ +#include "diagnostic_message.hpp" + +namespace openxc +{ + std::string diagnostic_message::bus() const + { + return bus_; + } + + std::uint32_t diagnostic_message::id() const + { + return id_; + } + + std::uint32_t diagnostic_message::mode() const + { + return mode_; + } + + float diagnostic_message::frequency() const + { + return frequency_; + } + + std::uint32_t diagnostic_message::pid() const + { + return pid_; + } + + std::string diagnostic_message::name() const + { + return name_; + } + + std::string diagnostic_message::decoder() const + { + return decoder_; + } + + std::string diagnostic_message::callback() const + { + return callback_; + } + + void diagnostic_message::from_json(const nlohmann::json& j) + { + bus_ = j.count("bus") ? j["bus"].get() : ""; + id_ = j.count("id") ? j["id"].get() : 0; + mode_ = j.count("mode") ? j["mode"].get() : 1; + frequency_ = j.count("frequency") ? j["frequency"].get() : 0; + pid_ = j.count("pid") ? j["pid"].get() : 0; + name_ = j.count("name") ? j["name"].get() : ""; + decoder_ = j.count("decoder") ? j["decoder"].get() : ""; + callback_ = j.count("callback") ? j["callback"].get() : ""; + } + + nlohmann::json diagnostic_message::to_json() const + { + nlohmann::json j; + j["bus"] = bus_; + j["id"] = id_; + j["mode"] = mode_; + j["frequency"] = frequency_; + j["pid"] = pid_; + j["name"] = name_; + j["decoder"] = decoder_; + j["callback"] = callback_; + return j; + } + + void to_json(nlohmann::json& j, const diagnostic_message& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, diagnostic_message& p) + { + p.from_json(j); + } +} diff --git a/CAN-config-generator/src/openxc/diagnostic_message.hpp b/CAN-config-generator/src/openxc/diagnostic_message.hpp new file mode 100755 index 0000000..1ceba1b --- /dev/null +++ b/CAN-config-generator/src/openxc/diagnostic_message.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include +#include + +namespace openxc +{ + class diagnostic_message + { + private: + std::string bus_; + std::uint32_t id_; + std::uint32_t mode_; + float frequency_; + std::uint32_t pid_; + std::string name_; + std::string decoder_; + std::string callback_; + public: + std::string bus() const; + std::uint32_t id() const; + std::uint32_t mode() const; + float frequency() const; + std::uint32_t pid() const; + std::string name() const; + std::string decoder() const; + std::string callback() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const diagnostic_message& p); + void from_json(const nlohmann::json& j, diagnostic_message& p); +} diff --git a/CAN-config-generator/src/openxc/mapping.cpp b/CAN-config-generator/src/openxc/mapping.cpp new file mode 100755 index 0000000..74d5c94 --- /dev/null +++ b/CAN-config-generator/src/openxc/mapping.cpp @@ -0,0 +1,59 @@ +#include "mapping.hpp" + +namespace openxc +{ + std::string mapping::mapping_name() const + { + return mapping_name_; + } + + std::string mapping::bus() const + { + return bus_; + } + + std::string mapping::database() const + { + return database_; + } + + bool mapping::bit_numbering_inverted() const + { + return bit_numbering_inverted_; + } + + bool mapping::enabled() const + { + return enabled_; + } + + void mapping::from_json(const nlohmann::json& j) + { + mapping_name_ = j.count("mapping") ? j["mapping"].get() : ""; + bus_ = j.count("bus") ? j["bus"].get() : ""; + database_ = j.count("database") ? j["database"].get() : ""; + bit_numbering_inverted_ = j.count("bit_numbering_inverted") ? j["bit_numbering_inverted"].get() : false; + enabled_ = j.count("enabled") ? j["enabled"].get() : true; + } + + nlohmann::json mapping::to_json() const + { + nlohmann::json j; + j["mapping"] = mapping_name_; + j["bus"] = bus_; + j["database"] = database_; + j["bit_numbering_inverted"] = bit_numbering_inverted_; + j["enabled"] = enabled_; + return j; + } + + void to_json(nlohmann::json& j, const mapping& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, mapping& p) + { + p.from_json(j); + } +} diff --git a/CAN-config-generator/src/openxc/mapping.hpp b/CAN-config-generator/src/openxc/mapping.hpp new file mode 100755 index 0000000..30895cb --- /dev/null +++ b/CAN-config-generator/src/openxc/mapping.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +namespace openxc +{ + class mapping + { + private: + std::string mapping_name_; + std::string bus_; + std::string database_; + bool bit_numbering_inverted_; + bool enabled_; + public: + std::string mapping_name() const; + std::string bus() const; + std::string database() const; + bool bit_numbering_inverted() const; + bool enabled() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const mapping& p); + void from_json(const nlohmann::json& j, mapping& p); +} diff --git a/CAN-config-generator/src/openxc/message_set.cpp b/CAN-config-generator/src/openxc/message_set.cpp new file mode 100755 index 0000000..c47c45f --- /dev/null +++ b/CAN-config-generator/src/openxc/message_set.cpp @@ -0,0 +1,145 @@ +#include +#include "message_set.hpp" + +namespace openxc +{ + message_set::message_set() + : name_{""} + , bit_numbering_inverted_{false} + , max_message_frequency_{0} + , raw_can_mode_{can_bus_mode::off} + , parents_{} + , initializers_{} + , loopers_{} + , buses_{} + , messages_{} + , diagnostic_messages_{} + , mappings_{} + , extra_sources_{} + , commands_{} + { + } + + std::string message_set::name() const + { + return name_; + } + + bool message_set::bit_numbering_inverted() const + { + return bit_numbering_inverted_; + } + + float message_set::max_message_frequency() const + { + return max_message_frequency_; + } + + can_bus_mode message_set::raw_can_mode() const + { + return raw_can_mode_; + } + + const std::vector& message_set::parents() const + { + return parents_; + } + + const std::vector& message_set::initializers() const + { + return initializers_; + } + + const std::vector& message_set::loopers() const + { + return loopers_; + } + + const std::map& message_set::buses() const + { + return buses_; + } + + const std::vector& message_set::messages() const + { + return messages_; + } + + const std::vector& message_set::diagnostic_messages() const + { + return diagnostic_messages_; + } + + const std::vector& message_set::mappings() const + { + return mappings_; + } + + const std::vector& message_set::extra_sources() const + { + return extra_sources_; + } + + const std::vector& message_set::commands() const + { + return commands_; + } + + void message_set::from_json(const nlohmann::json& j) + { + name_ = j["name"].get(); + bit_numbering_inverted_ = j.count("bit_numbering_inverted") ? j["bit_numbering_inverted"].get() : false; // TODO: should be true by default if database-backed. + max_message_frequency_ = j.count("max_message_frequency") ? j["max_message_frequency"].get() : 0; + raw_can_mode_ = j.count("raw_can_mode") ? j["raw_can_mode"].get() : can_bus_mode::off; + parents_ = j.count("parents") ? j["parents"].get>() : std::vector(); + initializers_ = j.count("initializers") ? j["initializers"].get>() : std::vector(); + loopers_ = j.count("loopers") ? j["loopers"].get>() : std::vector(); + buses_ = j.count("buses") ? j["buses"].get>() : std::map(); + //messages_ = j.count("messages") ? j["messages"].get>() : std::map(); + diagnostic_messages_ = j.count("diagnostic_messages") ? j["diagnostic_messages"].get>() : std::vector(); + mappings_ = j.count("mappings") ? j["mappings"].get>() : std::vector(); + extra_sources_ = j.count("extra_sources") ? j["extra_sources"].get>() : std::vector(); + commands_ = j.count("commands") ? j["commands"].get>() : std::vector(); + + + if (j.count("messages")) + { + std::map messages = j["messages"]; + for(const std::map::value_type& m : messages) + { + can_message cm = m.second.get(); + cm.id(m.first); + messages_.push_back(cm); + } + } + } + + nlohmann::json message_set::to_json() const + { + nlohmann::json j; + j["name_"] = name_; + j["bit_numbering_inverted"] = bit_numbering_inverted_; + j["max_message_frequency"] = max_message_frequency_; + j["raw_can_mode"] = raw_can_mode_; + j["parents"] = parents_; + j["initializers"] = initializers_; + j["loopers"] = loopers_; + j["buses"] = buses_; + j["messages"] = messages_; + j["diagnostic_messages"] = diagnostic_messages_; + j["mappings"] = mappings_; + j["extra_sources"] = extra_sources_; + j["commands"] = commands_; + return j; + } + + void to_json(nlohmann::json& j, const message_set& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, message_set& p) + { + p.from_json(j); + } +} diff --git a/CAN-config-generator/src/openxc/message_set.hpp b/CAN-config-generator/src/openxc/message_set.hpp new file mode 100755 index 0000000..935817e --- /dev/null +++ b/CAN-config-generator/src/openxc/message_set.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include +#include +#include +#include + +#include "can_bus.hpp" +#include "can_message.hpp" +#include "diagnostic_message.hpp" +#include "mapping.hpp" +#include "command.hpp" + +namespace openxc +{ + class message_set + { + private: + std::string name_; + bool bit_numbering_inverted_; + float max_message_frequency_; + can_bus_mode raw_can_mode_; + std::vector parents_; + std::vector initializers_; + std::vector loopers_; + std::map buses_; + //std::map messages_; + std::vector messages_; + std::vector diagnostic_messages_; + std::vector mappings_; + std::vector extra_sources_; + std::vector commands_; + + public: + message_set(); + message_set(const message_set&) = default; + message_set(message_set&&) = default; + + std::string name() const; + bool bit_numbering_inverted() const; + float max_message_frequency() const; + can_bus_mode raw_can_mode() const; + const std::vector& parents() const; + const std::vector& initializers() const; + const std::vector& loopers() const; + const std::map& buses() const; + const std::vector& messages() const; + const std::vector& diagnostic_messages() const; + const std::vector& mappings() const; + const std::vector& extra_sources() const; + const std::vector& commands() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const message_set& p); + void from_json(const nlohmann::json& j, message_set& p); +} diff --git a/CAN-config-generator/src/openxc/signal.cpp b/CAN-config-generator/src/openxc/signal.cpp new file mode 100755 index 0000000..6c3ff82 --- /dev/null +++ b/CAN-config-generator/src/openxc/signal.cpp @@ -0,0 +1,142 @@ +#include "signal.hpp" + +namespace openxc +{ + std::string signal::id() const + { + return id_; + } + + void signal::id(const std::string& id) + { + id_ = id; + } + + void id(const std::string& id); + + std::string signal::generic_name() const + { + return generic_name_; + } + + std::uint32_t signal::bit_position() const + { + return bit_position_; + } + + std::uint32_t signal::bit_size() const + { + return bit_size_; + } + + float signal::factor() const + { + return factor_; + } + + std::uint32_t signal::offset() const + { + return offset_; + } + + std::string signal::decoder() const + { + return decoder_; + } + + bool signal::ignore() const + { + return ignore_; + } + + bool signal::enabled() const + { + return enabled_; + } + + const std::map>& signal::states() const + { + return states_; + } + + float signal::max_frequency() const + { + return max_frequency_; + } + + bool signal::send_same() const + { + return send_same_; + } + + bool signal::force_send_changed() const + { + return force_send_changed_; + } + + bool signal::writable() const + { + return writable_; + } + + std::string signal::encoder() const + { + return encoder_; + } + + void signal::from_json(const nlohmann::json& j) + { + generic_name_ = j.count("generic_name") ? j["generic_name"].get() : ""; + bit_position_ = j.count("bit_position") ? j["bit_position"].get() : 0; + bit_size_ = j.count("bit_size") ? j["bit_size"].get() : 0; + factor_ = j.count("factor") ? j["factor"].get() : 1.0f; + offset_ = j.count("offset") ? j["offset"].get() : 0; + decoder_ = j.count("decoder") ? j["decoder"].get() : ""; + ignore_ = j.count("ignore") ? j["ignore"].get() : false; + enabled_ = j.count("enabled") ? j["enabled"].get() : true; + max_frequency_ = j.count("max_frequency") ? j["max_frequency"].get() : 0; + send_same_ = j.count("send_same") ? j["send_same"].get() : true; + force_send_changed_ = j.count("force_send_changed") ? j["force_send_changed"].get() : false; + writable_ = j.count("writable") ? j["writable"].get() : false; + encoder_ = j.count("encoder") ? j["encoder"].get() : ""; + + if (j.count("states")) + { + std::map items = j["states"]; + for(const auto& i : items) + { + states_[i.first] = i.second.get>(); + } + } + } + + nlohmann::json signal::to_json() const + { + nlohmann::json j; + j["generic_name"] = generic_name_; + j["bit_position"] = bit_position_; + j["bit_size"] = bit_size_; + j["factor"] = factor_; + j["offset"] = offset_; + j["decoder"] = decoder_; + j["ignore"] = ignore_; + j["enabled"] = enabled_; + j["states"] = states_; + j["max_frequency"] = max_frequency_; + j["send_same"] = send_same_; + j["force_send_changed"] = force_send_changed_; + j["writable"] = writable_; + j["encoder"] = encoder_; + return j; + } + + void to_json(nlohmann::json& j, const signal& p) + { + j = p.to_json(); + } + + void from_json(const nlohmann::json& j, signal& p) + { + p.from_json(j); + } +} diff --git a/CAN-config-generator/src/openxc/signal.hpp b/CAN-config-generator/src/openxc/signal.hpp new file mode 100755 index 0000000..64dba75 --- /dev/null +++ b/CAN-config-generator/src/openxc/signal.hpp @@ -0,0 +1,53 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace openxc +{ + class signal + { + private: + std::string id_; + std::string generic_name_; + std::uint32_t bit_position_; + std::uint32_t bit_size_; + float factor_; + std::uint32_t offset_; + std::string decoder_; + bool ignore_; + bool enabled_; + std::map> states_; + float max_frequency_; + bool send_same_; + bool force_send_changed_; + bool writable_; + std::string encoder_; + public: + std::string id() const; + void id(const std::string& id); + std::string generic_name() const; + std::uint32_t bit_position() const; + std::uint32_t bit_size() const; + float factor() const; + std::uint32_t offset() const; + std::string decoder() const; + bool ignore() const; + bool enabled() const; + const std::map>& states() const; + float max_frequency() const; + bool send_same() const; + bool force_send_changed() const; + bool writable() const; + std::string encoder() const; + + void from_json(const nlohmann::json& j); + nlohmann::json to_json() const; + }; + + void to_json(nlohmann::json& j, const signal& p); + void from_json(const nlohmann::json& j, signal& p); +} -- cgit 1.2.3-korg