Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -raa7b1f5f68aae23c1c52b32658fcb625c29accfb -rc429cf7f50851acbaca6e800957ef44cc1fa2162 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision aa7b1f5f68aae23c1c52b32658fcb625c29accfb) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision c429cf7f50851acbaca6e800957ef44cc1fa2162) @@ -695,10 +695,10 @@ * record * @return none *************************************************************************/ -void setHDVersionDGServiceRecord( HD_VERSION_DG_SERVICE_RECORD_T* data ) +void setHDVersionDGServiceRecord( DG_SERVICE_RECORD_T* data ) { dgServiceAndUsageData.isDGServiceRecordAvailable = TRUE; - memcpy( &dgServiceAndUsageData.dgServiceRecord, data, sizeof( HD_VERSION_DG_SERVICE_RECORD_T ) ); + memcpy( &dgServiceAndUsageData.dgServiceRecord, data, sizeof( DG_SERVICE_RECORD_T ) ); } /*********************************************************************//** @@ -711,10 +711,10 @@ * info * @return none *************************************************************************/ -void setHDVersionDGUsageInfo( HD_VERSION_DG_USAGE_INFO_T* data ) +void setHDVersionDGUsageInfo( DG_USAGE_INFO_RECORD_T* data ) { dgServiceAndUsageData.isDGUsageInfoAviable = TRUE; - memcpy( &dgServiceAndUsageData.dgUsageInfo, data, sizeof( HD_VERSION_DG_USAGE_INFO_T ) ); + memcpy( &dgServiceAndUsageData.dgUsageInfo, data, sizeof( DG_USAGE_INFO_RECORD_T ) ); } /*********************************************************************//** Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -raa7b1f5f68aae23c1c52b32658fcb625c29accfb -rc429cf7f50851acbaca6e800957ef44cc1fa2162 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision aa7b1f5f68aae23c1c52b32658fcb625c29accfb) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision c429cf7f50851acbaca6e800957ef44cc1fa2162) @@ -100,28 +100,13 @@ F32 dialysateFlowLPM; ///< Dialysate flow in L/min } DG_CMD_DIALYSATE_HEATING_PARAMS_T; -/// HD version of DG service record -typedef struct -{ - U32 lastServiceDateEpoch; ///< Last service date in epoch - U32 serviceIntervalSeconds; ///< Service interval in seconds -} HD_VERSION_DG_SERVICE_RECORD_T ; - -/// HD version of DG usage info -typedef struct -{ - U32 lastHeatDisDateEpoch; ///< Last heat disinfect date in epoch - U32 lastChemicalDisDateEpoch; ///< Last chemical disinfect date in epoch - BOOL isDisinfected; ///< Flag to indicate whether DG is disinfected or not -} HD_VERSION_DG_USAGE_INFO_T; - /// HD version of the DG service record typedef struct { - HD_VERSION_DG_SERVICE_RECORD_T dgServiceRecord; ///< HD version of the DG service record. - HD_VERSION_DG_USAGE_INFO_T dgUsageInfo; ///< HD version of the DG usage info. - BOOL isDGServiceRecordAvailable; ///< Flag to indicate DG service record is available. - BOOL isDGUsageInfoAviable; ///< Flag to indicate DG usage info is available. + DG_SERVICE_RECORD_T dgServiceRecord; ///< HD version of the DG service record. + DG_USAGE_INFO_RECORD_T dgUsageInfo; ///< HD version of the DG usage info. + BOOL isDGServiceRecordAvailable; ///< Flag to indicate DG service record is available. + BOOL isDGUsageInfoAviable; ///< Flag to indicate DG usage info is available. } DG_SERVICE_AND_USAGE_DATA_T; // ********** public function prototypes ********** @@ -156,8 +141,8 @@ void setDGDisinfectsStates( DG_DISINFECT_UI_STATES_T states ); void setDGMixingRatios( DG_MIXING_RATIOS_T ratios ); void setDGHeatersData( HEATERS_DATA_T *data ); -void setHDVersionDGServiceRecord( HD_VERSION_DG_SERVICE_RECORD_T* data ); -void setHDVersionDGUsageInfo( HD_VERSION_DG_USAGE_INFO_T* data ); +void setHDVersionDGServiceRecord( DG_SERVICE_RECORD_T* data ); +void setHDVersionDGUsageInfo( DG_USAGE_INFO_RECORD_T* data ); void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); void cmdStartDG( void ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r34d0843fa73e79ba3b085dd4aaa393a1ec126fd4 -rc429cf7f50851acbaca6e800957ef44cc1fa2162 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 34d0843fa73e79ba3b085dd4aaa393a1ec126fd4) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision c429cf7f50851acbaca6e800957ef44cc1fa2162) @@ -48,6 +48,7 @@ #define DISINFECTS_DATA_PUB_INTERVAL ( 1 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Disinfects data publish interval in counts. #define DISINFECTS_TIME_INTERVAL_S ( 2 * SECONDS_IN_A_DAY ) ///< HD/DG 2-day service interval in seconds. +#define FLUSH_TIME_INTERVAL_S ( 30 * SEC_PER_MIN * MS_PER_SECOND ) ///< Flush time interval in seconds. // ********** private data ********** @@ -958,27 +959,43 @@ static BOOL isDGDisinfectValid( void ) { DG_SERVICE_AND_USAGE_DATA_T data; - BOOL status = TRUE; + BOOL status = FALSE; getHDVersionDGServiceAndUsageData( &data ); if ( TRUE == data.isDGUsageInfoAviable ) { - if ( TRUE == data.dgUsageInfo.isDisinfected ) - { - U32 chemDisElapsedTimeS = getRTCTimestamp() - data.dgUsageInfo.lastChemicalDisDateEpoch; - BOOL hasChemDisBeenExpired = ( chemDisElapsedTimeS > DISINFECTS_TIME_INTERVAL_S ? TRUE : FALSE ); - U32 heatDisElapsedTimeS = getRTCTimestamp() - data.dgUsageInfo.lastHeatDisDateEpoch; - BOOL hasHeatDisBeenExpired = ( heatDisElapsedTimeS > DISINFECTS_TIME_INTERVAL_S ? TRUE : FALSE ); + HD_USAGE_INFO_RECORD_T usageRecord; + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageRecord, sizeof( HD_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); - if ( ( TRUE == hasChemDisBeenExpired ) && ( TRUE == hasHeatDisBeenExpired ) ) - { - status = FALSE; - } - } - else + U32 lastChemCompleteDate = data.dgUsageInfo.lastChemDisCompleteDateEpoch; + U32 lastChemFlushCompleteDate = data.dgUsageInfo.lastChemDisFlushCompleteDateEpoch; + U32 lastHeatCompleteDate = data.dgUsageInfo.lastHeatDisCompleteDateEpoch; + U32 lastFlushCompleteDate = data.dgUsageInfo.lastBasicFlushCompleteDateEpoch; + U32 lastStartTxTimeDate = usageRecord.txLastStartTimeEpoch; + + // Last Treatment Start > Last Heat Disinfect Complete AND Last Treatment Start > Last Chem Disinfect Complete + BOOL hasDisBeenDone = ( ( ( lastStartTxTimeDate > lastChemCompleteDate ) && ( lastStartTxTimeDate > lastHeatCompleteDate ) ) ? FALSE : TRUE ); + + // Last Chem Disinfect Complete < Current Time – Chem Disinfect Interval + BOOL isChemDisValid = ( lastChemCompleteDate < ( getRTCTimestamp() - DISINFECTS_TIME_INTERVAL_S ) ? TRUE : FALSE ); + + // Last Heat Disinfect Complete < Current Time – Heat Disinfect Interval + BOOL isHeatDisValid = ( lastHeatCompleteDate < ( getRTCTimestamp() - DISINFECTS_TIME_INTERVAL_S ) ? TRUE : FALSE ); + + // Last Chem Flush Complete < Last Chem Disinfect Start + BOOL isChemFlushComplete = ( lastChemFlushCompleteDate < lastChemCompleteDate ? FALSE : TRUE ); + + // Last Basic Flush Complete < Current Time – Flush Interval AND Last Heat Disinfect Complete < Current Time – Flush Interval + // AND Last Chem Flush Complete < Current Time – Flush Interval + BOOL isBasicFlushValid = ( lastFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : FALSE ); + BOOL isHeatDisFlushValid = ( lastHeatCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : FALSE ); + BOOL isChemFlushValid = ( lastChemFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : FALSE ); + BOOL isFlushValid = ( isBasicFlushValid | isHeatDisFlushValid | isChemFlushValid ); + + if ( ( TRUE == hasDisBeenDone ) && ( TRUE == isChemDisValid ) && ( TRUE == isHeatDisValid ) && ( TRUE == isChemFlushComplete ) && ( TRUE == isFlushValid ) ) { - status = FALSE; + status = TRUE; } } @@ -1005,7 +1022,7 @@ if ( TRUE == dgData.isDGServiceRecordAvailable ) { - U32 dgSrvcElapsedTimeS = getRTCTimestamp() - dgData.dgServiceRecord.lastServiceDateEpoch; + U32 dgSrvcElapsedTimeS = getRTCTimestamp() - dgData.dgServiceRecord.lastServiceEpochDate; BOOL hasDGSrvcBeenExpired = ( dgSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); U32 hdSrvcElapsedTimeS = getRTCTimestamp() - hdServiceRecord.lastServiceEpochDate; BOOL hasHDSrvcBeenExpied = ( hdSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -raa7b1f5f68aae23c1c52b32658fcb625c29accfb -rc429cf7f50851acbaca6e800957ef44cc1fa2162 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision aa7b1f5f68aae23c1c52b32658fcb625c29accfb) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision c429cf7f50851acbaca6e800957ef44cc1fa2162) @@ -3224,7 +3224,7 @@ payloadPtr += sizeof( U32 ); memcpy( payloadPtr, &service.serviceIntervalSeconds, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &dgData.dgServiceRecord.lastServiceDateEpoch, sizeof( U32 ) ); + memcpy( payloadPtr, &dgData.dgServiceRecord.lastServiceEpochDate, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); memcpy( payloadPtr, &dgData.dgServiceRecord.serviceIntervalSeconds, sizeof( U32 ) ); } @@ -7240,11 +7240,11 @@ *************************************************************************/ void handleDGServiceScheduleData( MESSAGE_T *message ) { - if ( message->hdr.payloadLen == sizeof( HD_VERSION_DG_SERVICE_RECORD_T ) ) + if ( message->hdr.payloadLen == sizeof( DG_SERVICE_RECORD_T ) ) { - HD_VERSION_DG_SERVICE_RECORD_T payload; + DG_SERVICE_RECORD_T payload; - memcpy( &payload, message->payload, sizeof( HD_VERSION_DG_SERVICE_RECORD_T ) ); + memcpy( &payload, message->payload, sizeof( DG_SERVICE_RECORD_T ) ); setHDVersionDGServiceRecord( &payload ); } } @@ -7260,11 +7260,11 @@ *************************************************************************/ void handleDGUsageInfoData( MESSAGE_T *message ) { - if ( message->hdr.payloadLen == sizeof( HD_VERSION_DG_USAGE_INFO_T ) ) + if ( message->hdr.payloadLen == sizeof( DG_USAGE_INFO_RECORD_T ) ) { - HD_VERSION_DG_USAGE_INFO_T payload; + DG_USAGE_INFO_RECORD_T payload; - memcpy( &payload, message->payload, sizeof( HD_VERSION_DG_USAGE_INFO_T ) ); + memcpy( &payload, message->payload, sizeof( DG_USAGE_INFO_RECORD_T ) ); setHDVersionDGUsageInfo( &payload ); } }