Index: drydemo.pro.user =================================================================== diff -u -r4d0fc455e6307639e72db490721c7768a487c014 -r4624d7657d342248336c1ff16edfae614c335728 --- drydemo.pro.user (.../drydemo.pro.user) (revision 4d0fc455e6307639e72db490721c7768a487c014) +++ drydemo.pro.user (.../drydemo.pro.user) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -293,7 +293,7 @@ Qt 5.15.10 (iMX8) Qt 5.15.10 (iMX8) {ada4083c-13b6-4ac8-a486-71ff00b060da} - 1 + 0 0 0 Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -3,8 +3,6 @@ // General defines #define UI_MSG_BB_STATUS_INDEX 4 #define UI_MSG_BB_PAYLOAD_ID 0x63 -#define UI_CONFIRM_MSG_TIMESTAMP_INDEX 0 -#define UI_CONFIRM_MSG_STATUS_INDEX 1 #define SECONDS_PER_MINUTE 60 #define MINUTES_PER_HOUR 60 #define MILLISECONDS_PER_SECOND 1000 @@ -13,7 +11,7 @@ #define REJECT_VALUE 0 #define NEARLY_ZERO 0.00000001 #define ONE_HUNDRED_PCT 100 -#define UI_CONFIRM_RESP_TIMOUT_MS (SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) +#define UI_CONFIRM_RESP_TIMOUT_MS (1 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) #define RCVD_MSG_PAYLOAD_MIN_LEN 3 #define RCVD_MSG_SQNC_MIN_LEN 2 #define RCVD_MSG_MSG_ID_INDEX 0 @@ -24,9 +22,9 @@ #define DEFAULT_TIMEOUT_S 10 #define QOBJECT_TIMER_TIMEOUT_MS 100 #define PROGRESS_TIME_BC_INTERVAL_MS 1000 -#define PRORGESS_TIME_BC_QART_INT_MS 300 +#define PRORGESS_TIME_BC_QUICK_INT_MS 300 #define NUM_OF_COUNTS_TIMER_BC_EMIT (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) -#define NUN_OF_COUNTS_QART_BC_EMIT (PRORGESS_TIME_BC_QART_INT_MS / QOBJECT_TIMER_TIMEOUT_MS) +#define NUN_OF_COUNTS_QUICK_BC_EMIT (PRORGESS_TIME_BC_QUICK_INT_MS / QOBJECT_TIMER_TIMEOUT_MS) #define NUM_OF_COUNTS_TIMER_2_CONTROL (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) // Treatment params @@ -134,6 +132,7 @@ #define CLEAR_DIAL_PROPOR_TIMEOUT_MS (10 * MILLISECONDS_PER_SECOND) #define ALARM_NO_ALARM_PROPERTIES 0 #define ALARM_STOP_TX_PROPERTIES 6 +#define ALARM_USE_DEFAULT_PROPERTIES -999 #define ALARM_REPLACE_ACID_PROPERTIES 112 #define ALARM_RECIRC_WARN_PROPERTIES 112 #define ALARM_RECIR_TIMEOUT_RPOPERTIES 26 Index: sources/drydemo/StateController.cpp =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -166,16 +166,18 @@ { _elapsedTimeCtr++; - if (!_dryDemo.isRunning()){ _dryDemo.start(); } + if (!_dryDemo.isRunning()) { _dryDemo.start(); } _dryDemo.submitEvent("TimeoutEvent"); - if (_isBroadcastListReady){ sendMessages(true); } + if (_isBroadcastListReady) { sendMessages(true); } - if (_isSendListReady){ sendMessages(false); } + if (_isSendListReady) { sendMessages(false); } // Ack UI check in message once received. This is to prevent alarm 100 from UI handleUICheckInMessage(); + // Broadcast alarm status all the time + handleAlarmStatusBroadcastData(BC_DELAYED); } // ---------------------- Private methods ------------------ // @@ -478,7 +480,8 @@ void StateController::onTreatmentPauseStateChange(bool active) { - static State_Status status = STATE_ON_ENTRY; + static State_Status status = STATE_ON_ENTRY; + static bool hasFlowChngeRequested = false; auto onEntry = [=](){ // Start with UF state in dialysis @@ -504,14 +507,22 @@ handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); - // Dialysate is in bypass - handleDDGenDialysateModeBroadcastData(BC_DELAYED); + // Dialysate is in bypass (set the flag to true because we in tx pause and we have to baypas dialysate) + handleDDGenDialysateModeBroadcastData(BC_DELAYED, true); // UF is in pause handleUltrafiltrationBroadcastData(BC_DELAYED); // Vitals methods handleVitalsDataRquest(); // Water sample methods handleTDWaterSampleResultRequest(); + // Dialysate edit methods + handleSetPointBloodFlowChange(_treatmentParams.bloodFlowRateMLPM, hasFlowChngeRequested); + handleSetPointDialysateFlowChange(); + handleSetPointDialysateTemperatureChange(); + handleSetPointDialysateTemperatureChange(); + // UI confirm message methods + handleUIConfirmMessage(GENERIC_CONFIRM_ID_RINSEBACK, status); + handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); }; auto onExit = [=](){ Index: sources/drydemo/StateController.h =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateController.h (.../StateController.h) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/StateController.h (.../StateController.h) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -55,6 +55,7 @@ quint32 validateHepDurMin; // Alarm variables Alarm_List activeTopAlarm; + quint16 activeAlarmProperty; quint32 triggerAlarmTimeoutCtr; Treatment_Pause_Sequential_Alarms txPauseSeqAlarmState; // Rinseback variables @@ -170,23 +171,29 @@ float ufVolumeL; }; - QHash _transitionEventsFromStandby; - QHash _alarmTriggerSpecs; - QList _broadcastMessages; - QList _sendMessages; - QHash _treatmentRcvdMessages; - QHash _uiConfirmMessages; - QRandomGenerator _randNumGenerator; - Pressure_Vars _pressureVars; - Treatment_Params _treatmentParams; - Treatment_Status_Vars _treatmentStatus; - Treatment_Sub_State_Vars _treatmentSubStates; - Treatment_HDF_vars _treatmentHDFVars; - bool _isBroadcastListReady; // TODO use a mutex? - bool _isSendListReady; // Todo use a mutex? - quint32 _elapsedTimeCtr; - drydemoXMLStates _dryDemo; + struct Generic_Msg_Status { + qint64 startTimeMS; + Confirmation_Status confirmStatus; + }; + QHash _transitionEventsFromStandby; + QHash _alarmTriggerSpecs; + QList _broadcastMessages; + QList _sendMessages; + QHash _treatmentRcvdMessages; + QHash _uiConfirmMessages; + QRandomGenerator _randNumGenerator; + Pressure_Vars _pressureVars; + Treatment_Params _treatmentParams; + Treatment_Status_Vars _treatmentStatus; + Treatment_Sub_State_Vars _treatmentSubStates; + Treatment_HDF_vars _treatmentHDFVars; + bool _isBroadcastListReady; // TODO use a mutex? + bool _isSendListReady; // Todo use a mutex? + quint32 _elapsedTimeCtr; + drydemoXMLStates _dryDemo; + // CAN function(s) void sendMessages(bool isBroadcast); bool handleDryDemoMenuRequestMessage(); @@ -210,10 +217,13 @@ void handleBackToStandbyEvent(State_Status &status); quint32 extractU32DataFromReceivedMessage(const Can::Message_ID_Enum msgID, qint32 index); float extractF32DataFromReceivedMessage(const Can::Message_ID_Enum msgID, qint32 index); - void triggerAnAlarm(const Alarm_List alarmID); + + // Alarm helper methods in standby.cpp + void triggerAnAlarm(const Alarm_List alarmID, const qint16 alarmProperty = ALARM_USE_DEFAULT_PROPERTIES); void handleAlarmUserAction(State_Status &status, bool isFromTxPause = false); void handleTriggeredAlarmsToTxPause(State_Status &status); void handleChemsReplacementAlarmsSequence(State_Status &status); + void handleAlarmStatusBroadcastData(const Broadcast_Type BCType); // Standby methods void handleInitiateTreatmentRequestMessage(State_Status &status); @@ -243,7 +253,7 @@ void handleTreatmentTimeProcessAndBroadcastData(const Broadcast_Type BCType); void handleTreatmentPrescriptionEditRequestMessage(); void handleSetPointBloodFlowChange(quint32 &bloodFlowMLPM, bool &hasBloodFlowChanged); - void handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType); + void handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType, const bool isDialysateBypass = false); void handleSetPointDialysateFlowChange(); void handleDDConductivityBroadcastData(const Broadcast_Type BCType); void handleUltrafiltrationBroadcastData(const Broadcast_Type BCType); Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -10,9 +10,14 @@ quint32 msgPayload = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, index); if (msgPayload != UI_MSG_BB_PAYLOAD_ID) { if (msgPayload < NUM_OF_GENERIC_CONFIRM_IDS) { - quint32 confirmStatus = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); - qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); - _uiConfirmMessages[static_cast(msgPayload)] = {currentTimeMS, static_cast(confirmStatus)}; + // This part is for the confirm messges and not the dry-demo + quint32 confirmStatus = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); + Generic_Confirm_Id id = static_cast(msgPayload); + Confirmation_Status status = static_cast(confirmStatus); + + // TODO why the reject is sent anways? + _uiConfirmMessages[id].confirmStatus = status; + qDebug() << "New Message Confirm" << id << status; _treatmentRcvdMessages[ID_UI_CONFIRMATION_RESULT_RESP].clear(); } return false; @@ -101,6 +106,9 @@ _treatmentStatus.triggerAlarmTimeoutCtr = 0; _treatmentStatus.isBloodPumpRunning = false; _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_NO_ALARM; + // Initialize alarm varibales to be alarm no alarm + _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; + _treatmentStatus.activeAlarmProperty = _alarmTriggerSpecs[ALARM_ID_NO_ALARM][ALARM_TABLE_PROPERTIES_INDEX].toInt(); // Initialize pressure vars _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_OFF; _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; @@ -131,25 +139,38 @@ _treatmentStatus.bicartDepresInProgress = 0; _treatmentStatus.bicartProgress = 0; _treatmentStatus.bicartTotal = 100; + + // UI confirm + _uiConfirmMessages.clear(); } -void StateController::triggerAnAlarm(const Alarm_List alarmID) +void StateController::triggerAnAlarm(const Alarm_List alarmID, const qint16 alarmProperty) { if (!_alarmTriggerSpecs.contains(alarmID)) { return; } - quint32 state = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PRIORITY_INDEX].toInt(); - quint16 properties = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PROPERTIES_INDEX].toInt(); - quint32 alarmExpires = 0; + quint16 properties = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PROPERTIES_INDEX].toInt(); - _treatmentStatus.activeTopAlarm = alarmID; + _treatmentStatus.activeTopAlarm = alarmID; + _treatmentStatus.activeAlarmProperty = (alarmProperty == ALARM_USE_DEFAULT_PROPERTIES ? properties : alarmProperty); +} +void StateController::handleAlarmStatusBroadcastData(const Broadcast_Type BCType) +{ + static quint32 broadcastCounter = 4; + if ((++broadcastCounter % NUN_OF_COUNTS_QUICK_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } + + if (!_alarmTriggerSpecs.contains(_treatmentStatus.activeTopAlarm)) { return; } + + quint32 state = _alarmTriggerSpecs[_treatmentStatus.activeTopAlarm][ALARM_TABLE_PRIORITY_INDEX].toInt(); + quint32 alarmExpires = 0; + QVariantList resp; resp.append(static_cast(ID_ALARM_STATUS_DATA)); resp.append(Can_Id::eChlid_TD_Alarm); resp.append(state); - resp.append(alarmID); + resp.append(_treatmentStatus.activeTopAlarm); resp.append(alarmExpires); - resp.append(properties); + resp.append(_treatmentStatus.activeAlarmProperty); _isSendListReady = false; _sendMessages.append(resp); _isSendListReady = true; @@ -171,37 +192,24 @@ // User action has been selected so do not stay in treatment pause status = STATE_ON_EXIT; } + triggerAnAlarm(ALARM_ID_NO_ALARM); break; case ALARM_USER_ACTION_RINSEBACK: case ALARM_USER_ACTION_TEMPOARY_BREAK: - _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; - // User action has been selected so do not stay in treatment pause - status = STATE_ON_EXIT; + handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_RINSEBACK, GENERIC_CONFIRM_CMD_REQUEST_OPEN); break; case ALARM_USER_ACTION_END_TREATMENT: + handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN); _treatmentStatus.stateTransitionEvent = "T_TP_2_TE"; - // User action has been selected so do not stay in treatment pause - status = STATE_ON_EXIT; break; default: // Do nothing break; } - triggerAnAlarm(ALARM_ID_NO_ALARM); - - QVariantList msg; - msg.append(static_cast(ID_ALARM_CLEARED)); - msg.append(Can_Id::eChlid_TD_Alarm); - msg.append(_treatmentStatus.activeTopAlarm); - _isBroadcastListReady = false; - _broadcastMessages.append(msg); - _isBroadcastListReady = true; - // Send the alarm clear command and then clear the variable - _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; _treatmentRcvdMessages[ID_UI_ALARM_USER_ACTION_REQUEST].clear(); } @@ -316,22 +324,51 @@ { if (!_uiConfirmMessages.contains(confirmID)) { return; } - Generic_Confirm_Command cmd = (hasUIConfirmMessageTimedout(confirmID) ? GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE : GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + if (hasUIConfirmMessageTimedout(confirmID)) { + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE); + qDebug() << "Message Timeout"; + return; + } + // TODO why the reject is sent anways? + //if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_REJECTED) { + // handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + // qDebug() << "Reject"; + // _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + // return; + //} + // TODO uncomment + switch (confirmID) { case GENERIC_CONFIRM_ID_TREATMENT_END: - if (_uiConfirmMessages[confirmID][UI_CONFIRM_MSG_STATUS_INDEX].toUInt() == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { + if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { QStringList activeStates = _dryDemo.activeStateNames(true); - QString activeState = activeStates[0]; - _treatmentStatus.stateTransitionEvent = (activeState == "Treatment_Recirculate" ? "T_RC_2_TE" : "T_RB_2_TE"); - status = STATE_ON_EXIT; - qDebug() << "Event" << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); // TODO remove + // Check if there is at least one value in the string list to prevent segmentatoin fault + QString activeState = (activeStates.length() >= 1 ? activeStates[0] : ""); + if (activeState == "Treatment_Recirculate") { + _treatmentStatus.stateTransitionEvent = "T_RC_2_TE"; + } + else if (activeState == "Treatment_Rinseback") { + _treatmentStatus.stateTransitionEvent = "T_RB_2_TE"; + } + status = STATE_ON_EXIT; + _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + qDebug() << "Event" << activeState << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + triggerAnAlarm(ALARM_ID_NO_ALARM); } - handleSendUIConfirmationMessage(confirmID, cmd); - _uiConfirmMessages.remove(confirmID); break; case GENERIC_CONFIRM_ID_RINSEBACK: + if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { + qDebug() << "Rinse back response" << confirmID << _uiConfirmMessages[confirmID].confirmStatus; + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; + _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + // User action has been selected so do not stay in treatment pause + status = STATE_ON_EXIT; + triggerAnAlarm(ALARM_ID_NO_ALARM); + } break; case GENERIC_CONFIRM_ID_TEMPORARY_BREAK: @@ -347,15 +384,18 @@ bool StateController::hasUIConfirmMessageTimedout(const Generic_Confirm_Id confirmID) { - qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); - qint64 startTimeMS = _uiConfirmMessages[confirmID][UI_CONFIRM_MSG_TIMESTAMP_INDEX].toInt(); - bool status = (currentTimeMS - startTimeMS > UI_CONFIRM_RESP_TIMOUT_MS ? true : false); + qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); + qint64 startTimeMS = _uiConfirmMessages[confirmID].startTimeMS; + bool status = (currentTimeMS - startTimeMS > UI_CONFIRM_RESP_TIMOUT_MS ? true : false); return status; } void StateController::handleSendUIConfirmationMessage(const Generic_Confirm_Id confirmID, const Generic_Confirm_Command confirmCmd, const Reject_Reasons rejectReason) { + qDebug() << "Sneding" << confirmID; + _uiConfirmMessages[confirmID].startTimeMS = QDateTime::currentMSecsSinceEpoch(); + QVariantList resp; resp.append(static_cast(ID_TD_UI_GENERIC_CONFIRMATION_RQST)); resp.append(Can_Id::eChlid_TD_UI); Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -r4d0fc455e6307639e72db490721c7768a487c014 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -120,7 +120,7 @@ if (fluidBolusCmd == FLUID_BOLUS_START_CMD){ _treatmentSubStates.fluidBolusState = FLUID_BOLUS_SALINE_IN_PROGRESS_STATE; - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; //DIALYSIS_UF_FLUID_BOLUS_STATE; + _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; //DIALYSIS_UF_FLUID_BOLUS_STATE; // TODO UI goes to pause } else { _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; } Index: sources/drydemo/StateControllerTreatmentBroadcasts.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -39,7 +39,7 @@ void StateController::handleTreatmentStatesBroadcastData(const Broadcast_Type BCType) { static quint32 broadcastCounter = 0; - if ((++broadcastCounter % NUN_OF_COUNTS_QART_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } + if ((++broadcastCounter % NUN_OF_COUNTS_QUICK_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } QVariantList msg; msg.append(static_cast(ID_TD_TREATMENT_STATE_DATA)); @@ -158,14 +158,16 @@ _isBroadcastListReady = true; } -void StateController::handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType) +void StateController::handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType, const bool isDialysateBypass) { static quint32 broadcastCounter = 15; if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } quint32 dummyData = 1; float dummyFloat = 150.2; - quint32 dialBypass = (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE ? BYPASS_DIALYSATE_DELIVER : ALLOW_DIALYSATE_DELIVER); + quint32 dialBypass = (_treatmentSubStates.fluidBolusState != FLUID_BOLUS_IDLE_STATE ? BYPASS_DIALYSATE_DELIVER : ALLOW_DIALYSATE_DELIVER); + // NOTE: when we go to treatment pause we should be in bypass while fluid bolus is still in idle so used this exception + if (isDialysateBypass) { dialBypass = BYPASS_DIALYSATE_DELIVER; } QVariantList msg; msg.append(static_cast(ID_DD_GEN_DIALYSATE_MODE_DATA));