Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r5109bb981cab2025fcb9de33e303d046085efa18 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 5109bb981cab2025fcb9de33e303d046085efa18) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -592,7 +592,7 @@ heatersStatus[ heater ].calculatedTemperatureC = targetTemperature; heatersStatus[ heater ].targetFlowLPM = targetFlow; heatersStatus[ heater ].hasTargetTempChanged = FALSE; - heatersStatus[ heater ].dutyCycle.data = dutyCycle; + heatersStatus[ heater ].dutyCycle.data = dutyCycle; setHeaterDutyCycle( heater ); } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -rc7ea3969643ead419cbfcd34c3cb203c45bcad71 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision c7ea3969643ead419cbfcd34c3cb203c45bcad71) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -434,6 +434,7 @@ case DG_MODE_HEAT: case DG_MODE_CHEM: case DG_MODE_CHFL: + case DG_MODE_HCOL: // The flow cannot be out of range for than 10% of the target flow isFlowOutOfRange = ( fabs( 1.0F - ( currentFlowLPM / targetFlowLPM ) ) > MAX_ALLOWED_FLOW_DEVIATION_PCT ? TRUE : FALSE ); isFlowOutOfUpperRange = ( isFlowOutOfRange && ( currentFlowLPM > targetFlowLPM ) ? TRUE : FALSE ); Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r5109bb981cab2025fcb9de33e303d046085efa18 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 5109bb981cab2025fcb9de33e303d046085efa18) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -111,12 +111,17 @@ *************************************************************************/ U32 transitionToDrainMode( void ) { - // re-initialize each time we transition to drain mode - initDrainMode(); - setCurrentSubState( NO_SUB_STATE ); - DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); + if ( getTestConfigStatus( TEST_CONFIG_RECOVER_TREATMENT) != TRUE ) + { + // re-initialize each time we transition to drain mode + initDrainMode(); + initDrainParameters( inactiveReservoir ); + } + + setCurrentSubState( NO_SUB_STATE ); + if ( DG_RESERVOIR_1 == inactiveReservoir ) { setValveStateDelayed( VRD1, VALVE_STATE_OPEN, DELAY_RES_DRAIN_VALVE_MS ); @@ -126,8 +131,6 @@ setValveStateDelayed( VRD2, VALVE_STATE_OPEN, DELAY_RES_DRAIN_VALVE_MS ); } - initDrainParameters( inactiveReservoir ); - // set initial actuator states setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setDrainPumpTargetRPMDelayed( TARGET_DRAIN_PUMP_RPM, DELAY_DRAIN_PUMP_MS ); Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -reeaab2a9a685fb18845888d91040d3aa01977f6d -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision eeaab2a9a685fb18845888d91040d3aa01977f6d) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -121,7 +121,12 @@ break; case DG_FAULT_STATE_COMPLETE: - // Do nothing + // Do nothing unless the test configuration to recover treatment is enabled + if ( ( TRUE == getTestConfigStatus( TEST_CONFIG_RECOVER_TREATMENT ) ) && ( TRUE == hasRecoverFromFaultModeBeenSet() ) ) + { + DG_OP_MODE_T prevMode = getPreviousOperationMode(); + requestNewOperationMode( prevMode ); + } break; default: Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -reeaab2a9a685fb18845888d91040d3aa01977f6d -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision eeaab2a9a685fb18845888d91040d3aa01977f6d) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -314,6 +314,11 @@ modeRequest[i] = FALSE; } + if ( TRUE == getTestConfigStatus( TEST_CONFIG_RECOVER_TREATMENT ) ) + { + reqMode = currentMode; + } + // un-block requests _enable_IRQ(); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r5109bb981cab2025fcb9de33e303d046085efa18 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 5109bb981cab2025fcb9de33e303d046085efa18) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -1338,6 +1338,10 @@ handleTestDGSetConductivitySensorCalTable( message ); break; + case MSG_ID_DG_SIGNAL_RECOVER_FROM_FAULT_MODE: + handleTestDGSetRecoverFromFaultModeSignal( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r5109bb981cab2025fcb9de33e303d046085efa18 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5109bb981cab2025fcb9de33e303d046085efa18) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -4739,4 +4739,28 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); } +/*********************************************************************//** + * @brief + * The handleTestDGSetRecoverFromFaultModeSignal function handles a request to + * set the signal to recover from the fault mode. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestDGSetRecoverFromFaultModeSignal( MESSAGE_T* message ) +{ + BOOL status = FALSE; + + if ( 0 == sizeof( message->hdr.payloadLen ) ) + { + status = TRUE; + + setRecoverFromFaultModeSignal(); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r5109bb981cab2025fcb9de33e303d046085efa18 -r9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 5109bb981cab2025fcb9de33e303d046085efa18) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 9c3c817b09c3c7e0d9b23a397493f6fc16ca5d62) @@ -497,6 +497,9 @@ // MSG_ID_DG_SET_COND_SENSOR_CAL_TABLE void handleTestDGSetConductivitySensorCalTable( MESSAGE_T* message ); +// MSG_ID_DG_SIGNAL_RECOVER_FROM_FAULT_MODE +void handleTestDGSetRecoverFromFaultModeSignal( MESSAGE_T* message ); + /**@}*/ #endif