Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rd48e02f028dbd430bedda41be0173fbfc45116d7 -r5d3e28c19ae10a99a5ce1fc5c010ac944975a6a1 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d48e02f028dbd430bedda41be0173fbfc45116d7) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 5d3e28c19ae10a99a5ce1fc5c010ac944975a6a1) @@ -61,6 +61,7 @@ static BOOL pendingStartDGFlushRequest; ///< Flag indicating HD has requested DG start flush. static BOOL pendingStartDGHeatDisinfectRequest; ///< Flag indicating HD has requested DG start heat disinfect. static BOOL pendingStartDGChemicalDisinfectRequest; ///< Flag indicating HD has requested DG start chemical disinfect. +static BOOL pendingStartDGHeatDisinfectActiveCoolRequest; ///< Flag indicating HD has requested DG start heat disinfect active cool. static OVERRIDE_U32_T filterFlushTimePeriod = { FILTER_FLUSH_TIME_MS, FILTER_FLUSH_TIME_MS, 0, 0 }; ///< Filter flush time period in ms. @@ -78,23 +79,25 @@ * @details Inputs: none * @details Outputs: standbyState, stopSampleWaterRequest, startSampleWaterRequest, * flushFilterRequest, endSampleWaterRequest, waterSampleStartTime, - * filterFlushStartTime, filterFlushPublishTimerCounter, pendingStartDGRequest + * filterFlushStartTime, filterFlushPublishTimerCounter, pendingStartDGRequest, + * pendingStartDGHeatDisinfectActiveCoolRequest * @return none *************************************************************************/ void initStandbyMode( void ) { - standbyState = DG_STANDBY_MODE_STATE_IDLE; - stopSampleWaterRequest = FALSE; - startSampleWaterRequest = FALSE; - flushFilterRequest = FALSE; - endSampleWaterRequest = FALSE; - waterSampleStartTime = 0; - filterFlushStartTime = 0; - filterFlushPublishTimerCounter = 0; - pendingStartDGRequest = FALSE; - pendingStartDGFlushRequest = FALSE; - pendingStartDGHeatDisinfectRequest = FALSE; - pendingStartDGChemicalDisinfectRequest = FALSE; + standbyState = DG_STANDBY_MODE_STATE_IDLE; + stopSampleWaterRequest = FALSE; + startSampleWaterRequest = FALSE; + flushFilterRequest = FALSE; + endSampleWaterRequest = FALSE; + waterSampleStartTime = 0; + filterFlushStartTime = 0; + filterFlushPublishTimerCounter = 0; + pendingStartDGRequest = FALSE; + pendingStartDGFlushRequest = FALSE; + pendingStartDGHeatDisinfectRequest = FALSE; + pendingStartDGChemicalDisinfectRequest = FALSE; + pendingStartDGHeatDisinfectActiveCoolRequest = FALSE; // Reset the heaters efficiency for another treatment resetHeatersEstimationGain(); @@ -215,7 +218,13 @@ requestNewOperationMode( DG_MODE_CHEM ); } + else if ( TRUE == pendingStartDGHeatDisinfectActiveCoolRequest ) + { + pendingStartDGHeatDisinfectActiveCoolRequest = FALSE; + requestNewOperationMode( DG_MODE_HCOL ); + } + return state; } @@ -520,6 +529,66 @@ /*********************************************************************//** * @brief + * The startDGHeatDisinfectActiveCool function starts heat disinfect active + * cool mode. + * @details Inputs: standbyState + * @details Outputs: none + * @return: TRUE if the switch was successful + *************************************************************************/ +BOOL startDGHeatDisinfectActiveCool( void ) +{ + BOOL status = FALSE; + + // If DG is in standby mode and the standby mode is in Idle state or if DG is in solo mode, request DG heat disinfect + if ( ( DG_MODE_STAN == getCurrentOperationMode() ) && ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) || ( DG_MODE_SOLO == getCurrentOperationMode() ) ) + { + DG_CMD_RESPONSE_T cmdResponse; + DG_USAGE_INFO_RECORD_T usageInfo; + + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageInfo, sizeof( DG_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + + cmdResponse.commandID = DG_CMD_START_HEAT_DISINFECT; + 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 ); + +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAPS_MONITOR ) ) + { + concCap = STATE_CLOSED; + diaCap = STATE_CLOSED; + // Using the caps switch to disable the chemical disinfect date checks + usageInfo.lastChemDisFlushCompleteDateEpoch = 40; + usageInfo.lastChemDisCompleteDateEpoch = 32; + } +#endif + + if ( ( STATE_OPEN == concCap ) || ( STATE_OPEN == diaCap ) ) + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : + REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); + } + else if ( usageInfo.lastChemDisFlushCompleteDateEpoch < usageInfo.lastChemDisCompleteDateEpoch ) + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED; + } + else + { + pendingStartDGHeatDisinfectActiveCoolRequest = TRUE; + status = TRUE; + } + + sendCommandResponseMsg( &cmdResponse ); + } + + return status; +} + +/*********************************************************************//** + * @brief * The startDGChemicalDisinfect function starts chemical disinfect mode. * @details Inputs: standbyState * @details Outputs: none