Tweaks in both flow view and graphing view to make them show with a time based X axis (this is selectable in flowview). This allows for much better correlation of graphs from different IDs. Updated version number.

This commit is contained in:
Collin Kidder
2015-06-04 20:08:36 -04:00
parent ded8dbcfa2
commit a64b3a3aa9
6 changed files with 80 additions and 20 deletions
+46 -4
View File
@@ -48,6 +48,13 @@ FlowViewWindow::FlowViewWindow(QVector<CANFrame> *frames, QWidget *parent) :
ui->graphView->legend->setFont(legendFont);
ui->graphView->legend->setSelectedFont(legendSelectedFont);
ui->graphView->legend->setSelectableParts(QCPLegend::spItems); // legend box shall not be selectable, only legend items
//ui->graphView->xAxis->setAutoSubTicks(false);
//ui->graphView->xAxis->setAutoTicks(false);
ui->graphView->xAxis->setAutoTickStep(false);
ui->graphView->xAxis->setAutoSubTicks(false);
ui->graphView->xAxis->setNumberFormat("gb");
ui->graphView->xAxis->setTickStep(5.0);
ui->graphView->xAxis->setSubTickCount(0);
connect(ui->btnBackOne, SIGNAL(clicked(bool)), this, SLOT(btnBackOneClick()));
connect(ui->btnPause, SIGNAL(clicked(bool)), this, SLOT(btnPauseClick()));
@@ -130,6 +137,8 @@ void FlowViewWindow::createGraph(int byteNum)
int tempVal;
float minval=1000000, maxval = -100000;
bool graphByTime = ui->cbTimeGraph->isChecked();
int numEntries = frameCache.count();
QVector<double> x(numEntries), y(numEntries);
@@ -137,7 +146,16 @@ void FlowViewWindow::createGraph(int byteNum)
for (int j = 0; j < numEntries; j++)
{
tempVal = frameCache[j].data[byteNum];
x[j] = j;
if (graphByTime)
{
x[j] = frameCache[j].timestamp;
}
else
{
x[j] = j;
}
y[j] = tempVal;
if (y[j] < minval) minval = y[j];
if (y[j] > maxval) maxval = y[j];
@@ -203,7 +221,8 @@ void FlowViewWindow::changeID(QString newID)
{
createGraph(c);
}
ui->graphView->replot();
updateGraphLocation();
memcpy(currBytes, frameCache.at(currentPosition).data, 8);
memcpy(refBytes, currBytes, 8);
@@ -320,8 +339,7 @@ void FlowViewWindow::updateDataView()
ui->flowView->setReference(refBytes, false);
ui->flowView->updateData(currBytes, true);
ui->graphView->xAxis->setRange(currentPosition - 5, currentPosition + 5);
ui->graphView->replot();
updateGraphLocation();
updateFrameLabel();
@@ -350,4 +368,28 @@ void FlowViewWindow::updatePosition(bool forward)
}
void FlowViewWindow::updateGraphLocation()
{
int start = currentPosition - 5;
if (start < 0) start = 0;
int end = currentPosition + 5;
if (end >= frameCache.count()) end = frameCache.count() - 1;
if (ui->cbTimeGraph->isChecked())
{
ui->graphView->xAxis->setRange(frameCache[start].timestamp, frameCache[end].timestamp);
ui->graphView->xAxis->setTickStep((frameCache[end].timestamp - frameCache[start].timestamp)/ 3.0);
ui->graphView->xAxis->setSubTickCount(0);
ui->graphView->xAxis->setNumberFormat("f");
ui->graphView->xAxis->setNumberPrecision(0);
}
else
{
ui->graphView->xAxis->setRange(start, end);
ui->graphView->xAxis->setTickStep(5.0);
ui->graphView->xAxis->setSubTickCount(0);
ui->graphView->xAxis->setNumberFormat("gb");
}
ui->graphView->replot();
}
+1
View File
@@ -49,6 +49,7 @@ private:
void updateDataView();
void removeAllGraphs();
void createGraph(int);
void updateGraphLocation();
};
#endif // FLOWVIEWWINDOW_H
+9 -2
View File
@@ -52,7 +52,7 @@
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
@@ -204,7 +204,14 @@
</sizepolicy>
</property>
<property name="text">
<string>Capture Traffic</string>
<string>Realtime Capture</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbTimeGraph">
<property name="text">
<string>Graph by timestamp</string>
</property>
</widget>
</item>
+22 -12
View File
@@ -24,6 +24,8 @@ GraphingWindow::GraphingWindow(QVector<CANFrame> *frames, QWidget *parent) :
ui->graphingView->xAxis->setLabel("Time Axis");
ui->graphingView->yAxis->setLabel("Value Axis");
ui->graphingView->xAxis->setNumberFormat("f");
ui->graphingView->xAxis->setNumberPrecision(0);
ui->graphingView->legend->setVisible(true);
QFont legendFont = font();
legendFont.setPointSize(10);
@@ -310,7 +312,8 @@ void GraphingWindow::addNewGraph()
void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
{
int tempVal;
float minval=1000000, maxval = -100000;
float yminval=10000000, ymaxval = -1000000;
float xminval=100000000000, xmaxval = -100000000000;
qDebug() << "New Graph ID: " << params.ID;
qDebug() << "Start byte: " << params.startByte;
@@ -337,10 +340,13 @@ void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
{
tempVal = tempVal - 256;
}
x[j] = j;
x[j] = frameCache[j].timestamp;
y[j] = (tempVal + params.bias) * params.scale;
if (y[j] < minval) minval = y[j];
if (y[j] > maxval) maxval = y[j];
if (y[j] < yminval) yminval = y[j];
if (y[j] > ymaxval) ymaxval = y[j];
if (x[j] < xminval) xminval = x[j];
if (x[j] > xmaxval) xmaxval = x[j];
}
}
else if (params.endByte > params.startByte) //big endian
@@ -367,10 +373,12 @@ void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
}
tempValue = (float)tempValInt;
x[j] = j;
x[j] = frameCache[j].timestamp;
y[j] = (tempValue + params.bias) * params.scale;
if (y[j] < minval) minval = y[j];
if (y[j] > maxval) maxval = y[j];
if (y[j] < yminval) yminval = y[j];
if (y[j] > ymaxval) ymaxval = y[j];
if (x[j] < xminval) xminval = x[j];
if (x[j] > xmaxval) xmaxval = x[j];
}
}
else //little endian
@@ -396,10 +404,12 @@ void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
}
tempValue = (float)tempValInt;
x[j] = j;
x[j] = frameCache[j].timestamp;
y[j] = (tempValue + params.bias) * params.scale;
if (y[j] < minval) minval = y[j];
if (y[j] > maxval) maxval = y[j];
if (y[j] < yminval) yminval = y[j];
if (y[j] > ymaxval) ymaxval = y[j];
if (x[j] < xminval) xminval = x[j];
if (x[j] > xmaxval) xmaxval = x[j];
}
}
ui->graphingView->addGraph();
@@ -415,8 +425,8 @@ void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
graphPen.setWidth(1);
ui->graphingView->graph()->setPen(graphPen);
ui->graphingView->xAxis->setRange(0, numEntries);
ui->graphingView->yAxis->setRange(minval, maxval);
ui->graphingView->xAxis->setRange(xminval, xmaxval);
ui->graphingView->yAxis->setRange(yminval, ymaxval);
ui->graphingView->axisRect()->setupFullAxesBox();
ui->graphingView->replot();
+1 -1
View File
@@ -22,7 +22,7 @@ fuzzy scope - Try to find potential places where a given value might be stored -
Things currently broken or in need of attention:
1. Each screen should mention which file is loaded so that it's easier to keep track of what you're doing.
1. Currently no screen supports dynamic updates when new frames come in.
*/
QString MainWindow::loadedFileName = "";
+1 -1
View File
@@ -14,7 +14,7 @@
#include "dbchandler.h"
#include "dbcmaineditor.h"
#define VERSION 108
#define VERSION 109
namespace Ui {
class MainWindow;