From 7b1b08c1c22b81f9739d05715123cd04cc1e33a2 Mon Sep 17 00:00:00 2001 From: Scott Date: Sun, 10 Mar 2024 08:19:39 -0400 Subject: [PATCH 1/3] Add signal values to message signals --- src/database.cpp | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/database.cpp b/src/database.cpp index eb09eda..c2d16ad 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -289,6 +289,8 @@ void Database::parse(std::istream & reader) std::vector bus_node_comments; std::vector message_comments; std::vector signal_comments; + std::unordered_map> + value_descs; std::unordered_map> attr_texts; std::unordered_map attr_def_val_texts; @@ -351,11 +353,11 @@ void Database::parse(std::istream & reader) } else if (preamble == PREAMBLES[6]) { // SIGNAL VALUE LIST saveMsg(current_msg); - std::map value_descs; - std::string temp_string; std::string sig_name; - + std::string current_char; + std::string current_name{}; + unsigned int current_val{}; // Message ID iss_line >> temp_string; @@ -364,10 +366,18 @@ void Database::parse(std::istream & reader) // Signal Name iss_line >> sig_name; - // Get all remaining values up to the ending semicolon - std::getline(iss_line, temp_string, ';'); - // TODO(jwhitleyastuff): Finish parsing values + // Probably a better way than this but it works + while (current_char != ";") { + // Breaks when hitting semicolon + iss_line >> current_char; + if (current_char == ";") { + break; + } + current_val = std::stoul(current_char); + iss_line >> current_name; + value_descs[sig_name][current_val] = current_name; + } } else if (preamble == PREAMBLES[7]) { // ATTRIBUTE DEFINITION saveMsg(current_msg); @@ -484,10 +494,23 @@ void Database::parse(std::istream & reader) } break; } } + // Assign value descriptions to each signal within the messages + for (auto &msg : messages_) { + for (auto &sig : msg.second.signals_) { + auto signame = sig.first; + if (value_descs.find(signame) == value_descs.end()) { + // The signal name doesn't have an entry in the value descriptions + continue; + } else { + const std::map thismap = + value_descs[signame]; + // Assign the current map to the signal value descriptions + sig.second.value_descs_ = thismap; + } + } + } - // TODO(jwhitleyastuff): Apply attributes to DB objects - - // TODO(jwhitleyastuff): Add signal value description lists to signals + // TODO(jwhitleyastuff): Apply attributes to DB objects } void Database::saveMsg(std::unique_ptr & msg_ptr) From 38425b963561e70db08dc18de43e87badc94367b Mon Sep 17 00:00:00 2001 From: Scott Date: Sun, 10 Mar 2024 08:19:52 -0400 Subject: [PATCH 2/3] Count signal values in example DBC read --- examples/read_dbc.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/read_dbc.cpp b/examples/read_dbc.cpp index 73a51c4..fe82bf1 100644 --- a/examples/read_dbc.cpp +++ b/examples/read_dbc.cpp @@ -45,6 +45,7 @@ int main(int argc, char ** argv) size_t message_attr_counter = 0; size_t signal_attr_counter = 0; size_t attr_def_default_counter = 0; + size_t signal_value_counter = 0; auto bus_nodes = dbc.getBusNodes(); auto messages = dbc.getMessages(); @@ -69,6 +70,10 @@ int main(int argc, char ** argv) if (sig.second->getComment() != nullptr) { signal_comment_counter++; } + const int num_values = sig.second->getValueDescriptions().size(); + if (num_values != 0){ + signal_value_counter += num_values; + } } } @@ -115,6 +120,7 @@ int main(int argc, char ** argv) std::cout << "Found " << bus_nodes.size() << " bus nodes.\n"; std::cout << "Found " << dbc.getMessages().size() << " messages.\n"; std::cout << "Found " << signal_counter << " signals.\n"; + std::cout << "Found " << signal_value_counter << " signal values.\n"; size_t total_comments = bus_node_comment_counter + message_comment_counter + signal_comment_counter; From a2107ecb22d64a5e3a7849c6d3991b6cde2447e4 Mon Sep 17 00:00:00 2001 From: Scott Date: Sun, 10 Mar 2024 08:27:14 -0400 Subject: [PATCH 3/3] Add string to common defs - fix build failure --- include/common_defs.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/common_defs.hpp b/include/common_defs.hpp index 7c28f2a..681d8b9 100644 --- a/include/common_defs.hpp +++ b/include/common_defs.hpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace AS {