Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rab05daf4dc0398c516845da80c616181a6b62d16 -rf3a862d594f4cef30b08a5bf337189a42c8776d6 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ab05daf4dc0398c516845da80c616181a6b62d16) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f3a862d594f4cef30b08a5bf337189a42c8776d6) @@ -92,6 +92,7 @@ static BOOL alarmActionResumeReceived = FALSE; ///< Flag indicates alarm action resume received. static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. +static HD_PRE_TREATMENT_PAT_CONN_STATE_T currentPreTxPatConnState; ///< Current state of pre-treatment patient connect sub-mode state machine. static BOOL fillReservoirOneStartRequested; ///< Flag indicates fill reservoir one has been requested. static U32 preTreatmentPublishTimerCounter; ///< Pre-treatment data broadcast timer counter used to schedule when to transmit data. /// Interval (in task intervals) at which to publish pre-treatment mode data to CAN bus. @@ -121,6 +122,9 @@ static HD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4UFVolState( void ); +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4DialyzerInvertState( void ); +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4TreatmentStartState( void ); static void execPreTreatmentReservoirMgmt( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtStartState( void ); @@ -146,6 +150,7 @@ U32 reservoirIndex = 0; currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; + currentPreTxPatConnState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE; currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; @@ -927,14 +932,26 @@ *************************************************************************/ static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ) { - if ( TRUE == treatmentStartRequested ) + switch ( currentPreTxPatConnState ) { - DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); + case PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE: + currentPreTxPatConnState = handlePatientConnectionWait4UFVolState(); + break; - setStartReservoirVolume( activeRes ); - requestNewOperationMode( MODE_TREA ); + case PRE_TREATMENT_PAT_CONN_WAIT_FOR_DLZR_INVERT_STATE: + currentPreTxPatConnState = handlePatientConnectionWait4DialyzerInvertState(); + break; + + case PRE_TREATMENT_PAT_CONN_WAIT_FOR_TREATMENT_START_STATE: + currentPreTxPatConnState = handlePatientConnectionWait4TreatmentStartState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_PRE_TREATMENT_PAT_CONN_STATE, currentPreTxPatConnState ); + break; } + // handle alarms w/ stop property if ( TRUE == doesAlarmStatusIndicateStop() ) { signalDialInPumpHardStop(); @@ -949,12 +966,72 @@ setDialInPumpTargetFlowRate( DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); cmdStartDGTrimmerHeater(); } + else if ( TRUE == treatmentStartRequested ) + { + DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); + setStartReservoirVolume( activeRes ); + requestNewOperationMode( MODE_TREA ); + } + return HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; } /*********************************************************************//** * @brief + * The handlePatientConnectionWait4UFVolState function handles the wait + * for ultrafiltration volume setting state of pre-treatment patient connection + * sub-mode. + * @details Inputs: none + * @details Outputs: none + * @return next patient connection state + *************************************************************************/ +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4UFVolState( void ) +{ + HD_PRE_TREATMENT_PAT_CONN_STATE_T nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE; + + if ( TRUE == setUFVolStatus ) + { + setUFVolStatus = FALSE; + nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_DLZR_INVERT_STATE; + } + + return nextState; +} + +/*********************************************************************//** + * @brief + * The handlePatientConnectionWait4DialyzerInvertState function handles the wait + * for dialyzer invert confirmation state of pre-treatment patient connection + * sub-mode. + * @details Inputs: none + * @details Outputs: none + * @return next patient connection state + *************************************************************************/ +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4DialyzerInvertState( void ) +{ + HD_PRE_TREATMENT_PAT_CONN_STATE_T nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_DLZR_INVERT_STATE; + + return nextState; +} + +/*********************************************************************//** + * @brief + * The handlePatientConnectionWait4TreatmentStartState function handles the wait + * for treatment start state of pre-treatment patient connection sub-mode. + * @details Inputs: none + * @details Outputs: none + * @return next patient connection state + *************************************************************************/ +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4TreatmentStartState( void ) +{ + HD_PRE_TREATMENT_PAT_CONN_STATE_T nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_TREATMENT_START_STATE; + + return nextState; +} + +/*********************************************************************//** + * @brief * The execPreTreatmentReservoirMgmt function executes the state machine for * reservoir management during pre-treatment mode. * @details Inputs: currentReservoirMgmtState