diff --git a/SavvyCAN.pro.user b/SavvyCAN.pro.user index 3f8dc26..bab45db 100644 --- a/SavvyCAN.pro.user +++ b/SavvyCAN.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/frameinfowindow.cpp b/frameinfowindow.cpp index 4d56411..109d956 100644 --- a/frameinfowindow.cpp +++ b/frameinfowindow.cpp @@ -1,5 +1,6 @@ #include "frameinfowindow.h" #include "ui_frameinfowindow.h" +#include FrameInfoWindow::FrameInfoWindow(QList *frames, QWidget *parent) : QDialog(parent), @@ -15,27 +16,37 @@ FrameInfoWindow::~FrameInfoWindow() delete ui; } -void FrameInfoWindow::updateDetailsWindow(int frameIdx) +void FrameInfoWindow::updateDetailsWindow(QListWidgetItem *item) { int idx, numFrames, targettedID; int minLen, maxLen, thisLen; int minData[8]; int maxData[8]; int dataHistogram[256][8]; - //TreeNode baseNode, dataBase, histBase, numBase; -/* - if (frameIdx > -1) - { - parseFrameCache(); - targettedID = Utility.ParseStringToNum(listFrameIDs.Items[listFrameIDs.SelectedIndex].ToString()); - idx = getIdxForID(targettedID); - numFrames = frames[idx].Count; + QTreeWidgetItem *baseNode, *dataBase, *histBase, *numBase, *tempItem; - treeDetails.Nodes.Clear(); - baseNode = treeDetails.Nodes.Add("ID: " + listFrameIDs.Items[listFrameIDs.SelectedIndex].ToString()); - if (frames[idx].ElementAt(0).extended) //if these frames seem to be extended then try for J1939 decoding + targettedID = item->text().toInt(NULL, 16); + + qDebug() << "Started update details window with id " << targettedID; + + if (targettedID > -1) + { + + frameCache.clear(); + for (int i = 0; i < modelFrames->count(); i++) { - J1939ID jid = new J1939ID(); + CANFrame thisFrame = modelFrames->at(i); + if (thisFrame.ID == targettedID) frameCache.append(thisFrame); + } + + ui->treeDetails->clear(); + + baseNode = new QTreeWidgetItem(); + baseNode->setText(0, QString("ID: 0x") + ui->listFrameID->currentItem()->text()); + + if (frameCache[0].extended) //if these frames seem to be extended then try for J1939 decoding + { + J1939ID jid; jid.src = targettedID & 0xFF; jid.priority = targettedID >> 26; jid.pgn = (targettedID >> 8) & 0x3FFFF; //18 bits @@ -46,87 +57,100 @@ void FrameInfoWindow::updateDetailsWindow(int frameIdx) { jid.isBroadcast = true; jid.dest = 0xFFFF; - baseNode.Nodes.Add("Broadcast frame"); + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("Broadcast Frame")); + baseNode->addChild(tempItem); } else { jid.dest = jid.ps; - baseNode.Nodes.Add("Destination ID: 0x" + jid.dest.ToString("X2")); + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("Destination ID: 0x") + QString::number(jid.dest,16)); + baseNode->addChild(tempItem); } - baseNode.Nodes.Add("SRC: 0x" + jid.src.ToString("X2")); - baseNode.Nodes.Add("PGN: " + jid.pgn.ToString()); - baseNode.Nodes.Add("PF: 0x" + jid.pf.ToString("X2")); - baseNode.Nodes.Add("PS: 0x" + jid.ps.ToString("X2")); + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("SRC: 0x") + QString::number(jid.src,16)); + baseNode->addChild(tempItem); + + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("PGN: ") + QString::number(jid.pgn,10)); + baseNode->addChild(tempItem); + + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("PF: 0x") + QString::number(jid.pf,16)); + baseNode->addChild(tempItem); + + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("PS: 0x") + QString::number(jid.ps,16)); + baseNode->addChild(tempItem); } - treeDetails.Nodes.Add("# Of Frames: " + numFrames.ToString()); + + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("# of frames: ") + QString::number(frameCache.count(),10)); + baseNode->addChild(tempItem); + + //clear out all the counters and accumulators minLen = 8; maxLen = 0; for (int i = 0; i < 8; i++) { minData[i] = 256; maxData[i] = -1; - for (int k = 0; k < 256; k++) dataHistogram[k, i] = 0; + for (int k = 0; k < 256; k++) dataHistogram[k][i] = 0; } - for (int j = 0; j < numFrames; j++) + + //then find all data points + for (int j = 0; j < frameCache.count(); j++) { - thisLen = frames[idx].ElementAt(j).len; + thisLen = frameCache.at(j).len; if (thisLen > maxLen) maxLen = thisLen; if (thisLen < minLen) minLen = thisLen; for (int c = 0; c < thisLen; c++) { - byte dat = frames[idx].ElementAt(j).data[c]; + unsigned char dat = frameCache.at(j).data[c]; if (minData[c] > dat) minData[c] = dat; if (maxData[c] < dat) maxData[c] = dat; - dataHistogram[dat, c]++; //add one to count for this + dataHistogram[dat][c]++; //add one to count for this } } - if (minLen < maxLen) - baseNode = treeDetails.Nodes.Add("Data Length: " + minLen.ToString() + " to " + maxLen.ToString()); - else - baseNode = treeDetails.Nodes.Add("Data Length: " + minLen.ToString()); - for (int d = 0; d < numGraphs; d++) - { - Graphs[d].valueCache = null; - Graphs[d].ID = 0; - } + tempItem = new QTreeWidgetItem(); + + if (minLen < maxLen) + tempItem->setText(0, tr("Data Length: ") + QString::number(minLen) + tr(" to ") + QString::number(maxLen)); + else + tempItem->setText(0, tr("Data Length: ") + QString::number(minLen)); + + baseNode->addChild(tempItem); for (int c = 0; c < maxLen; c++) { - Graphs[6 + c].bias = 0; - Graphs[6 + c].scale = 1; - Graphs[6 + c].mask = 0xFF; - Graphs[6 + c].B1 = c; - Graphs[6 + c].B2 = c; - Graphs[6 + c].ID = targettedID; - Graphs[6 + c].color = theseColors[c]; - Graphs[6 + c].signed = false; - if (numFrames > 100) - { - Graphs[6 + c].stride = (int)((((float)numFrames) / 100.0f) + 0.5f); - } - else Graphs[6 + c].stride = 1; + dataBase = new QTreeWidgetItem(); + histBase = new QTreeWidgetItem(); + + dataBase->setText(0, tr("Data Byte ") + QString::number(c)); + baseNode->addChild(dataBase); + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, tr("Range: ") + QString::number(minData[c]) + tr(" to ") + QString::number(maxData[c])); + dataBase->addChild(tempItem); + histBase->setText(0, tr("Histogram")); + dataBase->addChild(histBase); - dataBase = baseNode.Nodes.Add("Data Byte " + c.ToString()); - dataBase.Nodes.Add("Range: " + minData[c] + " to " + maxData[c]); - histBase = dataBase.Nodes.Add("Histogram"); for (int d = 0; d < 256; d++) { - if (dataHistogram[d, c] > 0) + if (dataHistogram[d][c] > 0) { - numBase = histBase.Nodes.Add(d.ToString() + "/0x" + d.ToString("X2") + ": " + dataHistogram[d, c]); + tempItem = new QTreeWidgetItem(); + tempItem->setText(0, QString::number(d) + "/0x" + QString::number(d, 16) +": " + QString::number(dataHistogram[d][c])); + histBase->addChild(tempItem); } } } - - parseFrameCache(); - for (int c = 0; c < maxLen; c++) setupGraph(6 + c); - setupGraphs(); + ui->treeDetails->insertTopLevelItem(0, baseNode); } else { } -*/ } void FrameInfoWindow::refreshIDList() diff --git a/frameinfowindow.h b/frameinfowindow.h index bc94557..ca5593a 100644 --- a/frameinfowindow.h +++ b/frameinfowindow.h @@ -2,6 +2,7 @@ #define FRAMEINFOWINDOW_H #include +#include #include "can_structs.h" namespace Ui { @@ -17,7 +18,7 @@ public: ~FrameInfoWindow(); private slots: - void updateDetailsWindow(int frameIdx); + void updateDetailsWindow(QListWidgetItem *); private: Ui::FrameInfoWindow *ui; diff --git a/frameinfowindow.ui b/frameinfowindow.ui index 9d8f066..5451d52 100644 --- a/frameinfowindow.ui +++ b/frameinfowindow.ui @@ -64,5 +64,25 @@ - + + + listFrameID + itemClicked(QListWidgetItem*) + FrameInfoWindow + updateDetailsWindow(QListWidgetItem*) + + + 139 + 258 + + + 396 + 246 + + + + + + updateDetailsWindow(QListWidgetItem*) +