Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r1fa3d19e3ca08af7cedbf481265989830dba2627 -r6c933adfd50a0bc041dc29f4bfa15de5e9f4843a --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 1fa3d19e3ca08af7cedbf481265989830dba2627) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 6c933adfd50a0bc041dc29f4bfa15de5e9f4843a) @@ -23,6 +23,7 @@ #include "Messaging.h" #include "ModePreTreat.h" #include "OperationModes.h" +#include "Prime.h" #include "StatePreTxRecirculate.h" #include "SyringePump.h" #include "TaskGeneral.h" @@ -54,6 +55,8 @@ static U32 preTreatmentStateBroadcastTimerCtr; ///< Pre-Treatment state data broadcast timer counter. static OVERRIDE_U32_T preTreatmentStatePublishInterval; ///< Pre-Treatment state data publication interval override. +static BOOL resumePreTxAlarmResponseRequest; ///< Flag indicates user has requested PreTx resume. + // ********** private function prototypes ********** static void setPreTreatStateTransition( void ); ///< Configure actuators and variables for Pre-Treatment state transitions. @@ -105,13 +108,13 @@ { initPreTreatmentMode(); initTubeSetInstall(); + initPrime(); // TODO: remove after implementing blood pump homing in some state homeBloodPump(); - // TODO: remove these homeValve() when SELF_TEST_NO_CART_STATE is implemented (homing valves is handled over there). - homeValve(H1_VALV, FALSE, FALSE); - homeValve(H19_VALV, FALSE, FALSE); + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); return (U32)currentPreTreatmentState; } @@ -143,11 +146,11 @@ break; case TD_PRE_TREATMENT_SELF_TEST_DRY_STATE: - // currentPreTreatmentState = handleSelfTestDryState(); + currentPreTreatmentState = handleSelfTestDryState(); break; case TD_PRE_TREATMENT_PRIME_STATE: - // currentPreTreatmentState = handlePrimeState(); + currentPreTreatmentState = handlePrimeState(); break; case TD_PRE_TREATMENT_CONFIRM_RX_STATE: @@ -211,7 +214,9 @@ break; case TD_PRE_TREATMENT_CONFIRM_RX_STATE: - // No action required. + signalBloodPumpHardStop(); + setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); + setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); break; case TD_PRE_TREATMENT_RECIRCULATE_STATE: @@ -220,14 +225,14 @@ case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: signalBloodPumpHardStop(); - setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); + setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); stopSyringePump(); - // TODO: Set H5 ejector Off. + // TODO: Set H5 ejector Off.state // TODO: Command DD to bypass dialyzer, set QDt to prescribed rate, // Quf to 0, and Qs to 0. break; @@ -283,8 +288,8 @@ state = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; } - // TODO: Transition to Prime state on completion when implemented - // state = TD_PRE_TREATMENT_PRIME_STATE; + setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); + state = TD_PRE_TREATMENT_PRIME_STATE; return state; } @@ -293,17 +298,24 @@ * @brief * The handlePrimeState function executes the Prime state of * pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any + * @details \b Inputs: none + * @details \b Outputs: none * @return next Pre-Treatment mode state. *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ) { TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_PRIME_STATE; - // TODO: Transition to Recirculate state on completion when implemented - // state = TD_PRE_TREATMENT_RECIRCULATE_STATE; + execPrime(); + if ( PRIME_COMPLETE_STATE == getCurrentPrimeState() ) + { + setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TD_PRIME_COMPLETE, (U32)getCurrentPrimeState() ); + transitionToPreTxRecirculate(); + state = TD_PRE_TREATMENT_RECIRCULATE_STATE; + } + return state; } @@ -321,9 +333,11 @@ execPreTxRecirculate(); - if ( TRUE == continueFromRecirculateRequested ) + //if ( TRUE == continueFromRecirculateRequested ) + if ( FALSE == isAnyAlarmActive() ) { - continueFromRecirculateRequested = FALSE; + //continueFromRecirculateRequested = FALSE; + endAirTrapControl(); state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; } @@ -360,7 +374,8 @@ presUFRateMlMin = ( presUFVolumeL * (F32)ML_PER_LITER ) / (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); // Direct DD to generate dialysate and bypass while priming blood cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateMlMin, - getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, + 0, //getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), //TODO: Update temperature with tx param temp when we are ready + TRUE, getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), bicarbConvFactor, getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), @@ -501,6 +516,7 @@ break; case ALARM_ACTION_RESUME: + resumePreTxAlarmResponseRequest = TRUE; if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) { signalResumePreTxRecirculate(); @@ -515,6 +531,17 @@ /*********************************************************************//** * @brief + * The signalPreTxResumeRequest function signals that user wants to resume. + * @details \b Inputs: resumePreTxAlarmResponseRequest + * @details \b Outputs: none + * @return TRUE if resume has been requested, FALSE if not + *************************************************************************/ +BOOL signalPreTxResumeRequest( void ) +{ + return resumePreTxAlarmResponseRequest; +} + +/*********************************************************************//** * The publishPreTreatmentStates function publishes the current * Pre-Treatment state and associated sub-state data to the UI. * @details \b Inputs: currentPreTreatmentState, preTreatmentStatePublishInterval