Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rc6565acec36584dc703eaa807e5a2da0b697c4de -r8126d8e97c5626d71c7b807fa9f95601248d6dbb --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision c6565acec36584dc703eaa807e5a2da0b697c4de) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8126d8e97c5626d71c7b807fa9f95601248d6dbb) @@ -7,8 +7,8 @@ * * @file ModeStandby.c * -* @author (last) Sean Nash -* @date (last) 31-May-2023 +* @author (last) Dara Navaei +* @date (last) 14-Jun-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -49,7 +49,7 @@ #define DISINFECTS_DATA_PUB_INTERVAL ( 1 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Disinfects data publish interval in counts. #define DISINFECTS_TIME_INTERVAL_S ( 3 * SECONDS_IN_A_DAY ) ///< HD/DG 3-day service interval in seconds. -#define FLUSH_TIME_INTERVAL_S ( 30 * SEC_PER_MIN * MS_PER_SECOND ) ///< Flush time interval in seconds. +#define FLUSH_TIME_INTERVAL_S ( 30 * SEC_PER_MIN ) ///< Flush time interval in seconds. #define MAX_ALLOWED_RO_FILTER_TEMP_FOR_TX_C 44.0F ///< Maximum allowed temperature to start a treatment in C. /// DG cleaning mode status data structure @@ -101,7 +101,7 @@ * The initStandbyMode function initializes the Standby Mode module. * @details Inputs: none * @details Outputs: currentStandbyState, treatStartReqReceived, - * homingInitiated + * disinfectCancelReqID, homingInitiated * @return none *************************************************************************/ void initStandbyMode( void ) @@ -355,7 +355,7 @@ * The signalUserInitiateFlushMode function handles user initiation of flush * mode. * @details Inputs: currentStandbyState - * @details Outputs: flushStartReqReceived + * @details Outputs: flushStartReqReceived, currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateFlushMode( void ) @@ -855,8 +855,9 @@ * @brief * The handleDisinfectCancel function handles * DG disinfect cancel UI interaction. - * @details Inputs: none - * @details Outputs: none + * @details Inputs: disinfectCancelReqID, currentDGCleaningMode, + * currentStandbyState + * @details Outputs: disinfectCancelReqID * @param stop button status * @return none *************************************************************************/ @@ -1008,7 +1009,7 @@ currentDGCleaningMode.alarmID = ALARM_ID_NO_ALARM; currentDGCleaningMode.startRequestCmdID = DG_CMD_NONE; currentDGCleaningMode.dgOpMode = DG_MODE_FAUL; - currentDGCleaningMode.sampleRqstTrgrd = FALSE; + currentDGCleaningMode.sampleRqstTrgrd = FALSE; currentDGCleaningMode.sampleRequestID = GENERIC_CONFIRM_ID_NONE; currentDGCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_NONE; } @@ -1142,28 +1143,29 @@ HD_USAGE_INFO_RECORD_T usageRecord; getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageRecord, sizeof( HD_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); - U32 lastChemCompleteDate = data.dgUsageInfo.lastChemDisCompleteDateEpoch; - U32 lastChemFlushCompleteDate = data.dgUsageInfo.lastChemDisFlushCompleteDateEpoch; - U32 lastHeatCompleteDate = data.dgUsageInfo.lastHeatDisCompleteDateEpoch; - U32 lastFlushCompleteDate = data.dgUsageInfo.lastBasicFlushCompleteDateEpoch; - U32 lastHeatCoolCompleteDate = data.dgUsageInfo.lastHeatActiveCoolCompleteDateEpoch; - U32 lastStartTxTimeDate = usageRecord.txLastStartTimeEpoch; + U32 lastChemCompleteDateS = data.dgUsageInfo.lastChemDisCompleteDateEpoch; + U32 lastChemFlushCompleteDateS = data.dgUsageInfo.lastChemDisFlushCompleteDateEpoch; + U32 lastHeatCompleteDateS = data.dgUsageInfo.lastHeatDisCompleteDateEpoch; + U32 lastFlushCompleteDateS = data.dgUsageInfo.lastBasicFlushCompleteDateEpoch; + U32 lastHeatCoolCompleteDateS = data.dgUsageInfo.lastHeatActiveCoolCompleteDateEpoch; + U32 lastStartTxTimeDateS = usageRecord.txLastStartTimeEpoch; + U32 currentRTCEpochTimeS = getRTCTimestamp(); // Last Treatment Start < Last Heat Disinfect Complete or Last Treatment Start < Last Chem Disinfect Complete so it means at least a heat disinfect // or a chemical disinfect has been done since the last treatment - BOOL hasDisBeenDone = ( ( ( lastStartTxTimeDate < lastChemCompleteDate ) || ( lastStartTxTimeDate < lastHeatCompleteDate ) ) ? TRUE : FALSE ); + BOOL hasDisBeenDone = ( ( ( lastStartTxTimeDateS < lastChemCompleteDateS ) || ( lastStartTxTimeDateS < lastHeatCompleteDateS ) ) ? TRUE : FALSE ); // Last Heat Disinfect Complete < Current Time – Heat Disinfect Interval, so the heat disinfect that has been done has not been expired - BOOL isHeatDisValid = ( lastHeatCompleteDate < ( getRTCTimestamp() - DISINFECTS_TIME_INTERVAL_S ) ? TRUE : FALSE ); + BOOL isHeatDisValid = ( ( currentRTCEpochTimeS - lastHeatCompleteDateS ) < DISINFECTS_TIME_INTERVAL_S ? TRUE : FALSE ); // Last Chem Flush Complete < Last Chem Disinfect Start, so after running a chemical disinfect, a chemical disinfect flush has been done - BOOL isChemFlushComplete = ( lastChemFlushCompleteDate > lastChemCompleteDate ? TRUE : FALSE ); + BOOL isChemFlushComplete = ( lastChemFlushCompleteDateS > lastChemCompleteDateS ? TRUE : FALSE ); // If either of the basic flush, heat disinfect, or chemical disinfect flush have been done within the interval, it means the filters have been flushed - BOOL isBasicFlushValid = ( lastFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); - BOOL isChemFlushValid = ( lastChemFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); - BOOL isHeatDisCoolFlushValid = ( lastHeatCoolCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); - BOOL isFlushValid = ( isBasicFlushValid || isChemFlushValid || isHeatDisCoolFlushValid ); + BOOL isBasicFlushValid = ( ( currentRTCEpochTimeS - lastFlushCompleteDateS ) < FLUSH_TIME_INTERVAL_S ? TRUE : FALSE ); + BOOL isChemFlushValid = ( ( currentRTCEpochTimeS - lastChemFlushCompleteDateS ) < FLUSH_TIME_INTERVAL_S ? TRUE : FALSE ); + BOOL isHeatDisCoolFlushValid = ( ( currentRTCEpochTimeS - lastHeatCoolCompleteDateS ) < FLUSH_TIME_INTERVAL_S ? TRUE : FALSE ); + BOOL isFlushValid = ( ( TRUE == isBasicFlushValid ) || ( TRUE == isChemFlushValid ) || ( TRUE == isHeatDisCoolFlushValid ) ? TRUE : FALSE ); // If all of the above conditions are true, it means we can start a treatment if ( ( TRUE == hasDisBeenDone ) && ( TRUE == isHeatDisValid ) && ( TRUE == isChemFlushComplete ) && ( TRUE == isFlushValid ) ) @@ -1186,19 +1188,20 @@ ***********************************************************************/ static BOOL haveHDDGServicesBeenExpired( REQUEST_REJECT_REASON_CODE_T* rejReason ) { - BOOL status = FALSE; DG_SERVICE_AND_USAGE_DATA_T dgData; HD_SERVICE_RECORD_T hdServiceRecord; + BOOL status = FALSE; + U32 currentRTCEpochTime = getRTCTimestamp(); getHDVersionDGServiceAndUsageData( &dgData ); getNVRecord2Driver( GET_SRV_RECORD, (U08*)&hdServiceRecord, sizeof( HD_SERVICE_RECORD_T ), 0, ALARM_ID_NO_ALARM ); if ( TRUE == dgData.isDGServiceRecordAvailable ) { - U32 dgSrvcElapsedTimeS = getRTCTimestamp() - dgData.dgServiceRecord.lastServiceEpochDate; - U32 hdSrvcElapsedTimeS = getRTCTimestamp() - hdServiceRecord.lastServiceEpochDate; - BOOL hasDGSrvcBeenExpired = ( dgSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); - BOOL hasHDSrvcBeenExpied = ( hdSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); + U32 dgSrvcElapsedTimeS = currentRTCEpochTime - dgData.dgServiceRecord.lastServiceEpochDate; + U32 hdSrvcElapsedTimeS = currentRTCEpochTime - hdServiceRecord.lastServiceEpochDate; + BOOL hasDGSrvcBeenExpired = ( dgSrvcElapsedTimeS > dgData.dgServiceRecord.serviceIntervalSeconds ? TRUE : FALSE ); + BOOL hasHDSrvcBeenExpied = ( hdSrvcElapsedTimeS > hdServiceRecord.serviceIntervalSeconds ? TRUE : FALSE ); if ( TRUE == hasDGSrvcBeenExpired ) {