Changed UDS scanner output to show the reply ID as well.

Now the root nodes are the sending ID we used, the next level shows the ID(s) that replied. Then each reply ID has under it all the services attempted and results.
This commit is contained in:
Collin Kidder
2019-07-25 21:26:18 -04:00
parent 8a23c32210
commit 34298c0e6e
2 changed files with 42 additions and 13 deletions
+41 -12
View File
@@ -370,7 +370,7 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
if (serviceShortName.length() < 3) serviceShortName = QString::number(sentFrame.service, 16);
if (msg.service == 0x40 + sendingFrames[currIdx].service)
{
setupNodes();
setupNodes(id);
QTreeWidgetItem *nodePositive = new QTreeWidgetItem();
QString reply = "POSITIVE ";
@@ -389,7 +389,7 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
{
if (msg.data.length())
{
setupNodes();
setupNodes(id);
QTreeWidgetItem *nodeNegative = new QTreeWidgetItem();
qDebug() << ui->spinNumBytes->value();
nodeNegative->setText(0, "NEGATIVE - " + udsHandler->getNegativeResponseShort(msg.data[0]));
@@ -407,23 +407,56 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
}
}
void UDSScanWindow::setupNodes()
void UDSScanWindow::setupNodes(uint32_t replyID)
{
QString serviceShortName = udsHandler->getServiceShortDesc(sendingFrames[currIdx].service);
if (serviceShortName.length() < 3) serviceShortName = QString::number(sendingFrames[currIdx].service, 16);
QTreeWidgetItem *replyNode = nullptr;
if (!nodeID || nodeID->text(0) != Utility::formatHexNum(sendingFrames[currIdx].ID))
{
nodeID = new QTreeWidgetItem();
nodeID->setText(0, Utility::formatHexNum(sendingFrames[currIdx].ID));
nodeID->setText(0, Utility::formatHexNum(sendingFrames[currIdx].ID));
ui->treeResults->addTopLevelItem(nodeID);
nodeService = NULL;
nodeService = nullptr;
}
if (!nodeService || nodeService->text(0) != serviceShortName)
bool foundReplyMatch = false;
for (int i = 0; i < nodeID->childCount(); i++)
{
if (nodeID->child(i)->text(0) == Utility::formatHexNum(replyID) || ((replyID == 0xDEAD5EA1) && (nodeID->child(i)->text(0) == "NO REPLY")))
{
foundReplyMatch = true;
replyNode = nodeID->child(i);
break;
}
}
if (!foundReplyMatch)
{
QTreeWidgetItem *replyItem = new QTreeWidgetItem();
if (replyID != 0xDEAD5EA1) replyItem->setText(0, Utility::formatHexNum(replyID));
else replyItem->setText(0, "NO REPLY");
nodeID->addChild(replyItem);
replyNode = replyItem;
nodeService = nullptr;
}
bool foundServiceMatch = false;
for (int i = 0; i < replyNode->childCount(); i++)
{
if ( replyNode->child(i)->text(0) == serviceShortName)
{
foundServiceMatch = true;
nodeService = replyNode->child(i);
break;
}
}
if (!foundServiceMatch)
{
nodeService = new QTreeWidgetItem();
nodeService->setText(0, serviceShortName);
nodeID->addChild(nodeService);
replyNode->addChild(nodeService);
}
nodeSubFunc = new QTreeWidgetItem();
@@ -435,11 +468,7 @@ void UDSScanWindow::timeOut()
{
if (ui->ckShowNoReply->isChecked())
{
setupNodes();
QTreeWidgetItem *nodeNoReply = new QTreeWidgetItem();
nodeNoReply->setText(0, "No Reply");
nodeNoReply->setForeground(0, QBrush(Qt::gray));
nodeSubFunc->addChild(nodeNoReply);
setupNodes(0xDEAD5EA1);
nodeSubFunc->setForeground(0, QBrush(Qt::gray));
}
+1 -1
View File
@@ -49,7 +49,7 @@ private:
void sendNextMsg();
void sendOnBuses(UDS_MESSAGE frame, int buses);
void setupNodes();
void setupNodes(uint32_t replyID);
void dumpNode(QTreeWidgetItem* item, QFile *file, int indent);
bool eventFilter(QObject *obj, QEvent *event);
};