26 :
_ctx(std::move(ctx))
29 , _columnsOrder({
"rowID",
"time",
"id",
"dir",
"len",
"data" })
34 _tvModel.setHorizontalHeaderLabels(_columnsOrder);
44 _ui.
setFilterCbk(std::bind(&CanRawViewPrivate::setFilter,
this, std::placeholders::_1));
79 void frameView(
const QCanBusFrame& frame,
const QString& direction)
82 cds_debug(
"send/received frame while simulation stopped");
86 auto payHex = frame.payload().toHex();
88 for (
int ii = payHex.size() - 2; ii >= 2; ii -= 2) {
89 payHex.insert(ii,
' ');
93 if (frame.hasExtendedFrameFormat()) {
97 QString frameID = QString(
"0x" + QString::number(frame.frameId(), 16).rightJustified(idPadding,
'0'));
98 QString time = QString::number((
_timer.elapsed() / 1000.0),
'f', 2);
100 if (QCanBusFrame::RemoteRequestFrame == frame.frameType()) {
102 data = remoteFrameData;
104 size = QString::number(frame.payload().size());
105 data = QString::fromUtf8(payHex.data(), payHex.size());
108 QList<QStandardItem*> list;
110 if (
_tvModel.rowCount() < rowCountMax) {
111 list.append(
new QStandardItem(QString::number(_rowID)));
112 list.append(
new QStandardItem(time));
113 list.append(
new QStandardItem(frameID));
114 list.append(
new QStandardItem(direction));
115 list.append(
new QStandardItem(size));
116 list.append(
new QStandardItem(data));
119 auto it = list.begin();
121 (*it++)->setText(QString::number(_rowID));
122 (*it++)->setText(time);
123 (*it++)->setText(frameID);
124 (*it++)->setText(direction);
125 (*it++)->setText(size);
126 (*it++)->setText(data);
131 quint32 fId = frame.frameId();
132 if (frame.hasExtendedFrameFormat()) {
138 if (direction ==
"RX") {
139 if (_uniqueRxMap.count(fId)) {
140 auto& row = _uniqueRxMap[fId];
142 std::get<0>(row)->setText(QString::number(_rowID));
143 std::get<1>(row)->setText(time);
144 std::get<2>(row)->setText(frameID);
145 std::get<3>(row)->setText(direction);
146 std::get<4>(row)->setText(size);
147 std::get<5>(row)->setText(data);
149 auto rowEl =
new QStandardItem(QString::number(_rowID));
150 auto timeEl =
new QStandardItem(time);
151 auto frameEl =
new QStandardItem(frameID);
152 auto dirEl =
new QStandardItem(direction);
153 auto sizeEl =
new QStandardItem(size);
154 auto dataEl =
new QStandardItem(data);
156 _tvModelUnique.appendRow({ rowEl, timeEl, frameEl, dirEl, sizeEl, dataEl });
157 _uniqueRxMap[fId] = std::make_tuple(rowEl, timeEl, frameEl, dirEl, sizeEl, dataEl);
159 }
else if (direction ==
"TX") {
160 if (_uniqueTxMap.count(fId)) {
161 auto& row = _uniqueTxMap[fId];
163 std::get<0>(row)->setText(QString::number(_rowID));
164 std::get<1>(row)->setText(time);
165 std::get<2>(row)->setText(frameID);
166 std::get<3>(row)->setText(direction);
167 std::get<4>(row)->setText(size);
168 std::get<5>(row)->setText(data);
170 auto rowEl =
new QStandardItem(QString::number(_rowID));
171 auto timeEl =
new QStandardItem(time);
172 auto frameEl =
new QStandardItem(frameID);
173 auto dirEl =
new QStandardItem(direction);
174 auto sizeEl =
new QStandardItem(size);
175 auto dataEl =
new QStandardItem(data);
177 _tvModelUnique.appendRow({ rowEl, timeEl, frameEl, dirEl, sizeEl, dataEl });
178 _uniqueTxMap[fId] = std::make_tuple(rowEl, timeEl, frameEl, dirEl, sizeEl, dataEl);
181 cds_warn(
"Invalid direction string: {}", direction.toStdString());