Got the frame details window working. This implements the funcationality once found on the graphing window in GVRET-PC. Now it is here in a dialog box.
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 3.4.0, 2015-04-28T21:42:56. -->
|
||||
<!-- Written by QtCreator 3.4.0, 2015-05-02T22:09:54. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
||||
+81
-57
@@ -1,5 +1,6 @@
|
||||
#include "frameinfowindow.h"
|
||||
#include "ui_frameinfowindow.h"
|
||||
#include <QtDebug>
|
||||
|
||||
FrameInfoWindow::FrameInfoWindow(QList<CANFrame> *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()
|
||||
|
||||
+2
-1
@@ -2,6 +2,7 @@
|
||||
#define FRAMEINFOWINDOW_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QListWidget>
|
||||
#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;
|
||||
|
||||
+21
-1
@@ -64,5 +64,25 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>listFrameID</sender>
|
||||
<signal>itemClicked(QListWidgetItem*)</signal>
|
||||
<receiver>FrameInfoWindow</receiver>
|
||||
<slot>updateDetailsWindow(QListWidgetItem*)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>139</x>
|
||||
<y>258</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>396</x>
|
||||
<y>246</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<slots>
|
||||
<slot>updateDetailsWindow(QListWidgetItem*)</slot>
|
||||
</slots>
|
||||
</ui>
|
||||
|
||||
Reference in New Issue
Block a user