cabana(DBCFile): interleave msg and signal comments (#31899)

This matches the behaviour of CANdb++
old-commit-hash: 3e816e7df8
pull/32199/head
Cameron Clough 1 year ago committed by GitHub
parent c08330eb0a
commit 764c5cdae4
  1. 8
      tools/cabana/dbc/dbcfile.cc
  2. 17
      tools/cabana/tests/test_cabana.cc

@ -191,12 +191,12 @@ void DBCFile::parse(const QString &content) {
} }
QString DBCFile::generateDBC() { QString DBCFile::generateDBC() {
QString dbc_string, signal_comment, message_comment, val_desc; QString dbc_string, comment, val_desc;
for (const auto &[address, m] : msgs) { for (const auto &[address, m] : msgs) {
const QString transmitter = m.transmitter.isEmpty() ? DEFAULT_NODE_NAME : m.transmitter; const QString transmitter = m.transmitter.isEmpty() ? DEFAULT_NODE_NAME : m.transmitter;
dbc_string += QString("BO_ %1 %2: %3 %4\n").arg(address).arg(m.name).arg(m.size).arg(transmitter); dbc_string += QString("BO_ %1 %2: %3 %4\n").arg(address).arg(m.name).arg(m.size).arg(transmitter);
if (!m.comment.isEmpty()) { if (!m.comment.isEmpty()) {
message_comment += QString("CM_ BO_ %1 \"%2\";\n").arg(address).arg(m.comment); comment += QString("CM_ BO_ %1 \"%2\";\n").arg(address).arg(m.comment);
} }
for (auto sig : m.getSignals()) { for (auto sig : m.getSignals()) {
QString multiplexer_indicator; QString multiplexer_indicator;
@ -219,7 +219,7 @@ QString DBCFile::generateDBC() {
.arg(sig->unit) .arg(sig->unit)
.arg(sig->receiver_name.isEmpty() ? DEFAULT_NODE_NAME : sig->receiver_name); .arg(sig->receiver_name.isEmpty() ? DEFAULT_NODE_NAME : sig->receiver_name);
if (!sig->comment.isEmpty()) { if (!sig->comment.isEmpty()) {
signal_comment += QString("CM_ SG_ %1 %2 \"%3\";\n").arg(address).arg(sig->name).arg(sig->comment); comment += QString("CM_ SG_ %1 %2 \"%3\";\n").arg(address).arg(sig->name).arg(sig->comment);
} }
if (!sig->val_desc.empty()) { if (!sig->val_desc.empty()) {
QStringList text; QStringList text;
@ -231,5 +231,5 @@ QString DBCFile::generateDBC() {
} }
dbc_string += "\n"; dbc_string += "\n";
} }
return dbc_string + message_comment + signal_comment + val_desc; return dbc_string + comment + val_desc;
} }

@ -28,6 +28,23 @@ TEST_CASE("DBCFile::generateDBC") {
} }
} }
TEST_CASE("DBCFile::generateDBC - comment order") {
// Ensure that message comments are followed by signal comments and in the correct order
auto content = R"(BO_ 160 message_1: 8 EON
SG_ signal_1 : 0|12@1+ (1,0) [0|4095] "unit" XXX
BO_ 162 message_2: 8 EON
SG_ signal_2 : 0|12@1+ (1,0) [0|4095] "unit" XXX
CM_ BO_ 160 "message comment";
CM_ SG_ 160 signal_1 "signal comment";
CM_ BO_ 162 "message comment";
CM_ SG_ 162 signal_2 "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