Index: sources/canbus/MessageDispatcher.cpp =================================================================== diff -u -rf734248435a849bf26d13f6e78d0ad4c1002d019 -r13d6a4fae2f910ab6e289ac9280258a94f734405 --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision f734248435a849bf26d13f6e78d0ad4c1002d019) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision 13d6a4fae2f910ab6e289ac9280258a94f734405) @@ -45,7 +45,7 @@ if ( _init ) return false; _init = true; - // runs in DriveWatcher thread + // runs in the thread initConnections(); LOG_DEBUG("UI," + tr("%1 Initialized").arg(metaObject()->className())); @@ -323,7 +323,7 @@ void MessageDispatcher::onAdjustment(const AlarmActiveListRequestData &) { QVariantList mData; - onActionTransmit(GuiActionType::ID_AlarmUserActionReq, mData); + onActionTransmit(GuiActionType::ID_AlarmActiveListReq, mData); } /*! @@ -336,7 +336,7 @@ void MessageDispatcher::onAdjustment(const AdjustHDAlarmVolumeRequestData &vData) { QVariantList mData; - mData += vData.volume; + mData += vData.volume / 20; // HD vol range is [1-5] and we show [20%-100%] to user. onActionTransmit(GuiActionType::ID_AlarmVolumeSetReq, mData); } @@ -429,6 +429,19 @@ /*! * \brief MessageDispatcher::onAdjustment + * \details This method transmits the DG Set Date Time Denali message. + * \param vData - Data model contains the epoch time + * \return void + */ +void MessageDispatcher::onAdjustment(const AdjustServiceRequestData &) +{ + QVariantList mData; + onActionTransmit(GuiActionType::ID_AdjustServiceReq, mData); +} + + +/*! + * \brief MessageDispatcher::onAdjustment * \details This method transmits the Pressures Limits Adjustment Denali message. * \param vData - Data model contains treatment Pressures Limits adjustment. * \return void @@ -789,6 +802,49 @@ return true; } +bool MessageDispatcher::checkAcknowReceived(const Message &vMessage, const char *src) +{ + GuiActionType mActionId = vMessage.actionId; + Sequence mSequence = vMessage.sequence; + bool ok = false; + if ( mActionId == GuiActionType::ID_Acknow ) { + ok = true; + #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG + LOG_EVENT(tr("%1,Ack Bak, Sq:%2").arg(src).arg(mSequence)); + #endif + #ifdef DEBUG_ACKBACK_HD_TO_UI + qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); + #endif + emit didAcknowReceive(mSequence); + } + return ok; +} + +bool MessageDispatcher::checkAcknowTransmit(const Message &vMessage, const char *src) +{ + bool ok = false; + GuiActionType mActionId = vMessage.actionId; + Sequence mSequence = vMessage.sequence; + if (mSequence < 0) { + ok = true; + #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG + LOG_EVENT(tr("%1,Ack Req, Sq:%2, ID:%3").arg(src).arg(mSequence).arg(Format::toHexString(mActionId))); + #endif + #ifdef DEBUG_ACKBACK_HD_TO_UI + qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckReq : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); + #endif + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak is immediately handled at the same place. + actionTransmit(GuiActionType::ID_Acknow, {}, -mSequence); + #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG + LOG_EVENT(tr("UI,Ack Bak, Sq:%1").arg(-mSequence)); + #endif + #ifdef DEBUG_ACKBACK_HD_TO_UI + qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(-mSequence).arg(vMessage.actionId); + #endif + } + return ok; +} + /*! * \brief MessageDispatcher::interpretMessage * \details Calls the MessageInterpreter interpretMessage method @@ -801,47 +857,19 @@ { bool ok = false; QVariantList mData; - Sequence mSequence = vMessage.sequence; - Can_Source src = MessageInterpreter::identifySource(vMessage.can_id); - QString ids = (src == Can_Source::eCan_HD) ? "HD" : ((src == Can_Source::eCan_DG) ? "DG" : "XX"); + Can_Source srcID = MessageInterpreter::identifySource(vMessage.can_id); + const char *srcText = (srcID == Can_Source::eCan_HD) ? "HD" : ((srcID == Can_Source::eCan_DG) ? "DG" : "XX"); + if ( ! checkAcknowReceived(vMessage, srcText) ) { // check if the message was an acknowledge. + checkAcknowTransmit(vMessage, srcText); // then if needs acknow send it immediately. + } + // coco begin validated: Has been validated manually. If MessageInterpreter::interpretMessage fails, this also returns false - if (_interpreter.interpretMessage(vMessage, mData)) { - // coco end + if ( _interpreter.interpretMessage( vMessage, mData ) ) { ok = true; - GuiActionType mActionId = vMessage.actionId; - switch (mActionId) { - case GuiActionType::ID_Acknow: - #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG - LOG_EVENT(tr("%1,Ack Bak, Sq:%2").arg(ids).arg(mSequence)); - #endif - #ifdef DEBUG_ACKBACK_HD_TO_UI - qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); - #endif - emit didAcknowReceive(mSequence); - break; - - default: - if (mSequence < 0) { - #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG - LOG_EVENT(tr("%1,Ack Req, Sq:%2, ID:%3").arg(ids).arg(mSequence).arg(Format::toHexString(mActionId))); - #endif - #ifdef DEBUG_ACKBACK_HD_TO_UI - qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckReq : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); - #endif - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak is immediately handled at the same place. - actionTransmit(GuiActionType::ID_Acknow, {}, -mSequence); - #ifndef DISABLE_ACKNOW_CHECKIN_MESSAGE_LOG - LOG_EVENT(tr("UI,Ack Bak, Sq:%1").arg(-mSequence)); - #endif - #ifdef DEBUG_ACKBACK_HD_TO_UI - qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(-mSequence).arg(vMessage.actionId); - #endif - } - emit didActionReceive(mActionId, mData); - break; - - } + emit didActionReceive(vMessage.actionId, mData); } + // coco end + _messageList[vMessage.can_id].removeLast(); return ok; }