Index: sources/canbus/messagedispatcher.cpp =================================================================== diff -u -r227f28b202f81ab3dd04a81868697025ccab6220 -re58b907a69d4ca7daa77d69791593b886d1b80e8 --- sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision 227f28b202f81ab3dd04a81868697025ccab6220) +++ sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision e58b907a69d4ca7daa77d69791593b886d1b80e8) @@ -133,28 +133,16 @@ // Append a message to the list if (_messageList[vCanId].isEmpty() || _messageList[vCanId].last().isComplete()) { _messageList[vCanId].append(Message()); - //qDebug() << tr("Created a message for channel %1#%2").arg(vCanId).arg(Format::toHexString(vPayload)); - } /*else { - qDebug() << tr("Data for message on channel %1#%2").arg(vCanId).arg(Format::toHexString(vPayload)); - }*/ - //for (int i = 0; i < _messageList[vCanId].count(); ++i) { - // qDebug() << _messageList[vCanId][i].data.toHex('.'); - //} - // build the message - if (! _builder.buildMessage(vPayload, _messageList[vCanId].last(), vCanId)) { - _messageList[vCanId].removeLast(); - return; } + + // build the message and check. + if (! buildMessage(vCanId, vPayload)) + return; Message mMessage = _messageList[vCanId].last(); // TODO : must be moved to a MessageModel class if (mMessage.isComplete()) { - GuiActionType mActionId; - QVariantList mData; - if (_interpreter.interpretMessage(vCanId, mMessage, mActionId, mData)) { - emit didActionReceive(mActionId, mData); - } - _messageList[vCanId].removeLast(); + interpretMessage(mMessage); } } @@ -196,3 +184,55 @@ } } +/*! + * \brief MessageDispatcher::buildMessage + * \details Calls the messageBuilder buildMessage method. + * \param vCanId - CANBUS channel of the frame + * \param vPayload - Payload of the frame + * \return false on error + */ +bool MessageDispatcher::buildMessage(Can_Id vCanId, const QByteArray &vPayload) +{ + if (vPayload.length() < eLenCanFrame) { + LOG_ERROR(tr("Incorrect frame length. Exp:%1,got:%2").arg(eLenCanFrame).arg(vPayload.length())); + return false; + } + if (! _builder.buildMessage(vPayload, _messageList[vCanId].last(), vCanId)) { + _messageList[vCanId].removeLast(); + return false; + } + return true; +} + +/*! + * \brief MessageDispatcher::interpretMessage + * \details Calls the MessageInterpreter interpretMessage method + * Regarding the Message Id and the sequence emit different signals + * to handle the normal or acknowledge messages. + * \param vMessage - The Message + * \return false on error + */ +bool MessageDispatcher::interpretMessage(const Message &vMessage) +{ + bool ok = false; + QVariantList mData; + if (_interpreter.interpretMessage(vMessage, mData)) { + ok = true; + GuiActionType mActionId = vMessage.actionId; + switch (mActionId) { + case GuiActionType::Acknow: + emit didAcknowReceive(mData); + break; + default: + if (vMessage.sequence < 0) { + // actionTransmit(-vMessage.sequence, GuiActionType::Acknow,{}); + } + emit didActionReceive(mActionId, mData); + break; + } + } + _messageList[vMessage.can_id].removeLast(); + return ok; + +} +