Index: LeahiDryDemoXMLStates.scxml
===================================================================
diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- LeahiDryDemoXMLStates.scxml (.../LeahiDryDemoXMLStates.scxml) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248)
+++ LeahiDryDemoXMLStates.scxml (.../LeahiDryDemoXMLStates.scxml) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -2,86 +2,96 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
+
+
+
+
Index: drydemo.pro
===================================================================
diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- drydemo.pro (.../drydemo.pro) (revision bf271a558491a83b39eb30748784f1b744736dd2)
+++ drydemo.pro (.../drydemo.pro) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -102,6 +102,7 @@
\ # ---------- States ----------
sources/drydemo/StateController.cpp \
sources/drydemo/StateControllerHDFTreatment.cpp \
+ sources/drydemo/StateControllerPostTreatment.cpp \
sources/drydemo/StateControllerPreTreatment.cpp \
sources/drydemo/StateControllerRecirc.cpp \
sources/drydemo/StateControllerRinseback.cpp \
Index: drydemo.pro.user
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- drydemo.pro.user (.../drydemo.pro.user) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ drydemo.pro.user (.../drydemo.pro.user) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -1,6 +1,6 @@
-
+
EnvironmentId
@@ -293,7 +293,7 @@
Qt 5.15.10 (iMX8)
Qt 5.15.10 (iMX8)
{ada4083c-13b6-4ac8-a486-71ff00b060da}
- 0
+ 1
0
0
Index: sources/MessageGlobals.h
===================================================================
diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/MessageGlobals.h (.../MessageGlobals.h) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2)
+++ sources/MessageGlobals.h (.../MessageGlobals.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -174,6 +174,8 @@
ID_TD_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_RESP = 0x7F00,
ID_UI_TREATMENT_SET_POINT_DIALYSATE_TEMP_CHANGE_RQST = 0x8000,
ID_TD_TREATMENT_SET_POINT_DIALYSATE_TEMP_CHANGE_RESP = 0x8100,
+ ID_TD_END_TREATMENT_RQST = 0x8D00,
+ ID_TD_END_TREATMENT_RESP = 0x8E00,
ID_TD_RINSEBACK_DATA = 0x8F00,
ID_UI_RINSEBACK_CMD_RQST = 0x9000,
ID_TD_RINSEBACK_CMD_RESP = 0x9100,
Index: sources/drydemo/DryDemoDefines.h
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -123,25 +123,27 @@
#define RECIRC_WARN_BEFORE_TIMEOUT_MIN 10
// Alarm defines
-#define ALARM_TABLE_PRIORITY_INDEX 0
-#define ALARM_TABLE_PROPERTIES_INDEX 1
-#define ALARM_TABLE_TX_PAUSE_INDEX 2
-#define ALARM_TRANS_TO_TX_PAUSE 1
-#define ALARM_NOT_TRANS_TO_TX_PAUSE 0
-#define TRIG_LOW_VEN_ALARM_TIMEOUT_MS (3 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND)
-#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
-#define ALARM_LOW_VENOUS_PROPERTIES 2
-#define ALARM_RECIRC_WARN_PROPERTIES 112
-#define ALARM_REPLACE_BICARB_PROPERTIES 112
-#define ALARM_DIAL_PROPOR_PROPERTIES 10
-#define ALARM_TX_MOD_CHNG_PROPERTIES 2
-#define ALARM_LOW_BICARB_PROPERTIES 112
+#define ALARM_TABLE_PRIORITY_INDEX 0
+#define ALARM_TABLE_PROPERTIES_INDEX 1
+#define ALARM_TABLE_TX_PAUSE_INDEX 2
+#define ALARM_TRANS_TO_TX_PAUSE 1
+#define ALARM_NOT_TRANS_TO_TX_PAUSE 0
+#define TRIG_LOW_VEN_ALARM_TIMEOUT_MS (3 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND)
+#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
+#define ALARM_LOW_VENOUS_PROPERTIES 2
+#define ALARM_RECIRC_WARN_PROPERTIES 112
+#define ALARM_REPLACE_BICARB_PROPERTIES 112
+#define ALARM_DIAL_PROPOR_PROPERTIES 10
+#define ALARM_TX_MOD_CHNG_PROPERTIES 2
+#define ALARM_LOW_BICARB_PROPERTIES 112
+#define ALARM_TD_END_OF_TX_PROPERTIES 248
+#define ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES 88
// Dry bicart defines
#define DRY_BICART_DRIN_IN_PROGRESS 1
@@ -159,6 +161,9 @@
#define HDF_CONTROL_INT_CTR (4 * MILLISECONDS_PER_SECOND) / QOBJECT_TIMER_TIMEOUT_MS
#define HDF_START_RATE_MLPM 50.0
+// Treatment end defines
+#define TREATMENT_END_TIMEOUT_ALARM_MS 10000 //(10 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND)
+
enum User_Command_ID {
CMD_NONE = -1,
CMD_STAND_BY = 0,
@@ -167,8 +172,11 @@
CMD_MAIN_TX = 3,
CMD_RINSEBACK = 4,
CMD_RICIRCULATE = 5,
- CMD_END_TX = 6,
+ CMD_TX_STOP = 6,
+ CMD_END_TX = 7,
+ CMD_POST_TX = 8,
+
CMD_DISINFECTION = 12,
CMD_HIGH_PRIO_ALARM = 13,
CMD_MEDIUM_PRIO_ALARM = 14,
@@ -225,11 +233,10 @@
REQUESTED_USER_ACTION_RINSEBACK_DECREASE_RATE = 2,
REQUESTED_USER_ACTION_RINSEBACK_PAUSE = 3,
REQUESTED_USER_ACTION_RINSEBACK_RESUME = 4,
- REQUESTED_USER_ACTION_RINSEBACK_END = 5,
- REQUESTED_USER_ACTION_RINSEBACK_ADDITIONAL = 6,
- REQUESTED_USER_ACTION_RINSEBACK_CONFIRM_RECIRCULATE = 7,
- REQUESTED_USER_ACTION_RINSEBACK_END_TREATMENT = 8,
- REQUESTED_USER_ACTION_RINSEBACK_BACK_TO_TREATMENT = 9,
+ REQUESTED_USER_ACTION_RINSEBACK_ADDITIONAL = 5,
+ REQUESTED_USER_ACTION_RINSEBACK_CONFIRM_RECIRCULATE = 6,
+ REQUESTED_USER_ACTION_RINSEBACK_END_TREATMENT = 7,
+ REQUESTED_USER_ACTION_RINSEBACK_BACK_TO_TREATMENT = 8,
};
enum Recirculate_States {
@@ -345,6 +352,8 @@
ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE = 248,
ALARM_ID_DD_REPLACE_ACID_CONCENTRATE = 249,
ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS = 250,
+ ALARM_ID_TD_END_OF_TREATMENT = 251,
+ ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT = 252,
};
enum Generic_Confirm_Id {
Index: sources/drydemo/StateController.cpp
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -21,33 +21,37 @@
_dryDemo.connectToState("Pre_Tx" , this, &StateController::onPretreatmentStateChange );
_dryDemo.connectToState("Blood_Prime" , this, &StateController::onBloodPrimeStateChange );
_dryDemo.connectToState("Treatment" , this, &StateController::onTreatmentStateChange );
-
_dryDemo.connectToState("Treatment_Pause" , this, &StateController::onTreatmentPauseStateChange );
_dryDemo.connectToState("Treatment_Rinseback" , this, &StateController::onTreatmentRinsebackStateChange );
_dryDemo.connectToState("Treatment_Recirculate" , this, &StateController::onTreatmentRecriculateStateChange );
_dryDemo.connectToState("Treatment_End" , this, &StateController::onTreatmentEndStateChange );
+ _dryDemo.connectToState("Post_Tx" , this, &StateController::onPostTreatmentStateChange );
// Transition to standby commands and events
_transitionEventsFromStandby.clear();
- _transitionEventsFromStandby[CMD_STAND_BY ] = {"T_Back_2_SB" , static_cast(MODE_STAN)};
- _transitionEventsFromStandby[CMD_PRE_TX ] = {"T_SB_2_Pretx", static_cast(MODE_PRET)};
- _transitionEventsFromStandby[CMD_BLOOD_PRIME ] = {"T_SB_2_BP" , static_cast(MODE_TREA)};
- _transitionEventsFromStandby[CMD_MAIN_TX ] = {"T_SB_2_Tx" , static_cast(MODE_TREA)};
- _transitionEventsFromStandby[CMD_RINSEBACK ] = {"T_SB_2_RB" , static_cast(MODE_TREA)};
- _transitionEventsFromStandby[CMD_RICIRCULATE ] = {"T_SB_2_RC" , static_cast(MODE_TREA)};
- _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_STAND_BY ] = {"T_Back_2_SB" , static_cast(MODE_STAN)};
+ _transitionEventsFromStandby[CMD_PRE_TX ] = {"T_SB_2_Pretx" , static_cast(MODE_PRET)};
+ _transitionEventsFromStandby[CMD_BLOOD_PRIME ] = {"T_SB_2_BP" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_MAIN_TX ] = {"T_SB_2_Tx" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_RINSEBACK ] = {"T_SB_2_RB" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_RICIRCULATE ] = {"T_SB_2_RC" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)};
+ _transitionEventsFromStandby[CMD_POST_TX ] = {"T_SB_2_Posttx" , static_cast(MODE_POST)};
// Alarms specs and properties
- _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE , ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE};
- _alarmTriggerSpecs[ALARM_ID_TD_VENOUS_PRESSURE_LOW ] = {ALARM_PRIORITY_HIGH , ALARM_LOW_VENOUS_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};
- _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
- _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
- _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
- _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
- _alarmTriggerSpecs[ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS ] = {ALARM_PRIORITY_MEDIUM , ALARM_DIAL_PROPOR_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE , ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_TD_VENOUS_PRESSURE_LOW ] = {ALARM_PRIORITY_HIGH , ALARM_LOW_VENOUS_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 };
+ _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS ] = {ALARM_PRIORITY_MEDIUM , ALARM_DIAL_PROPOR_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT ] = {ALARM_PRIORITY_MEDIUM , ALARM_TD_END_OF_TX_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE };
+ _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT ] = {ALARM_PRIORITY_MEDIUM , ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE };
+
}
void StateController::quit()
@@ -106,6 +110,7 @@
case ID_UI_PRESSURE_LIMIT_WIDEN_RQST:
case ID_UI_BLOOD_PRESSURE_RQST:
case ID_UI_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_RQST:
+ case ID_TD_END_TREATMENT_RQST:
_treatmentRcvdMessages[receivedMsgID] = 0;
break;
@@ -157,6 +162,7 @@
case ID_TD_HDF_ADJUSTMENT_RESP:
case ID_TD_WATER_SAMPLE_RESULT_RESP:
case ID_TD_PAUSE_SUB_FLOW_RESP:
+ case ID_TD_END_TREATMENT_RESP:
// Do nothing
break;
}
@@ -200,8 +206,8 @@
auto onEntry = [=](){
handleTDOpModeTransitionBroadcastData(MODE_STAN, 0, BC_IMMEDIATELY);
- setTreatmentParametersToDefault();
- resetDryDemoVariables();
+ initializeTreatmentParametersToDefault();
+ initializeDryDemoVariables();
initializeTreatmentHDFVariables();
// Clear all the alarms
triggerAnAlarm(ALARM_ID_NO_ALARM);
@@ -462,7 +468,7 @@
auto onExit = [=](){
qDebug() << "Tx in exit";
status = STATE_ON_ENTRY;
- if (_treatmentStatus.userCmd == CMD_END_TX) {
+ if (_treatmentStatus.userCmd == CMD_TX_STOP) {
triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER);
_treatmentStatus.stateTransitionEvent = "T_Tx_2_TP";
_treatmentStatus.requestTreatmentReset = false;
@@ -649,27 +655,47 @@
void StateController::onTreatmentEndStateChange(bool active)
{
- static State_Status status = STATE_ON_ENTRY;
+ static State_Status status = STATE_ON_ENTRY;
+ static bool hasFlowChngeRequested = false;
auto onEntry = [=](){
- _treatmentSubStates.txState = TREAT_END_STATE;
- _treatmentSubStates.txEndState = TREATMENT_END_WAIT_FOR_RINSEBACK_STATE;
- _treatmentStatus.isTreatmentComplete = true;
+ triggerAnAlarm(ALARM_ID_TD_END_OF_TREATMENT);
+ _treatmentSubStates.txState = TREAT_START_STATE;
+ handleTreatmentStatesBroadcastData(BC_IMMEDIATELY);
+ _treatmentSubStates.txState = TREAT_DIALYSIS_STATE;
+ _treatmentSubStates.txEndState = TREATMENT_END_WAIT_FOR_RINSEBACK_STATE;
+ _treatmentStatus.isTreatmentComplete = true;
+ _treatmentStatus.treatmentEndTimeoutAlarmCtr = _elapsedTimeCtr;
handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY);
handleTreatmentStatesBroadcastData(BC_IMMEDIATELY);
status = STATE_ON_ACTION;
qDebug() << "Tx End on entry";
};
auto onAction = [=](){
- status = STATE_ON_ACTION;
+ _treatmentSubStates.txState = TREAT_END_STATE;
+ status = STATE_ON_ACTION;
handleBackToStandbyEvent(status);
handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED);
handleTreatmentStatesBroadcastData(BC_DELAYED);
- // Vitals
+ // Alarm methods
+ handleAlarmUserAction(status, false);
+ // Fluid bolus methods
+ handleFluidBolusRequestMessage();
+ handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM);
+ handleFluidBolusBroadcastData(BC_DELAYED);
+ // Set point methods
+ handleSetPointBloodFlowChange(_treatmentParams.bloodFlowRateMLPM, hasFlowChngeRequested);
+ handleTreatmentSetpointsBroadcastData(_treatmentParams.bloodFlowRateMLPM, _treatmentParams.dialysateFlowRateMLPM,
+ _treatmentParams.dialysateTemperatureC, BC_DELAYED);
+ // Vitals method
handleVitalsDataRquest();
// Water sample methods
handleTDWaterSampleResultRequest();
+ // Treatment end request method
+ handleTreatmentEndRequestMessage(status);
+ handleTreatmentEndTimeout();
+ handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status);
};
auto onExit = [=](){
@@ -685,6 +711,41 @@
}
}
+void StateController::onPostTreatmentStateChange(bool active)
+{
+ static State_Status status = STATE_ON_ENTRY;
+
+ auto onEntry = [=](){
+ status = STATE_ON_ACTION;
+ handleBackToStandbyEvent(status);
+ handleTDOpModeTransitionBroadcastData(MODE_POST, 0, BC_DELAYED);
+ handleTreatmentStatesBroadcastData(BC_IMMEDIATELY);
+ qDebug() << "Post Tx on entry";
+ };
+
+ auto onAction = [=](){
+ status = STATE_ON_ACTION;
+ handleBackToStandbyEvent(status);
+ handleTDOpModeTransitionBroadcastData(MODE_POST, 0, BC_DELAYED);
+ // Vitals
+ handleVitalsDataRquest();
+ // Water sample methods
+ handleTDWaterSampleResultRequest();
+ };
+
+ auto onExit = [=](){
+ qDebug() << "Post Tx on exit";
+ _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent);
+ status = STATE_ON_ENTRY;
+ };
+
+ switch (status) { // TODO macro it later
+ case STATE_ON_ENTRY : if (active) onEntry (); break;
+ case STATE_ON_ACTION: if (active) onAction(); break;
+ case STATE_ON_EXIT : if (active) onExit (); break;
+ }
+}
+
// ************* Hepler functions ************* //
void StateController::handleTDOpModeTransitionBroadcastData(const TD_OP_MODE mode, const quint32 subMode, const Broadcast_Type BCType)
Index: sources/drydemo/StateController.h
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/StateController.h (.../StateController.h) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ sources/drydemo/StateController.h (.../StateController.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -85,6 +85,8 @@
float bicartProgress;
quint32 bicartDrainInProgress;
quint32 bicartDepresInProgress;
+ // Treatment end
+ quint32 treatmentEndTimeoutAlarmCtr;
};
struct Treatment_HDF_vars {
@@ -208,12 +210,13 @@
void onTreatmentRinsebackStateChange(bool active);
void onTreatmentRecriculateStateChange(bool active);
void onTreatmentEndStateChange(bool active);
+ void onPostTreatmentStateChange(bool active);
// Helper methods
void handleTDOpModeTransitionBroadcastData(const Can::TD_OP_MODE mode, const quint32 subMode, const Broadcast_Type BCType);
void setTreatmentParametersFromUI(const QVariant &payload); // TODO move the implementation to pretx cpp
void handleUIResponseMessage(const Can::Message_ID_Enum msgID, const quint32 acceptReject, const QVariantList &rejectReasons = {});
- void resetDryDemoVariables();
+ void initializeDryDemoVariables();
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);
@@ -242,7 +245,7 @@
void handleBloodPrimeVolML(const bool resume, const float rampStepML, const bool hasFlowChanged, quint32 &currBloodFlowMLPM, float &accumBloodVolML);
// Treatment methods
- void setTreatmentParametersToDefault();
+ void initializeTreatmentParametersToDefault();
void initializeTreatmentTimeAndUltrafiltration();
void handleTreatmentSetpointsBroadcastData(const quint32 bloodFlowMLPM, const quint32 dialFlowMLPM, const float dialTempC, const Broadcast_Type BCType);
void handleTreatmentStatesBroadcastData(const Broadcast_Type BCType);
@@ -301,5 +304,6 @@
void handleRecircBroadcastData(const Broadcast_Type BCType);
// Treatment end methods
-
+ void handleTreatmentEndRequestMessage(State_Status &status);
+ void handleTreatmentEndTimeout();
};
Index: sources/drydemo/StateControllerPostTreatment.cpp
===================================================================
diff -u
--- sources/drydemo/StateControllerPostTreatment.cpp (revision 0)
+++ sources/drydemo/StateControllerPostTreatment.cpp (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -0,0 +1,4 @@
+
+#include "StateController.h"
+#include "ApplicationController.h"
+#include "types.h"
Index: sources/drydemo/StateControllerRinseback.cpp
===================================================================
diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/StateControllerRinseback.cpp (.../StateControllerRinseback.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2)
+++ sources/drydemo/StateControllerRinseback.cpp (.../StateControllerRinseback.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -95,12 +95,14 @@
}
// TODO implement recirc allowed too
else {
+ acceptReject = ACCEPT_VALUE;
_treatmentStatus.hasRecircBeenRequested = true;
}
break;
case REQUESTED_USER_ACTION_RINSEBACK_END_TREATMENT:
handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN);
+ acceptReject = ACCEPT_VALUE;
break;
default:
Index: sources/drydemo/StateControllerStandby.cpp
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -15,7 +15,6 @@
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();
@@ -89,7 +88,7 @@
_isSendListReady = true;
}
-void StateController::resetDryDemoVariables()
+void StateController::initializeDryDemoVariables()
{
_treatmentStatus.hasTxParamsBeenInitialized = false;
_treatmentStatus.requestTreatmentReset = true;
@@ -195,9 +194,15 @@
triggerAnAlarm(ALARM_ID_NO_ALARM);
break;
+ case ALARM_USER_ACTION_ACK:
+ triggerAnAlarm(ALARM_ID_NO_ALARM);
+ break;
+
case ALARM_USER_ACTION_RINSEBACK:
case ALARM_USER_ACTION_TEMPOARY_BREAK:
handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_RINSEBACK, GENERIC_CONFIRM_CMD_REQUEST_OPEN);
+ // Set the flag to go to recirculate
+ if (userAction == ALARM_USER_ACTION_TEMPOARY_BREAK) { _treatmentStatus.hasRecircBeenRequested = true; }
break;
case ALARM_USER_ACTION_END_TREATMENT:
@@ -245,7 +250,7 @@
}
// Wait for a couple of seconds to simulate like the conductivity is getting in range
elapsedTimeMS = (_elapsedTimeCtr - _treatmentStatus.triggerAlarmTimeoutCtr) * QOBJECT_TIMER_TIMEOUT_MS;
- if (elapsedTimeMS == CLEAR_DIAL_PROPOR_TIMEOUT_MS) {
+ if (elapsedTimeMS >= CLEAR_DIAL_PROPOR_TIMEOUT_MS) {
// Proportioning alarm is cleared automatically
triggerAnAlarm(ALARM_ID_NO_ALARM);
_treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_DRY_BICARB_CARTRIDGE;
@@ -289,7 +294,7 @@
case SEQ_ALARM_PROPORTIONING_BICARB_IN_PROG:
// Wait for a couple of seconds to simulate like the conductivity is getting in range
elapsedTimeMS = (_elapsedTimeCtr - _treatmentStatus.triggerAlarmTimeoutCtr) * QOBJECT_TIMER_TIMEOUT_MS;
- if (elapsedTimeMS == CLEAR_DIAL_PROPOR_TIMEOUT_MS) {
+ if (elapsedTimeMS >= CLEAR_DIAL_PROPOR_TIMEOUT_MS) {
// This alarm is cleared automatically
triggerAnAlarm(ALARM_ID_NO_ALARM);
_treatmentStatus.triggerAlarmTimeoutCtr = _elapsedTimeCtr;
@@ -330,29 +335,24 @@
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
-
+ if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_REJECTED) {
+ handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE);
+ _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED;
+ qDebug() << "Reject";
+ return;
+ }
switch (confirmID) {
case GENERIC_CONFIRM_ID_TREATMENT_END:
if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) {
QStringList activeStates = _dryDemo.activeStateNames(true);
// 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;
+ if (activeState == "Treatment_Recirculate") { _treatmentStatus.stateTransitionEvent = "T_RC_2_Posttx"; }
+ else if (activeState == "Treatment_Rinseback") { _treatmentStatus.stateTransitionEvent = "T_RB_2_Posttx"; }
+ else if (activeState == "Treatment_End") { _treatmentStatus.stateTransitionEvent = "T_TE_2_RB"; }
+ else if (activeState == "Treatment_Pause") { _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; }
_uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED;
+ status = STATE_ON_EXIT;
qDebug() << "Event" << activeState << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true);
handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE);
triggerAnAlarm(ALARM_ID_NO_ALARM);
@@ -394,7 +394,9 @@
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();
+ _uiConfirmMessages[confirmID].startTimeMS = QDateTime::currentMSecsSinceEpoch();
+ // Setting the confirm status to pending because the default status is rejected
+ _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_PENDING;
QVariantList resp;
resp.append(static_cast(ID_TD_UI_GENERIC_CONFIRMATION_RQST));
Index: sources/drydemo/StateControllerTreatment.cpp
===================================================================
diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b
--- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728)
+++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b)
@@ -80,7 +80,7 @@
//qDebug() << "Current" << currBloodFlowMLPM << _treatmentParams.bloodFlowRateMLPM << controlCounter << accumBloodVolML;
}
-void StateController::setTreatmentParametersToDefault()
+void StateController::initializeTreatmentParametersToDefault()
{
// TODO complete the list as we go
_treatmentParams.finalConfirmation = true;
@@ -698,9 +698,28 @@
handleUIResponseMessage(ID_TD_DRY_BICART_DISCONNECT_RESP, ACCEPT_VALUE);
}
+// TREATMENT END
+void StateController::handleTreatmentEndRequestMessage(State_Status &status)
+{
+ if (_treatmentRcvdMessages[ID_TD_END_TREATMENT_RQST].isNull()) { return; }
+ _treatmentStatus.stateTransitionEvent = "T_TE_2_RB";
+ status = STATE_ON_EXIT;
+ _treatmentRcvdMessages[ID_TD_END_TREATMENT_RQST].clear();
+ handleUIResponseMessage(ID_TD_END_TREATMENT_RESP, ACCEPT_VALUE);
+}
+void StateController::handleTreatmentEndTimeout()
+{
+ quint32 elapsedTimeMS = (_elapsedTimeCtr - _treatmentStatus.treatmentEndTimeoutAlarmCtr) * QOBJECT_TIMER_TIMEOUT_MS;
+ if (elapsedTimeMS == TREATMENT_END_TIMEOUT_ALARM_MS) {
+ triggerAnAlarm(ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT);
+ }
+}
+
+
+