Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -ra7c2d1b211a6698c45a1d5a1c64d261e78b4f895 -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a7c2d1b211a6698c45a1d5a1c64d261e78b4f895) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file ModeStandby.c * -* @author (last) Sean Nash -* @date (last) 18-Jul-2023 +* @author (last) Dara Navaei +* @date (last) 10-Nov-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -122,6 +122,8 @@ *************************************************************************/ U32 transitionToStandbyMode( void ) { + MESSAGE_T usageMsg; + // re-initialize standby mode each time we transition to standby mode initStandbyMode(); @@ -143,6 +145,11 @@ // This is to make sure the boolean flag for the first fill is set to TRUE. initReservoirs(); + // Send DG usage data to HD + usageMsg.hdr.msgID = MSG_ID_HD_DG_USAGE_INFO_REQUEST; + usageMsg.hdr.payloadLen = 0; + handleHDRequestDGUsageInfo( &usageMsg ); + return standbyState; } @@ -546,8 +553,9 @@ concCap = STATE_CLOSED; diaCap = STATE_CLOSED; // Using the caps switch to disable the chemical disinfect date checks + // This is for debug builds only to simulate that a chem flush has been done after chem usageInfo.lastChemDisFlushCompleteDateEpoch = 40; - usageInfo.lastChemDisCompleteDateEpoch = 32; + usageInfo.lastChemDisStartDateEpoch = 32; } #endif @@ -557,7 +565,7 @@ 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 ) + else if ( usageInfo.lastChemDisFlushCompleteDateEpoch < usageInfo.lastChemDisStartDateEpoch ) { cmdResponse.rejected = TRUE; cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED; @@ -605,8 +613,9 @@ concCap = STATE_CLOSED; diaCap = STATE_CLOSED; // Using the caps switch to disable the chemical disinfect date checks + // This is for debug builds only to simulate that a chem flush has been done after chem usageInfo.lastChemDisFlushCompleteDateEpoch = 40; - usageInfo.lastChemDisCompleteDateEpoch = 32; + usageInfo.lastChemDisStartDateEpoch = 32; } #endif @@ -616,7 +625,7 @@ 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 ) + else if ( usageInfo.lastChemDisFlushCompleteDateEpoch < usageInfo.lastChemDisStartDateEpoch ) { cmdResponse.rejected = TRUE; cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED; @@ -665,8 +674,9 @@ concCap = STATE_CLOSED; diaCap = STATE_CLOSED; // Using the caps switch to disable the chemical disinfect date checks + // This is for debug builds only to simulate that a chem flush has been done after chem usageInfo.lastChemDisFlushCompleteDateEpoch = 40; - usageInfo.lastChemDisCompleteDateEpoch = 32; + usageInfo.lastChemDisStartDateEpoch = 32; } #endif @@ -676,7 +686,7 @@ 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 ) + else if ( usageInfo.lastChemDisFlushCompleteDateEpoch < usageInfo.lastChemDisStartDateEpoch ) { cmdResponse.rejected = TRUE; cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED; @@ -813,14 +823,21 @@ // If DG is in standby mode and the standby mode is in Idle, request RO permeate sample if ( ( DG_MODE_STAN == getCurrentOperationMode() ) && ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) ) { + DG_USAGE_INFO_RECORD_T usageInfo; OPN_CLS_STATE_T concCap = getSwitchStatus( CONCENTRATE_CAP ); OPN_CLS_STATE_T diaCap = getSwitchStatus( DIALYSATE_CAP ); + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageInfo, sizeof( DG_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + #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. + // This is for debug builds only to simulate that a chem flush has been done after chem + usageInfo.lastChemDisFlushCompleteDateEpoch = 40; + usageInfo.lastChemDisStartDateEpoch = 32; } #endif @@ -830,6 +847,11 @@ 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.lastChemDisStartDateEpoch ) + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED; + } else { pendingStartDGROPermeateSampleRequest = TRUE;