Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 -r6ae83fa9a1a3204864fc5b50fe906ac09e9c1ea5 --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 6ae83fa9a1a3204864fc5b50fe906ac09e9c1ea5) @@ -104,6 +104,27 @@ } /*! + * \brief MessageInterpreter::prepareData + * \details Checks and Prepaires the model with the Message Data + * \param vMessage - The Denali message + * \param vID - The Message ID to be checked against + * \param vModel - The appropriate model for the Message Data + * \param vData - A QVariant list of the Message Data which will be used for debugging if needed. + * \return true on successful check and prepare. + */ +bool MessageInterpreter::prepareData(const Message &vMessage, Gui::GuiActionType vID, Model::MAbstract &vModel, QVariantList &vData) +{ + bool ok = false; + if ( ! isValidMessage(vMessage, vID) ) return ok; + + ok = vModel.fromByteArray(vMessage.data); + LOG_DATUM(vModel.toString()); + + vModel.toVariantList(vData); + return ok; +} + +/*! * \brief MessageInterpreter::interpretMessage * \details This method will be called * to interpret messages from UI regarding vActionId. @@ -123,7 +144,7 @@ vPayload.clear(); int count = vData.count(); switch (vActionId) { // notice we are in transmit mode - case Gui::GuiActionType::PowerOff: + case Gui::GuiActionType::idPowerOff: if (count) { vPayload += vData[0].toUInt(); } else { @@ -134,7 +155,7 @@ LOG_EVENT(mSenderID + QString("PowerOff," + QVariant(vData).toStringList().join(','))); break; - case Gui::GuiActionType::KeepAlive: + case Gui::GuiActionType::idKeepAlive: // Nothing needs to be done. // KeepAlive has No data. // Mentioned in the switch/case to be registered as a valid message. @@ -146,47 +167,47 @@ LOG_EVENT(mSenderID + QString("CheckIn")); break; - case Gui::GuiActionType::Acknow: + case Gui::GuiActionType::idAcknow: // 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::String: + case Gui::GuiActionType::idRawData: if (count) { vPayload = Format::fromVariant(vData[0]); } break; - case Gui::GuiActionType::AdjustBloodDialysateReq: + case Gui::GuiActionType::idAdjustBloodDialysateReq: if (count) { vPayload = Format::fromVariant(vData); } LOG_EVENT(mSenderID + AdjustBloodDialysateRequestData::toString(vData)); break; - case Gui::GuiActionType::AdjustDurationReq: + case Gui::GuiActionType::idAdjustDurationReq: if (count) { vPayload = Format::fromVariant(vData); } LOG_EVENT(mSenderID + AdjustDurationRequestData::toString(vData)); break; - case Gui::GuiActionType::AdjustUltrafiltrationStateReq: + case Gui::GuiActionType::idAdjustUltrafiltrationStateReq: if (count) { vPayload = Format::fromVariant(vData); } LOG_EVENT(mSenderID + AdjustUltrafiltrationStateRequestData::toString(vData)); break; - case Gui::GuiActionType::AdjustUltrafiltrationEditReq: + case Gui::GuiActionType::idAdjustUltrafiltrationEditReq: if (count) { vPayload = Format::fromVariant(vData); } LOG_EVENT(mSenderID + AdjustUltrafiltrationEditRequestData::toString(vData)); break; - case Gui::GuiActionType::AdjustUltrafiltrationConfirmReq: + case Gui::GuiActionType::idAdjustUltrafiltrationConfirmReq: if (count) { vPayload = Format::fromVariant(vData); } @@ -256,31 +277,31 @@ //qDebug() << vMessage.actionId; switch (vMessage.actionId) { // notice we are in receive mode // ----- Debug - case Gui::GuiActionType::CanBUSFaultCount : ok = canbusFaultCountData (vMessage, vData); break; + case Gui::GuiActionType::idCANBusFaultCount : ok = canbusFaultCountData (vMessage, vData); 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::idTreatmentTime : ok = treatmentTimeData (vMessage, vData); break; + case Gui::GuiActionType::idBloodFlow : ok = bloodFlowData (vMessage, vData); break; + case Gui::GuiActionType::idDialysateInletFlow : ok = dialysateInletFlowData (vMessage, vData); break; + case Gui::GuiActionType::idDialysateOutletFlow : ok = dialysateOutletFlowData (vMessage, vData); break; + case Gui::GuiActionType::idTreatmentRanges : ok = treatmentRangesData (vMessage, vData); break; + case Gui::GuiActionType::idPressureOcclusion : ok = pressureOcclusionData (vMessage, vData); break; + case Gui::GuiActionType::idTreatmentState : ok = treatmentStateData (vMessage, vData); 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::idAcknow : ok = true; break; + case Gui::GuiActionType::idPowerOff : ok = powerOff (vMessage, vData); break; + case Gui::GuiActionType::idPowerOffBroadcast : ok = true; LOG_EVENT("HD,PowerOff Warning"); break; + case Gui::GuiActionType::idAlarmStatus : ok = alarmStatus (vMessage, vData); break; + case Gui::GuiActionType::idAlarmTriggered : ok = alarmTriggered (vMessage, vData); break; + case Gui::GuiActionType::idAlarmCleared : ok = alarmCleared (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::idAdjustDurationRsp : ok = adjustDuration (vMessage, vData); break; + case Gui::GuiActionType::idAdjustBloodDialysateRsp : ok = adjustBloodDialysate (vMessage, vData); break; + case Gui::GuiActionType::idAdjustUltrafiltrationStateReq : ok = adjustUltrafiltrationState (vMessage, vData); break; + case Gui::GuiActionType::idAdjustUltrafiltrationEditRsp : ok = adjustUltrafiltrationEdit (vMessage, vData); break; + case Gui::GuiActionType::idAdjustUltrafiltrationConfirmRsp: ok = adjustUltrafiltrationConfirm (vMessage, vData); break; // unhandles messages: these will only be logged as received message // there has nothing been defined for these messages. @@ -290,6 +311,14 @@ return ok; } +#define EMIT_RECEIVE_SIGNAL(vID, vMODEL) \ +{ \ + vMODEL mModel; \ + ok = prepareData(vMessage, vID, mModel, vData); \ + if (ok) emit didActionReceive(mModel.data()); \ +} \ +break; + /*! * \brief MessageInterpreter::interpretMessage_DG * \details This method will be called @@ -310,17 +339,27 @@ vData.clear(); switch (vMessage.actionId) { // notice we are in receive mode - case Gui::GuiActionType::DGCheckIn: + case Gui::GuiActionType::idDGCheckIn: ok = true; LOG_EVENT(mSenderID + QString("DG,CheckIn," + QVariant(vData).toStringList().join(','))); break; - case Gui::GuiActionType::LoadCellReadings : ok = loadCellReadingsData (vMessage, vData); break; - case Gui::GuiActionType::TemperatureSensors : ok = temperatureSensorsData (vMessage, vData); break; + case Gui::GuiActionType::idDGROPumpData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGROPumpData , Model::MDGROPump ) + case Gui::GuiActionType::idDGPressuresData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGPressuresData , Model::MDGPressures ) + case Gui::GuiActionType::idDGDrainPumpData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGDrainPumpData , Model::MDGDrainPump ) + case Gui::GuiActionType::idDGOperationModeData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGOperationModeData , Model::MDGOperationMode ) + case Gui::GuiActionType::idDGReservoirData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGReservoirData , Model::MDGReservoir ) + case Gui::GuiActionType::idDGValvesStatesData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGValvesStatesData , Model::MDGValvesStates ) + case Gui::GuiActionType::idDGHeatersData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGHeatersData , Model::MDGHeaters ) + case Gui::GuiActionType::idDGLoadCellReadingsData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGLoadCellReadingsData , Model::MDGLoadCellReadings ) + case Gui::GuiActionType::idDGTemperaturesData : EMIT_RECEIVE_SIGNAL(Gui::GuiActionType::idDGTemperaturesData , Model::MDGTemperatures ) // unhandles messages: these will only be logged as received message // there has nothing been defined for these messages. - default : printUnhandled (vMessage ); break; + default : + printUnhandled (vMessage); + break; + } return ok; @@ -342,7 +381,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idCANBusFaultCount) ) return ok; QVariantList mData; int index = 0; @@ -372,7 +411,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentTime) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idTreatmentTime) ) return ok; Model::MTreatmentTime mData; ok = mData.fromByteArray(vMessage.data); @@ -397,7 +436,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::BloodFlow)) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idBloodFlow)) return ok; Model::MBloodFlow mData; ok = mData.fromByteArray(vMessage.data); @@ -422,7 +461,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateInletFlow) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idDialysateInletFlow) ) return ok; Model::MDialysateFlow mData; ok = mData.fromByteArray(vMessage.data); @@ -447,7 +486,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateOutletFlow) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idDialysateOutletFlow) ) return ok; Model::MOutletFlow mData; ok = mData.fromByteArray(vMessage.data); @@ -472,7 +511,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idTreatmentRanges) ) return ok; Model::MTreatmentRanges mData; ok = mData.fromByteArray(vMessage.data); @@ -497,7 +536,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::PressureOcclusion) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idPressureOcclusion) ) return ok; Model::MPressureOcclusion mData; ok = mData.fromByteArray(vMessage.data); @@ -522,7 +561,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentState) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idTreatmentState) ) return ok; Model::MTreatmentState mData; ok = mData.fromByteArray(vMessage.data); @@ -536,56 +575,7 @@ // ---------- ---------- ---------- ---------- ---------- - DG ---------- ---------- ---------- ---------- ---------- // -/*! - * \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::loadCellReadingsData(const Message &vMessage, QVariantList &vData) -{ - // TODO : review other methods - bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; - Model::MLoadCellReadings mData; - ok = mData.fromByteArray(vMessage.data); - LOG_DATUM("DG," + mData.toString()); - - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - - return ok; -} - -/*! - * \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 - Temperature Sensors data - * \return true if the data can be extracted as defined for Temperature Sensors Message ID - */ -bool MessageInterpreter::temperatureSensorsData(const Message &vMessage, QVariantList &vData) -{ - // TODO : review other methods - bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; - - Model::MTemperatureSensors mData; - ok = mData.fromByteArray(vMessage.data); - LOG_DATUM("DG," + mData.toString()); - - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - - return ok; -} - // ---------- ---------- ---------- ---------- ---------- Events ---------- ---------- ---------- ---------- ---------- // // ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // @@ -602,7 +592,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::PowerOff) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idPowerOff) ) return ok; Model::MPowerOff mData; ok = mData.fromByteArray(vMessage.data); @@ -626,7 +616,7 @@ bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmStatus) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAlarmStatus) ) return ok; Model::MAlarmStatus mData; ok = mData.fromByteArray(vMessage.data); @@ -659,7 +649,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmTriggered) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAlarmTriggered) ) return ok; Model::MAlarmTriggered mData; ok = mData.fromByteArray(vMessage.data); @@ -684,7 +674,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmCleared) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAlarmCleared) ) return ok; Model::MAlarmCleared mData; ok = mData.fromByteArray(vMessage.data); @@ -710,7 +700,7 @@ bool MessageInterpreter::adjustDuration(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAdjustDurationRsp) ) return ok; Model::MAdjustDurationResponse mData; ok = mData.fromByteArray(vMessage.data); @@ -735,7 +725,7 @@ { // TODO : review other methods bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAdjustBloodDialysateRsp) ) return ok; Model::MAdjustBloodDialysateResponse mData; ok = mData.fromByteArray(vMessage.data); @@ -760,7 +750,8 @@ { bool ok = false; // TODO : In HD the Ultrafiltration State change shall have the rejection reason like other responses. - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationStateReq) ) return ok; + if ( ! isType (vMessage, Gui::GuiActionType::idAdjustUltrafiltrationStateReq) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::idAcknowGeneric ) ) return ok; Model::MAdjustUltrafiltrationStateResponse mData; ok = mData.fromByteArray(vMessage.data); @@ -784,7 +775,7 @@ bool MessageInterpreter::adjustUltrafiltrationEdit(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAdjustUltrafiltrationEditRsp) ) return ok; Model::MAdjustUltrafiltrationEditResponse mData; ok = mData.fromByteArray(vMessage.data); @@ -808,7 +799,7 @@ bool MessageInterpreter::adjustUltrafiltrationConfirm(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::idAdjustUltrafiltrationConfirmRsp) ) return ok; Model::MAdjustUltrafiltrationConfirmResponse mData; ok = mData.fromByteArray(vMessage.data);