Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r9f01014483a2ec46a19bdb7ce7ab97b007f83cbd -rdaf4763d6f40baf4cbc2f9d88aba7d9faf588ad6 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 9f01014483a2ec46a19bdb7ce7ab97b007f83cbd) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision daf4763d6f40baf4cbc2f9d88aba7d9faf588ad6) @@ -436,7 +436,6 @@ // Assume reservoir 1 is full and drain it rsrvr1Status = DG_RESERVOIR_ABOVE_TARGET; - state = DG_CHEM_DISINFECT_STATE_DRAIN_R1; stateTimer = getMSTimerCount(); @@ -472,7 +471,6 @@ setValveState( VRD2, VALVE_STATE_OPEN ); // Assume reservoir 2 is full and drain it rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DRAIN_R2; } @@ -485,7 +483,7 @@ return state; } - /*********************************************************************//** +/*********************************************************************//** * @brief * The handleChemicalDisinfectDrainR2State function handles the chemical * disinfect drain R2 state. The state drains reservoir 2. If the @@ -525,7 +523,6 @@ setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); turnOnUVReactor( INLET_UV_REACTOR ); - stateTrialCounter = 0; stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN; @@ -557,8 +554,6 @@ { DG_CHEM_DISINFECT_STATE_T state = DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN; - // TODO: check whether flush has already been completed within some time period, skip this state if it has - // Check if flush time has elapsed if ( TRUE == didTimeout( stateTimer, FLUSH_DRAIN_WAIT_TIME_MS ) ) { @@ -573,7 +568,6 @@ startHeater( DG_PRIMARY_HEATER ); // The UV reactors will be on for the entire disinfect cycle turnOnUVReactor( OUTLET_UV_REACTOR ); - flushCircWaitTime = FLUSH_CICRCULATION_INITIAL_WAIT_TIME_MS; stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_FLUSH_CIRCULATION; @@ -671,7 +665,6 @@ requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); disinfectantMixRatio = DISINFECTANT_MIX_RATIO_PRIME; primeAcidSteadyStateCounter = 0; - state = DG_CHEM_DISINFECT_STATE_PRIME_DISINFECTANT; stateTimer = getMSTimerCount(); } @@ -723,7 +716,6 @@ requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); disinfectantMixRatio = DISINFECTANT_MIX_RATIO_FILL; flushDisinfectantWaitTime = FLUSH_DISINFECTANT_INITIAL_WAIT_TIME; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DISINFECTANT_FLUSH; } @@ -810,7 +802,6 @@ rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; chemDisinfectReservoirTime = 0; isChemDisinfectTemperatureAboveTarget = FALSE; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_FILL_WITH_DISINFECTANT; } @@ -867,7 +858,6 @@ R1ChemDisinfectVol = getLoadCellLargeFilteredWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ); isRsrvrLeaking = FALSE; ischemDisinfectWarmupTargetReached = FALSE; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DISINFECT_R1_TO_R2; } @@ -932,7 +922,6 @@ setValveState( VRD1, VALVE_STATE_OPEN ); setValveState( VRD2, VALVE_STATE_CLOSED ); rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_PARTIAL_DRAIN_R1_FILL_R2_TO_R1; } @@ -976,7 +965,6 @@ chemDisinfectReservoirTime = 0; isChemDisinfectTemperatureAboveTarget = FALSE; ischemDisinfectWarmupTargetReached = FALSE; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DISINFECT_R2_TO_R1; } @@ -1057,7 +1045,6 @@ isThisLastDrain = TRUE; // Set the chemical disinfect state that is published on the UI chemDisinfectUIState = CHEM_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT; - writeDisinfectDataToNV(); stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DRAIN_R1; @@ -1070,7 +1057,6 @@ setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); setValveState( VRD1, VALVE_STATE_CLOSED ); setValveState( VRD2, VALVE_STATE_OPEN ); - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_PARTIAL_DRAIN_R2_FILL_R1_TO_R2; } @@ -1115,7 +1101,6 @@ ischemDisinfectWarmupTargetReached = FALSE; R1ChemDisinfectVol = getLoadCellLargeFilteredWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ); isRsrvrLeaking = FALSE; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_DISINFECT_R1_TO_R2; } @@ -1181,7 +1166,6 @@ cancellationMode = CANCELLATION_MODE_WATER; rsrvr1Status = DG_RESERVOIR_ABOVE_TARGET; rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; - // The drain is set to start from reservoir 2 setValveState( VRD2, VALVE_STATE_OPEN ); setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); @@ -1602,6 +1586,10 @@ *************************************************************************/ static void monitorModeChemicalDisinfect( void ) { + BOOL hasConductivityFailed = TRUE; + BOOL hasInletPressureFailed = TRUE; + BOOL hasInletTemperatureFailed = TRUE; + // Reservoir leak detection. if ( ( DG_CHEM_DISINFECT_STATE_DISINFECT_R1_TO_R2 == chemDisinfectState ) || ( DG_CHEM_DISINFECT_STATE_DISINFECT_R2_TO_R1 == chemDisinfectState ) ) { @@ -1657,10 +1645,6 @@ } // In all states, check inlet temperature, inlet pressure, and inlet conductivity. - BOOL hasConductivityFailed = TRUE; - BOOL hasInletPressureFailed = TRUE; - BOOL hasInletTemperatureFailed = TRUE; - haveInletWaterChecksPassed= TRUE; hasConductivityFailed = ( ( getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ) > MAX_INLET_CONDUCTIVITY_US_PER_CM ) || Index: firmware/App/Modes/ModeChemicalDisinfectFlush.c =================================================================== diff -u -r9f01014483a2ec46a19bdb7ce7ab97b007f83cbd -rdaf4763d6f40baf4cbc2f9d88aba7d9faf588ad6 --- firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision 9f01014483a2ec46a19bdb7ce7ab97b007f83cbd) +++ firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision daf4763d6f40baf4cbc2f9d88aba7d9faf588ad6) @@ -341,7 +341,6 @@ setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); rsrvrFillStableTimeCounter = 0; rsrvr1Status = DG_RESERVOIR_ABOVE_TARGET; - stateTimer = getMSTimerCount(); return state; @@ -376,7 +375,6 @@ setValveState( VRD1, VALVE_STATE_CLOSED ); setValveState( VRD2, VALVE_STATE_OPEN ); rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; - state = DG_CHEM_DISINFECT_FLUSH_STATE_DRAIN_R2; stateTimer = getMSTimerCount(); } @@ -424,7 +422,6 @@ setValveState( VRD2, VALVE_STATE_CLOSED ); setValveState( VPI, VALVE_STATE_OPEN ); turnOnUVReactor( INLET_UV_REACTOR ); - stateTrialCounter = 0; stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_DRAIN; @@ -455,8 +452,6 @@ { DG_CHEM_DISINFECT_FLUSH_STATE_T state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_DRAIN; - // TODO: check whether flush has already been completed within some time period, skip this state if it has - // Check if flush time has elapsed if ( TRUE == didTimeout( stateTimer, FLUSH_DRAIN_WAIT_TIME_MS ) ) { @@ -472,7 +467,6 @@ setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, CONC_PUMP_CP2_FLUSH_SPEED_ML_PER_MIN ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); turnOnUVReactor( OUTLET_UV_REACTOR ); - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_DISINFECTANT_LINE; } @@ -482,7 +476,6 @@ { stateTimer = getMSTimerCount(); } - else { // Couldn't get a good water sample after a couple of trials and the disinfect flush cycle failed alarmDetectedPendingTrigger = ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE; //TODO: ALARM_ID_DG_NEW_WAT; @@ -516,7 +509,6 @@ setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); setValveState( VRD2, VALVE_STATE_OPEN ); setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_UF; } @@ -551,7 +543,6 @@ rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; drainTimer = getMSTimerCount(); numberOfPostDisinfectRinses = 0; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_R2_TO_R1_DRAIN_R1; } @@ -621,7 +612,6 @@ rsrvr1Status = DG_RESERVOIR_BELOW_TARGET; rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; drainTimer = getMSTimerCount(); - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_R1_TO_R2_DRAIN_R2; } @@ -695,7 +685,6 @@ rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; rsrvr1Status = DG_RESERVOIR_ABOVE_TARGET; drainTimer = getMSTimerCount(); - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_R2_TO_R1_DRAIN_R1; } @@ -722,9 +711,7 @@ //Turn off UV reactors turnOffUVReactor( INLET_UV_REACTOR ); turnOffUVReactor( OUTLET_UV_REACTOR ); - isThisLastDrain = TRUE; - stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_FLUSH_STATE_DRAIN_R1; } @@ -969,7 +956,6 @@ *************************************************************************/ static void publishChemicalDisinfectFlushData( void ) { - // TODO: decide what data to publish if ( ++dataPublishCounter >= CHEM_DISINFECT_FLUSH_DATA_PUB_INTERVAL ) { MODE_CHEMICAL_DISINFECT_FLUSH_DATA_T data; @@ -1005,6 +991,10 @@ *************************************************************************/ static void monitorModeChemicalDisinfectFlush( void ) { + BOOL hasConductivityFailed = TRUE; + BOOL hasInletPressureFailed = TRUE; + BOOL hasInletTemperatureFailed = TRUE; + #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAPS_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) #endif @@ -1023,10 +1013,6 @@ } // In some states, check inlet temperature, inlet pressure, and inlet conductivity. - BOOL hasConductivityFailed = TRUE; - BOOL hasInletPressureFailed = TRUE; - BOOL hasInletTemperatureFailed = TRUE; - haveInletWaterChecksPassed= TRUE; hasConductivityFailed = ( ( getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ) > MAX_INLET_CONDUCTIVITY_US_PER_CM ) || Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r9f01014483a2ec46a19bdb7ce7ab97b007f83cbd -rdaf4763d6f40baf4cbc2f9d88aba7d9faf588ad6 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9f01014483a2ec46a19bdb7ce7ab97b007f83cbd) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision daf4763d6f40baf4cbc2f9d88aba7d9faf588ad6) @@ -558,16 +558,16 @@ BOOL startDGChemicalDisinfectFlush( void ) { BOOL status = FALSE; + DG_CMD_RESPONSE_T cmdResponse; + cmdResponse.commandID = DG_CMD_START_CHEM_DISINFECT_FLUSH; + cmdResponse.rejected = FALSE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; + // If DG is in standby mode and the standby mode is in Idle, request chemical disinfect flush // Chemical disinfect flush cannot be run in solo mode because the user has to confirm that the acid is inserted or removed if ( ( DG_MODE_STAN == getCurrentOperationMode() ) && ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) ) { - DG_CMD_RESPONSE_T cmdResponse; - - cmdResponse.commandID = DG_CMD_START_CHEM_DISINFECT_FLUSH; - cmdResponse.rejected = FALSE; - cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; OPN_CLS_STATE_T concCap = getSwitchStatus( CONCENTRATE_CAP ); OPN_CLS_STATE_T diaCap = getSwitchStatus( DIALYSATE_CAP ); @@ -591,10 +591,15 @@ pendingStartDGChemicalDisinfectFlushRequest = TRUE; status = TRUE; } - - sendCommandResponseMsg( &cmdResponse ); } + else + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE; + } + sendCommandResponseMsg( &cmdResponse ); + return status; }