diff --git a/dbc/dbc_classes.cpp b/dbc/dbc_classes.cpp index 96c21f6..5467b4f 100644 --- a/dbc/dbc_classes.cpp +++ b/dbc/dbc_classes.cpp @@ -38,26 +38,21 @@ bool DBC_SIGNAL::isSignalInMessage(const CANFrame &frame) { if (parentMessage->multiplexorSignal != nullptr) { - return _sigInMsgPriv(frame, parentMessage->multiplexorSignal); + if (multiplexParent->isSignalInMessage(frame)) //parent is in message so check if value is correct + { + int val; + if (!multiplexParent->processAsInt(frame, val)) return false; + if ((val >= multiplexLowValue) && (val <= multiplexHighValue)) + { + return true; + } + else return false; + } + else return false; } else return false; } - else return true; -} - -bool DBC_SIGNAL::_sigInMsgPriv(const CANFrame &frame, DBC_SIGNAL *multiplexor) -{ - int val; - if (!multiplexor->processAsInt(frame, val)) return false; - foreach (DBC_SIGNAL *child, multiplexedChildren) - { - if ((val >= child->multiplexLowValue) && (val <= child->multiplexHighValue)) - { - if (child->isMultiplexor) return _sigInMsgPriv(frame, child); //recurse down a level and keep searching - if (child == this) return true; //if we are that child then we matched! - } - } - return false; //signal not found in this message + else return true; //if signal isn't multiplexed then it's definitely in the message } //Take all the children of this signal and see if they exist in the message. Can be called recursively to descend the dependency tree diff --git a/dbc/dbc_classes.h b/dbc/dbc_classes.h index 3e090cf..fd085c2 100644 --- a/dbc/dbc_classes.h +++ b/dbc/dbc_classes.h @@ -120,14 +120,12 @@ public: //TODO: this is sloppy. It shouldn't all be public! QString processSignalTree(const CANFrame &frame); DBC_ATTRIBUTE_VALUE *findAttrValByName(QString name); DBC_ATTRIBUTE_VALUE *findAttrValByIdx(int idx); + bool isSignalInMessage(const CANFrame &frame); friend bool operator<(const DBC_SIGNAL& l, const DBC_SIGNAL& r) { return (l.name.toLower() < r.name.toLower()); } -private: - bool isSignalInMessage(const CANFrame &frame); - bool _sigInMsgPriv(const CANFrame &frame, DBC_SIGNAL *multiplexor); }; class DBCSignalHandler; //forward declaration to keep from having to include dbchandler.h in this file and thus create a loop diff --git a/re/graphingwindow.cpp b/re/graphingwindow.cpp index 18617ce..d5e153a 100644 --- a/re/graphingwindow.cpp +++ b/re/graphingwindow.cpp @@ -1250,6 +1250,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) int sBit, bits; bool intelFormat, isSigned; QString tempStr; + double x,y; qDebug() << "New Graph ID: " << params.ID; qDebug() << "Start bit: " << params.startBit; @@ -1283,8 +1284,8 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) params.x.reserve(numEntries); params.y.reserve(numEntries); - params.x.fill(0, numEntries); - params.y.fill(0, numEntries); + //params.x.fill(0, numEntries); + //params.y.fill(0, numEntries); sBit = params.startBit; bits = params.numBits; @@ -1294,19 +1295,32 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) for (int j = 0; j < numEntries; j++) { int k = j * params.stride; + if (params.associatedSignal) + { + //skip all the rest of the stuff in this loop and don't add this to the graph if this signal isn't in this frame + if (!params.associatedSignal->isSignalInMessage(frameCache[k])) + { + qDebug() << "Signal was not in this frame"; + continue; + } + else qDebug() << "Signal in the frame!"; + } tempVal = Utility::processIntegerSignal(frameCache[k].payload(), sBit, bits, intelFormat, isSigned); //& params.mask; //qDebug() << tempVal; - params.y[j] = (tempVal * params.scale) + params.bias; + y = (tempVal * params.scale) + params.bias; + params.y.append( y ); if (secondsMode) { - params.x[j] = (frameCache[k].timeStamp().microSeconds()) / 1000000.0; + x = (frameCache[k].timeStamp().microSeconds()) / 1000000.0; } else { - params.x[j] = frameCache[k].timeStamp().microSeconds(); + x = frameCache[k].timeStamp().microSeconds(); } + params.x.append( x ); + if (params.associatedSignal && numEntries > 1) { @@ -1314,7 +1328,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) if (isValid) { if (params.prevValLocation == QPointF(0,0)) { - params.prevValLocation = QPointF(params.x[j], params.y[j]); + params.prevValLocation = QPointF(x, y); params.prevValStr = tempStr; params.prevValTable = 0; } @@ -1330,7 +1344,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) // add the bracket at the top: QCPItemBracket *bracket = new QCPItemBracket(ui->graphingView); bracket->left->setCoords(params.prevValLocation); - bracket->right->setCoords(params.x[j], params.prevValLocation.y()); + bracket->right->setCoords(x, params.prevValLocation.y()); bracket->setLength(12); params.brackets.append(bracket); @@ -1342,7 +1356,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) valueText->setText(params.prevValStr); valueText->setFont(QFont(font().family(), 10)); params.bracketTexts.append(valueText); - params.prevValLocation = QPointF(params.x[j], params.y[j]); + params.prevValLocation = QPointF(x, y); params.prevValStr = tempStr; params.lastBracket = bracket; } @@ -1350,10 +1364,10 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) } } - if (params.y[j] < yminval) yminval = params.y[j]; - if (params.y[j] > ymaxval) ymaxval = params.y[j]; - if (params.x[j] < xminval) xminval = params.x[j]; - if (params.x[j] > xmaxval) xmaxval = params.x[j]; + if (y < yminval) yminval = y; + if (y > ymaxval) ymaxval = y; + if (x < xminval) xminval = x; + if (x > xmaxval) xmaxval = x; } if (params.prevValLocation != QPointF(0,0)) @@ -1361,7 +1375,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) int j = numEntries - 1; QCPItemBracket *bracket = new QCPItemBracket(ui->graphingView); bracket->left->setCoords(params.prevValLocation); - bracket->right->setCoords(params.x[j], params.prevValLocation.y()); + bracket->right->setCoords(x, params.prevValLocation.y()); bracket->setLength(12); // add text label for this value table entry @@ -1371,7 +1385,7 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam) valueText->setPositionAlignment(Qt::AlignBottom|Qt::AlignHCenter); valueText->setText(params.prevValStr); valueText->setFont(QFont(font().family(), 10)); - params.prevValLocation = QPointF(params.x[j], params.y[j]); + params.prevValLocation = QPointF(x, y); params.prevValStr = tempStr; params.prevValTable = tempVal; params.lastBracket = bracket;