diff --git a/tools/cabana/dbc/dbcfile.cc b/tools/cabana/dbc/dbcfile.cc index c4025725ac..8d6b0f656f 100644 --- a/tools/cabana/dbc/dbcfile.cc +++ b/tools/cabana/dbc/dbcfile.cc @@ -149,6 +149,24 @@ void DBCFile::removeMsg(const MessageId &id) { msgs.erase(id.address); } +QString DBCFile::newMsgName(const MessageId &id) { + return QString("NEW_MSG_") + QString::number(id.address, 16).toUpper(); +} + +QString DBCFile::newSignalName(const MessageId &id) { + auto m = msg(id); + assert(m != nullptr); + + QString name; + + for (int i = 1; /**/; ++i) { + name = QString("NEW_SIGNAL_%1").arg(i); + if (m->sig(name) == nullptr) break; + } + + return name; +} + std::map DBCFile::getMessages() { return msgs; } diff --git a/tools/cabana/dbc/dbcfile.h b/tools/cabana/dbc/dbcfile.h index 96fbe6a9f1..e048dc5839 100644 --- a/tools/cabana/dbc/dbcfile.h +++ b/tools/cabana/dbc/dbcfile.h @@ -38,6 +38,9 @@ public: void updateMsg(const MessageId &id, const QString &name, uint32_t size); void removeMsg(const MessageId &id); + QString newMsgName(const MessageId &id); + QString newSignalName(const MessageId &id); + std::map getMessages(); const cabana::Msg *msg(const MessageId &id) const; const cabana::Msg *msg(uint32_t address) const; diff --git a/tools/cabana/dbc/dbcmanager.cc b/tools/cabana/dbc/dbcmanager.cc index 123d783986..b17d535131 100644 --- a/tools/cabana/dbc/dbcmanager.cc +++ b/tools/cabana/dbc/dbcmanager.cc @@ -133,6 +133,20 @@ void DBCManager::removeMsg(const MessageId &id) { } } +QString DBCManager::newMsgName(const MessageId &id) { + auto sources_dbc_file = findDBCFile(id); + assert(sources_dbc_file); // This should be impossible + auto [_, dbc_file] = *sources_dbc_file; + return dbc_file->newMsgName(id); +} + +QString DBCManager::newSignalName(const MessageId &id) { + auto sources_dbc_file = findDBCFile(id); + assert(sources_dbc_file); // This should be impossible + auto [_, dbc_file] = *sources_dbc_file; + return dbc_file->newSignalName(id); +} + std::map DBCManager::getMessages(uint8_t source) { std::map ret; diff --git a/tools/cabana/dbc/dbcmanager.h b/tools/cabana/dbc/dbcmanager.h index 60d8a072ec..a1b9e2ae3a 100644 --- a/tools/cabana/dbc/dbcmanager.h +++ b/tools/cabana/dbc/dbcmanager.h @@ -33,6 +33,9 @@ public: void updateMsg(const MessageId &id, const QString &name, uint32_t size); void removeMsg(const MessageId &id); + QString newMsgName(const MessageId &id); + QString newSignalName(const MessageId &id); + std::map getMessages(uint8_t source); const cabana::Msg *msg(const MessageId &id) const; const cabana::Msg* msg(uint8_t source, const QString &name); diff --git a/tools/cabana/signalview.cc b/tools/cabana/signalview.cc index 76eecc13b8..32b0a39408 100644 --- a/tools/cabana/signalview.cc +++ b/tools/cabana/signalview.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -223,19 +224,13 @@ bool SignalModel::saveSignal(const cabana::Signal *origin_s, cabana::Signal &s) void SignalModel::addSignal(int start_bit, int size, bool little_endian) { auto msg = dbc()->msg(msg_id); - for (int i = 0; !msg; ++i) { - QString name = QString("NEW_MSG_") + QString::number(msg_id.address, 16).toUpper(); - if (!dbc()->msg(msg_id.source, name)) { - UndoStack::push(new EditMsgCommand(msg_id, name, can->lastMessage(msg_id).dat.size())); - msg = dbc()->msg(msg_id); - } + if (!msg) { + QString name = dbc()->newMsgName(msg_id); + UndoStack::push(new EditMsgCommand(msg_id, name, can->lastMessage(msg_id).dat.size())); + msg = dbc()->msg(msg_id); } - cabana::Signal sig = {.is_little_endian = little_endian, .factor = 1, .min = "0", .max = QString::number(std::pow(2, size) - 1)}; - for (int i = 1; /**/; ++i) { - sig.name = QString("NEW_SIGNAL_%1").arg(i); - if (msg->sig(sig.name) == nullptr) break; - } + cabana::Signal sig = {.name = dbc()->newSignalName(msg_id), .is_little_endian = little_endian, .factor = 1, .min = "0", .max = QString::number(std::pow(2, size) - 1)}; updateSigSizeParamsFromRange(sig, start_bit, size); UndoStack::push(new AddSigCommand(msg_id, sig)); }