From e69e4f4052927b1053145d06cc8144f209f84f11 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Wed, 18 Jan 2023 19:32:04 +0100 Subject: [PATCH] cabana: sort bus:id numerically instead of alphabetically (#26996) * cabana: sort bus:id numerically instead of alphabetically * Update tools/cabana/canmessages.h --- tools/cabana/canmessages.cc | 2 ++ tools/cabana/canmessages.h | 2 ++ tools/cabana/messageswidget.cc | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/cabana/canmessages.cc b/tools/cabana/canmessages.cc index 6e19eb440f..a473313f90 100644 --- a/tools/cabana/canmessages.cc +++ b/tools/cabana/canmessages.cc @@ -64,6 +64,8 @@ bool CANMessages::eventFilter(const Event *event) { QString id = QString("%1:%2").arg(c.getSrc()).arg(c.getAddress(), 1, 16); CanData &data = (*new_msgs)[id]; data.ts = current_sec; + data.src = c.getSrc(); + data.address = c.getAddress(); data.dat = QByteArray((char *)c.getDat().begin(), c.getDat().size()); data.count = ++counters[id]; if (double delta = (current_sec - counters_begin_sec); delta > 0) { diff --git a/tools/cabana/canmessages.h b/tools/cabana/canmessages.h index ea43933565..2451793742 100644 --- a/tools/cabana/canmessages.h +++ b/tools/cabana/canmessages.h @@ -11,6 +11,8 @@ struct CanData { double ts = 0.; + uint8_t src = 0; + uint32_t address = 0; uint32_t count = 0; uint32_t freq = 0; QByteArray dat; diff --git a/tools/cabana/messageswidget.cc b/tools/cabana/messageswidget.cc index ffbca1b1df..3477abe37b 100644 --- a/tools/cabana/messageswidget.cc +++ b/tools/cabana/messageswidget.cc @@ -102,7 +102,9 @@ void MessageListModel::sortMessages() { }); } else if (sort_column == 1) { std::sort(msgs.begin(), msgs.end(), [this](auto &l, auto &r) { - return sort_order == Qt::AscendingOrder ? l < r : l > r; + auto ll = std::tuple{can->lastMessage(l).src, can->lastMessage(l).address, l}; + auto rr = std::tuple{can->lastMessage(r).src, can->lastMessage(r).address, r}; + return sort_order == Qt::AscendingOrder ? ll < rr : ll > rr; }); } else if (sort_column == 2) { std::sort(msgs.begin(), msgs.end(), [this](auto &l, auto &r) {