Index: denali.pro.user =================================================================== diff -u -r8c69137f18382bdc55a5678e6ed44a7683fe4dea -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- denali.pro.user (.../denali.pro.user) (revision 8c69137f18382bdc55a5678e6ed44a7683fe4dea) +++ denali.pro.user (.../denali.pro.user) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -1,6 +1,6 @@ - + EnvironmentId Index: sources/applicationcontroller.h =================================================================== diff -u -rc6a09899d2e46dc0bda5a6b994aa257953626f97 -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- sources/applicationcontroller.h (.../applicationcontroller.h) (revision c6a09899d2e46dc0bda5a6b994aa257953626f97) +++ sources/applicationcontroller.h (.../applicationcontroller.h) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -27,6 +27,7 @@ // namespace using namespace Gui; + class ApplicationController : public QObject { Q_OBJECT Index: sources/canbus/messageacknowmodel.cpp =================================================================== diff -u -r939d1bae9a394697d46ca913a2dc3442bf8ef82f -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- sources/canbus/messageacknowmodel.cpp (.../messageacknowmodel.cpp) (revision 939d1bae9a394697d46ca913a2dc3442bf8ef82f) +++ sources/canbus/messageacknowmodel.cpp (.../messageacknowmodel.cpp) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -117,6 +117,16 @@ moveToThread(qApp->thread()); } +/*! + * \brief MessageAcknowModel::onAcknowTransmit + * \details This slot is called MessageDispatcher sends a message from UI which requires Acknow. + * An Acknow model will be added to list of the Acknow required messages. + * The connection will be made to be notified by that message when it's timed out. + * And the timer for that message will be started. + * \param vCan_Id - Denali message Can channel + * \param vSequence - Sequence number of the message which requires Acknow + * \param vFrameList - List of the frames to be sent on retries. + */ void MessageAcknowModel::onAcknowTransmit(Can_Id vCan_Id, Sequence vSequence, const FrameList &vFrameList) { _acknowList[vSequence] = new Private::AcknowModel(vCan_Id, vSequence, vFrameList); @@ -127,17 +137,46 @@ _acknowList[vSequence]->start(); } +/*! + * \brief Private::AcknowModel::start + * \details It starts the message timer which is waiting for the Acknow + * on each interval will notify the MessageDispatcher to retry + */ +void Private::AcknowModel::start() { + _timerId = startTimer(_interval); +} + +/*! + * \brief MessageAcknowModel::onAcknowReceive + * \details This slot is called when the Acknow request for the specific message with the sequence number vSequence + * has been received. + * \param vSequence - Sequence number of the message which required Acknow + */ void MessageAcknowModel::onAcknowReceive(Sequence vSequence) { _acknowList[vSequence]->deleteLater(); _acknowList.remove(vSequence); } +/*! + * \brief MessageAcknowModel::onFramesTransmit + * \details This slot will be called when a message which is waiting for Acknow didn't get the Acknow + * during the interval and retries to transmit the message again. + * \param vCan_Id - The can channel for the Denali message + * \param vSequence - The sequence number of the message + * \param vFrameList - The list of the frame(s) needs to be sent. + */ void MessageAcknowModel::onFramesTransmit(Can_Id vCan_Id, Sequence vSequence, const FrameList &vFrameList) { emit didFramesTransmit(vCan_Id, vSequence, vFrameList); } +/*! + * \brief MessageAcknowModel::onFailedTransmit + * \details After the _retry amount of retries this slot will be called + * to notify the outside of the failure Acknow. + * \param vSequence - The sequence number of the message + */ void MessageAcknowModel::onFailedTransmit(Sequence vSequence) { _acknowList[vSequence]->deleteLater(); Index: sources/canbus/messageacknowmodel.h =================================================================== diff -u -r939d1bae9a394697d46ca913a2dc3442bf8ef82f -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- sources/canbus/messageacknowmodel.h (.../messageacknowmodel.h) (revision 939d1bae9a394697d46ca913a2dc3442bf8ef82f) +++ sources/canbus/messageacknowmodel.h (.../messageacknowmodel.h) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -29,6 +29,7 @@ /*! * \brief The AcknowModel class * \details This is the private class of the MessageAcknowModel + * which keeps list of the messages require Acknow. * but since Qt doesn't support nested meta objects, * it has been moved out with a meaningful namespace. */ @@ -38,7 +39,7 @@ const int _interval = 1000; // in ms int _timerId = 0; - quint8 _retry = 9; + quint8 _retry = 5; Can_Id _can_Id = Can_Id::eChlid_NONE; Sequence _sequence = 0; @@ -53,9 +54,7 @@ _frameList = vFrameList; } - void start() { - _timerId = startTimer(_interval); - } + void start(); protected: /*! @@ -77,11 +76,30 @@ } signals: + + /*! + * \brief didFramesTransmit + * \details This signal is emitted when the requested Acknow has not been received during the _interval to retry to send message. + * \param vCan_Id - Denali message Can channel + * \param vSequence - Sequence number of the message which requires Acknow + * \param vFrameList - List of the frames to be sent on retries. + */ void didFramesTransmit(Can_Id vCan_Id, Sequence vSequence, const FrameList &vFrameList); // Retry + + /*! + * \brief didFailedTransmit + * \details This signal is emitted when the requested Acknow has not been received after all the _retry times of retries. + * \param vSequence + */ void didFailedTransmit( Sequence vSequence ); // Retry failed }; } + +/*! + * \brief The MessageAcknowModel class + * \details The wrapper class of the AcknowModel which does the thread handling. + */ class MessageAcknowModel : public QObject { Q_OBJECT @@ -110,7 +128,23 @@ void quitThread(); signals: + + /*! + * \brief didFramesTransmit + * \details This signal is the propagation signal to propagate the AcknowModel Message signal of the same name + * when the requested Acknow has not been received during the _interval to retry to send message. + * \param vCan_Id - Denali message Can channel + * \param vSequence - Sequence number of the message which requires Acknow + * \param vFrameList - List of the frames to be sent on retries. + */ void didFramesTransmit(Can_Id vCan_Id, Sequence vSequence, const FrameList &vFrameList); // Retry + + /*! + * \brief didFailedTransmit + * \details This signal is the propagation signal to propagate the AcknowModel Message signal of the same name + * when the requested Acknow has not been received after all the _retry times of retries. + * \param vSequence + */ void didFailedTransmit( Sequence vSequence ); // Retry failed private slots: Index: sources/canbus/messagebuilder.cpp =================================================================== diff -u -r0e87420e50dd94c37eb25f289ef3262e0e45d7f4 -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- sources/canbus/messagebuilder.cpp (.../messagebuilder.cpp) (revision 0e87420e50dd94c37eb25f289ef3262e0e45d7f4) +++ sources/canbus/messagebuilder.cpp (.../messagebuilder.cpp) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -80,6 +80,12 @@ vPayload.append(ePayload_Sync); // Sync byte } +/*! + * \brief MessageBuilder::addSequence + * \details Adds the sequence number to the Denali message. + * \param vPayload - The message payload to be used for adding the sequence number to. + * \param vSequence - The sequence number + */ void MessageBuilder::addSequence(QByteArray &vPayload, Sequence vSequence) { Sequence_Bytes mSequence; Index: sources/canbus/messagedispatcher.cpp =================================================================== diff -u -r939d1bae9a394697d46ca913a2dc3442bf8ef82f -r1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f --- sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision 939d1bae9a394697d46ca913a2dc3442bf8ef82f) +++ sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision 1ec7b44e6d1d66460d2da943ff65f3c0c0755d8f) @@ -23,7 +23,7 @@ #include "frameinterface.h" #include "messageacknowmodel.h" -#define DEBUG_ACKBACK_HD_TO_UI +//#define DEBUG_ACKBACK_HD_TO_UI using namespace Can;