Index: drydemo.pro.user =================================================================== diff -u -r8aa65ae1bbef5f6121783026efeeb99114c14414 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- drydemo.pro.user (.../drydemo.pro.user) (revision 8aa65ae1bbef5f6121783026efeeb99114c14414) +++ drydemo.pro.user (.../drydemo.pro.user) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -468,44 +468,44 @@ /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali - 192.168.137.25 - 192.168.137.30 - 192.168.10.186 - 192.168.137.170 - 192.168.10.167 - 192.168.137.210 - 192.168.10.159 - 192.168.10.228 - 192.168.10.228 - 192.168.10.138 + 192.168.137.247 + 192.168.137.202 192.168.137.125 192.168.137.36 - 192.168.137.202 - 192.168.137.247 - 192.168.137.3 + 192.168.137.170 + 192.168.137.26 192.168.137.24 192.168.40.23 + 192.168.137.3 + 192.168.10.186 + 192.168.137.30 + 192.168.137.25 192.168.137.170 - 192.168.137.26 192.168.10.186 + 192.168.10.167 + 192.168.10.159 + 192.168.137.210 + 192.168.10.138 + 192.168.10.228 + 192.168.10.228 /home/root @@ -532,68 +532,68 @@ /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux - 2023-02-02T02:13:54.596 - 2023-02-02T02:30:48.337 - 2023-01-18T17:47:08.797 - 2023-01-27T10:15:15.423 - 2023-02-02T19:40:15.813 - 2023-02-02T01:52:20.307 - 2023-01-24T18:19:13.179 - 2023-01-17T18:06:25.579 - 2023-01-17T18:18:03.749 - 2023-02-02T09:06:00.862 + 2023-02-02T02:26:33.738 + 2023-02-02T01:46:50.167 2023-02-02T02:07:25.922 2023-02-01T03:23:15.710 - 2023-02-02T01:46:50.167 - 2023-02-02T02:26:33.738 - 2023-02-02T02:40:56.627 - 2023-02-02T02:05:29.947 - 2023-01-24T17:29:54.849 2023-01-27T09:45:11.898 2023-02-01T05:00:56.449 + 2023-02-02T02:05:29.947 + 2023-01-24T17:29:54.849 + 2023-02-02T02:40:56.627 2023-01-18T20:13:36.296 + 2023-02-02T02:30:48.337 + 2023-02-02T02:13:54.596 + 2023-01-27T10:15:15.423 + 2023-01-18T17:47:08.797 + 2023-02-02T19:40:15.813 + 2023-01-24T18:19:13.179 + 2023-02-02T01:52:20.307 + 2023-02-02T09:06:00.862 + 2023-01-17T18:18:03.749 + 2023-01-17T18:06:25.579 - 2023-02-02T02:14:08.000 - 2023-02-02T02:31:01.000 - 2023-01-18T17:47:04.000 - 2023-01-27T10:15:08.000 - 2023-02-02T19:39:36.000 - 2023-02-02T01:52:16.000 - 2023-01-24T18:18:58.000 - 2023-01-17T18:05:42.000 - 2023-01-17T18:17:25.000 - 2023-02-02T09:05:22.000 + 2023-02-02T02:26:46.000 + 2023-02-02T01:47:02.000 2023-02-02T02:07:21.000 2023-02-01T03:23:28.000 - 2023-02-02T01:47:02.000 - 2023-02-02T02:26:46.000 - 2023-02-02T02:41:10.000 - 2023-02-02T02:05:42.000 - 2023-01-24T17:30:03.000 2023-01-27T09:44:58.000 2023-02-01T05:00:51.000 + 2023-02-02T02:05:42.000 + 2023-01-24T17:30:03.000 + 2023-02-02T02:41:10.000 2023-01-18T20:13:33.000 + 2023-02-02T02:31:01.000 + 2023-02-02T02:14:08.000 + 2023-01-27T10:15:08.000 + 2023-01-18T17:47:04.000 + 2023-02-02T19:39:36.000 + 2023-01-24T18:18:58.000 + 2023-02-02T01:52:16.000 + 2023-02-02T09:05:22.000 + 2023-01-17T18:17:25.000 + 2023-01-17T18:05:42.000 2 Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -rbec9c9856c333399aa5abaf18d2799f6fbc95da3 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision bec9c9856c333399aa5abaf18d2799f6fbc95da3) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -488,7 +488,7 @@ QString logString = QString("%1,").arg(id,4,16); QVariantList logVariant; logVariant.append(id); - + //qDebug() << "Raw" << vMessage.actionId << vMessage.sequence; if (_messageList.contains(id)) { ok = true; QStringList items = _messageList[id]; Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -102,7 +102,6 @@ #define RINSEBACK_BACK_MAX_TIME_MS (5 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) #define RINSEBACK_ADDITION_VOL_ML 50 #define RINSEBACK_MAX_ADDITION_TIME_MS (25 * MILLISECONDS_PER_SECOND) -#define RINSEBACK_END_TREATMENT_SIGNAL 999 // TODO remove? // Fluid Bolus defines #define FLUID_BOLUS_START_CMD 1 @@ -115,11 +114,14 @@ // Alarms #define ALARM_TABLE_PRIORITY_INDEX 0 #define ALARM_TABLE_PROPERTIES_INDEX 1 +#define ALARM_TABLE_TX_PAUSE_INDEX 2 #define ALARM_NO_ALARM_PROPERTIES 0 #define ALARM_STOP_TX_PROPERTIES 6 #define ALARM_REPLACE_ACID_PROPERTIES 112 #define ALARM_RECIRC_WARN_PROPERTIES 112 #define ALARM_RECIR_TIMEOUT_RPOPERTIES 26 +#define ALARM_TRANS_TO_TX_PAUSE 1 +#define ALARM_NOT_TRANS_TO_TX_PAUSE 0 enum User_Command_ID { CMD_NONE = -1, @@ -264,10 +266,10 @@ enum Confirmation_Status { CONFIRMATION_REQUEST_STATUS_REJECTED = 0, - CONFIRMATION_REQUEST_STATUS_ACCEPTED, - CONFIRMATION_REQUEST_STATUS_TIMEOUT, - CONFIRMATION_REQUEST_STATUS_PENDING, - CONFIRMATION_REQUEST_STATUS_UNUSED, + CONFIRMATION_REQUEST_STATUS_ACCEPTED = 1, + CONFIRMATION_REQUEST_STATUS_TIMEOUT = 2, + CONFIRMATION_REQUEST_STATUS_PENDING = 3, + CONFIRMATION_REQUEST_STATUS_UNUSED = 4, }; // Reject reason enums Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -39,11 +39,11 @@ _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)}; // Alarms specs and properties - _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE, ALARM_NO_ALARM_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_REPLACE_ACID_JUG ] = {ALARM_PRIORITY_HIGH, ALARM_REPLACE_ACID_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW, ALARM_RECIRC_WARN_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH, ALARM_RECIR_TIMEOUT_RPOPERTIES }; + _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE, ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_TD_REPLACE_ACID_JUG ] = {ALARM_PRIORITY_HIGH, ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW , ALARM_RECIRC_WARN_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH, ALARM_RECIR_TIMEOUT_RPOPERTIES, ALARM_NOT_TRANS_TO_TX_PAUSE}; } void StateController::quit() @@ -261,10 +261,10 @@ handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); // Clear the blood prime data immediately to prevent residual accumulated volume from a previous run handleBloodPrimeBroadcastData(0.0, 0, 0, BC_IMMEDIATELY); - accumBloodVolML = 0.0; - currBloodFlowMLPM = BLOOD_PRIME_START_FLOW_MLPM; - resume = true; - hasFlowChngeRequested = false; + accumBloodVolML = 0.0; + currBloodFlowMLPM = BLOOD_PRIME_START_FLOW_MLPM; + resume = true; + hasFlowChngeRequested = false; _treatmentSubStates.bloodPrimeState = BLOOD_PRIME_RAMP_STATE; _treatmentSubStates.txState = TREAT_BLOOD_PRIME_STATE; handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); @@ -277,19 +277,7 @@ status = STATE_ON_ACTION; handleTreatmentStatesBroadcastData(BC_DELAYED); handleBackToStandbyEvent(status); - - if (! _treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].isNull()){ - handleUIResponseMessage(ID_TD_BLOOD_PRIME_CMD_RESP, ACCEPT_VALUE); - - quint32 resumeStatus = extractU32DataFromReceivedMessage(ID_UI_BLOOD_PRIME_CMD_RQST, 0); - - resume = (resumeStatus == BLOOD_PRIME_RESUME ? true : false); - _treatmentSubStates.bloodPrimeState = (resumeStatus == BLOOD_PRIME_RESUME ? BLOOD_PRIME_RUN_STATE : BLOOD_PRIME_PAUSED_STATE); - // Send the results immediately - handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); - _treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].clear(); - } - + handleBloodPrimePauseResume(resume); handleSetPointBloodFlowChange(currBloodFlowMLPM, hasFlowChngeRequested); handleTDPressureProcessAndBroadcastData(BC_DELAYED); handleFluidBolusRequestMessage(); @@ -332,10 +320,10 @@ static State_Status status = STATE_ON_ENTRY; static bool hasFlowChngeRequested = false; - //if (_treatmentStatus.requestTreatmentReset) { status = STATE_ON_ENTRY; _treatmentStatus.requestTreatmentReset = false; } - auto onEntry = [=](){ hasFlowChngeRequested = false; + _treatmentSubStates.txState = TREAT_START_STATE; + handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; _treatmentSubStates.txState = TREAT_DIALYSIS_STATE; @@ -346,6 +334,8 @@ handleDDConductivityBroadcastData(BC_IMMEDIATELY); handleTreatmentTimeProcessAndBroadcastData(BC_IMMEDIATELY); handleDDGenDialysateModeBroadcastData(BC_IMMEDIATELY); + // If we are returning to treatment from recirculation or rinseback do not initialize the treatment time and UF + // This is to make sure the return to treatment is like the actual Leahi and the treatment is resumed. if (_treatmentStatus.requestTreatmentReset) { initializeTreatmentTimeAndUltrafiltration(); } handleTreatmentSettingBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; @@ -359,7 +349,7 @@ handleTreatmentStatesBroadcastData(BC_DELAYED); // Fluid bolus functions handleFluidBolusRequestMessage(); - if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); } + if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE) { handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); } handleFluidBolusBroadcastData(BC_DELAYED); // Broadcast functions handleTreatmentTimeProcessAndBroadcastData(BC_DELAYED); @@ -381,6 +371,8 @@ handleTreatmentSettingBroadcastData(BC_DELAYED); handleTreatmentTimeChangeValidation(); handleTreatmentTimeChangeConfirm(); + handleTriggeredAlarmsToTxPause(status); + if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { // Treatment is complete @@ -394,6 +386,7 @@ qDebug() << "Tx in exit"; status = STATE_ON_ENTRY; if (_treatmentStatus.userCmd == CMD_END_TX) { + triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); _treatmentStatus.stateTransitionEvent = "T_Tx_2_TP"; _treatmentStatus.requestTreatmentReset = false; _treatmentStatus.userCmd = CMD_NONE; @@ -413,7 +406,6 @@ static State_Status status = STATE_ON_ENTRY; auto onEntry = [=](){ - triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; _treatmentSubStates.txState = TREAT_PAUSED_STATE; Index: sources/drydemo/StateController.h =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateController.h (.../StateController.h) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateController.h (.../StateController.h) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -52,7 +52,7 @@ quint32 validateTxDurMin; quint32 validateHepDurMin; // Alarm variables - Alarm_List activeAlarm; + Alarm_List activeTopAlarm; // Rinseback variables quint32 rinsebackFlowMLPM; float rinsebackAccumVolML; @@ -146,6 +146,7 @@ float extractF32DataFromReceivedMessage(const Can::Message_ID_Enum msgID, qint32 index); void triggerAnAlarm(Alarm_List alarmID); void handleAlarmUserAction(State_Status &status, bool isFromTxPause = false); + void handleTriggeredAlarmsToTxPause(State_Status &status); // Standby methods void handleInitiateTreatmentRequestMessage(State_Status &status); @@ -155,6 +156,7 @@ // Blood prime methods float getBloodPrimeRampStepML(); + void handleBloodPrimePauseResume(bool &resume); void handleBloodPrimeBroadcastData(const float accumulatedVolML, const quint32 primeTimeOutS, const quint32 pauseCountDownS, const Broadcast_Type BCType); void handleBloodPrimeVolML(const bool resume, const float rampStepML, const bool hasFlowChanged, quint32 &currBloodFlowMLPM, float &accumBloodVolML); Index: sources/drydemo/StateControllerRecirc.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateControllerRecirc.cpp (.../StateControllerRecirc.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateControllerRecirc.cpp (.../StateControllerRecirc.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -19,7 +19,7 @@ quint32 acceptReject = REJECT_VALUE; quint32 recircCmd = extractU32DataFromReceivedMessage(ID_UI_RECIRCULATE_RQST, 0); - if (_treatmentStatus.activeAlarm != ALARM_ID_NO_ALARM) { + if (_treatmentStatus.activeTopAlarm != ALARM_ID_NO_ALARM) { reason.append(REQUEST_REJECT_REASON_ALARM_IS_ACTIVE); handleUIResponseMessage(ID_TD_RECIRCULATE_RESP, acceptReject, reason); _treatmentRcvdMessages[ID_UI_RECIRCULATE_RQST].clear(); @@ -78,14 +78,12 @@ quint32 warningTimeS = _treatmentStatus.recircTimeoutS - (RECIRC_WARN_BEFORE_TIMEOUT_MIN * SECONDS_PER_MINUTE); Q_UNUSED(warningTimeS) - //if ((recircElapsedTimeS >= warningTimeS) && (_treatmentStatus.activeAlarm != ALARM_ID_TD_RECIRC_TIMEOUT_WARNING)) { - if ((recircElapsedTimeS >= 20) && !_treatmentStatus.hasRecircWarnAlarmBeenTrig) { + if ((recircElapsedTimeS >= warningTimeS) && (_treatmentStatus.activeTopAlarm != ALARM_ID_TD_RECIRC_TIMEOUT_WARNING)) { _treatmentStatus.hasRecircWarnAlarmBeenTrig = true; triggerAnAlarm(ALARM_ID_TD_RECIRC_TIMEOUT_WARNING); } - //if ((recircElapsedTimeS >= _treatmentStatus.recircTimeoutS) && (_treatmentStatus.activeAlarm != ALARM_ID_TD_RECIRC_TIMEOUT)) { - if ((recircElapsedTimeS >= 30) && !_treatmentStatus.hasRecircTimeoutAlarmBeenTrig) { + if ((recircElapsedTimeS >= _treatmentStatus.recircTimeoutS) && (_treatmentStatus.activeTopAlarm != ALARM_ID_TD_RECIRC_TIMEOUT)) { _treatmentStatus.hasRecircTimeoutAlarmBeenTrig = true; triggerAnAlarm(ALARM_ID_TD_RECIRC_TIMEOUT); } Index: sources/drydemo/StateControllerRinseback.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateControllerRinseback.cpp (.../StateControllerRinseback.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateControllerRinseback.cpp (.../StateControllerRinseback.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -22,7 +22,7 @@ quint32 acceptReject = REJECT_VALUE; quint32 rinsebackCmd = extractU32DataFromReceivedMessage(ID_UI_RINSEBACK_CMD_RQST, 0); - if (_treatmentStatus.activeAlarm != ALARM_ID_NO_ALARM) { + if (_treatmentStatus.activeTopAlarm != ALARM_ID_NO_ALARM) { reason.append(REQUEST_REJECT_REASON_ALARM_IS_ACTIVE); handleUIResponseMessage(ID_TD_RINSEBACK_CMD_RESP, acceptReject, reason); _treatmentRcvdMessages[ID_UI_RINSEBACK_CMD_RQST].clear(); Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -91,7 +91,7 @@ quint16 properties = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PROPERTIES_INDEX].toInt(); quint32 alarmExpires = 0; - _treatmentStatus.activeAlarm = alarmID; + _treatmentStatus.activeTopAlarm = alarmID; QVariantList resp; resp.append(static_cast(ID_ALARM_STATUS_DATA)); @@ -146,15 +146,26 @@ QVariantList msg; msg.append(static_cast(ID_ALARM_CLEARED)); msg.append(Can_Id::eChlid_TD_Alarm); - msg.append(_treatmentStatus.activeAlarm); + msg.append(_treatmentStatus.activeTopAlarm); _isBroadcastListReady = false; _broadcastMessages.append(msg); _isBroadcastListReady = true; // Send the alarm clear command and then clear the variable - _treatmentStatus.activeAlarm = ALARM_ID_NO_ALARM; + _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; _treatmentRcvdMessages[ID_UI_ALARM_USER_ACTION_REQUEST].clear(); } +void StateController::handleTriggeredAlarmsToTxPause(State_Status &status) +{ + if (_treatmentStatus.activeTopAlarm == ALARM_ID_NO_ALARM) { return; } + + if (_alarmTriggerSpecs[_treatmentStatus.activeTopAlarm][ALARM_TABLE_TX_PAUSE_INDEX].toInt() == ALARM_TRANS_TO_TX_PAUSE) { + _treatmentStatus.stateTransitionEvent = "T_Tx_2_TP"; + _treatmentStatus.requestTreatmentReset = false; + status = STATE_ON_EXIT; + } +} + void StateController::handleUIConfirmMessage(const Generic_Confirm_Id confirmID, State_Status &status) { if (!_uiConfirmMessages.contains(confirmID)) { return; } Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -16,6 +16,21 @@ return rampStepML; } +void StateController::handleBloodPrimePauseResume(bool &resume) +{ + if (_treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].isNull()) { return; } + + handleUIResponseMessage(ID_TD_BLOOD_PRIME_CMD_RESP, ACCEPT_VALUE); + + quint32 resumeStatus = extractU32DataFromReceivedMessage(ID_UI_BLOOD_PRIME_CMD_RQST, 0); + + resume = (resumeStatus == BLOOD_PRIME_RESUME ? true : false); + _treatmentSubStates.bloodPrimeState = (resumeStatus == BLOOD_PRIME_RESUME ? BLOOD_PRIME_RUN_STATE : BLOOD_PRIME_PAUSED_STATE); + // Send the results immediately + handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + _treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].clear(); +} + void StateController::handleBloodPrimeVolML(const bool resume, const float rampStepML, const bool hasFlowChanged, quint32 &currBloodFlowMLPM, float &accumBloodVolML) { @@ -58,7 +73,7 @@ pauseCountDownS = 0; elapsedTimeSincePauseS = 0; handleBloodPrimeBroadcastData(accumBloodVolML, primeTimeoutS, pauseCountDownS, BC_IMMEDIATELY); - qDebug() << "Current" << currBloodFlowMLPM << _treatmentParams.bloodFlowRateMLPM << controlCounter << accumBloodVolML; + //qDebug() << "Current" << currBloodFlowMLPM << _treatmentParams.bloodFlowRateMLPM << controlCounter << accumBloodVolML; } void StateController::setTreatmentParametersToDefault() @@ -140,63 +155,69 @@ void StateController::handleTreatmentPrescriptionEditRequestMessage() { - if (! _treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST].isNull()){ + if (_treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST].isNull()) { return; } - // TODO range check the parameters - QVariantList resp; - resp.append(static_cast(ID_TD_TREATMENT_SET_POINTS_CHANGE_RESP)); - resp.append(Can_Id::eChlid_TD_UI); - resp.append(ACCEPT_VALUE); + // TODO range check the parameters + QVariantList resp; + resp.append(static_cast(ID_TD_TREATMENT_SET_POINTS_CHANGE_RESP)); + resp.append(Can_Id::eChlid_TD_UI); + resp.append(ACCEPT_VALUE); - QVariant payload = _treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST]; - qint32 index = 0; - Types::U32 u32Var; - Types::F32 f32Var; + QVariant payload = _treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST]; + qint32 index = 0; - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.bloodFlowRateMLPM = u32Var.value; - resp.append(0); + Types::U32 u32Var; + Types::F32 f32Var; - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.dialysateFlowRateMLPM = u32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.bloodFlowRateMLPM = u32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, f32Var); - _treatmentParams.dialysateTemperatureC = f32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.dialysateFlowRateMLPM = u32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.acidConcentrate = u32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, f32Var); + _treatmentParams.dialysateTemperatureC = f32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, f32Var); - _treatmentParams.acidKConcentrateConversionFactor = f32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, u32Var); + qDebug() << "Old conc" << _treatmentParams.acidConcentrate; + if (_treatmentParams.acidConcentrate != u32Var.value) { + qDebug() << "New conc" << _treatmentParams.acidConcentrate; + triggerAnAlarm(ALARM_ID_TD_REPLACE_ACID_JUG); + } - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.bicarbobateMEQL = u32Var.value; - resp.append(0); + _treatmentParams.acidConcentrate = u32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.treatmentModality = u32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, f32Var); + _treatmentParams.acidKConcentrateConversionFactor = f32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.hepatitisBStatus = u32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.bicarbobateMEQL = u32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.sodiumMEQL = u32Var.value; - resp.append(0); + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.treatmentModality = u32Var.value; + resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.bicarbobateMEQL = u32Var.value; - resp.append(0); - _isSendListReady = false; - _sendMessages.append(resp); - _isSendListReady = true; - _treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST].clear(); - } + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.hepatitisBStatus = u32Var.value; + resp.append(0); + + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.sodiumMEQL = u32Var.value; + resp.append(0); + + GetValue(payload.toByteArray(), index, u32Var); + _treatmentParams.bicarbobateMEQL = u32Var.value; + resp.append(0); + _isSendListReady = false; + _sendMessages.append(resp); + _isSendListReady = true; + _treatmentRcvdMessages[ID_UI_TREATMENT_SET_POINTS_CHANGE_RQST].clear(); } void StateController::handleSetPointBloodFlowChange(quint32 &bloodFlowMLPM, bool &hasBloodFlowChanged)