Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -r6c59703781373f33cfec27eacf1f7e4ba1374626 -r6e4f94a2493feac307cafb025ca3ed8fb3806c43 --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 6c59703781373f33cfec27eacf1f7e4ba1374626) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 6e4f94a2493feac307cafb025ca3ed8fb3806c43) @@ -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 @@ -85,6 +103,12 @@ } break; + case Gui::GuiActionType::AdjustBloodDialysateReq: + if (vData.count()) { + vPayload = Format::fromVariant(vData); + } + break; + default: QString mActionIdHexString = Format::toHexString(vActionId); LOG_ERROR(tr("Unknown Message ID (UI) '%1'").arg(mActionIdHexString)); @@ -212,14 +236,20 @@ break; case Gui::GuiActionType::PressureOcclusion: - printUnhandled (vMessage); - ok = true; + ok = pressureOcclusionData (vMessage, vData); break; + case Gui::GuiActionType::AdjustBloodDialysateRsp: + ok = adjustBloodDialysateData (vMessage, vData); + break; + + case Gui::GuiActionType::TreatmentRanges: + ok = treatmentRangesData (vMessage, vData); + break; + default: printUnhandled (vMessage); break; - } return ok; } @@ -350,7 +380,7 @@ * \param vData - The dialydate inlet flow data * \return true if the message can be successfully converted to the Blood Flow data elements. */ -bool MessageInterpreter::getDialysateInletFlowData(const Message &vMessage, Model::DialysateFlow &vData) +bool MessageInterpreter::getDialysateInletFlowData(const Message &vMessage, Model::MDialysateFlow &vData) { if ( vMessage.actionId != Gui::GuiActionType::DialysateInletFlow ) { return false; @@ -379,7 +409,7 @@ bool MessageInterpreter::dialysateInletFlowData(const Message &vMessage, QVariantList &vData) { bool ok; - Model::DialysateFlow mData; + Model::MDialysateFlow mData; ok = getDialysateInletFlowData(vMessage, mData); LOG_DATUM(mData.toString()); @@ -492,7 +522,7 @@ * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. * \param vData - Alarm Status dta - * \return true if the data can be extracted as defined for PowerOff Message ID + * \return true if the data can be extracted as defined for AlarmStatus Message ID */ bool MessageInterpreter::getAlarmStatus(const Message &vMessage, Model::MAlarmStatus &vData) { @@ -540,3 +570,104 @@ // Types::getBits(ba, i, flag, 32); // qDebug() << '@' << flag << flag.toString() << ba; } + +/*! + * \brief MessageInterpreter::getPressureOcclusionData + * \details This method interprets Pressure Occlusion message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Pressure Occlusion data + * \return true if the data can be extracted as defined for PressureOcclusion Message ID + */ +bool MessageInterpreter::getPressureOcclusionData(const Message &vMessage, Model::MPressureOcclusion &vData) +{ + if ( vMessage.actionId != Gui::GuiActionType::PressureOcclusion ) { + return false; + } + + if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::PressureOcclusion] ) { + QString mActionIdHexString = Format::toHexString(vMessage.actionId); + LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); + return false; + } + + vData.fromByteArray(vMessage.data); + + return true; +} + +/*! + * \brief MessageInterpreter::pressureOcclusionData + * \details Used the getPressureOcclusionData method and converts each parameter + * in vData of type QVaranitList, to be used in the GUI + * Also logs the data + * \param vMessage - The message + * \param vData - the output data + * \return return value of the method getPressureOcclusionData + */ +bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) +{ + bool ok; + Model::MPressureOcclusion mData; + ok = getPressureOcclusionData(vMessage, mData); + LOG_DATUM(mData.toString()); + + if (ok) { + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + } + return ok; +} + +/*! + * \brief MessageInterpreter::adjustBloodDialysateData + * \details This method interprets AdjustBlood Dialysate Response message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - AdjustBlood Dialysate Response data + * \return true if the data can be extracted as defined for AdjustBlood Dialysate Response Message ID + */ +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; +} + +/*! + * \brief MessageInterpreter::getTreatmentRangesData + * \details This method interprets Treatment Ranges message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Treatment Ranges data + * \return true if the data can be extracted as defined for Treatment Ranges Message ID + */ +bool MessageInterpreter::treatmentRangesData(const Message &vMessage, QVariantList &vData) +{ + // TODO : review other methods + bool ok = false; + if ( ! isType (vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; + + Model::MTreatmentRanges mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +}