cabana: catch exceptions thrown from opendbc (#27242)

* catch exceptions thrown from opendbc

* Update tools/cabana/mainwin.cc

Co-authored-by: Cameron Clough <cameronjclough@gmail.com>

* Update tools/cabana/mainwin.cc

Co-authored-by: Cameron Clough <cameronjclough@gmail.com>

* show error line in detailed text

---------

Co-authored-by: Cameron Clough <cameronjclough@gmail.com>
old-commit-hash: 95fc84e0b7
beeps
Dean Lee 2 years ago committed by GitHub
parent 8c37d53563
commit 2d4faa20be
  1. 14
      tools/cabana/dbcmanager.cc
  2. 2
      tools/cabana/dbcmanager.h
  3. 24
      tools/cabana/mainwin.cc

@ -13,10 +13,16 @@ void DBCManager::open(const QString &dbc_file_name) {
initMsgMap(); initMsgMap();
} }
void DBCManager::open(const QString &name, const QString &content) { bool DBCManager::open(const QString &name, const QString &content, QString *error) {
std::istringstream stream(content.toStdString()); try {
dbc = const_cast<DBC *>(dbc_parse_from_stream(name.toStdString(), stream)); std::istringstream stream(content.toStdString());
initMsgMap(); dbc = const_cast<DBC *>(dbc_parse_from_stream(name.toStdString(), stream));
initMsgMap();
return true;
} catch (std::exception &e) {
if (error) *error = e.what();
}
return false;
} }
void DBCManager::initMsgMap() { void DBCManager::initMsgMap() {

@ -22,7 +22,7 @@ public:
~DBCManager(); ~DBCManager();
void open(const QString &dbc_file_name); void open(const QString &dbc_file_name);
void open(const QString &name, const QString &content); bool open(const QString &name, const QString &content, QString *error = nullptr);
QString generateDBC(); QString generateDBC();
void addSignal(const QString &id, const Signal &sig); void addSignal(const QString &id, const Signal &sig);
void updateSignal(const QString &id, const QString &sig_name, const Signal &sig); void updateSignal(const QString &id, const QString &sig_name, const Signal &sig);

@ -220,9 +220,16 @@ void MainWindow::loadFile(const QString &fn) {
QFile file(fn); QFile file(fn);
if (file.open(QIODevice::ReadOnly)) { if (file.open(QIODevice::ReadOnly)) {
auto dbc_name = QFileInfo(fn).baseName(); auto dbc_name = QFileInfo(fn).baseName();
dbc()->open(dbc_name, file.readAll()); QString error;
setCurrentFile(fn); bool ret = dbc()->open(dbc_name, file.readAll(), &error);
statusBar()->showMessage(tr("DBC File %1 loaded").arg(fn), 2000); if (ret) {
setCurrentFile(fn);
statusBar()->showMessage(tr("DBC File %1 loaded").arg(fn), 2000);
} else {
QMessageBox msg_box(QMessageBox::Warning, tr("Failed to load DBC file"), tr("Failed to parse DBC file %1").arg(fn));
msg_box.setDetailedText(error);
msg_box.exec();
}
} }
} }
} }
@ -251,11 +258,16 @@ void MainWindow::loadDBCFromOpendbc(const QString &name) {
void MainWindow::loadDBCFromClipboard() { void MainWindow::loadDBCFromClipboard() {
remindSaveChanges(); remindSaveChanges();
QString dbc_str = QGuiApplication::clipboard()->text(); QString dbc_str = QGuiApplication::clipboard()->text();
dbc()->open("from_clipboard.dbc", dbc_str); QString error;
if (dbc()->messages().size() > 0) { bool ret = dbc()->open("clipboard", dbc_str, &error);
if (ret && dbc()->messages().size() > 0) {
QMessageBox::information(this, tr("Load From Clipboard"), tr("DBC Successfully Loaded!")); QMessageBox::information(this, tr("Load From Clipboard"), tr("DBC Successfully Loaded!"));
} else { } else {
QMessageBox::warning(this, tr("Load From Clipboard"), tr("Failed to parse dbc from clipboard!\nMake sure that you paste the text with correct format.")); QMessageBox msg_box(QMessageBox::Warning, tr("Failed to load DBC from clipboard"), tr("Make sure that you paste the text with correct format."));
if (!error.isEmpty()) {
msg_box.setDetailedText(error);
}
msg_box.exec();
} }
} }

Loading…
Cancel
Save