cabana(DBCFile): preserve original header (#31900)

* cabana(DBCFile): preserve original header

* add trailing space
old-commit-hash: 5a805df340
pull/32199/head
Cameron Clough 1 year ago committed by GitHub
parent 234338ad55
commit 0ca2fdb545
  1. 13
      tools/cabana/dbc/dbcfile.cc
  2. 1
      tools/cabana/dbc/dbcfile.h
  3. 20
      tools/cabana/tests/test_cabana.cc

@ -98,10 +98,13 @@ void DBCFile::parse(const QString &content) {
QTextStream stream((QString *)&content); QTextStream stream((QString *)&content);
cabana::Msg *current_msg = nullptr; cabana::Msg *current_msg = nullptr;
int multiplexor_cnt = 0; int multiplexor_cnt = 0;
bool seen_first = false;
while (!stream.atEnd()) { while (!stream.atEnd()) {
++line_num; ++line_num;
QString raw_line = stream.readLine(); QString raw_line = stream.readLine();
line = raw_line.trimmed(); line = raw_line.trimmed();
bool seen = true;
if (line.startsWith("BO_ ")) { if (line.startsWith("BO_ ")) {
multiplexor_cnt = 0; multiplexor_cnt = 0;
auto match = bo_regexp.match(line); 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))) { if (auto s = get_sig(match.captured(1).toUInt(), match.captured(2))) {
s->comment = match.captured(3).trimmed(); 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"; dbc_string += "\n";
} }
return dbc_string + comment + val_desc; return header + dbc_string + comment + val_desc;
} }

@ -34,6 +34,7 @@ public:
private: private:
void parse(const QString &content); void parse(const QString &content);
QString header;
std::map<uint32_t, cabana::Msg> msgs; std::map<uint32_t, cabana::Msg> msgs;
QString name_; QString name_;
}; };

@ -45,6 +45,26 @@ CM_ SG_ 162 signal_2 "signal comment";
REQUIRE(dbc.generateDBC() == content); 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") { TEST_CASE("parse_dbc") {
QString content = R"( QString content = R"(
BO_ 160 message_1: 8 EON BO_ 160 message_1: 8 EON

Loading…
Cancel
Save