Finished switching over everything to the new can format (I hope). It

seems to function now but much more testing is needed.
This commit is contained in:
Collin Kidder
2019-12-13 21:06:48 -05:00
parent 0baffa300f
commit ef24036d1c
21 changed files with 552 additions and 509 deletions
+15 -14
View File
@@ -100,19 +100,20 @@ bool BLFHandler::loadBLF(QString filename, QVector<CANFrame>* frames)
memcpy(&canObject, fileData.constData(), sizeof(BLF_CAN_OBJ)); memcpy(&canObject, fileData.constData(), sizeof(BLF_CAN_OBJ));
CANFrame frame; CANFrame frame;
frame.bus = canObject.channel; frame.bus = canObject.channel;
frame.extended = (canObject.id & 0x80000000ull)?true:false; frame.setExtendedFrameFormat((canObject.id & 0x80000000ull)?true:false);
frame.ID = canObject.id & 0x1FFFFFFFull; frame.setFrameId(canObject.id & 0x1FFFFFFFull);
frame.isReceived = true; frame.isReceived = true;
frame.len = canObject.dlc; QByteArray bytes(canObject.dlc, 0);
if (canObject.flags & BLF_REMOTE_FLAG) { if (canObject.flags & BLF_REMOTE_FLAG) {
frame.remote = true; frame.setFrameType(QCanBusFrame::RemoteRequestFrame);
} else { } else {
frame.remote = false; frame.setFrameType(QCanBusFrame::DataFrame);
for (int i = 0; i < 8; i++) frame.data[i] = canObject.data[i]; for (int i = 0; i < 8; i++) bytes[i] = canObject.data[i];
} }
frame.setPayload(bytes);
//Should we divide by a thousand or a million? Unsure here. It appears some logs are stamped in microseconds and some in milliseconds? //Should we divide by a thousand or a million? Unsure here. It appears some logs are stamped in microseconds and some in milliseconds?
frame.timestamp = obj.header.v1Obj.uncompSize / 1000.0; //uncompsize field also used for timestamp oddly enough frame.setTimeStamp(QCanBusFrame::TimeStamp(0, obj.header.v1Obj.uncompSize / 1000.0)); //uncompsize field also used for timestamp oddly enough
frames->append(frame); frames->append(frame);
} }
else if (obj.header.base.objType == BLF_CAN_MSG2) else if (obj.header.base.objType == BLF_CAN_MSG2)
@@ -120,19 +121,19 @@ bool BLFHandler::loadBLF(QString filename, QVector<CANFrame>* frames)
memcpy(&canObject2, fileData.constData(), sizeof(BLF_CAN_OBJ2)); memcpy(&canObject2, fileData.constData(), sizeof(BLF_CAN_OBJ2));
CANFrame frame; CANFrame frame;
frame.bus = canObject2.channel; frame.bus = canObject2.channel;
frame.extended = (canObject2.id & 0x80000000ull)?true:false; frame.setExtendedFrameFormat((canObject2.id & 0x80000000ull)?true:false);
frame.ID = canObject2.id & 0x1FFFFFFFull; frame.setFrameId(canObject2.id & 0x1FFFFFFFull);
frame.isReceived = true; frame.isReceived = true;
frame.len = canObject2.dlc; QByteArray bytes(canObject2.dlc, 0);
if (canObject2.flags & BLF_REMOTE_FLAG) { if (canObject2.flags & BLF_REMOTE_FLAG) {
frame.remote = true; frame.setFrameType(QCanBusFrame::RemoteRequestFrame);
} else { } else {
frame.remote = false; frame.setFrameType(QCanBusFrame::DataFrame);
for (int i = 0; i < 8; i++) frame.data[i] = canObject2.data[i]; for (int i = 0; i < 8; i++) bytes[i] = canObject2.data[i];
} }
//Should we divide by a thousand or a million? Unsure here. It appears some logs are stamped in microseconds and some in milliseconds? //Should we divide by a thousand or a million? Unsure here. It appears some logs are stamped in microseconds and some in milliseconds?
frame.timestamp = obj.header.v1Obj.uncompSize / 1000.0; //uncompsize field also used for timestamp oddly enough frame.setTimeStamp(QCanBusFrame::TimeStamp(0, obj.header.v1Obj.uncompSize / 1000.0)); //uncompsize field also used for timestamp oddly enough
frames->append(frame); frames->append(frame);
} }
else else
+43 -43
View File
@@ -133,23 +133,23 @@ void CANFrameModel::normalizeTiming()
{ {
mutex.lock(); mutex.lock();
if (frames.count() == 0) return; if (frames.count() == 0) return;
timeOffset = frames[0].timestamp; timeOffset = frames[0].timeStamp().microSeconds();
//find the absolute lowest timestamp in the whole time. Needed because maybe timestamp was reset in the middle. //find the absolute lowest timestamp in the whole time. Needed because maybe timestamp was reset in the middle.
for (int j = 0; j < frames.count(); j++) for (int j = 0; j < frames.count(); j++)
{ {
if (frames[j].timestamp < timeOffset) timeOffset = frames[j].timestamp; if (frames[j].timeStamp().microSeconds() < timeOffset) timeOffset = frames[j].timeStamp().microSeconds();
} }
for (int i = 0; i < frames.count(); i++) for (int i = 0; i < frames.count(); i++)
{ {
frames[i].timestamp -= timeOffset; frames[i].setTimeStamp(QCanBusFrame::TimeStamp(0, frames[i].timeStamp().microSeconds() - timeOffset));
} }
this->beginResetModel(); this->beginResetModel();
for (int i = 0; i < filteredFrames.count(); i++) for (int i = 0; i < filteredFrames.count(); i++)
{ {
filteredFrames[i].timestamp -= timeOffset; filteredFrames[i].setTimeStamp(QCanBusFrame::TimeStamp(0, filteredFrames[i].timeStamp().microSeconds() - timeOffset));
} }
this->endResetModel(); this->endResetModel();
@@ -195,15 +195,15 @@ uint64_t CANFrameModel::getCANFrameVal(int row, Column col)
{ {
case Column::TimeStamp: case Column::TimeStamp:
if (overwriteDups) return frame.timedelta; if (overwriteDups) return frame.timedelta;
return frame.timestamp; return frame.timeStamp().microSeconds();
case Column::FrameId: case Column::FrameId:
return frame.ID; return frame.frameId();
case Column::Extended: case Column::Extended:
if (frame.extended) return 1; if (frame.hasExtendedFrameFormat()) return 1;
return 0; return 0;
case Column::Remote: case Column::Remote:
if (overwriteDups) return frame.frameCount; if (overwriteDups) return frame.frameCount;
if (frame.remote) return 1; if (frame.frameType() == QCanBusFrame::RemoteRequestFrame) return 1;
return 0; return 0;
case Column::Direction: case Column::Direction:
if (frame.isReceived) return 1; if (frame.isReceived) return 1;
@@ -211,10 +211,10 @@ uint64_t CANFrameModel::getCANFrameVal(int row, Column col)
case Column::Bus: case Column::Bus:
return static_cast<uint64_t>(frame.bus); return static_cast<uint64_t>(frame.bus);
case Column::Length: case Column::Length:
return static_cast<uint64_t>(frame.len); return static_cast<uint64_t>(frame.payload().length());
case Column::ASCII: //sort both the same for now case Column::ASCII: //sort both the same for now
case Column::Data: case Column::Data:
for (int i = 0; i < frame.len; i++) temp += (static_cast<uint64_t>(frame.data[i]) << (56 - (8 * i))); for (int i = 0; i < frame.payload().length(); i++) temp += (static_cast<uint64_t>(frame.payload()[i]) << (56 - (8 * i)));
//qDebug() << temp; //qDebug() << temp;
return temp; return temp;
case Column::NUM_COLUMN: case Column::NUM_COLUMN:
@@ -311,7 +311,7 @@ void CANFrameModel::recalcOverwrite()
uint64_t idAugmented; //id in lower 29 bits, bus number shifted up 29 bits uint64_t idAugmented; //id in lower 29 bits, bus number shifted up 29 bits
foreach(CANFrame frame, frames) foreach(CANFrame frame, frames)
{ {
idAugmented = frame.ID; idAugmented = frame.frameId();
idAugmented = idAugmented + (frame.bus << 29ull); idAugmented = idAugmented + (frame.bus << 29ull);
if (!overWriteFrames.contains(idAugmented)) if (!overWriteFrames.contains(idAugmented))
{ {
@@ -321,7 +321,7 @@ void CANFrameModel::recalcOverwrite()
} }
else else
{ {
frame.timedelta = frame.timestamp - overWriteFrames[idAugmented].timestamp; frame.timedelta = frame.timeStamp().microSeconds() - overWriteFrames[idAugmented].timeStamp().microSeconds();
frame.frameCount = overWriteFrames[idAugmented].frameCount + 1; frame.frameCount = overWriteFrames[idAugmented].frameCount + 1;
overWriteFrames[idAugmented] = frame; overWriteFrames[idAugmented] = frame;
} }
@@ -335,7 +335,7 @@ void CANFrameModel::recalcOverwrite()
for (int i = 0; i < frames.count(); i++) for (int i = 0; i < frames.count(); i++)
{ {
if (filters[frames[i].ID]) if (filters[frames[i].frameId()])
{ {
filteredFrames.append(frames[i]); filteredFrames.append(frames[i]);
} }
@@ -404,17 +404,17 @@ QVariant CANFrameModel::data(const QModelIndex &index, int role) const
if (timeSeconds) return QString::number(thisFrame.timedelta / 1000000.0, 'f', 5); if (timeSeconds) return QString::number(thisFrame.timedelta / 1000000.0, 'f', 5);
return QString::number(thisFrame.timedelta); return QString::number(thisFrame.timedelta);
} }
else ts = Utility::formatTimestamp(thisFrame.timestamp); else ts = Utility::formatTimestamp(thisFrame.timeStamp().microSeconds());
if (ts.type() == QVariant::Double) return QString::number(ts.toDouble(), 'f', 5); //never scientific notation, 5 decimal places if (ts.type() == QVariant::Double) return QString::number(ts.toDouble(), 'f', 5); //never scientific notation, 5 decimal places
if (ts.type() == QVariant::LongLong) return QString::number(ts.toLongLong()); //never scientific notion, all digits shown if (ts.type() == QVariant::LongLong) return QString::number(ts.toLongLong()); //never scientific notion, all digits shown
if (ts.type() == QVariant::DateTime) return ts.toDateTime().toString(timeFormat); //custom set format for dates and times if (ts.type() == QVariant::DateTime) return ts.toDateTime().toString(timeFormat); //custom set format for dates and times
return Utility::formatTimestamp(thisFrame.timestamp); return Utility::formatTimestamp(thisFrame.timeStamp().microSeconds());
case Column::FrameId: case Column::FrameId:
return Utility::formatCANID(thisFrame.ID, thisFrame.extended); return Utility::formatCANID(thisFrame.frameId(), thisFrame.hasExtendedFrameFormat());
case Column::Extended: case Column::Extended:
return QString::number(thisFrame.extended); return QString::number(thisFrame.hasExtendedFrameFormat());
case Column::Remote: case Column::Remote:
if (!overwriteDups) return QString::number(thisFrame.remote); if (!overwriteDups) return QString::number(thisFrame.frameType() == QCanBusFrame::RemoteRequestFrame);
return QString::number(thisFrame.frameCount); return QString::number(thisFrame.frameCount);
case Column::Direction: case Column::Direction:
if (thisFrame.isReceived) return QString(tr("Rx")); if (thisFrame.isReceived) return QString(tr("Rx"));
@@ -422,21 +422,21 @@ QVariant CANFrameModel::data(const QModelIndex &index, int role) const
case Column::Bus: case Column::Bus:
return QString::number(thisFrame.bus); return QString::number(thisFrame.bus);
case Column::Length: case Column::Length:
return QString::number(thisFrame.len); return QString::number(thisFrame.payload().length());
case Column::ASCII: case Column::ASCII:
if (thisFrame.ID >= 0x7FFFFFF0ull) if (thisFrame.frameId() >= 0x7FFFFFF0ull)
{ {
tempString.append("MARK "); tempString.append("MARK ");
tempString.append(QString::number(thisFrame.ID & 0x7)); tempString.append(QString::number(thisFrame.frameId() & 0x7));
return tempString; return tempString;
} }
dLen = thisFrame.len; dLen = thisFrame.payload().length();
if (!thisFrame.remote) { if (!thisFrame.frameType() != QCanBusFrame::RemoteRequestFrame) {
if (dLen < 0) dLen = 0; if (dLen < 0) dLen = 0;
if (dLen > 8) dLen = 8; if (dLen > 8) dLen = 8;
for (int i = 0; i < dLen; i++) for (int i = 0; i < dLen; i++)
{ {
quint8 byt = thisFrame.data[i]; quint8 byt = thisFrame.payload()[i];
//0x20 through 0x7E are printable characters. Outside of that range they aren't. So use dots instead //0x20 through 0x7E are printable characters. Outside of that range they aren't. So use dots instead
if (byt < 0x20) byt = 0x2E; //dot character if (byt < 0x20) byt = 0x2E; //dot character
if (byt > 0x7E) byt = 0x2E; if (byt > 0x7E) byt = 0x2E;
@@ -445,17 +445,17 @@ QVariant CANFrameModel::data(const QModelIndex &index, int role) const
} }
return tempString; return tempString;
case Column::Data: case Column::Data:
dLen = thisFrame.len; dLen = thisFrame.payload().length();
if (dLen < 0) dLen = 0; if (dLen < 0) dLen = 0;
if (dLen > 8) dLen = 8; if (dLen > 8) dLen = 8;
//if (useHexMode) tempString.append("0x "); //if (useHexMode) tempString.append("0x ");
if (thisFrame.remote) { if (thisFrame.frameType() == QCanBusFrame::RemoteRequestFrame) {
return tempString; return tempString;
} }
for (int i = 0; i < dLen; i++) for (int i = 0; i < dLen; i++)
{ {
if (useHexMode) tempString.append( QString::number(thisFrame.data[i], 16).toUpper().rightJustified(2, '0')); if (useHexMode) tempString.append( QString::number((unsigned char)thisFrame.payload()[i], 16).toUpper().rightJustified(2, '0'));
else tempString.append(QString::number(thisFrame.data[i], 10)); else tempString.append(QString::number(thisFrame.payload()[i], 10));
tempString.append(" "); tempString.append(" ");
} }
//now, if we're supposed to interpret the data and the DBC handler is loaded then use it //now, if we're supposed to interpret the data and the DBC handler is loaded then use it
@@ -552,25 +552,25 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
mutex.lock(); mutex.lock();
CANFrame tempFrame; CANFrame tempFrame;
tempFrame = frame; tempFrame = frame;
tempFrame.timestamp -= timeOffset; tempFrame.setTimeStamp(QCanBusFrame::TimeStamp(0, tempFrame.timeStamp().microSeconds() - timeOffset));
lastUpdateNumFrames++; lastUpdateNumFrames++;
//if this ID isn't found in the filters list then add it and show it by default //if this ID isn't found in the filters list then add it and show it by default
if (!filters.contains(tempFrame.ID)) if (!filters.contains(tempFrame.frameId()))
{ {
// if there are any filters already configured, leave the new filter disabled // if there are any filters already configured, leave the new filter disabled
if (any_filters_are_configured()) if (any_filters_are_configured())
filters.insert(tempFrame.ID, false); filters.insert(tempFrame.frameId(), false);
else else
filters.insert(tempFrame.ID, true); filters.insert(tempFrame.frameId(), true);
needFilterRefresh = true; needFilterRefresh = true;
} }
if (!overwriteDups) if (!overwriteDups)
{ {
frames.append(tempFrame); frames.append(tempFrame);
if (filters[tempFrame.ID]) if (filters[tempFrame.frameId()])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
tempFrame.frameCount = 1; tempFrame.frameCount = 1;
@@ -583,10 +583,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
bool found = false; bool found = false;
for (int i = 0; i < frames.count(); i++) for (int i = 0; i < frames.count(); i++)
{ {
if ( (frames[i].ID == tempFrame.ID) && (frames[i].bus == tempFrame.bus) ) if ( (frames[i].frameId() == tempFrame.frameId()) && (frames[i].bus == tempFrame.bus) )
{ {
tempFrame.frameCount = frames[i].frameCount + 1; tempFrame.frameCount = frames[i].frameCount + 1;
tempFrame.timedelta = tempFrame.timestamp - frames[i].timestamp; tempFrame.timedelta = tempFrame.timeStamp().microSeconds() - frames[i].timeStamp().microSeconds();
frames.replace(i, tempFrame); frames.replace(i, tempFrame);
found = true; found = true;
break; break;
@@ -595,7 +595,7 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
if (!found) if (!found)
{ {
frames.append(tempFrame); frames.append(tempFrame);
if (filters[tempFrame.ID]) if (filters[tempFrame.frameId()])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
tempFrame.frameCount = 1; tempFrame.frameCount = 1;
@@ -608,7 +608,7 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
{ {
for (int j = 0; j < filteredFrames.count(); j++) for (int j = 0; j < filteredFrames.count(); j++)
{ {
if ( (filteredFrames[j].ID == tempFrame.ID) && (filteredFrames[j].bus == tempFrame.bus) ) if ( (filteredFrames[j].frameId() == tempFrame.frameId()) && (filteredFrames[j].bus == tempFrame.bus) )
{ {
if (autoRefresh) beginResetModel(); if (autoRefresh) beginResetModel();
filteredFrames.replace(j, tempFrame); filteredFrames.replace(j, tempFrame);
@@ -642,7 +642,7 @@ void CANFrameModel::sendRefresh()
int count = frames.count(); int count = frames.count();
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
if (filters[frames[i].ID]) if (filters[frames[i].frameId()])
{ {
tempContainer.append(frames[i]); tempContainer.append(frames[i]);
} }
@@ -718,12 +718,12 @@ void CANFrameModel::insertFrames(const QVector<CANFrame> &newFrames)
for (int i = 0; i < newFrames.count(); i++) for (int i = 0; i < newFrames.count(); i++)
{ {
frames.append(newFrames[i]); frames.append(newFrames[i]);
if (!filters.contains(newFrames[i].ID)) if (!filters.contains(newFrames[i].frameId()))
{ {
filters.insert(newFrames[i].ID, true); filters.insert(newFrames[i].frameId(), true);
needFilterRefresh = true; needFilterRefresh = true;
} }
if (filters[newFrames[i].ID]) if (filters[newFrames[i].frameId()])
{ {
insertedFiltered++; insertedFiltered++;
filteredFrames.append(newFrames[i]); filteredFrames.append(newFrames[i]);
@@ -743,9 +743,9 @@ int CANFrameModel::getIndexFromTimeID(unsigned int ID, double timestamp)
uint64_t intTimeStamp = timestamp * 1000000l; uint64_t intTimeStamp = timestamp * 1000000l;
for (int i = 0; i < frames.count(); i++) for (int i = 0; i < frames.count(); i++)
{ {
if ((frames[i].ID == ID)) if ((frames[i].frameId() == ID))
{ {
if (frames[i].timestamp <= intTimeStamp) bestIndex = i; if (frames[i].timeStamp().microSeconds() <= intTimeStamp) bestIndex = i;
else break; //drop out of loop as soon as we pass the proper timestamp else break; //drop out of loop as soon as we pass the proper timestamp
} }
} }
+1 -1
View File
@@ -343,7 +343,7 @@ void CANConnection::checkTargettedFrame(CANFrame &frame)
foreach (const CANFltObserver filt, mBusData[frame.bus].mTargettedFrames) foreach (const CANFltObserver filt, mBusData[frame.bus].mTargettedFrames)
{ {
//qDebug() << "Checking filter with id " << filt.id << " mask " << filt.mask; //qDebug() << "Checking filter with id " << filt.id << " mask " << filt.mask;
maskedID = frame.ID & filt.mask; maskedID = frame.frameId() & filt.mask;
if (maskedID == filt.id) { if (maskedID == filt.id) {
qDebug() << "In connection object I got a targetted frame. Forwarding it."; qDebug() << "In connection object I got a targetted frame. Forwarding it.";
QMetaObject::invokeMethod(filt.observer, "gotTargettedFrame",Qt::QueuedConnection, Q_ARG(CANFrame, frame)); QMetaObject::invokeMethod(filt.observer, "gotTargettedFrame",Qt::QueuedConnection, Q_ARG(CANFrame, frame));
+1 -1
View File
@@ -1531,7 +1531,7 @@ DBC_MESSAGE* DBCHandler::findMessage(const CANFrame &frame)
{ {
if (loadedFiles[i].getAssocBus() == -1 || frame.bus == (unsigned int)loadedFiles[i].getAssocBus()) if (loadedFiles[i].getAssocBus() == -1 || frame.bus == (unsigned int)loadedFiles[i].getAssocBus())
{ {
DBC_MESSAGE* msg = loadedFiles[i].messageHandler->findMsgByID(frame.ID); DBC_MESSAGE* msg = loadedFiles[i].messageHandler->findMsgByID(frame.frameId());
if (msg != nullptr) return msg; if (msg != nullptr) return msg;
} }
} }
+1 -1
View File
@@ -585,7 +585,7 @@ void DBCSignalEditor::fillValueTable(DBC_SIGNAL *sig)
for (int i = 0; i < sig->valList.count(); i++) for (int i = 0; i < sig->valList.count(); i++)
{ {
QTableWidgetItem *val = new QTableWidgetItem(Utility::formatNumber(sig->valList[i].value)); QTableWidgetItem *val = new QTableWidgetItem(Utility::formatNumber((uint64_t)sig->valList[i].value));
QTableWidgetItem *desc = new QTableWidgetItem(sig->valList[i].descript); QTableWidgetItem *desc = new QTableWidgetItem(sig->valList[i].descript);
rowIdx = ui->valuesTable->rowCount(); rowIdx = ui->valuesTable->rowCount();
ui->valuesTable->insertRow(rowIdx); ui->valuesTable->insertRow(rowIdx);
+47 -38
View File
@@ -4,6 +4,13 @@
#include <QFile> #include <QFile>
//You might wonder: Collin, what in the hell is this for? Firmware uploader? For what? I'm interested! Well, it's a custom
//firmware uploader for a motor controller I built. Why would that be in this project. Cuz. It's not really relevant
//to anyone else but might serve as a decent reference for a few things: How to make an uploader interface that runs over CAN,
//how to lay out a screen like this, how to make a comm protocol for firmware updating over CAN. But, most things use UDS
//for firmware updates and wouldn't need this specific code. But, it might be able to be turned into a UDS firmware uploader or downloader.
//Note that this screen is specifically hidden by default because of it's oddball status. You have to re-enable it in mainwindow.cpp to see it.
FirmwareUploaderWindow::FirmwareUploaderWindow(const QVector<CANFrame> *frames, QWidget *parent) : FirmwareUploaderWindow::FirmwareUploaderWindow(const QVector<CANFrame> *frames, QWidget *parent) :
QDialog(parent), QDialog(parent),
ui(new Ui::FirmwareUploaderWindow) ui(new Ui::FirmwareUploaderWindow)
@@ -70,17 +77,17 @@ void FirmwareUploaderWindow::updatedFrames(int numFrames)
void FirmwareUploaderWindow::gotTargettedFrame(CANFrame frame) void FirmwareUploaderWindow::gotTargettedFrame(CANFrame frame)
{ {
qDebug() << "FUW: Got targetted frame with id " << frame.ID; qDebug() << "FUW: Got targetted frame with id " << frame.frameId();
if (frame.ID == (uint32_t)(baseAddress + 0x10)) { if (frame.frameId() == (uint32_t)(baseAddress + 0x10)) {
qDebug() << "Start firmware reply"; qDebug() << "Start firmware reply";
if ((frame.data[0] == 0xAD) && (frame.data[1] == 0xDE)) if (((char)frame.payload()[0] == (char)0xAD) && ((char)frame.payload()[1] == (char)0xDE))
{ {
if ((frame.data[2] == 0xAF) && (frame.data[3] == 0xDE)) if (((char)frame.payload()[2] == (char)0xAF) && ((char)frame.payload()[3] == (char)0xDE))
{ {
qDebug() << "THere's dead beef here"; qDebug() << "There's dead beef here";
if ((frame.data[4] == (token & 0xFF)) && (frame.data[5] == ((token >> 8) & 0xFF))) if (((char)frame.payload()[4] == (char)(token & 0xFF)) && ((char)frame.payload()[5] == (char)((token >> 8) & 0xFF)))
{ {
if ((frame.data[6] == ((token >> 16) & 0xFF)) && (frame.data[7] == ((token >> 24) & 0xFF))) if (((char)frame.payload()[6] == (char)((token >> 16) & 0xFF)) && ((char)frame.payload()[7] == (char)((token >> 24) & 0xFF)))
{ {
qDebug() << "starting firmware process"; qDebug() << "starting firmware process";
//MainWindow::getReference()->setTargettedID(baseAddress + 0x20); //MainWindow::getReference()->setTargettedID(baseAddress + 0x20);
@@ -92,9 +99,9 @@ void FirmwareUploaderWindow::gotTargettedFrame(CANFrame frame)
} }
} }
if (frame.ID == (uint32_t)(baseAddress + 0x20)) { if (frame.frameId() == (uint32_t)(baseAddress + 0x20)) {
qDebug() << "Firmware reception success reply"; qDebug() << "Firmware reception success reply";
int seq = frame.data[0] + (256 * frame.data[1]); int seq = frame.payload()[0] + (256 * frame.payload()[1]);
if (seq == currentSendingPosition) if (seq == currentSendingPosition)
{ {
currentSendingPosition++; currentSendingPosition++;
@@ -126,18 +133,19 @@ void FirmwareUploaderWindow::sendFirmwareChunk()
CANFrame *output = new CANFrame; CANFrame *output = new CANFrame;
int firmwareLocation = currentSendingPosition * 4; int firmwareLocation = currentSendingPosition * 4;
int xorByte = 0; int xorByte = 0;
output->extended = false; output->setExtendedFrameFormat(false);
output->len = 7; QByteArray bytes(7,0);
output->bus = bus; output->bus = bus;
output->ID = baseAddress + 0x16; output->setFrameId(baseAddress + 0x16);
output->data[0] = currentSendingPosition & 0xFF; output->payload()[0] = currentSendingPosition & 0xFF;
output->data[1] = (currentSendingPosition >> 8) & 0xFF; output->payload()[1] = (currentSendingPosition >> 8) & 0xFF;
output->data[2] = firmwareData[firmwareLocation++]; output->payload()[2] = firmwareData[firmwareLocation++];
output->data[3] = firmwareData[firmwareLocation++]; output->payload()[3] = firmwareData[firmwareLocation++];
output->data[4] = firmwareData[firmwareLocation++]; output->payload()[4] = firmwareData[firmwareLocation++];
output->data[5] = firmwareData[firmwareLocation++]; output->payload()[5] = firmwareData[firmwareLocation++];
for (int i = 0; i < 6; i++) xorByte = xorByte ^ output->data[i]; for (int i = 0; i < 6; i++) xorByte = xorByte ^ output->payload()[i];
output->data[6] = xorByte; output->payload()[6] = xorByte;
output->setPayload(bytes);
sendCANFrame(output); sendCANFrame(output);
timer->start(); timer->start();
} }
@@ -145,14 +153,15 @@ void FirmwareUploaderWindow::sendFirmwareChunk()
void FirmwareUploaderWindow::sendFirmwareEnding() void FirmwareUploaderWindow::sendFirmwareEnding()
{ {
CANFrame *output = new CANFrame; CANFrame *output = new CANFrame;
output->extended = false; output->setExtendedFrameFormat(false);
output->bus = bus; output->bus = bus;
output->len = 4; QByteArray bytes(4,0);
output->ID = baseAddress + 0x30; output->setFrameId(baseAddress + 0x30);
output->data[3] = 0xC0; output->payload()[3] = 0xC0;
output->data[2] = 0xDE; output->payload()[2] = 0xDE;
output->data[1] = 0xFA; output->payload()[1] = 0xFA;
output->data[0] = 0xDE; output->payload()[0] = 0xDE;
output->setPayload(bytes);
//sendCANFrame(output, bus); //sendCANFrame(output, bus);
} }
@@ -171,19 +180,19 @@ void FirmwareUploaderWindow::handleStartStopTransfer()
CANConManager::getInstance()->addTargettedFrame(bus, baseAddress + 0x10, 0x7FF, this); CANConManager::getInstance()->addTargettedFrame(bus, baseAddress + 0x10, 0x7FF, this);
CANConManager::getInstance()->addTargettedFrame(bus, baseAddress + 0x20, 0x7FF, this); CANConManager::getInstance()->addTargettedFrame(bus, baseAddress + 0x20, 0x7FF, this);
CANFrame *output = new CANFrame; CANFrame *output = new CANFrame;
output->extended = false; output->setExtendedFrameFormat(false);
output->len = 8; QByteArray bytes(8,0);
output->bus = bus; output->bus = bus;
output->ID = baseAddress; output->setFrameId(baseAddress);
output->data[0] = 0xEF; output->payload()[0] = 0xEF;
output->data[1] = 0xBE; output->payload()[1] = 0xBE;
output->data[2] = 0xAD; output->payload()[2] = 0xAD;
output->data[3] = 0xDE; output->payload()[3] = 0xDE;
output->data[4] = token & 0xFF; output->payload()[4] = token & 0xFF;
output->data[5] = (token >> 8) & 0xFF; output->payload()[5] = (token >> 8) & 0xFF;
output->data[6] = (token >> 16) & 0xFF; output->payload()[6] = (token >> 16) & 0xFF;
output->data[7] = (token >> 24) & 0xFF; output->payload()[7] = (token >> 24) & 0xFF;
sendCANFrame(output); sendCANFrame(output);
} }
else //stop anything in process else //stop anything in process
+310 -293
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -68,7 +68,7 @@ quint64 FramePlaybackObject::updatePosition(bool forward)
//only send frame out if its ID is checked in the list. Otherwise discard it. //only send frame out if its ID is checked in the list. Otherwise discard it.
CANFrame *thisFrame = &currentSeqItem->data[currentPosition]; CANFrame *thisFrame = &currentSeqItem->data[currentPosition];
uint32_t originalBus = thisFrame->bus; uint32_t originalBus = thisFrame->bus;
if (currentSeqItem->idFilters.find(thisFrame->ID).value()) if (currentSeqItem->idFilters.find(thisFrame->frameId()).value())
{ {
if (whichBusSend > -1) if (whichBusSend > -1)
{ {
@@ -90,7 +90,7 @@ quint64 FramePlaybackObject::updatePosition(bool forward)
thisFrame->bus = originalBus; thisFrame->bus = originalBus;
} }
return thisFrame->timestamp; return thisFrame->timeStamp().microSeconds();
} }
quint64 FramePlaybackObject::peekPosition(bool forward) quint64 FramePlaybackObject::peekPosition(bool forward)
@@ -113,7 +113,7 @@ quint64 FramePlaybackObject::peekPosition(bool forward)
} }
} }
CANFrame *thisFrame = &currentSeqItem->data[peekCurrentPosition]; CANFrame *thisFrame = &currentSeqItem->data[peekCurrentPosition];
return thisFrame->timestamp; return thisFrame->timeStamp().microSeconds();
} }
void FramePlaybackObject::piStart() void FramePlaybackObject::piStart()
@@ -197,8 +197,8 @@ void FramePlaybackObject::startPlaybackForward()
{ {
playbackTimer->setInterval(1); playbackTimer->setInterval(1);
playbackElapsed.start(); playbackElapsed.start();
if (currentSeqItem->data[currentPosition].timestamp > 2000) if (currentSeqItem->data[currentPosition].timeStamp().microSeconds() > 2000)
playbackLastTimeStamp = currentSeqItem->data[currentPosition].timestamp - 2000; playbackLastTimeStamp = currentSeqItem->data[currentPosition].timeStamp().microSeconds() - 2000;
else playbackLastTimeStamp = 0; else playbackLastTimeStamp = 0;
} }
playbackTimer->start(); playbackTimer->start();
@@ -219,7 +219,7 @@ void FramePlaybackObject::startPlaybackBackward()
{ {
playbackElapsed.start(); playbackElapsed.start();
playbackTimer->setInterval(1); playbackTimer->setInterval(1);
playbackLastTimeStamp = currentSeqItem->data[currentPosition].timestamp + 2000; playbackLastTimeStamp = currentSeqItem->data[currentPosition].timeStamp().microSeconds() + 2000;
} }
playbackTimer->start(); playbackTimer->start();
} }
@@ -350,8 +350,8 @@ void FramePlaybackObject::timerTriggered()
if (peekPosition(true) == 0xFFFFFFFFFFFFFFFFull) if (peekPosition(true) == 0xFFFFFFFFFFFFFFFFull)
{ {
updatePosition(true); //this'll go to the next log (if there is one) updatePosition(true); //this'll go to the next log (if there is one)
if (currentSeqItem->data[currentPosition].timestamp > 1000) if (currentSeqItem->data[currentPosition].timeStamp().microSeconds() > 1000)
playbackLastTimeStamp = currentSeqItem->data[currentPosition].timestamp - 1000; playbackLastTimeStamp = currentSeqItem->data[currentPosition].timeStamp().microSeconds() - 1000;
else playbackLastTimeStamp = 0; else playbackLastTimeStamp = 0;
} }
} }
@@ -367,7 +367,7 @@ void FramePlaybackObject::timerTriggered()
if (peekPosition(false) == 0xFFFFFFFFFFFFFFFFull) if (peekPosition(false) == 0xFFFFFFFFFFFFFFFFull)
{ {
updatePosition(false); //this'll go to the next log (if there is one) updatePosition(false); //this'll go to the next log (if there is one)
playbackLastTimeStamp = currentSeqItem->data[currentPosition].timestamp + 1000; playbackLastTimeStamp = currentSeqItem->data[currentPosition].timeStamp().microSeconds() + 1000;
} }
} }
statusCounter++; statusCounter++;
+1 -1
View File
@@ -426,7 +426,7 @@ void FramePlaybackWindow::fillIDHash(SequenceItem &item)
for (int i = 0; i < item.data.count(); i++) for (int i = 0; i < item.data.count(); i++)
{ {
id = item.data[i].ID; id = item.data[i].frameId();
if (!item.idFilters.contains(id)) if (!item.idFilters.contains(id))
{ {
item.idFilters.insert(id, true); item.idFilters.insert(id, true);
+29 -29
View File
@@ -130,13 +130,13 @@ void FrameSenderWindow::buildFrameCache()
for (int i = 0; i < modelFrames->count(); i++) for (int i = 0; i < modelFrames->count(); i++)
{ {
thisFrame = modelFrames->at(i); thisFrame = modelFrames->at(i);
if (!frameCache.contains(thisFrame.ID)) if (!frameCache.contains(thisFrame.frameId()))
{ {
frameCache.insert(thisFrame.ID, thisFrame); frameCache.insert(thisFrame.frameId(), thisFrame);
} }
else else
{ {
frameCache[thisFrame.ID] = thisFrame; frameCache[thisFrame.frameId()] = thisFrame;
} }
} }
} }
@@ -160,13 +160,13 @@ void FrameSenderWindow::updatedFrames(int numFrames)
for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++) for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++)
{ {
thisFrame = modelFrames->at(i); thisFrame = modelFrames->at(i);
if (!frameCache.contains(thisFrame.ID)) if (!frameCache.contains(thisFrame.frameId()))
{ {
frameCache.insert(thisFrame.ID, thisFrame); frameCache.insert(thisFrame.frameId(), thisFrame);
} }
else else
{ {
frameCache[thisFrame.ID] = thisFrame; frameCache[thisFrame.frameId()] = thisFrame;
} }
processIncomingFrame(&thisFrame); processIncomingFrame(&thisFrame);
} }
@@ -182,8 +182,8 @@ void FrameSenderWindow::processIncomingFrame(CANFrame *frame)
{ {
Trigger *thisTrigger = &sendingData[sd].triggers[trig]; Trigger *thisTrigger = &sendingData[sd].triggers[trig];
qDebug() << "Trigger ID: " << thisTrigger->ID; qDebug() << "Trigger ID: " << thisTrigger->ID;
qDebug() << "Frame ID: " << frame->ID; qDebug() << "Frame ID: " << frame->frameId();
if (thisTrigger->ID > 0 && (uint32_t)thisTrigger->ID == frame->ID) if (thisTrigger->ID > 0 && (uint32_t)thisTrigger->ID == frame->frameId())
{ {
if ((uint32_t)thisTrigger->bus == frame->bus || thisTrigger->bus == -1) if ((uint32_t)thisTrigger->bus == frame->bus || thisTrigger->bus == -1)
{ {
@@ -511,7 +511,7 @@ void FrameSenderWindow::doModifiers(int idx)
} }
} }
//Finally, drop the result into the proper data byte //Finally, drop the result into the proper data byte
sendData->data[mod->destByte] = (unsigned char) shadowReg; sendData->payload().data()[mod->destByte] = (char) shadowReg;
} }
} }
@@ -525,16 +525,16 @@ int FrameSenderWindow::fetchOperand(int idx, ModifierOperand op)
} }
else if (op.ID == -2) //fetch data from a data byte within the output frame else if (op.ID == -2) //fetch data from a data byte within the output frame
{ {
if (op.notOper) return ~sendingData.at(idx).data[op.databyte]; if (op.notOper) return ~sendingData.at(idx).payload()[op.databyte];
else return sendingData.at(idx).data[op.databyte]; else return sendingData.at(idx).payload()[op.databyte];
} }
else //look up external data byte else //look up external data byte
{ {
tempFrame = lookupFrame(op.ID, op.bus); tempFrame = lookupFrame(op.ID, op.bus);
if (tempFrame != nullptr) if (tempFrame != nullptr)
{ {
if (op.notOper) return ~tempFrame->data[op.databyte]; if (op.notOper) return ~tempFrame->payload()[op.databyte];
else return tempFrame->data[op.databyte]; else return tempFrame->payload()[op.databyte];
} }
else return 0; else return 0;
} }
@@ -643,7 +643,7 @@ void FrameSenderWindow::processModifierText(int line)
} }
else thisOp.second.notOper = false; else thisOp.second.notOper = false;
thisOp.second.bus = sendingData[line].bus; thisOp.second.bus = sendingData[line].bus;
thisOp.second.ID = sendingData[line].ID; thisOp.second.ID = sendingData[line].frameId();
parseOperandString(secondOp.split(":"), thisOp.second); parseOperandString(secondOp.split(":"), thisOp.second);
thisMod.operations.append(thisOp); thisMod.operations.append(thisOp);
} }
@@ -793,10 +793,10 @@ void FrameSenderWindow::updateGridRow(int idx)
QTableWidgetItem *item = ui->tableSender->item(gridLine, 9); QTableWidgetItem *item = ui->tableSender->item(gridLine, 9);
if (item == nullptr) item = new QTableWidgetItem(); if (item == nullptr) item = new QTableWidgetItem();
item->setText(QString::number(temp->count)); item->setText(QString::number(temp->count));
if (!temp->remote) { if (temp->frameType() != QCanBusFrame::RemoteRequestFrame) {
for (unsigned int i = 0; i < temp->len; i++) for (unsigned int i = 0; i < temp->payload().length(); i++)
{ {
dataString.append(Utility::formatNumber(temp->data[i])); dataString.append(Utility::formatNumber(temp->payload()[i]));
dataString.append(" "); dataString.append(" ");
} }
ui->tableSender->item(gridLine, 6)->setText(dataString); ui->tableSender->item(gridLine, 6)->setText(dataString);
@@ -818,8 +818,8 @@ void FrameSenderWindow::processCellChange(int line, int col)
{ {
FrameSendData tempData; FrameSendData tempData;
tempData.enabled = false; tempData.enabled = false;
tempData.remote = false; tempData.setFrameType(QCanBusFrame::DataFrame);
tempData.extended = false; tempData.setExtendedFrameFormat(false);
sendingData.append(tempData); sendingData.append(tempData);
} }
@@ -848,9 +848,9 @@ void FrameSenderWindow::processCellChange(int line, int col)
tempVal = Utility::ParseStringToNum(ui->tableSender->item(line, 2)->text()); tempVal = Utility::ParseStringToNum(ui->tableSender->item(line, 2)->text());
if (tempVal < 0) tempVal = 0; if (tempVal < 0) tempVal = 0;
if (tempVal > 0x7FFFFFFF) tempVal = 0x7FFFFFFF; if (tempVal > 0x7FFFFFFF) tempVal = 0x7FFFFFFF;
sendingData[line].ID = tempVal; sendingData[line].setFrameId(tempVal);
if (sendingData[line].ID > 0x7FF) { if (sendingData[line].frameId() > 0x7FF) {
sendingData[line].extended = true; sendingData[line].setExtendedFrameFormat(true);
ui->tableSender->blockSignals(true); ui->tableSender->blockSignals(true);
ui->tableSender->item(line, 4)->setCheckState(Qt::Checked); ui->tableSender->item(line, 4)->setCheckState(Qt::Checked);
ui->tableSender->blockSignals(false); ui->tableSender->blockSignals(false);
@@ -861,29 +861,29 @@ void FrameSenderWindow::processCellChange(int line, int col)
tempVal = Utility::ParseStringToNum(ui->tableSender->item(line, 3)->text()); tempVal = Utility::ParseStringToNum(ui->tableSender->item(line, 3)->text());
if (tempVal < 0) tempVal = 0; if (tempVal < 0) tempVal = 0;
if (tempVal > 8) tempVal = 8; if (tempVal > 8) tempVal = 8;
sendingData[line].len = tempVal; sendingData[line].payload().resize(tempVal);
break; break;
case 4: // Ext case 4: // Ext
if (ui->tableSender->item(line, 4)->checkState() == Qt::Checked) { if (ui->tableSender->item(line, 4)->checkState() == Qt::Checked) {
sendingData[line].extended = true; sendingData[line].setExtendedFrameFormat(true);
} else { } else {
sendingData[line].extended = false; sendingData[line].setExtendedFrameFormat(false);
} }
break; break;
case 5: // Rem case 5: // Rem
if (ui->tableSender->item(line, 5)->checkState() == Qt::Checked) { if (ui->tableSender->item(line, 5)->checkState() == Qt::Checked) {
sendingData[line].remote = true; sendingData[line].setFrameType(QCanBusFrame::RemoteRequestFrame);
} else { } else {
sendingData[line].remote = false; sendingData[line].setFrameType(QCanBusFrame::DataFrame);
} }
break; break;
case 6: //Data bytes case 6: //Data bytes
for (int i = 0; i < 8; i++) sendingData[line].data[i] = 0; for (int i = 0; i < 8; i++) sendingData[line].payload().data()[i] = 0;
tokens = ui->tableSender->item(line, 6)->text().split(" "); tokens = ui->tableSender->item(line, 6)->text().split(" ");
for (int j = 0; j < tokens.count(); j++) for (int j = 0; j < tokens.count(); j++)
{ {
sendingData[line].data[j] = (uint8_t)Utility::ParseStringToNum(tokens[j]); sendingData[line].payload().data()[j] = (uint8_t)Utility::ParseStringToNum(tokens[j]);
} }
break; break;
case 7: //triggers case 7: //triggers
+9 -12
View File
@@ -168,12 +168,9 @@ MainWindow::MainWindow(QWidget *parent) :
//of scaling or font differences between different computers. //of scaling or font differences between different computers.
CANFrame temp; CANFrame temp;
temp.bus = 0; temp.bus = 0;
temp.ID = 0x100; temp.setFrameId(0x100);
temp.len = 0;
temp.extended = false;
temp.isReceived = true; temp.isReceived = true;
temp.remote = false; temp.setTimeStamp(QCanBusFrame::TimeStamp(0, 100000000));
temp.timestamp = 100000000;
model->addFrame(temp, true); model->addFrame(temp, true);
qApp->processEvents(); qApp->processEvents();
tickGUIUpdate(); //force a GUI refresh so that the row exists to measure tickGUIUpdate(); //force a GUI refresh so that the row exists to measure
@@ -402,7 +399,7 @@ void MainWindow::gridDoubleClicked(QModelIndex idx)
//qDebug() << "Grid double clicked"; //qDebug() << "Grid double clicked";
//grab ID and timestamp and send them away //grab ID and timestamp and send them away
CANFrame frame = model->getListReference()->at(idx.row()); CANFrame frame = model->getListReference()->at(idx.row());
emit sendCenterTimeID(frame.ID, frame.timestamp / 1000000.0); emit sendCenterTimeID(frame.frameId(), frame.timeStamp().microSeconds() / 1000000.0);
} }
void MainWindow::interpretToggled(bool state) void MainWindow::interpretToggled(bool state)
@@ -743,18 +740,18 @@ Data Bytes: 88 10 00 13 BB 00 06 00
{ {
CANFrame thisFrame = frames->at(c); CANFrame thisFrame = frames->at(c);
QString builderString; QString builderString;
builderString += tr("Time: ") + QString::number((thisFrame.timestamp / 1000000.0), 'f', 6); builderString += tr("Time: ") + QString::number((thisFrame.timeStamp().microSeconds() / 1000000.0), 'f', 6);
builderString += tr(" ID: ") + Utility::formatCANID(thisFrame.ID, thisFrame.extended); builderString += tr(" ID: ") + Utility::formatCANID(thisFrame.frameId(), thisFrame.hasExtendedFrameFormat());
if (thisFrame.extended) builderString += tr(" Ext "); if (thisFrame.hasExtendedFrameFormat()) builderString += tr(" Ext ");
else builderString += tr(" Std "); else builderString += tr(" Std ");
builderString += tr("Bus: ") + QString::number(thisFrame.bus); builderString += tr("Bus: ") + QString::number(thisFrame.bus);
builderString += " Len: " + QString::number(thisFrame.len) + "\n"; builderString += " Len: " + QString::number(thisFrame.payload().length()) + "\n";
outFile->write(builderString.toUtf8()); outFile->write(builderString.toUtf8());
builderString = tr("Data Bytes: "); builderString = tr("Data Bytes: ");
for (unsigned int temp = 0; temp < thisFrame.len; temp++) for (unsigned int temp = 0; temp < thisFrame.payload().length(); temp++)
{ {
builderString += Utility::formatNumber(thisFrame.data[temp]) + " "; builderString += Utility::formatNumber(thisFrame.payload()[temp]) + " ";
} }
builderString += "\n"; builderString += "\n";
outFile->write(builderString.toUtf8()); outFile->write(builderString.toUtf8());
+38 -26
View File
@@ -4,6 +4,17 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QDebug> #include <QDebug>
/*
* Nothing to see here, these are not the droids you're looking for. Go away
*
*
*
* You didn't go away, did you... This is a screen that allows for setting EEPROM configuration for a
* custom motor controller project I was working on. It's hidden by default. You could re-enable it and play around
* with it if you're bored. It might be a good basis for how to set a list of parameters on a device. But, it could be broken
* these days too. It is not maintained any longer as the project it was meant for is abandoned. YMMV.
*/
MotorControllerConfigWindow::MotorControllerConfigWindow(const QVector<CANFrame> *frames, QWidget *parent) : MotorControllerConfigWindow::MotorControllerConfigWindow(const QVector<CANFrame> *frames, QWidget *parent) :
QDialog(parent), QDialog(parent),
ui(new Ui::MotorControllerConfigWindow) ui(new Ui::MotorControllerConfigWindow)
@@ -57,18 +68,18 @@ void MotorControllerConfigWindow::updatedFrames(int numFrames)
for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++) for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++)
{ {
thisFrame = modelFrames->at(i); thisFrame = modelFrames->at(i);
id = thisFrame.ID; id = thisFrame.frameId();
if (id == 0xC2) //response to a query we made if (id == 0xC2) //response to a query we made
{ {
if (thisFrame.data[2] == 0) if ((char)thisFrame.payload()[2] == 0)
{ {
int paramID = thisFrame.data[0] + (thisFrame.data[1] * 256); int paramID = thisFrame.payload()[0] + (thisFrame.payload()[1] * 256);
for (int i = 0; i < params.length(); i++) for (int i = 0; i < params.length(); i++)
{ {
if (params[i].paramID == paramID) if (params[i].paramID == paramID)
{ {
params[i].value = thisFrame.data[4] + (thisFrame.data[5] * 256); params[i].value = thisFrame.payload()[4] + (thisFrame.payload()[5] * 256);
if (params[i].paramType == ASCII) item = new QTableWidgetItem(); //QString::fromUtf8((char *)params[i].value, 2)); if (params[i].paramType == ASCII) item = new QTableWidgetItem(); //QString::fromUtf8((char *)params[i].value, 2));
if (params[i].paramType == HEX) item = new QTableWidgetItem(Utility::formatHexNum(params[i].value)); if (params[i].paramType == HEX) item = new QTableWidgetItem(Utility::formatHexNum(params[i].value));
if (params[i].paramType == DEC) if (params[i].paramType == DEC)
@@ -177,18 +188,19 @@ void MotorControllerConfigWindow::timerTick()
{ {
qDebug() << "Request: " << QString::number(transmitStep); qDebug() << "Request: " << QString::number(transmitStep);
outFrame.ID = 0xC1; outFrame.setFrameId(0xC1);
outFrame.len = 8; QByteArray bytes(8, 0);
outFrame.bus = 0; outFrame.bus = 0;
outFrame.extended = false; outFrame.setExtendedFrameFormat(false);
outFrame.data[0] = params[transmitStep].paramID & 0xFF; bytes[0] = params[transmitStep].paramID & 0xFF;
outFrame.data[1] = (params[transmitStep].paramID >> 8) & 0xFF; bytes[1] = (params[transmitStep].paramID >> 8) & 0xFF;
outFrame.data[2] = 0; //0 = read, 1 = write bytes[2] = 0; //0 = read, 1 = write
outFrame.data[3] = 0; //reserved bytes[3] = 0; //reserved
outFrame.data[4] = 0; //value goes in bytes 4,5 when writing bytes[4] = 0; //value goes in bytes 4,5 when writing
outFrame.data[5] = 0; bytes[5] = 0;
outFrame.data[6] = 0; //reserved bytes[6] = 0; //reserved
outFrame.data[7] = 0; //reserved bytes[7] = 0; //reserved
outFrame.setPayload(bytes);
CANConManager::getInstance()->sendFrame(outFrame); CANConManager::getInstance()->sendFrame(outFrame);
@@ -213,18 +225,18 @@ void MotorControllerConfigWindow::timerTick()
if (thisValue != params[transmitStep].value) if (thisValue != params[transmitStep].value)
{ {
outFrame.ID = 0xC1; outFrame.setFrameId(0xC1);
outFrame.len = 8; QByteArray bytes(8, 0);
outFrame.bus = 0; outFrame.bus = 0;
outFrame.extended = false; outFrame.setExtendedFrameFormat(false);
outFrame.data[0] = params[transmitStep].paramID & 0xFF; bytes[0] = params[transmitStep].paramID & 0xFF;
outFrame.data[1] = (params[transmitStep].paramID >> 8) & 0xFF; bytes[1] = (params[transmitStep].paramID >> 8) & 0xFF;
outFrame.data[2] = 1; //0 = read, 1 = write bytes[2] = 1; //0 = read, 1 = write
outFrame.data[3] = 0; //reserved bytes[3] = 0; //reserved
outFrame.data[4] = params[transmitStep].value & 0xFF; bytes[4] = params[transmitStep].value & 0xFF;
outFrame.data[5] = (params[transmitStep].value >> 8) & 0xFF; bytes[5] = (params[transmitStep].value >> 8) & 0xFF;
outFrame.data[6] = 0; //reserved bytes[6] = 0; //reserved
outFrame.data[7] = 0; //reserved bytes[7] = 0; //reserved
CANConManager::getInstance()->sendFrame(outFrame); CANConManager::getInstance()->sendFrame(outFrame);
} }
+17 -17
View File
@@ -293,7 +293,7 @@ void FlowViewWindow::gotCenterTimeID(int32_t ID, double timestamp)
memcpy(refBytes, currBytes, 8); memcpy(refBytes, currBytes, 8);
} }
memcpy(currBytes, frameCache.at(currentPosition).data, 8); memcpy(currBytes, frameCache.at(currentPosition).payload().data(), 8);
updateDataView(); updateDataView();
} }
@@ -696,23 +696,23 @@ void FlowViewWindow::timerTriggered()
void FlowViewWindow::updateDataView() void FlowViewWindow::updateDataView()
{ {
ui->txtCurr1->setText(Utility::formatNumber(currBytes[0])); ui->txtCurr1->setText(Utility::formatNumber((char)currBytes[0]));
ui->txtCurr2->setText(Utility::formatNumber(currBytes[1])); ui->txtCurr2->setText(Utility::formatNumber((char)currBytes[1]));
ui->txtCurr3->setText(Utility::formatNumber(currBytes[2])); ui->txtCurr3->setText(Utility::formatNumber((char)currBytes[2]));
ui->txtCurr4->setText(Utility::formatNumber(currBytes[3])); ui->txtCurr4->setText(Utility::formatNumber((char)currBytes[3]));
ui->txtCurr5->setText(Utility::formatNumber(currBytes[4])); ui->txtCurr5->setText(Utility::formatNumber((char)currBytes[4]));
ui->txtCurr6->setText(Utility::formatNumber(currBytes[5])); ui->txtCurr6->setText(Utility::formatNumber((char)currBytes[5]));
ui->txtCurr7->setText(Utility::formatNumber(currBytes[6])); ui->txtCurr7->setText(Utility::formatNumber((char)currBytes[6]));
ui->txtCurr8->setText(Utility::formatNumber(currBytes[7])); ui->txtCurr8->setText(Utility::formatNumber((char)currBytes[7]));
ui->txtRef1->setText(Utility::formatNumber(refBytes[0])); ui->txtRef1->setText(Utility::formatNumber((char)refBytes[0]));
ui->txtRef2->setText(Utility::formatNumber(refBytes[1])); ui->txtRef2->setText(Utility::formatNumber((char)refBytes[1]));
ui->txtRef3->setText(Utility::formatNumber(refBytes[2])); ui->txtRef3->setText(Utility::formatNumber((char)refBytes[2]));
ui->txtRef4->setText(Utility::formatNumber(refBytes[3])); ui->txtRef4->setText(Utility::formatNumber((char)refBytes[3]));
ui->txtRef5->setText(Utility::formatNumber(refBytes[4])); ui->txtRef5->setText(Utility::formatNumber((char)refBytes[4]));
ui->txtRef6->setText(Utility::formatNumber(refBytes[5])); ui->txtRef6->setText(Utility::formatNumber((char)refBytes[5]));
ui->txtRef7->setText(Utility::formatNumber(refBytes[6])); ui->txtRef7->setText(Utility::formatNumber((char)refBytes[6]));
ui->txtRef8->setText(Utility::formatNumber(refBytes[7])); ui->txtRef8->setText(Utility::formatNumber((char)refBytes[7]));
ui->flowView->setReference(refBytes, false); ui->flowView->setReference(refBytes, false);
ui->flowView->updateData(currBytes, true); ui->flowView->updateData(currBytes, true);
+4 -4
View File
@@ -336,13 +336,13 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
baseNode->addChild(tempItem); baseNode->addChild(tempItem);
tempItem = new QTreeWidgetItem(); tempItem = new QTreeWidgetItem();
tempItem->setText(0, tr(" Priority bits: ") + Utility::formatNumber( FilterUtility::getGMLanPriorityBits(targettedID))); tempItem->setText(0, tr(" Priority bits: ") + Utility::formatNumber( (uint64_t)FilterUtility::getGMLanPriorityBits(targettedID)));
baseNode->addChild(tempItem); baseNode->addChild(tempItem);
tempItem = new QTreeWidgetItem(); tempItem = new QTreeWidgetItem();
tempItem->setText(0, tr(" Arbitration Id: ") + Utility::formatNumber( FilterUtility::getGMLanArbitrationId(targettedID))); tempItem->setText(0, tr(" Arbitration Id: ") + Utility::formatNumber( (uint64_t)FilterUtility::getGMLanArbitrationId(targettedID)));
baseNode->addChild(tempItem); baseNode->addChild(tempItem);
tempItem = new QTreeWidgetItem(); tempItem = new QTreeWidgetItem();
tempItem->setText(0, tr(" Sender Id: ") + Utility::formatNumber( FilterUtility::getGMLanSenderId(targettedID))); tempItem->setText(0, tr(" Sender Id: ") + Utility::formatNumber( (uint64_t)FilterUtility::getGMLanSenderId(targettedID)));
baseNode->addChild(tempItem); baseNode->addChild(tempItem);
} }
@@ -506,7 +506,7 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
dataBase->addChild(tempItem); dataBase->addChild(tempItem);
tempItem = new QTreeWidgetItem(); tempItem = new QTreeWidgetItem();
tempItem->setText(0, tr("Range: ") + Utility::formatNumber(minData[c]) + tr(" to ") + Utility::formatNumber(maxData[c])); tempItem->setText(0, tr("Range: ") + Utility::formatNumber((char)minData[c]) + tr(" to ") + Utility::formatNumber((char)maxData[c]));
dataBase->addChild(tempItem); dataBase->addChild(tempItem);
histBase->setText(0, tr("Histogram")); histBase->setText(0, tr("Histogram"));
dataBase->addChild(histBase); dataBase->addChild(histBase);
+1 -1
View File
@@ -1153,7 +1153,7 @@ void GraphingWindow::createGraph(GraphParams &params, bool createGraphParam)
} }
else else
{ {
params.x[j] = frameCache[k].timeStamp.microSeconds(); params.x[j] = frameCache[k].timeStamp().microSeconds();
} }
params.y[j] = (tempVal * params.scale) + params.bias; params.y[j] = (tempVal * params.scale) + params.bias;
if (params.y[j] < yminval) yminval = params.y[j]; if (params.y[j] < yminval) yminval = params.y[j];
+2 -2
View File
@@ -218,7 +218,7 @@ void ISOTP_InterpreterWindow::showDetailView()
buildString.append(tr("Raw Payload: ")); buildString.append(tr("Raw Payload: "));
for (int i = 0; i < messages[rowNum].data.count(); i++) for (int i = 0; i < messages[rowNum].data.count(); i++)
{ {
buildString.append(Utility::formatNumber(messages[rowNum].data[i])); buildString.append(Utility::formatNumber((char)messages[rowNum].data[i]));
buildString.append(" "); buildString.append(" ");
} }
buildString.append("\r\r"); buildString.append("\r\r");
@@ -291,7 +291,7 @@ void ISOTP_InterpreterWindow::newISOMessage(ISOTP_MESSAGE msg)
for (int i = 0; i < msg.data.count(); i++) for (int i = 0; i < msg.data.count(); i++)
{ {
tempString.append(Utility::formatNumber(msg.data[i])); tempString.append(Utility::formatNumber((char)msg.data[i]));
tempString.append(" "); tempString.append(" ");
} }
ui->tableIsoFrames->setItem(rowNum, 5, new QTableWidgetItem(tempString)); ui->tableIsoFrames->setItem(rowNum, 5, new QTableWidgetItem(tempString));
+1 -1
View File
@@ -116,7 +116,7 @@ void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio
painter->setOpacity(1.0); painter->setOpacity(1.0);
painter->setPen(QApplication::palette().color(QPalette::Text)); painter->setPen(QApplication::palette().color(QPalette::Text));
painter->setFont(mainFont); painter->setFont(mainFont);
painter->drawText(QRect(viewport.left(), viewport.top() + xSector + yOffset, xSpan, mainFontInfo->pixelSize()), Qt::AlignCenter, Utility::formatNumber(val)); painter->drawText(QRect(viewport.left(), viewport.top() + xSector + yOffset, xSpan, mainFontInfo->pixelSize()), Qt::AlignCenter, Utility::formatNumber((char)val));
} }
QSize SnifferDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const QSize SnifferDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+1 -1
View File
@@ -4,7 +4,7 @@
SnifferItem::SnifferItem(const CANFrame& pFrame, quint32 seq): SnifferItem::SnifferItem(const CANFrame& pFrame, quint32 seq):
mID(pFrame.ID) mID(pFrame.frameId())
{ {
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
mNotch[i] =0; mNotch[i] =0;
+11 -13
View File
@@ -230,23 +230,21 @@ void CANScriptHelper::clearFilters()
void CANScriptHelper::sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSValue data) void CANScriptHelper::sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSValue data)
{ {
CANFrame frame; CANFrame frame;
frame.extended = false; frame.setExtendedFrameFormat(false);
frame.remote = false; frame.setFrameId(static_cast<uint32_t>(id.toInt()));
frame.ID = static_cast<uint32_t>(id.toInt()); QByteArray bytes(length.toUInt(), 0);
frame.len = length.toUInt();
if (frame.len > 8) frame.len = 8;
if (!data.isArray()) qDebug() << "data isn't an array"; if (!data.isArray()) qDebug() << "data isn't an array";
for (unsigned int i = 0; i < frame.len; i++) for (unsigned int i = 0; i < bytes.length(); i++)
{ {
frame.data[i] = (uint8_t)data.property(i).toInt(); bytes[i] = (uint8_t)data.property(i).toInt();
} }
frame.setPayload(bytes);
frame.bus = (uint32_t)bus.toInt(); frame.bus = (uint32_t)bus.toInt();
//if (frame.bus > 1) frame.bus = 1; //if (frame.bus > 1) frame.bus = 1;
if (frame.ID > 0x7FF) frame.extended = true; if (frame.frameId() > 0x7FF) frame.setExtendedFrameFormat(true);
qDebug() << "sending frame from script"; qDebug() << "sending frame from script";
CANConManager::getInstance()->sendFrame(frame); CANConManager::getInstance()->sendFrame(frame);
@@ -258,13 +256,13 @@ void CANScriptHelper::gotTargettedFrame(const CANFrame &frame)
//qDebug() << "Got frame in script interface"; //qDebug() << "Got frame in script interface";
for (int i = 0; i < filters.length(); i++) for (int i = 0; i < filters.length(); i++)
{ {
if (filters[i].checkFilter(frame.ID, frame.bus)) if (filters[i].checkFilter(frame.frameId(), frame.bus))
{ {
QJSValueList args; QJSValueList args;
args << frame.bus << frame.ID << frame.len; args << frame.bus << frame.frameId() << frame.payload().length();
QJSValue dataBytes = scriptEngine->newArray(frame.len); QJSValue dataBytes = scriptEngine->newArray(frame.payload().length());
for (unsigned int j = 0; j < frame.len; j++) dataBytes.setProperty(j, QJSValue(frame.data[j])); for (unsigned int j = 0; j < frame.payload().length(); j++) dataBytes.setProperty(j, QJSValue((unsigned char)frame.payload()[j]));
args.append(dataBytes); args.append(dataBytes);
gotFrameFunction.call(args); gotFrameFunction.call(args);
return; //as soon as one filter matches we jump out return; //as soon as one filter matches we jump out
+1 -1
View File
@@ -71,7 +71,7 @@ void SignalViewerWindow::processFrame(CANFrame &frame)
{ {
sig = signalList.at(i); sig = signalList.at(i);
if (!sig) return; if (!sig) return;
if (sig->parentMessage->ID == frame.ID) if (sig->parentMessage->ID == frame.frameId())
{ {
if (sig->processAsText(frame, sigString, false)) //if true we could interpret the signal so update it in the list if (sig->processAsText(frame, sigString, false)) //if true we could interpret the signal so update it in the list
{ {
+9
View File
@@ -97,6 +97,15 @@ public:
else return formatHexNum(value); else return formatHexNum(value);
} }
static QString formatNumber(char value)
{
if (decimalMode)
{
return QString::number((unsigned char)value, 10);
}
else return formatHexNum((unsigned char)value);
}
static QString formatCANID(uint64_t id, bool extended) static QString formatCANID(uint64_t id, bool extended)
{ {
if (decimalMode) return QString::number(id, 10); if (decimalMode) return QString::number(id, 10);