Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -r56e378f7504701b9e9a9dccaf205aef2fd52c58e -r846a9ebc350e33be4affab3cc4c136248900015d --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 56e378f7504701b9e9a9dccaf205aef2fd52c58e) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 846a9ebc350e33be4affab3cc4c136248900015d) @@ -21,8 +21,10 @@ // Project #include "logger.h" #include "format.h" +#include "mtreatmentparameters.h" using namespace Can; +using namespace Model; #define DEBUG_RECEIVE_SIGNAL(vID, vMODEL) //qDebug() << vID << vMODEL; @@ -143,9 +145,9 @@ 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('.'))); + .arg(int(vMessage.can_id), 3, 16, QChar('0')) + .arg(mActionIdHexString) + .arg(QString(vMessage.data.toHex('.'))); LOG_DEBUG(logMessage); } @@ -186,79 +188,113 @@ vPayload.clear(); int count = vData.length(); + LOG_EVENT(QString("%0").arg(vActionId)); + switch (vActionId) { // notice we are in transmit mode - case Gui::GuiActionType::ID_Acknow: // len: 0, can have zero len - break; // No data, Just registered + case Gui::GuiActionType::ID_Acknow: // len: 0, can have zero len + break; // No data, Just registered + case Gui::GuiActionType::ID_KeepAlive: // len: 255, can have any len + { + if ( count ) { // this message has a variable length + vPayload = Format::fromVariant(vData[0]); + } + LOG_EVENT(mSenderID + QString("CheckIn")); + } break; - case Gui::GuiActionType::ID_KeepAlive: // len: 255, can have any len - if ( count ) { // this message has a variable length - vPayload = Format::fromVariant(vData[0]); - } - LOG_EVENT(mSenderID + QString("CheckIn")); - break; + case Gui::GuiActionType::ID_RawData: // len: 255, can have any len + { + if ( count ) { // this message has a variable length + vPayload = Format::fromVariant(vData[0]); + } + LOG_EVENT(mSenderID + QString("RawData")); - case Gui::GuiActionType::ID_RawData: // len: 255, can have any len - if ( count ) { // this message has a variable length - vPayload = Format::fromVariant(vData[0]); - } - LOG_EVENT(mSenderID + QString("RawData")); - break; + } break; - case Gui::GuiActionType::ID_PowerOff: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload += Format::fromVariant(vData); - LOG_EVENT(AdjustPowerOffRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_PowerOff: + { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload += Format::fromVariant(vData); + LOG_EVENT(AdjustPowerOffRequestData::toString(vData)); - case Gui::GuiActionType::ID_AdjustBloodDialysateReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustBloodDialysateRequestData::toString(vData)); - break; + } break; - case Gui::GuiActionType::ID_AdjustDurationReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustDurationRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustBloodDialysateReq: + { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustBloodDialysateRequestData::toString(vData)); + } break; - case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationStateRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustDurationReq: + { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustDurationRequestData::toString(vData)); + } break; - case Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationEditRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustUltrafiltrationStateRequestData::toString(vData)); + } break; - case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationConfirmRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustUltrafiltrationEditRequestData::toString(vData)); + } break; - case Gui::GuiActionType::ID_AdjustSalineReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustSalineRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustUltrafiltrationConfirmRequestData::toString(vData)); + } break; - case Gui::GuiActionType::ID_AlarmSilenceReq: - if ( ! count ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AlarmSilenceRequestData::toString(vData)); - break; + case Gui::GuiActionType::ID_AdjustSalineReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AdjustSalineRequestData::toString(vData)); + } break; - default: - QString mActionIdHexString = Format::toHexString(vActionId); - LOG_DEBUG(mSenderID + tr("Unknown transmit Message with ID '%1'").arg(mActionIdHexString)); - ok = false; - break; + case Gui::GuiActionType::ID_AlarmSilenceReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(AlarmSilenceRequestData::toString(vData)); + } break; + case Gui::GuiActionType::ID_StartTreatmentReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(StartTreatmentRequestData::toString(vData)); + } break; + + case Gui::GuiActionType::ID_ConfirmTreatmentReq: { + if ( count != 0 ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(ConfirmTreatmentRequestData::toString(vData)); + } break; + + case Gui::GuiActionType::ID_EndTreatmentReq: { + if ( count != 0 ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + LOG_EVENT(EndTreatmentRequestData::toString(vData)); + } break; + + case Gui::GuiActionType::ID_CreateTreatmentReq: { + if ( ! count ) { logInvalidLength(vActionId); return false; } + vPayload = Format::fromVariant(vData); + TreatmentParameters params; + params.fromVariantList(vData); + LOG_EVENT(params.toString()); + } break; + + default: { + QString mActionIdHexString = Format::toHexString(vActionId); + LOG_DEBUG(mSenderID + tr("Unknown transmit Message with ID '%1'").arg(mActionIdHexString)); + ok = false; + } break; + } return ok; } @@ -325,6 +361,7 @@ case Gui::GuiActionType::ID_TreatmentRanges : ok = notify(vMessage, vData, Gui::GuiActionType::ID_TreatmentRanges ); break; case Gui::GuiActionType::ID_PressureOcclusion : ok = notify(vMessage, vData, Gui::GuiActionType::ID_PressureOcclusion ); break; case Gui::GuiActionType::ID_TreatmentStates : ok = notify(vMessage, vData, Gui::GuiActionType::ID_TreatmentStates ); break; + case Gui::GuiActionType::ID_PrimingData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_PrimingData ); break; case Gui::GuiActionType::ID_Saline : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Saline ); break; // ----- Events @@ -350,9 +387,13 @@ case Gui::GuiActionType::ID_AdjustUltrafiltrationEditRsp : ok = adjustUltrafiltrationEdit (vMessage, vData); break; // TODO : implement notify<>() case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmRsp : ok = adjustUltrafiltrationConfirm (vMessage, vData); break; // TODO : implement notify<>() - // unhandled messages: these will only be logged as received message + case Gui::GuiActionType::ID_CreateTreatmentRsp : ok = createTreatmentRespData (vMessage, vData); break; + case Gui::GuiActionType::ID_StartTreatmentRsp : ok = notify (vMessage, vData, Gui::GuiActionType::ID_StartTreatmentRsp ); break; + case Gui::GuiActionType::ID_EndTreatmentRsp : ok = notify (vMessage, vData, Gui::GuiActionType::ID_EndTreatmentRsp ); break; + + // 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; @@ -585,3 +626,26 @@ return ok; } + +/*! + * \brief MessageInterpreter::createTreatmentRespData + * Checks the validity of the create treatment response data. + * \param vMessage - The message + * \param vData - the output data + * \return true if ok, false otherwise + */ +bool MessageInterpreter::createTreatmentRespData(const Message &vMessage, QVariantList &vData) { + bool ok = false; + if ( ! isType (vMessage, Gui::GuiActionType::ID_CreateTreatmentRsp) ) return ok; + if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::ID_CreateTreatmentRsp) ) return ok; + + Model::TreatmentParametersResp mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM(mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; + +}