From c4459d36c7177f7b589c9ab9c2fdd03bd003923d Mon Sep 17 00:00:00 2001 From: jogo- Date: Thu, 24 Jun 2021 15:13:59 +0200 Subject: [PATCH 1/5] Fix bug ISOTP CF 0x20 The ISOTP Consecutive Frames start from 0x21 (2: Frame type, 1: Sequence number) and not 0x20 ! --- bus_protocols/isotp_handler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bus_protocols/isotp_handler.cpp b/bus_protocols/isotp_handler.cpp index 553bd91..8bf3011 100644 --- a/bus_protocols/isotp_handler.cpp +++ b/bus_protocols/isotp_handler.cpp @@ -53,7 +53,7 @@ void ISOTP_HANDLER::sendISOTPFrame(int bus, int ID, QByteArray data) CANFrame frame; frame.setFrameType(QCanBusFrame::DataFrame); int currByte = 0; - int index = 0; + int sequence = 1; //Initial Sequence number is 1 if (bus < 0) return; if (bus >= CANConManager::getInstance()->getNumBuses()) return; @@ -90,8 +90,8 @@ void ISOTP_HANDLER::sendISOTPFrame(int bus, int ID, QByteArray data) while (currByte < data.length()) { for (int b = 0; b < 8; b++) bytes[b] = 0x00; - bytes[0] = 0x20 + index; - index = (index + 1) & 0xF; + bytes[0] = 0x20 + sequence; //Consecutive Frame starts from 0x20 + 1 (2: Frame type, 1: Sequence number) + sequence = (sequence + 1) & 0xF; int bytesToGo = data.length() - currByte; if (bytesToGo > 7) bytesToGo = 7; for (int i = 0; i < bytesToGo; i++) bytes[1 + i] = data[currByte++]; From 76488451eb6c7f21023ff754e4b50bf88b797501 Mon Sep 17 00:00:00 2001 From: jogo- Date: Fri, 25 Jun 2021 12:18:08 +0200 Subject: [PATCH 2/5] Fix bugs ISOTP+UDS data bytes The ISOTP and UDS data bytes were not initialized correctly as 'msg.payload().length()' ! Essentially fix these 2 bugs here: https://github.com/collin80/SavvyCAN/blob/fb2e7c473ea36e432cd4e213157e046b46ddcac9/scriptcontainer.cpp#L314 https://github.com/collin80/SavvyCAN/blob/fb2e7c473ea36e432cd4e213157e046b46ddcac9/scriptcontainer.cpp#L394 --- scriptcontainer.cpp | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/scriptcontainer.cpp b/scriptcontainer.cpp index e877944..5cb63da 100644 --- a/scriptcontainer.cpp +++ b/scriptcontainer.cpp @@ -145,12 +145,12 @@ void ScriptContainer::addParameter(QJSValue name) void ScriptContainer::updateValuesTable(QTableWidget *widget) { - QString valu; + QString value; foreach (QString paramName, scriptParams) { - valu = scriptEngine->globalObject().property(paramName).toString(); - qDebug() << paramName << " - " << valu; + value = scriptEngine->globalObject().property(paramName).toString(); + qDebug() << paramName << " - " << value; bool found = false; for (int i = 0; i < widget->rowCount(); i++) { @@ -159,7 +159,7 @@ void ScriptContainer::updateValuesTable(QTableWidget *widget) found = true; if (!widget->item(i, 1)->isSelected()) { - widget->item(i,1)->setText(valu); + widget->item(i,1)->setText(value); } break; } @@ -174,7 +174,7 @@ void ScriptContainer::updateValuesTable(QTableWidget *widget) item->setFlags(Qt::ItemIsEnabled); widget->setItem(row, 0, item); item = new QTableWidgetItem(); - item->setText(valu); + item->setText(value); widget->setItem(row, 1, item); } } @@ -297,7 +297,7 @@ void ISOTPScriptHelper::setFilter(QJSValue id, QJSValue mask, QJSValue bus) uint32_t idVal = id.toUInt(); uint32_t maskVal = mask.toUInt(); int busVal = bus.toInt(); - qDebug() << "Called isotp set filter"; + qDebug() << "Called ISOTP set filter"; qDebug() << idVal << "*" << maskVal << "*" << busVal; handler->addFilter(busVal, idVal, maskVal); @@ -306,18 +306,17 @@ void ISOTPScriptHelper::setFilter(QJSValue id, QJSValue mask, QJSValue bus) void ISOTPScriptHelper::sendISOTP(QJSValue bus, QJSValue id, QJSValue length, QJSValue dataBytes) { ISOTP_MESSAGE msg; - QByteArray dataArray; msg.setExtendedFrameFormat(false); msg.setFrameId(id.toUInt()); - dataArray.resize(length.toInt()); + QByteArray dataArray(length.toUInt(), 0); - int dataLen = msg.payload().length(); + int dataLen = dataArray.length(); if (!dataBytes.isArray()) qDebug() << "data isn't an array"; for (int i = 0; i < dataLen; i++) { - dataArray[i] = static_cast(dataBytes.property(i).toInt()); + dataArray[i] = static_cast(dataBytes.property(i).toInt()); } msg.setPayload(dataArray); @@ -325,7 +324,8 @@ void ISOTPScriptHelper::sendISOTP(QJSValue bus, QJSValue id, QJSValue length, QJ if (msg.frameId() > 0x7FF) msg.setExtendedFrameFormat(true); - qDebug() << "sending isotp message from script"; + qDebug() << "sending ISOTP message from script"; + handler->sendISOTPFrame(msg.bus, msg.frameId(), msg.payload()); } @@ -372,28 +372,29 @@ void UDSScriptHelper::setFilter(QJSValue id, QJSValue mask, QJSValue bus) uint32_t idVal = id.toUInt(); uint32_t maskVal = mask.toUInt(); int busVal = bus.toInt(); - qDebug() << "Called uds set filter"; + qDebug() << "Called UDS set filter"; qDebug() << idVal << "*" << maskVal << "*" << busVal; handler->addFilter(busVal, idVal, maskVal); } -void UDSScriptHelper::sendUDS(QJSValue bus, QJSValue id, QJSValue service, QJSValue sublen, QJSValue subFunc, QJSValue length, QJSValue data) +void UDSScriptHelper::sendUDS(QJSValue bus, QJSValue id, QJSValue service, QJSValue sublen, QJSValue subFunc, QJSValue length, QJSValue dataBytes) { UDS_MESSAGE msg; - QByteArray dataArray; msg.setExtendedFrameFormat(false); - msg.setFrameId( id.toUInt() ); - dataArray.resize(length.toUInt()); + msg.setFrameId(id.toUInt()); + QByteArray dataArray(length.toUInt(), 0); msg.service = service.toUInt(); msg.subFuncLen = sublen.toUInt(); msg.subFunc = subFunc.toUInt(); - if (!data.isArray()) qDebug() << "data isn't an array"; + int dataLen = dataArray.length(); - for (int i = 0; i < msg.payload().length(); i++) + if (!dataBytes.isArray()) qDebug() << "data isn't an array"; + + for (int i = 0; i < dataLen; i++) { - dataArray[i] = (static_cast(data.property(static_cast(i)).toInt())); + dataArray[i] = static_cast(dataBytes.property(i).toInt()); } msg.setPayload(dataArray); From 2109c8489164974e69f111b100b2238efbae7009 Mon Sep 17 00:00:00 2001 From: jogo- Date: Tue, 29 Jun 2021 22:18:38 +0200 Subject: [PATCH 3/5] Update jsedit.cpp * Add keyword "const" * Remove duplicate "constructor" --- jsedit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsedit.cpp b/jsedit.cpp index aff5f81..670ccea 100644 --- a/jsedit.cpp +++ b/jsedit.cpp @@ -78,6 +78,7 @@ JSHighlighter::JSHighlighter(QTextDocument *parent) m_keywords << "break"; m_keywords << "case"; m_keywords << "catch"; + m_keywords << "const"; m_keywords << "continue"; m_keywords << "default"; m_keywords << "delete"; @@ -137,7 +138,6 @@ JSHighlighter::JSHighlighter(QTextDocument *parent) m_knownIds << "arguments"; m_knownIds << "arity"; m_knownIds << "caller"; - m_knownIds << "constructor"; m_knownIds << "length"; m_knownIds << "name"; m_knownIds << "apply"; From 44de49af223574908322312a82b3a8297ed1475c Mon Sep 17 00:00:00 2001 From: jogo- Date: Fri, 2 Jul 2021 11:41:02 +0200 Subject: [PATCH 4/5] Update jsedit.cpp * Add keyword "let" --- jsedit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/jsedit.cpp b/jsedit.cpp index 670ccea..99aabd8 100644 --- a/jsedit.cpp +++ b/jsedit.cpp @@ -90,6 +90,7 @@ JSHighlighter::JSHighlighter(QTextDocument *parent) m_keywords << "if"; m_keywords << "in"; m_keywords << "instanceof"; + m_keywords << "let"; m_keywords << "new"; m_keywords << "return"; m_keywords << "switch"; From 59e387aad83aabbd678644b174dc17e48ff1686d Mon Sep 17 00:00:00 2001 From: jogo- Date: Fri, 2 Jul 2021 15:32:37 +0200 Subject: [PATCH 5/5] Update jsedit.cpp * Highlight hexadecimal numbers --- jsedit.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jsedit.cpp b/jsedit.cpp index 99aabd8..4784219 100644 --- a/jsedit.cpp +++ b/jsedit.cpp @@ -266,7 +266,8 @@ void JSHighlighter::highlightBlock(const QString &text) Identifier = 2, String = 3, Comment = 4, - Regex = 5 + Regex = 5, + HexNumber = 6 }; QList bracketPositions; @@ -291,6 +292,10 @@ void JSHighlighter::highlightBlock(const QString &text) start = i; if (ch.isSpace()) { ++i; + } else if (ch == '0' && (next == 'x' || next == 'X')) { + ++i; + ++i; + state = HexNumber; } else if (ch.isDigit()) { ++i; state = Number; @@ -334,6 +339,15 @@ void JSHighlighter::highlightBlock(const QString &text) } break; + case HexNumber: + if (ch.isSpace() || !(ch.isDigit() || QString("ABCDEF").contains(ch.toUpper()))) { + setFormat(start, i - start, m_colors[JSEdit::Number]); + state = Start; + } else { + ++i; + } + break; + case Identifier: if (ch.isSpace() || !(ch.isDigit() || ch.isLetter() || ch == '_')) { QString token = text.mid(start, i - start).trimmed();