Index: sources/drydemo/StateController.h =================================================================== diff -u -r6d7f1800f7f56813c0824df509487f527a4026b2 -r9edc9ba3995ca25a29bb74eeeae71f7d72965284 --- sources/drydemo/StateController.h (.../StateController.h) (revision 6d7f1800f7f56813c0824df509487f527a4026b2) +++ sources/drydemo/StateController.h (.../StateController.h) (revision 9edc9ba3995ca25a29bb74eeeae71f7d72965284) @@ -5,9 +5,10 @@ #include #include +#include "DryDemoDefines.h" +#include "LeahiDryDemoXMLStates.h" #include "main.h" #include "MessageGlobals.h" -#include "LeahiDryDemoXMLStates.h" #define _StateController StateController::I() @@ -29,151 +30,7 @@ void timerEvent(QTimerEvent *) override; private: - // TODO REMOVE - // General defines - #define UI_MSG_BB_STATUS_INDEX 4 - #define UI_MSG_BB_PAYLOAD_ID 0x63 - #define SECONDS_PER_MINUTE 60 - #define MINUTES_PER_HOUR 60 - #define MILLISECONDS_PER_SECOND 1000 - #define MILLILITERS_PER_LITER 1000 - #define ACCEPT_VALUE 1 - #define REJECT_VALUE 0 - #define CONFIRM_CMD_ACCEPT_CLOSE 3 - #define PASS_RESULT 1 - #define DEVICE_ID 1234 - // Timer event defines - #define DEFAULT_TIMEOUT_S 10 - #define QOBJECT_TIMER_TIMEOUT_MS 100 - #define PROGRESS_TIME_BC_INTERVAL_MS 1000 - #define NUM_OF_COUNTS_TIMER_BC_EMIT (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) - #define NUM_OF_COUNTS_TIMER_2_CONTROL (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) - #define NUM_OF_COUNTS_TO_BC_MSG 3 // TODO remove - - // Treatment params - #define MIN_DIAL_RATE_MLPM 100 - #define MAX_DIAL_RATE_MLPM 600 - #define MIN_BLOOD_RATE_MLPM 100 - #define MAX_BLOOD_RATE_MLPM 500 - #define MIN_TX_TIME_MINS (1 * MINUTES_PER_HOUR) - #define MAX_TX_TIME_MINS (8 * MINUTES_PER_HOUR) - #define MIN_UF_VOL_L 0.0 - #define MAX_UF_VOL_L 8.0 - #define MAX_UF_VOL_ML (MAX_UF_VOL_L * MILLILITERS_PER_LITER) - #define MIN_UF_RATE_MLPM 0.0 - #define MAX_UF_RATE_MLPM (2000.0 / MINUTES_PER_HOUR) - - #define ACID_TYPES_1251_1_K 1.0 // TODO remove? - #define ACID_TYPES_CALCIUM 2.5 - #define ACID_TYPES_BICARB 33 - #define ACID_TYPES_SODIUM 137 - - #define DEF_TX_ELAPSED_TIME_S (2 * MINUTES_PER_HOUR) * SECONDS_PER_MINUTE - #define DEF_TX_PARAM_PRESCRIBED_DUR_MIN ((4 * MINUTES_PER_HOUR) + 30) - #define DEF_TX_PARAM_PRESCRIBED_DUR_S DEF_TX_PARAM_PRESCRIBED_DUR_MIN * SECONDS_PER_MINUTE - #define DEF_TX_PARAM_UF_VOLUME_L 2.0 - #define DEF_TX_PARAM_BLOOD_FLOW_RATE_MLPM 400 - #define DEF_TX_PARAM_DIAL_FLOW_RATE_MLPM 350 - #define DEF_TX_PARAM_SALINE_BOLUS_VOL_ML 100 - #define DEF_TX_PARAM_RINSEBACK_FLOW_RATE_MLPM 250 - #define DEF_TX_PARAM_ART_PRES_LIMIT_WIN_MMHG 120 - #define DEF_TX_PARAM_VEN_PRES_LIMIT_WIN_MMHG 100 - #define DEF_TX_PARAM_VEN_PRES_LIMIT_ASYM_WIN_MMHG 20 - #define DEF_TX_PARAM_DIA_TEMPERATURE_C 37.0 - - // Arterial /Venous limits - #define MIN_ART_PRES_LIMIT_MMHG -300.0 - #define MAX_ART_PRES_LIMIT_MMHG 100.0 - #define MIN_VEN_PRES_LIMIT_MMHG 20.0 - #define MAX_VEN_PRES_LIMIT_MMHG 400.0 - #define MAX_TMP_PRES_LIMIT_MMHG 100.0 - #define MIN_TMP_PRES_LIMIT_MMHG -500.0 - #define OCCLUSION_STABLE_TIME_COUNT (10 * MILLISECONDS_PER_SECOND) / QOBJECT_TIMER_TIMEOUT_MS - - // Initiate treatment - #define INITIATE_TREATMENT 1 - #define ALLOW_DIALYSATE_DELIVER 1 - - // Treatment defines - #define BLOOD_PRIME_VOLUME_ML (106.6 + 40) - #define BLOOD_PRIME_START_FLOW_MLPM 250 - #define BLOOD_PRIME_FLOW_INTEGRATOR (1.0 / (SECONDS_PER_MINUTE * (MILLISECONDS_PER_SECOND / QOBJECT_TIMER_TIMEOUT_MS))) - #define BLOOD_PRIME_PAUSE_TIMEOUT_S (5 * SECONDS_PER_MINUTE) - #define BLOOD_PRIME_RESUME 1 - #define BLOOD_PRIME_PAUSE 2 - #define BLOOD_PRIME_RAMP_STATE 1 - - // Heparin substates - #define HEPARIN_OFF_SUBSTATE 0 - #define HEPARIN_PAUSED_SUBSTATE 2 - #define HEPARIN_DISPENSING_SUBSTATE 4 - #define HEPARIN_COMPLETED_SUBSTATE 5 - - // Ultrafiltration substates - #define UF_PAUSESD_STATE 0 - #define UF_RUNNING_STATE 1 - - // Rinseback defines - #define RINSEBACK_MIN_FLOW_RATE_MLPM 100 - #define RINSEBACK_MAX_RLOW_RATE_MLPM 300 - #define RINSEBACK_ADJ_FLOW_RATE_MLPM 25 - #define RINSEBACK_BACK_MAX_TIME_S (5 * SECONDS_PER_MINUTE) - #define RINSEBACK_END_TREATMENT_SIGNAL 999 - #define RINSEBACK_STOP_INIT_STATE 0 - #define RINSEBACK_RUN_STATE 1 - #define RINSEBACK_PAUSE_STATE 2 - #define RINSEBACK_STOP_STATE 3 - - // Fluid Bolus defines - #define FLUID_BOLUS_START_CMD 1 - - enum Treatment_States { - TREAT_START_STATE = 0, - TREAT_BLOOD_PRIME_STATE = 1, - TREAT_DIALYSIS_STATE = 2, - TREAT_PAUSED_STATE = 3, - TREAT_RINSEBACK_STATE = 4, - TREAT_RECIRC_STATE = 5, - TREAT_END_STATE = 6, - TREAT_ISO_UF_STATE = 7, - TREAT_SALINE_BOLUS_STATE = 8, - TREAT_DIALYSIS_PAUSED_STATE = 9, - }; - - enum Fluid_Bolus_States { - FLUID_BOLUS_IDLE_STATE = 0, - FLUID_BOLUS_WAIT_FOR_PUMPS_STOP_STATE = 1, - FLUID_BOLUS_SALINE_IN_PROGRESS_STATE = 2, - FLUID_BOLUS_SUBSITUTE_IN_PROGRESS_STATE = 3, - }; - - enum User_Command_ID { - CMD_NONE = -1, - CMD_STAND_BY = 0, - CMD_PRE_TX = 1, - CMD_BLOOD_PRIME = 2, - CMD_MAIN_TX = 3, - - CMD_END_TX = 11, - CMD_DISINFECTION = 12, - CMD_HIGH_PRIO_ALARM = 13, - CMD_MEDIUM_PRIO_ALARM = 14, - CMD_LOW_PRIO_ALARM = 15, - NUM_OF_USER_CMDS = 16, - }; - - enum State_Status { - STATE_ON_ENTRY = 0, - STATE_ON_ACTION, - STATE_ON_EXIT, - }; - - enum Broadcast_Type { - BC_DELAYED = 0, - BC_IMMEDIATELY, - }; - struct Treatment_Status_Vars { bool hasTxParamsBeenInitialized; quint32 treatmentElapsedTimeMS; @@ -185,6 +42,9 @@ float totalFluidBolusDeliveredML; Fluid_Bolus_States fluidBolusState; Treatment_States txState; + Dialysis_States dialysisSubState; + float presUFRateMLPM; + float ufVolDeliveredL; }; struct Treatment_Params { @@ -224,7 +84,7 @@ Treatment_Status_Vars _treatmentStatus; bool _isBroadcastListReady; // TODO use a mutex? bool _isSendListReady; // Todo use a mutex? - bool _hasUserConfirmedToProceed; + bool _hasUserConfirmedToProceed; // TODO remove? drydemoXMLStates _dryDemo; // CAN function(s) @@ -241,10 +101,11 @@ // 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); + void handleUIResponseMessage(const Can::Message_ID_Enum msgID, const quint32 acceptReject, const QVariantList &rejectReasons = {}); void resetDryDemoVariables(); 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); // Standby methods void handleInitiateTreatmentRequestMessage(State_Status &status); @@ -256,6 +117,7 @@ // Treatment methods void setTreatmentParametersToDefault(); + void initializeTreatmentTimeAndUltrafiltration(); void handleTreatmentSetpointsBroadcastData(const quint32 bloodFlowMLPM, const quint32 dialFlowMLPM, const float dialTempC, const Broadcast_Type BCType); void handleTreatmentStatesBroadcastData(const QList &txStates, const Broadcast_Type BCType); void handleFluidBolusRequestMessage(); @@ -267,6 +129,12 @@ void handleSetPointBloodFlowChange(quint32 &bloodFlowMLPM, bool &hasBloodFlowChanged); void handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType); void handleSetPointDialysateFlowChange(); + void handleDDConductivityBroadcastData(const Broadcast_Type BCType); + void handleTDBloodPressureBroadcastData(const Broadcast_Type BCType); + void handleUltrafiltrationBroadcastData(const Broadcast_Type BCType); + void handleSetPointDialysateTemperatureChange(); + void handleUltrafiltrationPauseResume(); + void handleUltrafiltrationVolumeChangeRequest(); // Treatment end methods