Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -rfef563aa317eb3e025e2dab0264e854f05a216d6 -rf148379112a69d1c52027f2667e95f3f96d948ad --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision fef563aa317eb3e025e2dab0264e854f05a216d6) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision f148379112a69d1c52027f2667e95f3f96d948ad) @@ -31,6 +31,24 @@ */ MessageInterpreter::MessageInterpreter(QObject *parent) : QObject(parent) { } +bool MessageInterpreter::isType(const Message &vMessage, Gui::GuiActionType vType) const +{ + if ( vMessage.actionId != vType ) { + return false; + } + return true; +} + +bool MessageInterpreter::isPayloadLenValid(const Message &vMessage, Gui::GuiActionType vType) const +{ + if ( vMessage.data.length() < payloadLen[vType] ) { + QString mActionIdHexString = Format::toHexString(vMessage.actionId); + LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); + return false; + } + return true; +} + /*! * \brief MessageInterpreter::interpretMessage * \details This method will be called @@ -219,9 +237,15 @@ break; case Gui::GuiActionType::PressureOcclusion: - ok = pressureOcclusionData (vMessage, vData); + ok = pressureOcclusionData (vMessage, vData); break; + case Gui::GuiActionType::AdjustBloodDialysateRsp: + ok = adjustBloodDialysateData (vMessage, vData); + break; + + + default: printUnhandled (vMessage); break; @@ -577,3 +601,20 @@ } return ok; } + +bool MessageInterpreter::adjustBloodDialysateData(const Message &vMessage, QVariantList &vData) +{ + // TODO : review other methods + bool ok = false; + if ( ! isType (vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + + Model::MAdjustBloodDialysateResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +}