Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -r7d3062c841b788ced31d939dec990afe0de1442d -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 7d3062c841b788ced31d939dec990afe0de1442d) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -30,6 +30,13 @@ */ MessageInterpreter::MessageInterpreter(QObject *parent) : QObject(parent) { } +/*! + * \brief MessageInterpreter::isType + * \details Checks if this is the message intended to be + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on correct type + */ bool MessageInterpreter::isType(const Message &vMessage, Gui::GuiActionType vType) const { if ( vMessage.actionId != vType ) { @@ -38,21 +45,65 @@ return true; } +/*! + * \brief MessageInterpreter::isPayloadLenValid + * \details Checks if the Data length has been defined for this type od messsage + * if not logs Undefind Data Length error + * if defined checks if the correct length of data is provided for this type of message. + * if not logs Incorrect Data Length error + * otherwise returns true + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on correct data length for the type vType + */ bool MessageInterpreter::isPayloadLenValid(const Message &vMessage, Gui::GuiActionType vType) const { QString mActionIdHexString = Format::toHexString(vMessage.actionId); if ( ! payloadLen.contains(vType) ) { - LOG_ERROR(tr("Undefined data length for Message ID (HD) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Undefined data length for received Message with ID '%1'").arg(mActionIdHexString)); return false; } if ( vMessage.data.length() < payloadLen[vType] ) { - LOG_ERROR(tr("Incorrect data length for Message ID (HD) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Incorrect data length for received Message with ID '%1'").arg(mActionIdHexString)); return false; } return true; } /*! + * \brief MessageInterpreter::validateMessage + * \details Validate the messgae by checking its type and data + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on valid massage + */ +bool MessageInterpreter::isValidMessage(const Message &vMessage, Gui::GuiActionType vType) const +{ + if ( ! isType (vMessage, vType) ) return false; + if ( ! isPayloadLenValid(vMessage, vType) ) return false; + return true; +} + +/*! + * \brief MessageInterpreter::printUnhandled + * \details Prints out the formatted string of the vMessage of type Message + * In case the Message ID of received CANBUS message + * is known to the interpreter but has not been handled/implemented. + * \param vMessage - The message contains Unhandled Message ID + */ +void MessageInterpreter::printUnhandled(const Message &vMessage) const +{ + if ( gDisableHunhandledReport ) return; + QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); + QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + + QString("%1 # %2 %3") + .arg(int(vMessage.can_id), 3, 16, QChar('0')) + .arg(mActionIdHexString) + .arg(QString(vMessage.data.toHex('.'))); + LOG_ERROR(logMessage); +} + +/*! * \brief MessageInterpreter::interpretMessage * \details This method will be called * to interpret messages from UI regarding vActionId. @@ -67,6 +118,8 @@ bool MessageInterpreter::interpretMessage(const Gui::GuiActionType &vActionId, const QVariantList &vData, QByteArray &vPayload) { bool ok = true; + QString mSenderID = "UI,"; + vPayload.clear(); int count = vData.count(); switch (vActionId) { // notice we are in transmit mode @@ -75,9 +128,10 @@ vPayload += vData[0].toUInt(); } else { QString mActionIdHexString = Format::toHexString(vActionId); - LOG_ERROR(tr("Incorrect data for Message ID (UI) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Incorrect data for transmit Message with ID '%1'").arg(mActionIdHexString)); ok = false; } + LOG_EVENT(mSenderID + QString("PowerOff," + QVariant(vData).toStringList().join(','))); break; case Gui::GuiActionType::KeepAlive: @@ -89,6 +143,7 @@ if (count) { vPayload = Format::fromVariant(vData[0]); } + LOG_EVENT(mSenderID + QString("CheckIn")); break; case Gui::GuiActionType::Acknow: @@ -107,35 +162,40 @@ if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustBloodDialysateRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustDurationReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustDurationRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationStateReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationStateRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationEditReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationEditRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationConfirmReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationConfirmRequestData::toString(vData)); break; default: QString mActionIdHexString = Format::toHexString(vActionId); - LOG_ERROR(tr("Unknown Message ID (UI) '%1'").arg(mActionIdHexString)); + LOG_ERROR(mSenderID + tr("Unknown transmit Message with ID '%1'").arg(mActionIdHexString)); ok = false; break; @@ -160,45 +220,23 @@ { bool ok = false; switch (vMessage.can_id) { - case eChlid_HD_UI: + case eChlid_HD_UI : case eChlid_HD_Alarm: - case eChlid_HD_Sync: - ok = interpretMessage_HD(vMessage, vData); - break; - // coco begin validated: Is a placeholder and There is no definition/implementation of DG communication with UI. - case eChlid_DG_UI: + case eChlid_HD_Sync : ok = interpretMessage_HD(vMessage, vData); break; + + // coco-begin-validated: Is a placeholder and There is no definition/implementation of DG communication with UI. + case eChlid_DG_UI : //case eChlid_DG_Alarm: - case eChlid_DG_Sync: - ok = interpretMessage_DG(vMessage, vData); - break; + case eChlid_DG_Sync : ok = interpretMessage_DG(vMessage, vData); break; default: break; - // coco end + // coco-end } return ok; } /*! - * \brief MessageInterpreter::printUnhandled - * \details Prints out the formatted string of the vMessage of type Message - * In case the Message ID of received CANBUS message - * is known to the interpreter but has not been handled/implemented. - * \param vMessage - The message contains Unhandled Message ID - */ -void MessageInterpreter::printUnhandled(const Message &vMessage) -{ - if ( gDisableHunhandledReport ) return; - QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); - QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + - QString("%1 # %2 %3") - .arg(int(vMessage.can_id), 3, 16, QChar('0')) - .arg(mActionIdHexString) - .arg(QString(vMessage.data.toHex('.'))); - LOG_ERROR(logMessage); -} - -/*! * \brief MessageInterpreter::interpretMessage_HD * \details This method will be called * for received messages from HD to interpret the vMessage of type Message @@ -217,91 +255,38 @@ vData.clear(); //qDebug() << vMessage.actionId; switch (vMessage.actionId) { // notice we are in receive mode - case Gui::GuiActionType::CanBUSFaultCount: - ok = canbusFaultCountData (vMessage, vData); - break; + // ----- Debug + case Gui::GuiActionType::CanBUSFaultCount : ok = canbusFaultCountData (vMessage, vData); break; - case Gui::GuiActionType::PowerOff: { - ok = powerOffData (vMessage, vData); - break; - } - case Gui::GuiActionType::Acknow: - ok = true; - break; + // ----- Datum + case Gui::GuiActionType::TreatmentTime : ok = treatmentTimeData (vMessage, vData); break; + case Gui::GuiActionType::BloodFlow : ok = bloodFlowData (vMessage, vData); break; + case Gui::GuiActionType::DialysateInletFlow : ok = dialysateInletFlowData (vMessage, vData); break; + case Gui::GuiActionType::DialysateOutletFlow : ok = dialysateOutletFlowData (vMessage, vData); break; + case Gui::GuiActionType::TreatmentRanges : ok = treatmentRangesData (vMessage, vData); break; + case Gui::GuiActionType::PressureOcclusion : ok = pressureOcclusionData (vMessage, vData); break; + case Gui::GuiActionType::TreatmentState : ok = treatmentStateData (vMessage, vData); break; - case Gui::GuiActionType::PowerOffBroadcast: - ok = true; - break; + // ----- Events + case Gui::GuiActionType::Acknow : ok = true; break; + case Gui::GuiActionType::PowerOff : ok = powerOff (vMessage, vData); break; + case Gui::GuiActionType::PowerOffBroadcast : ok = true; LOG_EVENT("HD,PowerOff Warning"); break; + case Gui::GuiActionType::AlarmStatus : ok = alarmStatus (vMessage, vData); break; + case Gui::GuiActionType::AlarmTriggered : ok = alarmTriggered (vMessage, vData); break; + case Gui::GuiActionType::AlarmCleared : ok = alarmCleared (vMessage, vData); break; - case Gui::GuiActionType::BloodFlow: - ok = bloodFlowData (vMessage, vData); - break; + // Adjustment Response Messages + case Gui::GuiActionType::AdjustDurationRsp : ok = adjustDuration (vMessage, vData); break; + case Gui::GuiActionType::AdjustBloodDialysateRsp : ok = adjustBloodDialysate (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationStateReq : ok = adjustUltrafiltrationState (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationEditRsp : ok = adjustUltrafiltrationEdit (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp: ok = adjustUltrafiltrationConfirm (vMessage, vData); break; - case Gui::GuiActionType::DialysateInletFlow: - ok = dialysateInletFlowData (vMessage, vData); - break; - - case Gui::GuiActionType::DialysateOutletFlow: - ok = dialysateOutletFlowData (vMessage, vData); - break; - - case Gui::GuiActionType::TreatmentTime: - ok = treatmentTime (vMessage, vData); - break; - - case Gui::GuiActionType::AlarmStatus: - ok = alarmStatus (vMessage, vData); - break; - - case Gui::GuiActionType::PressureOcclusion: - ok = pressureOcclusionData (vMessage, vData); - break; - - case Gui::GuiActionType::TreatmentRanges: - ok = treatmentRangesData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustBloodDialysateRsp: - ok = adjustBloodDialysateData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustDurationRsp: - ok = adjustDurationData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationStateReq: // AcknowGeneric : Generic Acknow respose - ok = adjustUltrafiltrationStateData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationEditRsp: - ok = adjustUltrafiltrationEditData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp: - ok = adjustUltrafiltrationConfirmData (vMessage, vData); - break; - // unhandles messages: these will only be logged as received message // there has nothing been defined for these messages. - case Gui::GuiActionType::AlarmTriggered: - printUnhandled (vMessage); - ok = true; - break; - - case Gui::GuiActionType::AlarmCleared: - printUnhandled (vMessage); - ok = true; - break; - - case Gui::GuiActionType::TreatmentState: - printUnhandled (vMessage); - ok = true; - break; - - default: - printUnhandled (vMessage); - break; + default : printUnhandled (vMessage ); break; } + return ok; } @@ -321,413 +306,307 @@ bool MessageInterpreter::interpretMessage_DG(const Message &vMessage, QVariantList &vData) { bool ok = false; + QString mSenderID = "DG,"; vData.clear(); switch (vMessage.actionId) { // notice we are in receive mode - case Gui::GuiActionType::LoadCellReadings: - ok = loadCellReadingsData (vMessage, vData); + case Gui::GuiActionType::DGCheckIn: + ok = true; + LOG_EVENT(mSenderID + QString("DG,CheckIn," + QVariant(vData).toStringList().join(','))); break; - case Gui::GuiActionType::TemperatureSensors: - ok = temperatureSensorsData (vMessage, vData); - break; + case Gui::GuiActionType::LoadCellReadings : ok = loadCellReadingsData (vMessage, vData); break; + case Gui::GuiActionType::TemperatureSensors : ok = temperatureSensorsData (vMessage, vData); break; - default: - printUnhandled (vMessage); - break; + // unhandles messages: these will only be logged as received message + // there has nothing been defined for these messages. + default : printUnhandled (vMessage ); break; } + return ok; } -/*! - * \brief MessageInterpreter::getPowerOffData - * \details This is the method which interprets the PowerOff message data - * in vMessage of type Message. - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The BloodFlow data - * \return true if the data can be extracted as defined for PowerOff Message ID - */ -bool MessageInterpreter::getPowerOffData(const Message &vMessage, Model::MPowerOff &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::PowerOff) { - return false; - } +// ---------- ---------- Message handlers ---------- ---------- // - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::PowerOff] ) { - 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; -} - +// ---------- ---------- ---------- ---------- ---------- Debug ---------- ---------- ---------- ---------- ---------- // /*! - * \brief MessageInterpreter::bloodFlowData - * \details Used the getBloodFlowData 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 getBloodFlowData + * \brief MessageInterpreter::canbusFaultCountData + * \details This method interprets Fault Count message data + * in vMessage of type Message. This message is only used for debugging purposes. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Fault Count data + * \return true if the data can be extracted as defined for Fault Count Message ID */ -bool MessageInterpreter::powerOffData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::canbusFaultCountData(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MPowerOff mData; - ok = getPowerOffData(vMessage, mData); - LOG_DATUM(mData.toString()); + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; + QVariantList mData; + int index = 0; + Types::U32 mCanBUSFaultCount; + ok = GetValue(vMessage.data, index, mCanBUSFaultCount); + // coco begin validated : developer safety if for any reason length of CanBUSFaultCount set to 0 if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); + // coco end + vData += mCanBUSFaultCount.value; } return ok; } +// ---------- ---------- ---------- ---------- ---------- Data ---------- ---------- ---------- ---------- ---------- // +// ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // + /*! - * \brief MessageInterpreter::getBloodFlowData - * \details This is the method which interprets the Blood Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The BloodFlow data - * \return true if the message can be successfully converted to the Blood Flow data elements. + * \brief MessageInterpreter::treatmentTimeData + * \details This method interprets Treatment Time 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 Time data + * \return true if the data can be extracted as defined for Treatment Time Message ID */ -bool MessageInterpreter::getBloodFlowData(const Message &vMessage, Model::MBloodFlow &vData) +bool MessageInterpreter::treatmentTimeData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::BloodFlow ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentTime) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::BloodFlow] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MTreatmentTime mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; + return ok; } /*! * \brief MessageInterpreter::bloodFlowData - * \details Used the getBloodFlowData 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 getBloodFlowData + * \details This method interprets Blood Flow 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 - Blood Flow data + * \return true if the data can be extracted as defined for Blood Flow Message ID */ bool MessageInterpreter::bloodFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::BloodFlow)) return ok; + Model::MBloodFlow mData; - ok = getBloodFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::getDialysateInletFlowData - * \details This is the method which interprets the Dialysate Inlet Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \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::MDialysateFlow &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::DialysateInletFlow ) { - return false; - } - - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::DialysateInletFlow] ) { - 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::dialysateInletFlowData - * \details Used the getDialysateInletFlowData 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 getDialysateInletFlowData + * \details This method interprets Dialysate Inlet Flow 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 - Dialysate Inlet Flow data + * \return true if the data can be extracted as defined for Dialysate Inlet Flow Message ID */ bool MessageInterpreter::dialysateInletFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateInletFlow) ) return ok; + Model::MDialysateFlow mData; - ok = getDialysateInletFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } - /*! - * \brief MessageInterpreter::getDialysateOutletFlowData - * \details This is the method which interprets the Dialysate Outlet Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The dialydate outlet flow data (ultrafiltration) - * \return true if the message can be successfully converted to the Blood Flow data elements. - */ -bool MessageInterpreter::getDialysateOutletFlowData(const Message &vMessage, Model::MOutletFlow &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::DialysateOutletFlow ) { - return false; - } - - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::DialysateOutletFlow] ) { - 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::dialysateOutletFlowData - * \details Used the getDialysateOutletFlowData 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 getDialysateOutletFlowData + * \details This method interprets Dialysate Outlet Flow 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 - Dialysate Outlet Flow data + * \return true if the data can be extracted as defined for Dialysate Outlet Flow Message ID */ bool MessageInterpreter::dialysateOutletFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateOutletFlow) ) return ok; + Model::MOutletFlow mData; - ok = getDialysateOutletFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::getDialysateOutletFlowData - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - Treatment Time data - * \return true if the message can be successfully converted to the Blood Flow data elements. + * \brief MessageInterpreter::treatmentRangesData + * \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::getTreatmentTime( const Message &vMessage , Model::MTreatmentTime &vData) +bool MessageInterpreter::treatmentRangesData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::TreatmentTime ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::TreatmentTime] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MTreatmentRanges mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); - return true; -} + mData.toVariantList(vData); + emit didActionReceive(mData.data()); -/*! - * \brief MessageInterpreter::treatmentTime - * \details Used the getTreatmentTime 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 getDialysateOutletFlowData - */ -bool MessageInterpreter::treatmentTime(const Message &vMessage, QVariantList &vData) -{ - bool ok; - Model::MTreatmentTime mData; - ok = getTreatmentTime(vMessage, mData); - LOG_DATUM(mData.toString()); - - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } return ok; } /*! - * \brief MessageInterpreter::getAlarmStatus - * \details This method interprets AlarmStatus message data + * \brief MessageInterpreter::pressureOcclusionData + * \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 - Alarm Status dta - * \return true if the data can be extracted as defined for AlarmStatus Message ID + * \param vData - Pressure/Occlusion data + * \return true if the data can be extracted as defined for Pressure/Occlusion Message ID */ -bool MessageInterpreter::getAlarmStatus(const Message &vMessage, Model::MAlarmStatus &vData) +bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::AlarmStatus ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::PressureOcclusion) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::AlarmStatus] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MPressureOcclusion mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; -} - -/*! - * \brief MessageInterpreter::alarmStatus - * \details Used the getAlarmStatus 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 getAlarmStatus - */ -bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MAlarmStatus mData; - ok = getAlarmStatus(vMessage, mData); - LOG_DATUM(mData.toString()); - - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } return ok; - - // --- an example of unit test --- // - // Types::Flags flag; - // int i = 0; - // QByteArray ba; - // ba += 0x83; ba += 0xf8; ba += 0x28; ba += 0xa1; - // Types::getBits(ba, i, flag, 32); - // qDebug() << '@' << flag << flag.toString() << ba; } /*! - * \brief MessageInterpreter::getPressureOcclusionData - * \details This method interprets Pressure Occlusion message data + * \brief MessageInterpreter::treatmentStateData + * \details This method interprets Treatment State 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 + * \param vData - Treatment State data + * \return true if the data can be extracted as defined for Treatment State Message ID */ -bool MessageInterpreter::getPressureOcclusionData(const Message &vMessage, Model::MPressureOcclusion &vData) +bool MessageInterpreter::treatmentStateData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::PressureOcclusion ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentState) ) return ok; - 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; - } + Model::MTreatmentState mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; + return ok; } +// ---------- ---------- ---------- ---------- ---------- - DG ---------- ---------- ---------- ---------- ---------- // + /*! - * \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 + * \brief MessageInterpreter::loadCellReadingsData + * \details This method interprets Load Cell Readings 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 - Load Cell Readings data + * \return true if the data can be extracted as defined for Load Cell Readings Message ID */ -bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::loadCellReadingsData(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MPressureOcclusion mData; - ok = getPressureOcclusionData(vMessage, mData); - LOG_DATUM(mData.toString()); + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + Model::MLoadCellReadings mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("DG," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::treatmentRangesData - * \details This method interprets Treatment Ranges message data + * \brief MessageInterpreter::temperatureSensorsData + * \details This method interprets Temperature Sensors 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 + * \param vData - Temperature Sensors data + * \return true if the data can be extracted as defined for Temperature Sensors Message ID */ -bool MessageInterpreter::treatmentRangesData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::temperatureSensorsData(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; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; - Model::MTreatmentRanges mData; + Model::MTemperatureSensors mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_DATUM("DG," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; } +// ---------- ---------- ---------- ---------- ---------- Events ---------- ---------- ---------- ---------- ---------- // +// ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // + /*! - * \brief MessageInterpreter::loadCellReadingsData - * \details This method interprets LoadCellReadings message data + * \brief MessageInterpreter::powerOff + * \details This method interprets Power Off 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 - Load Cell Readings data - * \return true if the data can be extracted as defined for LoadCellReadings Message ID + * \param vData - Power Off data + * \return true if the data can be extracted as defined for Power Off Message ID */ -bool MessageInterpreter::loadCellReadingsData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::powerOff(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::PowerOff) ) return ok; - Model::MLoadCellReadings mData; + Model::MPowerOff mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -736,86 +615,89 @@ } /*! - * \brief MessageInterpreter::TemperatureSensorsData - * \details This method interprets TemperatureSensors message data + * \brief MessageInterpreter::alarmStatus + * \details This method interprets Alarm Status 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 - Load Cell Readings data - * \return true if the data can be extracted as defined for TemperatureSensors Message ID + * \param vData - Alarm Status data + * \return true if the data can be extracted as defined for Alarm Status Message ID */ -bool MessageInterpreter::temperatureSensorsData(const Message &vMessage, QVariantList &vData) -{ +bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmStatus) ) return ok; - Model::MTemperatureSensors mData; + Model::MAlarmStatus mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; + + // --- an example of unit test --- // + // Types::Flags flag; + // int i = 0; + // QByteArray ba; + // ba += 0x83; ba += 0xf8; ba += 0x28; ba += 0xa1; + // Types::getBits(ba, i, flag, 32); + // qDebug() << '@' << flag << flag.toString() << ba; } - /*! - * \brief MessageInterpreter::loadCellReadingsData - * \details This method interprets LoadCellReadings message data + * \brief MessageInterpreter::alarmTriggered + * \details This method interprets Alarm Triggered 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 - Load Cell Readings data - * \return true if the data can be extracted as defined for LoadCellReadings Message ID + * \param vData - Alarm Triggered data + * \return true if the data can be extracted as defined for Alarm Triggered Message ID */ -bool MessageInterpreter::canbusFaultCountData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::alarmTriggered(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmTriggered) ) return ok; - QVariantList mData; - int index = 0; - Types::U32 mCanBUSFaultCount; - ok = GetValue(vMessage.data, index, mCanBUSFaultCount); - // coco begin validated : developer safety if for any reason length of CanBUSFaultCount set to 0 - if (ok) { - // coco end - vData += mCanBUSFaultCount.value; - } + Model::MAlarmTriggered mData; + ok = mData.fromByteArray(vMessage.data); + LOG_EVENT("HD," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::adjustBloodDialysateData - * \details This method interprets AdjustBlood Dialysate Response message data + * \brief MessageInterpreter::alarmCleared + * \details This method interprets Alarm Cleared 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 + * \param vData - Alarm Cleared data + * \return true if the data can be extracted as defined for Alarm Cleared Message ID */ -bool MessageInterpreter::adjustBloodDialysateData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::alarmCleared(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; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmCleared) ) return ok; - Model::MAdjustBloodDialysateResponse mData; + Model::MAlarmCleared mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; } +// ---------- ---------- ---------- ---------- ---------- Adjustments ---------- ---------- ---------- ---------- ---------- // + /*! * \brief MessageInterpreter::adjustDurationData * \details This method interprets Treatment Duration Adjustment Response message data @@ -825,15 +707,14 @@ * \param vData - Treatment Duration Adjustment Response data * \return true if the data can be extracted as defined for Treatment Duration Adjustment Response Message ID */ -bool MessageInterpreter::adjustDurationData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustDuration(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; Model::MAdjustDurationResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -842,24 +723,48 @@ } /*! + * \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::adjustBloodDialysate(const Message &vMessage, QVariantList &vData) +{ + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + + Model::MAdjustBloodDialysateResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_EVENT("HD," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + +/*! * \brief MessageInterpreter::ultrafiltrationState - * \details This method interprets Treatment Ultrafiltration state change Response message data + * \details This method interprets Treatment Ultrafiltration State Adjustment 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 - Treatment Ultrafiltration state change Response data - * \return true if the data can be extracted as defined for Treatment Duration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration State Adjustment Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration State Adjustment Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationStateData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationState(const Message &vMessage, QVariantList &vData) { bool ok = false; - // TODO : The Ultrafiltration State change shall have the rejection reason like other responses. - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationStateReq) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AcknowGeneric ) ) return ok; + // TODO : In HD the Ultrafiltration State change shall have the rejection reason like other responses. + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationStateReq) ) return ok; Model::MAdjustUltrafiltrationStateResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -869,22 +774,21 @@ /*! * \brief MessageInterpreter::adjustUltrafiltrationEditData - * \details This method interprets Treatment Ultrafiltration Adjustment Response message data + * \details This method interprets Treatment Ultrafiltration Volume Adjustment 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 - Treatment Duration Adjustment Response data - * \return true if the data can be extracted as defined for Treatment Ultrafiltration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration Volume Adjustment Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration Volume Adjustment Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationEditData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationEdit(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; Model::MAdjustUltrafiltrationEditResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -894,22 +798,21 @@ /*! * \brief MessageInterpreter::adjustUltrafiltrationConfirmData - * \details This method interprets Treatment Ultrafiltration Adjustment Response message data + * \details This method interprets Treatment Ultrafiltration Volume Adjustment Confirm 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 - Treatment Duration Adjustment Response data - * \return true if the data can be extracted as defined for Treatment Ultrafiltration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration Volume Adjustment Confirm Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration Volume Adjustment Confirm Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationConfirmData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationConfirm(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; Model::MAdjustUltrafiltrationConfirmResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data());