Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rf1d684e536e7911b356a5d35320c909a1016d3d0 -r8747e947a7bc52dc3a4fb1346935740e08f5e974 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision f1d684e536e7911b356a5d35320c909a1016d3d0) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8747e947a7bc52dc3a4fb1346935740e08f5e974) @@ -7,8 +7,8 @@ * * @file ModeStandby.c * -* @author (last) Sean Nash -* @date (last) 04-May-2023 +* @author (last) Michael Garthwaite +* @date (last) 16-May-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -147,6 +147,7 @@ resetDialInPumpRotorCount(); resetPreLoadStatus(); setVenousBubbleDetectionEnabled( FALSE ); + setCurrentSubState( NO_SUB_STATE ); // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); @@ -198,6 +199,15 @@ handleDisinfectCancel( stop ); + // if no active alarms anymore, restore to default valve states for standby mode + if ( ( FALSE == doesAlarmStatusIndicateStop() ) && ( VALVE_POSITION_C_CLOSE == getValvePosition( VDI ) ) ) + { + 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 ); + } + // State machine to get DG to prep a reservoir so we can start a treatment switch ( currentStandbyState ) { @@ -280,8 +290,8 @@ *************************************************************************/ BOOL signalUserInitiateTreatment( void ) { - BOOL result = FALSE; - DG_VERSIONS_T dgVersion = getDGVersion(); + BOOL result = FALSE; + DG_VERSIONS_T dgVersion = getDGVersion(); REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; // Verify HD is in standby mode waiting for treatment start request @@ -309,24 +319,25 @@ { rejReason = REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED; } -#ifdef _RELEASE_ - else -#else +#ifndef _RELEASE_ else if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SERVICE_AND_DISINFECT_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif { - // Verify HD and DG are not over due for service - if ( haveHDDGServicesBeenExpired( &rejReason ) != TRUE ) + if ( getTestConfigStatus( TEST_CONFIG_SKIP_DISINFECT_AND_SERVICE_TX_BLOCKERS ) != TRUE ) { - // Verify DG is disinfected - if ( FALSE == isDGDisinfectValid() ) + // Verify HD and DG are not over due for service + if ( haveHDDGServicesBeenExpired( &rejReason ) != TRUE ) { - rejReason = REQUEST_REJECT_REASON_DG_DISINFECT_HAS_BEEN_EXPIRED; + // Verify DG is disinfected + if ( FALSE == isDGDisinfectValid() ) + { + rejReason = REQUEST_REJECT_REASON_DG_DISINFECT_HAS_BEEN_EXPIRED; + } + else if ( getHeatDisinfectTemperatureSensorValue() > MAX_ALLOWED_RO_FILTER_TEMP_FOR_TX_C ) + { + rejReason = REQUEST_REJECT_REASON_DG_RO_FILTER_TEMPERATURE_OUT_OF_RANGE; + } } - else if ( getHeatDisinfectTemperatureSensorValue() > MAX_ALLOWED_RO_FILTER_TEMP_FOR_TX_C ) - { - rejReason = REQUEST_REJECT_REASON_DG_RO_FILTER_TEMPERATURE_OUT_OF_RANGE; - } } } @@ -354,7 +365,27 @@ *************************************************************************/ void signalAlarmActionToStandbyMode( ALARM_ACTION_T action ) { - // Alarm actions not handled in Standby mode + switch ( action ) + { + case ALARM_ACTION_STOP: + // Pumps should be off + signalBloodPumpHardStop(); + signalDialInPumpHardStop(); + signalDialOutPumpHardStop(); + stopSyringePump(); + + // Set valves to safe positions + setValveAirTrap( STATE_CLOSED ); + 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; + + default: + // do not handle other actions in standby mode + break; + } } /*********************************************************************//**