Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r8ec997d92b561aa3763f751302693bd432540f3e -r44a100f8e5210a02c23b8fcc4527d8e96d577381 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8ec997d92b561aa3763f751302693bd432540f3e) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 44a100f8e5210a02c23b8fcc4527d8e96d577381) @@ -50,6 +50,11 @@ // ********** private function prototypes ********** +static HD_STANDBY_STATE_T handleStandbyWait4TreatmentState( void ); +static HD_STANDBY_STATE_T handleStandbyDGFlushState( void ); +static HD_STANDBY_STATE_T handleStandbyDGHeatDisinfectState( void ); +static HD_STANDBY_STATE_T handleStandbyDGChemDisinfectState( void ); + /*********************************************************************//** * @brief * The initStandbyMode function initializes the Standby Mode module. @@ -118,19 +123,18 @@ break; case STANDBY_WAIT_FOR_TREATMENT_STATE: - if ( TRUE == treatStartReqReceived ) - { - // Initialize treatment modes before starting a new treatment - initTreatParamsMode(); - initPreTreatmentMode(); - initTreatmentMode(); - initPostTreatmentMode(); - // Start treatment workflow with treatment parameters mode - requestNewOperationMode( MODE_TPAR ); - treatStartReqReceived = FALSE; - } + currentStandbyState = handleStandbyWait4TreatmentState(); break; + case STANDBY_DG_FLUSH_IN_PROGRESS_STATE: + break; + + case STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE: + break; + + case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, currentStandbyState ); break; @@ -146,6 +150,10 @@ homeDialInPump(); homeDialOutPump(); #ifdef EMC_TEST_BUILD + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); startAirTrapControl(); #endif break; @@ -159,44 +167,43 @@ // TODO - test code if ( TRUE == stop ) { +#ifndef EMC_TEST_BUILD treatStartReqReceived = FALSE; setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); requestNewOperationMode( MODE_TPAR ); -#ifdef EMC_TEST_BUILD +#else if ( stop != button_state ) { toggle = INC_WRAP( toggle, 0, 3 ); switch ( toggle ) { case 0: // Pumps and valves off + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); break; - case 1: // Pumps on, valves off - setBloodPumpTargetFlowRate( 200, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + case 1: // Pumps off, valves in pos A + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); + break; + + case 2: // Pumps on, valves in pos A + setBloodPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialOutPumpTargetRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); break; - case 2: // Pumps on, valves on - setValvePosition( VDI, VALVE_POSITION_B_OPEN ); - setValvePosition( VDO, VALVE_POSITION_B_OPEN ); - setValvePosition( VBA, VALVE_POSITION_B_OPEN ); - setValvePosition( VBV, VALVE_POSITION_B_OPEN ); - break; - case 3: // Pumps off, valves on - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - break; - default: // Should not get here, reset if we do toggle = 0; setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); @@ -228,6 +235,84 @@ /*********************************************************************//** * @brief + * The handleStandbyWait4TreatmentState function handles the wait for + * treatment state for standby mode. + * @details Inputs: treatStartReqReceived + * @details Outputs: treatment may be initiated + * @return next standby state + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyWait4TreatmentState( void ) +{ + HD_STANDBY_STATE_T result = STANDBY_WAIT_FOR_TREATMENT_STATE; + + if ( TRUE == treatStartReqReceived ) + { + // Initialize treatment modes before starting a new treatment + initTreatParamsMode(); + initPreTreatmentMode(); + initTreatmentMode(); + initPostTreatmentMode(); + // Start treatment workflow with treatment parameters mode + requestNewOperationMode( MODE_TPAR ); + treatStartReqReceived = FALSE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The handleStandbyDGFlushState function handles the DG flush state for + * standby mode. + * @details Inputs: + * @details Outputs: + * @return next standby state + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyDGFlushState( void ) +{ + HD_STANDBY_STATE_T result = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + + // TODO - implement w/ UI + + return result; +} + +/*********************************************************************//** + * @brief + * The handleStandbyDGHeatDisinfectState function handles the wait for + * treatment state for standby mode. + * @details Inputs: + * @details Outputs: + * @return next standby state + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyDGHeatDisinfectState( void ) +{ + HD_STANDBY_STATE_T result = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + + // TODO - implement w/ UI + + return result; +} + +/*********************************************************************//** + * @brief + * The handleStandbyDGChemDisinfectState function handles the wait for + * treatment state for standby mode. + * @details Inputs: + * @details Outputs: + * @return next standby state + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyDGChemDisinfectState( void ) +{ + HD_STANDBY_STATE_T result = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + + // TODO - implement w/ UI + + return result; +} + +/*********************************************************************//** + * @brief * The signalUserInitiateTreatment function handles user initiation of a * treatment. * @details Inputs: none