Converted more code to be easier to generalize to larger CAN payloads
for CAN-FD. Improved some code to be faster. Fixed up some compile time warnings.
This commit is contained in:
+22
-14
@@ -123,6 +123,8 @@ void FileComparatorWindow::calculateDetails()
|
||||
QTreeWidgetItem *interestedOnlyBase, *referenceOnlyBase = nullptr, *sharedBase, *bitmapBaseInterested, *bitmapBaseReference = nullptr;
|
||||
QTreeWidgetItem *valuesBase, *detail, *sharedItem, *valuesInterested, *valuesReference = nullptr;
|
||||
uint64_t tmp;
|
||||
unsigned char *data;
|
||||
int dataLen;
|
||||
|
||||
bool uniqueInterested = ui->ckUniqueToInterested->isChecked();
|
||||
|
||||
@@ -152,12 +154,15 @@ void FileComparatorWindow::calculateDetails()
|
||||
for (int x = 0; x < interestedFrames.count(); x++)
|
||||
{
|
||||
CANFrame frame = interestedFrames.at(x);
|
||||
data = reinterpret_cast<unsigned char *>(frame.payload().data());
|
||||
dataLen = frame.payload().count();
|
||||
|
||||
if (interestedIDs.contains(frame.frameId())) //if we saw this ID before then add to the QList in there
|
||||
{
|
||||
for (unsigned int y = 0; y < frame.payload().length(); y++)
|
||||
for (unsigned int y = 0; y < dataLen; y++)
|
||||
{
|
||||
interestedIDs[frame.frameId()].values[y][frame.payload()[y]]++;
|
||||
tmp = frame.payload()[y];
|
||||
interestedIDs[frame.frameId()].values[y][data[y]]++;
|
||||
tmp = data[y];
|
||||
tmp = tmp << (8 * y);
|
||||
interestedIDs[frame.frameId()].bitmap |= tmp;
|
||||
//qDebug() << "bitmap: " << QString::number(interestedIDs[frame.frameId()].bitmap, 16);
|
||||
@@ -167,7 +172,7 @@ void FileComparatorWindow::calculateDetails()
|
||||
{
|
||||
FrameData *newData = new FrameData();
|
||||
newData->ID = frame.frameId();
|
||||
newData->dataLen = frame.payload().length();
|
||||
newData->dataLen = dataLen;
|
||||
//it would be possible to implement a constructor for FrameData
|
||||
//that sets the bitmap and values to zero. That would be cleaner and better.
|
||||
newData->bitmap = 0;
|
||||
@@ -179,10 +184,10 @@ void FileComparatorWindow::calculateDetails()
|
||||
}
|
||||
}
|
||||
//memset(newData->values, 0, 256 * 8);
|
||||
for (unsigned int y = 0; y < frame.payload().length(); y++)
|
||||
for (unsigned int y = 0; y < dataLen; y++)
|
||||
{
|
||||
newData->values[y][frame.payload()[y]] = 1;
|
||||
tmp = frame.payload()[y];
|
||||
newData->values[y][data[y]] = 1;
|
||||
tmp = data[y];
|
||||
tmp = tmp << (8 * y);
|
||||
newData->bitmap |= tmp;
|
||||
//qDebug() << "bitmap: " << QString::number(newData->bitmap, 16);
|
||||
@@ -196,12 +201,15 @@ void FileComparatorWindow::calculateDetails()
|
||||
for (int x = 0; x < referenceFrames.count(); x++)
|
||||
{
|
||||
CANFrame frame = referenceFrames.at(x);
|
||||
data = reinterpret_cast<unsigned char *>(frame.payload().data());
|
||||
dataLen = frame.payload().count();
|
||||
|
||||
if (referenceIDs.contains(frame.frameId())) //if we saw this ID before then add to the QList in there
|
||||
{
|
||||
for (unsigned int y = 0; y < frame.payload().length(); y++)
|
||||
for (unsigned int y = 0; y < dataLen; y++)
|
||||
{
|
||||
referenceIDs[frame.frameId()].values[y][frame.payload()[y]]++;
|
||||
tmp = frame.payload()[y];
|
||||
referenceIDs[frame.frameId()].values[y][data[y]]++;
|
||||
tmp = data[y];
|
||||
tmp = tmp << (8 * y);
|
||||
referenceIDs[frame.frameId()].bitmap |= tmp;
|
||||
//qDebug() << "bitmap: " << QString::number(referenceIDs[frame.frameId()].bitmap, 16);
|
||||
@@ -211,7 +219,7 @@ void FileComparatorWindow::calculateDetails()
|
||||
{
|
||||
FrameData *newData = new FrameData();
|
||||
newData->ID = frame.frameId();
|
||||
newData->dataLen = frame.payload().length();
|
||||
newData->dataLen = dataLen;
|
||||
newData->bitmap = 0;
|
||||
for (int x = 0; x < 8; x++)
|
||||
{
|
||||
@@ -221,10 +229,10 @@ void FileComparatorWindow::calculateDetails()
|
||||
}
|
||||
}
|
||||
//memset(newData->values, 0, 256 * 8);
|
||||
for (unsigned int y = 0; y < frame.payload().length(); y++)
|
||||
for (unsigned int y = 0; y < dataLen; y++)
|
||||
{
|
||||
newData->values[y][frame.payload()[y]] = 1;
|
||||
tmp = frame.payload()[y];
|
||||
newData->values[y][data[y]] = 1;
|
||||
tmp = data[y];
|
||||
tmp = tmp << (8 * y);
|
||||
newData->bitmap |= tmp;
|
||||
//qDebug() << "bitmap: " << QString::number(newData->bitmap, 16);
|
||||
|
||||
+29
-17
@@ -257,7 +257,7 @@ void FlowViewWindow::plottableDoubleClick(QCPAbstractPlottable* plottable, QMous
|
||||
|
||||
void FlowViewWindow::gotCenterTimeID(int32_t ID, double timestamp)
|
||||
{
|
||||
uint64_t t_stamp;
|
||||
int64_t t_stamp;
|
||||
|
||||
t_stamp = timestamp * 1000000l;
|
||||
|
||||
@@ -397,8 +397,10 @@ void FlowViewWindow::updatedFrames(int numFrames)
|
||||
{
|
||||
QVector<double>newX[8];
|
||||
QVector<double>newY[8];
|
||||
unsigned char *data;
|
||||
int dataLen = 0;
|
||||
|
||||
CANFrame thisFrame;
|
||||
const CANFrame *thisFrame;
|
||||
if (numFrames == -1) //all frames deleted. Kill the display
|
||||
{
|
||||
ui->listFrameID->clear();
|
||||
@@ -433,35 +435,37 @@ void FlowViewWindow::updatedFrames(int numFrames)
|
||||
bool needRefresh = false;
|
||||
for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++)
|
||||
{
|
||||
thisFrame = modelFrames->at(i);
|
||||
thisFrame = &modelFrames->at(i);
|
||||
data = reinterpret_cast<unsigned char *>(thisFrame->payload().data());
|
||||
dataLen = thisFrame->payload().length();
|
||||
|
||||
if (!foundID.contains(thisFrame.frameId()))
|
||||
if (!foundID.contains(thisFrame->frameId()))
|
||||
{
|
||||
foundID.append(thisFrame.frameId());
|
||||
FilterUtility::createFilterItem(thisFrame.frameId(), ui->listFrameID);
|
||||
foundID.append(thisFrame->frameId());
|
||||
FilterUtility::createFilterItem(thisFrame->frameId(), ui->listFrameID);
|
||||
}
|
||||
|
||||
if (thisFrame.frameId() == refID)
|
||||
if (thisFrame->frameId() == refID)
|
||||
{
|
||||
frameCache.append(thisFrame);
|
||||
frameCache.append(*thisFrame);
|
||||
|
||||
for (int k = 0; k < 8; k++)
|
||||
for (int k = 0; k < dataLen; k++)
|
||||
{
|
||||
if (ui->cbTimeGraph->isChecked())
|
||||
{
|
||||
if (secondsMode){
|
||||
newX[k].append((double)(thisFrame.timeStamp().microSeconds()) / 1000000.0);
|
||||
newX[k].append((double)(thisFrame->timeStamp().microSeconds()) / 1000000.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
newX[k].append(thisFrame.timeStamp().microSeconds());
|
||||
newX[k].append(thisFrame->timeStamp().microSeconds());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
newX[k].append(x[k].count());
|
||||
}
|
||||
newY[k].append(thisFrame.payload()[k]);
|
||||
newY[k].append(data[k]);
|
||||
needRefresh = true;
|
||||
}
|
||||
}
|
||||
@@ -475,7 +479,7 @@ void FlowViewWindow::updatedFrames(int numFrames)
|
||||
}
|
||||
if (needRefresh)
|
||||
{
|
||||
for (int k = 0; k < 8; k++)
|
||||
for (int k = 0; k < dataLen; k++)
|
||||
{
|
||||
if (graphRef[k] && graphRef[k]->data())
|
||||
graphRef[k]->addData(newX[k], newY[k]);
|
||||
@@ -498,6 +502,9 @@ void FlowViewWindow::createGraph(int byteNum)
|
||||
{
|
||||
int tempVal;
|
||||
float minval=1000000, maxval = -100000;
|
||||
unsigned char *data;
|
||||
int dataLen = 0;
|
||||
const CANFrame *frame;
|
||||
|
||||
qDebug() << "Create Graph " << byteNum;
|
||||
|
||||
@@ -512,16 +519,20 @@ void FlowViewWindow::createGraph(int byteNum)
|
||||
|
||||
for (int j = 0; j < numEntries; j++)
|
||||
{
|
||||
tempVal = frameCache[j].payload()[byteNum];
|
||||
frame = &frameCache[j];
|
||||
data = reinterpret_cast<unsigned char *>(frame->payload().data());
|
||||
dataLen = frame->payload().length();
|
||||
|
||||
tempVal = data[byteNum];
|
||||
|
||||
if (graphByTime)
|
||||
{
|
||||
if (secondsMode){
|
||||
x[byteNum][j] = (double)(frameCache[j].timeStamp().microSeconds()) / 1000000.0;
|
||||
x[byteNum][j] = (double)(frame->timeStamp().microSeconds()) / 1000000.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
x[byteNum][j] = frameCache[j].timeStamp().microSeconds();
|
||||
x[byteNum][j] = frame->timeStamp().microSeconds();
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -758,7 +769,8 @@ void FlowViewWindow::updatePosition(bool forward)
|
||||
uint8_t cngByte;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
cngByte = currBytes[i] ^ frameCache.at(currentPosition).payload()[i];
|
||||
unsigned char thisByte = static_cast<unsigned char>(frameCache.at(currentPosition).payload().data()[i]);
|
||||
cngByte = currBytes[i] ^ thisByte;
|
||||
changedBits |= (uint64_t)cngByte << (8ull * i);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ signals:
|
||||
|
||||
private:
|
||||
Ui::FlowViewWindow *ui;
|
||||
QList<int> foundID;
|
||||
QList<quint32> foundID;
|
||||
QList<CANFrame> frameCache;
|
||||
const QVector<CANFrame> *modelFrames;
|
||||
unsigned char refBytes[8];
|
||||
|
||||
+18
-9
@@ -138,7 +138,7 @@ FrameInfoWindow::~FrameInfoWindow()
|
||||
|
||||
void FrameInfoWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
Q_UNUSED(event)
|
||||
writeSettings();
|
||||
}
|
||||
|
||||
@@ -260,10 +260,10 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
||||
uint8_t referenceBits[8];
|
||||
QTreeWidgetItem *baseNode, *dataBase, *histBase, *tempItem;
|
||||
|
||||
targettedID = static_cast<int>(Utility::ParseStringToNum(newID));
|
||||
|
||||
if (modelFrames->count() == 0) return;
|
||||
|
||||
targettedID = static_cast<int>(Utility::ParseStringToNum(newID));
|
||||
|
||||
qDebug() << "Started update details window with id " << targettedID;
|
||||
|
||||
avgInterval = 0;
|
||||
@@ -278,6 +278,9 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
||||
if (thisFrame.frameId() == static_cast<uint32_t>(targettedID)) frameCache.append(thisFrame);
|
||||
}
|
||||
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(frameCache.at(0).payload().data());
|
||||
int dataLen = frameCache.at(0).payload().length();
|
||||
|
||||
ui->treeDetails->clear();
|
||||
|
||||
if (frameCache.count() == 0) return;
|
||||
@@ -364,10 +367,13 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
||||
}
|
||||
for (int j = 0; j < 64; j++) bitfieldHistogram[j] = 0;
|
||||
|
||||
for (int c = 0; c < 8; c++)
|
||||
data = reinterpret_cast<unsigned char *>(frameCache.at(0).payload().data());
|
||||
dataLen = frameCache.at(0).payload().length();
|
||||
|
||||
for (int c = 0; c < dataLen; c++)
|
||||
{
|
||||
changedBits[c] = 0;
|
||||
referenceBits[c] = frameCache.at(0).payload()[c];
|
||||
referenceBits[c] = data[c];
|
||||
//qDebug() << referenceBits[c];
|
||||
}
|
||||
|
||||
@@ -377,10 +383,13 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
||||
//then find all data points
|
||||
for (int j = 0; j < frameCache.count(); j++)
|
||||
{
|
||||
data = reinterpret_cast<unsigned char *>(frameCache.at(j).payload().data());
|
||||
dataLen = frameCache.at(j).payload().length();
|
||||
|
||||
byteGraphX.append(j);
|
||||
for (uint32_t bytcnt = 0; bytcnt < frameCache[j].payload().length(); bytcnt++)
|
||||
for (uint32_t bytcnt = 0; bytcnt < dataLen; bytcnt++)
|
||||
{
|
||||
byteGraphY[bytcnt].append(frameCache[j].payload()[bytcnt]);
|
||||
byteGraphY[bytcnt].append(data[bytcnt]);
|
||||
}
|
||||
|
||||
if (j != 0)
|
||||
@@ -398,12 +407,12 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
||||
if (thisInterval < minInterval) minInterval = thisInterval;
|
||||
avgInterval += thisInterval;
|
||||
}
|
||||
thisLen = frameCache.at(j).payload().length();
|
||||
thisLen = dataLen;
|
||||
if (thisLen > maxLen) maxLen = thisLen;
|
||||
if (thisLen < minLen) minLen = thisLen;
|
||||
for (int c = 0; c < thisLen; c++)
|
||||
{
|
||||
unsigned char dat = frameCache.at(j).payload()[c];
|
||||
unsigned char dat = 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
|
||||
|
||||
@@ -81,7 +81,7 @@ void ISOTP_InterpreterWindow::showEvent(QShowEvent* event)
|
||||
|
||||
void ISOTP_InterpreterWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
Q_UNUSED(event)
|
||||
removeEventFilter(this);
|
||||
writeSettings();
|
||||
}
|
||||
@@ -194,7 +194,7 @@ void ISOTP_InterpreterWindow::updatedFrames(int numFrames)
|
||||
void ISOTP_InterpreterWindow::headerClicked(int logicalIndex)
|
||||
{
|
||||
ui->tableIsoFrames->setSortingEnabled(false);
|
||||
ui->tableIsoFrames->sortByColumn(logicalIndex);
|
||||
ui->tableIsoFrames->sortByColumn(logicalIndex, Qt::SortOrder::AscendingOrder);
|
||||
}
|
||||
|
||||
void ISOTP_InterpreterWindow::showDetailView()
|
||||
@@ -208,17 +208,21 @@ void ISOTP_InterpreterWindow::showDetailView()
|
||||
|
||||
msg = &messages[rowNum];
|
||||
|
||||
if (msg->len != msg->data.length())
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(msg->payload().data());
|
||||
int dataLen = msg->payload().length();
|
||||
|
||||
if (msg->reportedLength != dataLen)
|
||||
{
|
||||
buildString.append("Message didn't have the correct number of bytes.\rExpected "
|
||||
+ QString::number(msg->len) + " got "
|
||||
+ QString::number(msg->data.length()) + "\r\r");
|
||||
+ QString::number(msg->reportedLength) + " got "
|
||||
+ QString::number(dataLen) + "\r\r");
|
||||
}
|
||||
|
||||
buildString.append(tr("Raw Payload: "));
|
||||
for (int i = 0; i < messages[rowNum].data.count(); i++)
|
||||
|
||||
for (int i = 0; i < dataLen; i++)
|
||||
{
|
||||
buildString.append(Utility::formatNumber((char)messages[rowNum].data[i]));
|
||||
buildString.append(Utility::formatNumber(data[i]));
|
||||
buildString.append(" ");
|
||||
}
|
||||
buildString.append("\r\r");
|
||||
@@ -262,17 +266,20 @@ void ISOTP_InterpreterWindow::newISOMessage(ISOTP_MESSAGE msg)
|
||||
int rowNum;
|
||||
QString tempString;
|
||||
|
||||
if ((msg.len != msg.data.count()) && !ui->cbShowIncomplete->isChecked()) return;
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(msg.payload().data());
|
||||
int dataLen = msg.payload().length();
|
||||
|
||||
if (idFilters.find(msg.ID) == idFilters.end())
|
||||
if ((msg.reportedLength != dataLen) && !ui->cbShowIncomplete->isChecked()) return;
|
||||
|
||||
if (idFilters.find(msg.frameId()) == idFilters.end())
|
||||
{
|
||||
idFilters.insert(msg.ID, true);
|
||||
idFilters.insert(msg.frameId(), true);
|
||||
|
||||
QListWidgetItem* listItem = new QListWidgetItem(Utility::formatCANID(msg.ID, msg.extended), ui->listFilter);
|
||||
QListWidgetItem* listItem = new QListWidgetItem(Utility::formatCANID(msg.frameId(), msg.hasExtendedFrameFormat()), ui->listFilter);
|
||||
listItem->setFlags(listItem->flags() | Qt::ItemIsUserCheckable); // set checkable flag
|
||||
listItem->setCheckState(Qt::Checked);
|
||||
}
|
||||
if (!idFilters[msg.ID]) return;
|
||||
if (!idFilters[msg.frameId()]) return;
|
||||
messages.append(msg);
|
||||
|
||||
rowNum = ui->tableIsoFrames->rowCount();
|
||||
@@ -280,22 +287,21 @@ void ISOTP_InterpreterWindow::newISOMessage(ISOTP_MESSAGE msg)
|
||||
ui->tableIsoFrames->insertRow(rowNum);
|
||||
|
||||
QTableWidgetItem *item = new QTableWidgetItem;
|
||||
item->setData(Qt::EditRole, Utility::formatTimestamp(msg.timestamp));
|
||||
item->setData(Qt::EditRole, Utility::formatTimestamp(msg.timeStamp().microSeconds()));
|
||||
//ui->tableIsoFrames->setItem(rowNum, 0, (double)msg.timestamp, Utility::formatTimestamp(msg.timestamp)));
|
||||
ui->tableIsoFrames->setItem(rowNum, 0, item);
|
||||
ui->tableIsoFrames->setItem(rowNum, 1, new QTableWidgetItem(QString::number(msg.ID, 16)));
|
||||
ui->tableIsoFrames->setItem(rowNum, 1, new QTableWidgetItem(QString::number(msg.frameId(), 16)));
|
||||
ui->tableIsoFrames->setItem(rowNum, 2, new QTableWidgetItem(QString::number(msg.bus)));
|
||||
if (msg.isReceived) ui->tableIsoFrames->setItem(rowNum, 3, new QTableWidgetItem("Rx"));
|
||||
else ui->tableIsoFrames->setItem(rowNum, 3, new QTableWidgetItem("Tx"));
|
||||
ui->tableIsoFrames->setItem(rowNum, 4, new QTableWidgetItem(QString::number(msg.len)));
|
||||
ui->tableIsoFrames->setItem(rowNum, 4, new QTableWidgetItem(QString::number(msg.payload().length())));
|
||||
|
||||
for (int i = 0; i < msg.data.count(); i++)
|
||||
for (int i = 0; i < dataLen; i++)
|
||||
{
|
||||
tempString.append(Utility::formatNumber((char)msg.data[i]));
|
||||
tempString.append(Utility::formatNumber(data[i]));
|
||||
tempString.append(" ");
|
||||
}
|
||||
ui->tableIsoFrames->setItem(rowNum, 5, new QTableWidgetItem(tempString));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,18 +6,23 @@
|
||||
SnifferItem::SnifferItem(const CANFrame& pFrame, quint32 seq):
|
||||
mID(pFrame.frameId())
|
||||
{
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mNotch[i] =0;
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(pFrame.payload().data());
|
||||
int dataLen = pFrame.payload().length();
|
||||
|
||||
for (int i = 0; i < 0; i++) {
|
||||
mNotch[i] = 0;
|
||||
mMarker.data[i] = 0;
|
||||
mMarker.dataTimestamp[i] = 0;
|
||||
mCurrent.data[i] = pFrame.payload()[i];
|
||||
if (i < dataLen) mCurrent.data[i] = data[i];
|
||||
else mCurrent.data[i] = 0;
|
||||
mCurrent.dataTimestamp[i] = seq;
|
||||
}
|
||||
mLastMarker = mMarker;
|
||||
mCurrent.len = pFrame.payload().length();
|
||||
mCurrent.len = dataLen;
|
||||
|
||||
/* that's dirty */
|
||||
update(pFrame, seq, false);
|
||||
update(pFrame, seq, false);
|
||||
update(pFrame, seq, false); //anyone know why we're doing this twice?!
|
||||
}
|
||||
|
||||
|
||||
@@ -112,20 +117,23 @@ void SnifferItem::update(const CANFrame& pFrame, quint32 timeSeq, bool mute)
|
||||
mLastTime = mCurrentTime;
|
||||
mCurrSeqVal = timeSeq;
|
||||
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(pFrame.payload().data());
|
||||
int dataLen = pFrame.payload().length();
|
||||
|
||||
/* copy new value */
|
||||
for (int i = 0; i < 8; i++)
|
||||
for (int i = 0; i < dataLen; i++)
|
||||
{
|
||||
maskedData = pFrame.payload()[i];
|
||||
maskedData = data[i];
|
||||
if (mute) maskedData &= ~mNotch[i];
|
||||
maskedCurr = mCurrent.data[i];
|
||||
if (mute) maskedCurr &= ~mNotch[i];
|
||||
if (maskedCurr != maskedData)
|
||||
{
|
||||
mCurrent.data[i] = pFrame.payload()[i];
|
||||
mCurrent.data[i] = data[i];
|
||||
mCurrent.dataTimestamp[i] = timeSeq;
|
||||
}
|
||||
}
|
||||
mCurrent.len = pFrame.payload().length();
|
||||
mCurrent.len = dataLen;
|
||||
mCurrentTime = pFrame.timeStamp().microSeconds();
|
||||
|
||||
/* update marker */
|
||||
|
||||
+13
-11
@@ -237,8 +237,8 @@ void UDSScanWindow::scanUDS()
|
||||
|
||||
for (id = startID; id <= endID; id++)
|
||||
{
|
||||
test.ID = id;
|
||||
test.data.clear();
|
||||
test.setFrameId( id );
|
||||
test.payload().clear();
|
||||
|
||||
if (ui->ckTester->isChecked())
|
||||
{
|
||||
@@ -354,17 +354,19 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
|
||||
int offset = ui->spinReplyOffset->value();
|
||||
UDS_MESSAGE sentFrame;
|
||||
bool gotReply = false;
|
||||
unsigned char *data = reinterpret_cast<unsigned char *>(msg.payload().data());
|
||||
int dataLen = msg.payload().length();
|
||||
|
||||
int numSending = sendingFrames.length();
|
||||
if (numSending == 0) return;
|
||||
if (currIdx >= numSending) return;
|
||||
sentFrame = sendingFrames[currIdx];
|
||||
|
||||
id = msg.ID;
|
||||
id = msg.frameId();
|
||||
|
||||
qDebug() << "UDS message ID " << QString::number(msg.ID,16) << " service: " << QString::number(msg.service, 16) << " subfunc: " << QString::number(msg.subFunc, 16);
|
||||
qDebug() << "UDS message ID " << QString::number(msg.frameId(),16) << " service: " << QString::number(msg.service, 16) << " subfunc: " << QString::number(msg.subFunc, 16);
|
||||
|
||||
if ((id == (uint32_t)(sentFrame.ID + offset)) || ui->cbAllowAdaptiveOffset->isChecked())
|
||||
if ((id == (uint32_t)(sentFrame.frameId() + offset)) || ui->cbAllowAdaptiveOffset->isChecked())
|
||||
{
|
||||
serviceShortName = udsHandler->getServiceShortDesc(sentFrame.service);
|
||||
if (serviceShortName.length() < 3) serviceShortName = QString::number(sentFrame.service, 16);
|
||||
@@ -374,10 +376,10 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
|
||||
|
||||
QTreeWidgetItem *nodePositive = new QTreeWidgetItem();
|
||||
QString reply = "POSITIVE ";
|
||||
for (int i = 0; i < msg.data.length(); i++)
|
||||
for (int i = 0; i < dataLen; i++)
|
||||
{
|
||||
reply.append(" ");
|
||||
reply.append(Utility::formatHexNum(msg.data[i]));
|
||||
reply.append(Utility::formatHexNum(data[i]));
|
||||
}
|
||||
nodePositive->setText(0, reply);
|
||||
nodePositive->setForeground(0, QBrush(Qt::darkGreen));
|
||||
@@ -387,12 +389,12 @@ void UDSScanWindow::gotUDSReply(UDS_MESSAGE msg)
|
||||
}
|
||||
else if ( msg.isErrorReply && (msg.service == sendingFrames[currIdx].service) )
|
||||
{
|
||||
if (msg.data.length())
|
||||
if (dataLen)
|
||||
{
|
||||
setupNodes(id);
|
||||
QTreeWidgetItem *nodeNegative = new QTreeWidgetItem();
|
||||
qDebug() << ui->spinNumBytes->value();
|
||||
nodeNegative->setText(0, "NEGATIVE - " + udsHandler->getNegativeResponseShort(msg.data[0]));
|
||||
nodeNegative->setText(0, "NEGATIVE - " + udsHandler->getNegativeResponseShort(data[0]));
|
||||
nodeNegative->setForeground(0, QBrush(Qt::darkRed));
|
||||
nodeSubFunc->addChild(nodeNegative);
|
||||
nodeSubFunc->setForeground(0, QBrush(Qt::darkRed));
|
||||
@@ -413,10 +415,10 @@ void UDSScanWindow::setupNodes(uint32_t replyID)
|
||||
if (serviceShortName.length() < 3) serviceShortName = QString::number(sendingFrames[currIdx].service, 16);
|
||||
QTreeWidgetItem *replyNode = nullptr;
|
||||
|
||||
if (!nodeID || nodeID->text(0) != Utility::formatHexNum(sendingFrames[currIdx].ID))
|
||||
if (!nodeID || nodeID->text(0) != Utility::formatHexNum(sendingFrames[currIdx].frameId()))
|
||||
{
|
||||
nodeID = new QTreeWidgetItem();
|
||||
nodeID->setText(0, Utility::formatHexNum(sendingFrames[currIdx].ID));
|
||||
nodeID->setText(0, Utility::formatHexNum(sendingFrames[currIdx].frameId()));
|
||||
ui->treeResults->addTopLevelItem(nodeID);
|
||||
nodeService = nullptr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user