Index: sources/canbus/MessageDispatcher.cpp =================================================================== diff -u -rcbb246d6efa242f927f88ac5da518dedb2d63320 -r3a615cc4c3461a232d3cb9519f9f37cd994f2c48 --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision cbb246d6efa242f927f88ac5da518dedb2d63320) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision 3a615cc4c3461a232d3cb9519f9f37cd994f2c48) @@ -851,6 +851,13 @@ return true; } +/*! + * \brief MessageDispatcher::checkAcknowReceived + * \details check if the message was an acknowledge. + * \param vMessage - The received message + * \param vSrcText - The source entity identifier text + * \return true if the message is Acknow + */ bool MessageDispatcher::checkAcknowReceived(const Message &vMessage, const QString &vSrcText) { GuiActionType mActionId = vMessage.actionId; @@ -869,11 +876,22 @@ return ok; } +/*! + * \brief MessageDispatcher::checkAcknowTransmit + * \details Sends the Ack message. + * \param vMessage - the received message which to check if it may need Ack. + * \param vSrcText - the source of the message which needs Ack. + * \return returns true if the message needs an Ack (Negative Sequence) + */ bool MessageDispatcher::checkAcknowTransmit(const Message &vMessage, const QString &vSrcText) { bool ok = false; GuiActionType mActionId = vMessage.actionId; Sequence mSequence = vMessage.sequence; + + // UI shall acknowledge the messages is intended for UI. + if ( ! needsAcknow(vMessage.can_id)) return ok; // false + if (mSequence < 0) { ok = true; #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG @@ -969,3 +987,27 @@ { return _needsAcknow.contains(vActionId); } + +/*! + * \brief MessageDispatcher::needsAcknow + * \details List of the CAN channels which need Acknow + * \param vCan_Id - The message CANBus id + * \return true if needs an Acknow + */ +bool MessageDispatcher::needsAcknow(Can_Id vCan_Id) +{ + bool ok = true; + switch(vCan_Id) { // list if the channels UI shall not Ack + case eChlid_HD_DG : // 0x008, ///< HD => DG + case eChlid_DG_HD : // 0x010, ///< DG => HD + case eDialin_HD : // 0x400, ///< dialin => HD + case eHD_Dialin : // 0x401, ///< HD => dialin + case eDialin_DG : // 0x402, ///< dialin => DG + case eDG_Dialin : // 0x403, ///< DG => dialin + ok = false; break; + + default: break; + } + + return ok; +}