Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r3fbbe01bfd05d1d1344caf7bedea98394c04dbbe --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 3fbbe01bfd05d1d1344caf7bedea98394c04dbbe) @@ -40,9 +40,13 @@ 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)); + return false; + } if ( vMessage.data.length() < payloadLen[vType] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Incorrect data length for Message ID (HD) '%1'").arg(mActionIdHexString)); return false; } return true; @@ -111,6 +115,32 @@ } break; + // coco begin validated: Placeholder until AlarmSilenceReq + case Gui::GuiActionType::AlarmSilenceReq: + if (count) { + vPayload = Format::fromVariant(vData); + } + break; + // coco end + + case Gui::GuiActionType::AdjustUltrafiltrationStateReq: + if (count) { + vPayload = Format::fromVariant(vData); + } + break; + + case Gui::GuiActionType::AdjustUltrafiltrationEditReq: + if (count) { + vPayload = Format::fromVariant(vData); + } + break; + + case Gui::GuiActionType::AdjustUltrafiltrationConfirmReq: + if (count) { + vPayload = Format::fromVariant(vData); + } + break; + default: QString mActionIdHexString = Format::toHexString(vActionId); LOG_ERROR(tr("Unknown Message ID (UI) '%1'").arg(mActionIdHexString)); @@ -146,7 +176,7 @@ // 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: + case eChlid_DG_Sync: ok = interpretMessage_DG(vMessage, vData); break; @@ -170,7 +200,7 @@ QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + QString("%1 # %2 %3") - .arg(vMessage.can_id, 3, 16, QChar('0')) + .arg(int(vMessage.can_id), 3, 16, QChar('0')) .arg(mActionIdHexString) .arg(QString(vMessage.data.toHex('.'))); LOG_ERROR(logMessage); @@ -193,8 +223,12 @@ { bool ok = false; vData.clear(); - + //qDebug() << vMessage.actionId; switch (vMessage.actionId) { // notice we are in receive mode + case Gui::GuiActionType::CanBUSFaultCount: + ok = canbusFaultCountData (vMessage, vData); + break; + case Gui::GuiActionType::PowerOff: { ok = powerOffData (vMessage, vData); break; @@ -236,13 +270,25 @@ break; case Gui::GuiActionType::AdjustBloodDialysateRsp: - ok = adjustBloodDialysateData (vMessage, vData); + ok = adjustBloodDialysateData (vMessage, vData); break; case Gui::GuiActionType::AdjustDurationRsp: - ok = adjustDurationData (vMessage, vData); + 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: @@ -255,6 +301,11 @@ ok = true; break; + case Gui::GuiActionType::AlarmSilenceRsp: + printUnhandled (vMessage); + ok = true; + break; + case Gui::GuiActionType::TreatmentState: printUnhandled (vMessage); ok = true; @@ -282,12 +333,24 @@ */ bool MessageInterpreter::interpretMessage_DG(const Message &vMessage, QVariantList &vData) { - // coco begin validated: No data have been interpreted from DG yet - Q_UNUSED(vMessage ); - Q_UNUSED(vData ); - return false; + bool ok = false; + vData.clear(); + + switch (vMessage.actionId) { // notice we are in receive mode + case Gui::GuiActionType::LoadCellReadings: + ok = loadCellReadingsData (vMessage, vData); + break; + + case Gui::GuiActionType::TemperatureSensors: + ok = temperatureSensorsData (vMessage, vData); + break; + + default: + printUnhandled (vMessage); + break; + } + return ok; } -// coco end /*! * \brief MessageInterpreter::getPowerOffData @@ -484,10 +547,10 @@ } /*! - * \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::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. */ bool MessageInterpreter::getTreatmentTime( const Message &vMessage , Model::MTreatmentTime &vData) { @@ -502,16 +565,15 @@ } vData.fromByteArray(vMessage.data); - return true; } /*! - * \brief MessageInterpreter::treatmentTime + * \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 vMessage - The message * \param vData - the output data * \return return value of the method getDialysateOutletFlowData */ @@ -635,7 +697,7 @@ } /*! - * \brief MessageInterpreter::getTreatmentRangesData + * \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, @@ -661,6 +723,87 @@ } /*! + * \brief MessageInterpreter::loadCellReadingsData + * \details This method interprets LoadCellReadings 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 + */ +bool MessageInterpreter::loadCellReadingsData(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; + + Model::MLoadCellReadings mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + +/*! + * \brief MessageInterpreter::TemperatureSensorsData + * \details This method interprets TemperatureSensors 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 + */ +bool MessageInterpreter::temperatureSensorsData(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; + + Model::MTemperatureSensors mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + + +/*! + * \brief MessageInterpreter::loadCellReadingsData + * \details This method interprets LoadCellReadings 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 + */ +bool MessageInterpreter::canbusFaultCountData(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; + + 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; + } + return ok; +} + +/*! * \brief MessageInterpreter::adjustBloodDialysateData * \details This method interprets AdjustBlood Dialysate Response message data * in vMessage of type Message. @@ -711,3 +854,78 @@ return ok; } +/*! + * \brief MessageInterpreter::ultrafiltrationState + * \details This method interprets Treatment Ultrafiltration state change 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 + */ +bool MessageInterpreter::adjustUltrafiltrationStateData(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; + + Model::MAdjustUltrafiltrationStateResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + +/*! + * \brief MessageInterpreter::adjustUltrafiltrationEditData + * \details This method interprets Treatment Ultrafiltration 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 + */ +bool MessageInterpreter::adjustUltrafiltrationEditData(const Message &vMessage, QVariantList &vData) +{ + bool ok = false; + if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; + + Model::MAdjustUltrafiltrationEditResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + +/*! + * \brief MessageInterpreter::adjustUltrafiltrationConfirmData + * \details This method interprets Treatment Ultrafiltration 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 + */ +bool MessageInterpreter::adjustUltrafiltrationConfirmData(const Message &vMessage, QVariantList &vData) +{ + bool ok = false; + if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; + + Model::MAdjustUltrafiltrationConfirmResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +}