Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rf3a862d594f4cef30b08a5bf337189a42c8776d6 -rd414177a2e101df39282bd2f12316270daa9a8ca --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f3a862d594f4cef30b08a5bf337189a42c8776d6) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision d414177a2e101df39282bd2f12316270daa9a8ca) @@ -83,13 +83,14 @@ // ********** private data ********** -static BOOL confirmInstallRequested = FALSE; ///< Flag indicates user confirms disposable installation. -static BOOL continueToTreatmentRequested = FALSE; ///< Flag indicates user requests to continue to treatment from re-circ. -static BOOL setUFVolStatus; ///< The status of set UF volume operation. +static BOOL confirmInstallRequested; ///< Flag indicates user confirms disposable installation. +static BOOL continueToTreatmentRequested; ///< Flag indicates user requests to continue to treatment from re-circ. +static BOOL setUFVolStatus; ///< Flag indicates user has set UF volume parameter. +static BOOL doorOpened; ///< Flag indicates user has opened door (to invert dialyzer). static BOOL patientConnectionConfirm; ///< Flag indicates user has confirmed patient connection complete. -static BOOL treatmentStartRequested = FALSE; ///< Flag indicates user requests treatment begin. +static BOOL treatmentStartRequested; ///< Flag indicates user requests treatment begin. -static BOOL alarmActionResumeReceived = FALSE; ///< Flag indicates alarm action resume received. +static BOOL alarmActionResumeReceived; ///< 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. @@ -124,6 +125,7 @@ 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 handlePatientConnectionWait4UserConfirmState( void ); static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4TreatmentStartState( void ); static void execPreTreatmentReservoirMgmt( void ); @@ -152,9 +154,16 @@ currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; currentPreTxPatConnState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE; currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; + + alarmActionResumeReceived = FALSE; + fillReservoirOneStartRequested = FALSE; + confirmInstallRequested = FALSE; + continueToTreatmentRequested = FALSE; setUFVolStatus = FALSE; + doorOpened = FALSE; patientConnectionConfirm = FALSE; - fillReservoirOneStartRequested = FALSE; + treatmentStartRequested = FALSE; + submodeCompleteTransitionTimeCounter = 0; #ifndef _RELEASE_ @@ -411,19 +420,19 @@ void signalUserConfirmPatientConnection( void ) { BOOL accepted = FALSE; - REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_UF_VOLUME_NOT_SET; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; - if ( TRUE == setUFVolStatus ) + if ( HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == currentPreTreatmentState ) { - if ( HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == currentPreTreatmentState ) + if ( PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE == currentPreTxPatConnState ) { patientConnectionConfirm = TRUE; accepted = TRUE; rejReason = REQUEST_REJECT_REASON_NONE; } else { - rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + rejReason = REQUEST_REJECT_REASON_DIALYZER_NOT_INVERTED; } } @@ -601,7 +610,7 @@ preTreatmentData.drySelfTestsState = getDrySelfTestsState(); preTreatmentData.primeState = getPrimeState(); preTreatmentData.recircState = getPreTreatmentRecircState(); - preTreatmentData.patientConnectionState = 0; + preTreatmentData.patientConnectionState = (U32)currentPreTxPatConnState; preTreatmentData.wetSelfTestsState = getWetSelfTestState(); preTreatmentData.preTreatmentRsrvrState = currentReservoirMgmtState; @@ -666,6 +675,7 @@ { VALVE_T valve; setUFVolStatus = FALSE; + doorOpened = FALSE; patientConnectionConfirm = FALSE; treatmentStartRequested = FALSE; @@ -926,8 +936,8 @@ * @brief * The handlePatientConnectionState function handles patient connection state * during pre-treatment mode. - * @details Inputs: alarmActionResumeReceived - * @details Outputs: requested mode transition to treatment mode + * @details Inputs: currentPreTxPatConnState, alarmActionResumeReceived + * @details Outputs: currentPreTxPatConnState * @return current state (sub-mode) *************************************************************************/ static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ) @@ -942,6 +952,10 @@ currentPreTxPatConnState = handlePatientConnectionWait4DialyzerInvertState(); break; + case PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE: + currentPreTxPatConnState = handlePatientConnectionWait4UserConfirmState(); + break; + case PRE_TREATMENT_PAT_CONN_WAIT_FOR_TREATMENT_START_STATE: currentPreTxPatConnState = handlePatientConnectionWait4TreatmentStartState(); break; @@ -966,14 +980,7 @@ 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; } @@ -982,8 +989,8 @@ * The handlePatientConnectionWait4UFVolState function handles the wait * for ultrafiltration volume setting state of pre-treatment patient connection * sub-mode. - * @details Inputs: none - * @details Outputs: none + * @details Inputs: setUFVolStatus + * @details Outputs: setUFVolStatus * @return next patient connection state *************************************************************************/ static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4UFVolState( void ) @@ -1004,29 +1011,68 @@ * The handlePatientConnectionWait4DialyzerInvertState function handles the wait * for dialyzer invert confirmation state of pre-treatment patient connection * sub-mode. - * @details Inputs: none - * @details Outputs: none + * @details Inputs: doorOpened + * @details Outputs: doorOpened * @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; + // Look for cartridge door to open and then close (indicating user inverted dialyzer) + if ( STATE_OPEN == getSwitchStatus( FRONT_DOOR ) ) + { + doorOpened = TRUE; + } + if ( ( TRUE == doorOpened ) && ( STATE_CLOSED == getSwitchStatus( FRONT_DOOR ) ) ) + { + nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE; + } + return nextState; } /*********************************************************************//** * @brief + * The handlePatientConnectionWait4UserConfirmState function handles the wait + * for dialyzer invert confirmation state of pre-treatment patient connection + * sub-mode. + * @details Inputs: patientConnectionConfirm + * @details Outputs: none + * @return next patient connection state + *************************************************************************/ +static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4UserConfirmState( void ) +{ + HD_PRE_TREATMENT_PAT_CONN_STATE_T nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE; + + if ( TRUE == patientConnectionConfirm ) + { + nextState = PRE_TREATMENT_PAT_CONN_WAIT_FOR_TREATMENT_START_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 Inputs: treatmentStartRequested * @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; + if ( TRUE == treatmentStartRequested ) + { + DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); + + setStartReservoirVolume( activeRes ); + requestNewOperationMode( MODE_TREA ); + } + return nextState; }