From 0ca2fdb545eedf35ab4721e344811fd2a021e33c Mon Sep 17 00:00:00 2001 From: Cameron Clough Date: Tue, 19 Mar 2024 05:37:45 +0000 Subject: [PATCH] cabana(DBCFile): preserve original header (#31900) * cabana(DBCFile): preserve original header * add trailing space old-commit-hash: 5a805df3402c8a0661a9b663d88378313b19784e --- tools/cabana/dbc/dbcfile.cc | 13 ++++++++++++- tools/cabana/dbc/dbcfile.h | 1 + tools/cabana/tests/test_cabana.cc | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/tools/cabana/dbc/dbcfile.cc b/tools/cabana/dbc/dbcfile.cc index 69ca5b6309..e7f7fdc6ef 100644 --- a/tools/cabana/dbc/dbcfile.cc +++ b/tools/cabana/dbc/dbcfile.cc @@ -98,10 +98,13 @@ void DBCFile::parse(const QString &content) { QTextStream stream((QString *)&content); cabana::Msg *current_msg = nullptr; int multiplexor_cnt = 0; + bool seen_first = false; while (!stream.atEnd()) { ++line_num; QString raw_line = stream.readLine(); line = raw_line.trimmed(); + + bool seen = true; if (line.startsWith("BO_ ")) { multiplexor_cnt = 0; auto match = bo_regexp.match(line); @@ -182,6 +185,14 @@ void DBCFile::parse(const QString &content) { if (auto s = get_sig(match.captured(1).toUInt(), match.captured(2))) { s->comment = match.captured(3).trimmed(); } + } else { + seen = false; + } + + if (seen) { + seen_first = true; + } else if (!seen_first) { + header += raw_line + "\n"; } } @@ -231,5 +242,5 @@ QString DBCFile::generateDBC() { } dbc_string += "\n"; } - return dbc_string + comment + val_desc; + return header + dbc_string + comment + val_desc; } diff --git a/tools/cabana/dbc/dbcfile.h b/tools/cabana/dbc/dbcfile.h index 551bac4946..29f19a80e4 100644 --- a/tools/cabana/dbc/dbcfile.h +++ b/tools/cabana/dbc/dbcfile.h @@ -34,6 +34,7 @@ public: private: void parse(const QString &content); + QString header; std::map msgs; QString name_; }; diff --git a/tools/cabana/tests/test_cabana.cc b/tools/cabana/tests/test_cabana.cc index 8b09fdac34..98c2de12b6 100644 --- a/tools/cabana/tests/test_cabana.cc +++ b/tools/cabana/tests/test_cabana.cc @@ -45,6 +45,26 @@ CM_ SG_ 162 signal_2 "signal comment"; REQUIRE(dbc.generateDBC() == content); } +TEST_CASE("DBCFile::generateDBC -- preserve original header") { + QString content = R"(VERSION "1.0" + +NS_ : + CM_ + +BS_: + +BU_: EON + +BO_ 160 message_1: 8 EON + SG_ signal_1 : 0|12@1+ (1,0) [0|4095] "unit" XXX + +CM_ BO_ 160 "message comment"; +CM_ SG_ 160 signal_1 "signal comment"; +)"; + DBCFile dbc("", content); + REQUIRE(dbc.generateDBC() == content); +} + TEST_CASE("parse_dbc") { QString content = R"( BO_ 160 message_1: 8 EON