Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -red85c796c2e3bd73aeda374d9a109750bd7732e3 -rcb2101c6f2596d9131a5369420db345fe7125e71 --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision ed85c796c2e3bd73aeda374d9a109750bd7732e3) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision cb2101c6f2596d9131a5369420db345fe7125e71) @@ -83,21 +83,13 @@ return true; } -bool MessageInterpreter::isDataLenValid(const Gui::GuiActionType &vActionId, const QVariantList &vData) +void MessageInterpreter::logInvalidLength(const Gui::GuiActionType &vActionId) { - if (vActionId == Gui::GuiActionType::ID_KeepAlive) - return true; // This message is an exception which is also used to generate fake data and it has a variable length. - - if (payloadLen[vActionId] == 0) - return true; // Message with zero length data are ok as been defined - - if (vData.length()) return true; - QString mActionIdHexString = Format::toHexString(vActionId); - LOG_DEBUG(QString("Data length for transmit Message with ID '%1'Can't be 0") + LOG_DEBUG(QString("Incorrect data length for trsansmit Message with ID '%1'") .arg(mActionIdHexString)); - return false; } + /*! * \brief MessageInterpreter::validateMessage * \details Validate the messgae by checking its type and data @@ -184,59 +176,59 @@ QString mSenderID = "UI,"; vPayload.clear(); + int count = vData.length(); - if ( ! isDataLenValid(vActionId, vData)) return false; - switch (vActionId) { // notice we are in transmit mode - case Gui::GuiActionType::ID_PowerOff: { - quint8 state = vData[0].toUInt(); - vPayload += state; - LOG_EVENT(AdjustPowerOffRequestData(state).toString()); - } - break; + case Gui::GuiActionType::ID_Acknow: + break; // No data, Just registered + case Gui::GuiActionType::ID_KeepAlive: - // Nothing needs to be done. - // KeepAlive has No data. - // Mentioned in the switch/case to be registered as a valid message. - // - // Note : added this line to be able to do the Fake Test - vPayload = Format::fromVariant(vData[0]); + if ( count ) { // this message has a variable length + vPayload = Format::fromVariant(vData[0]); + } LOG_EVENT(mSenderID + QString("CheckIn")); break; - case Gui::GuiActionType::ID_Acknow: - // Nothing needs to be done. - // Acknow has No data. - // Mentioned in the switch/case to be registered as a valid message. - break; - case Gui::GuiActionType::ID_RawData: - vPayload = Format::fromVariant(vData[0]); + if ( count ) { // this message has a variable length + vPayload = Format::fromVariant(vData[0]); + } LOG_EVENT(mSenderID + QString("RawData")); break; + case Gui::GuiActionType::ID_PowerOff: + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload += Format::fromVariant(vData); + LOG_EVENT(AdjustPowerOffRequestData::toString(vData)); + break; + case Gui::GuiActionType::ID_AdjustBloodDialysateReq: + if ( ! count ) { logInvalidLength(vActionId); return false; } vPayload = Format::fromVariant(vData); LOG_EVENT(AdjustBloodDialysateRequestData::toString(vData)); break; case Gui::GuiActionType::ID_AdjustDurationReq: + if ( ! count ) { logInvalidLength(vActionId); return false; } vPayload = Format::fromVariant(vData); LOG_EVENT(AdjustDurationRequestData::toString(vData)); break; case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq: + if ( ! count ) { logInvalidLength(vActionId); return false; } vPayload = Format::fromVariant(vData); LOG_EVENT(AdjustUltrafiltrationStateRequestData::toString(vData)); break; case Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq: + if ( ! count ) { logInvalidLength(vActionId); return false; } vPayload = Format::fromVariant(vData); LOG_EVENT(AdjustUltrafiltrationEditRequestData::toString(vData)); break; case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq: + if ( ! count ) { logInvalidLength(vActionId); return false; } vPayload = Format::fromVariant(vData); LOG_EVENT(AdjustUltrafiltrationConfirmRequestData::toString(vData)); break;