Index: Common.h =================================================================== diff -u -r1afbd991f98562fda8059c75c59c0ea5b64243e4 -r76ccffbbaf71efeeead896f05c0d800c9367ab73 --- Common.h (.../Common.h) (revision 1afbd991f98562fda8059c75c59c0ea5b64243e4) +++ Common.h (.../Common.h) (revision 76ccffbbaf71efeeead896f05c0d800c9367ab73) @@ -374,6 +374,21 @@ BOOL useLastTrimmerHeaterDC; ///< Use last trimmer heater duty cycle flag. } DG_SWITCH_RSRVRS_CMD_T; +/// DG usage info structure. +typedef struct +{ + F32 roWaterGenTotalL; ///< Total RO water generated in liters. (Cannot be reset) + F32 roWaterGenSinceLastServiceL; ///< RO water generated since last treatment in liters. + U32 lastBasicFlushCompleteDateEpoch; ///< Last basic flush complete date in epoch. + U32 lastChemDisStartDateEpoch; ///< Last chemical disinfect start date in epoch. + U32 lastChemDisCompleteDateEpoch; ///< Last chemical disinfect complete date in epoch. + U32 lastChemDisFlushCompleteDateEpoch; ///< Last chemical disinfect flush complete date in epoch. + U32 lastHeatDisCompleteDateEpoch; ///< Last heat disinfect complete date in epoch. + U32 lastFilterFlushCompleteDateEpoch; ///< Last filter flush complete date in epoch. + U32 lastResetTimeEpoch; ///< Last time the record was reset in epoch. + U16 crc; ///< CRC for the DG usage info structure. +} DG_USAGE_INFO_RECORD_T; + // **** VectorCAST Definitions **** #ifdef _VECTORCAST_ Index: NVDataMgmt.c =================================================================== diff -u -r1afbd991f98562fda8059c75c59c0ea5b64243e4 -r76ccffbbaf71efeeead896f05c0d800c9367ab73 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 1afbd991f98562fda8059c75c59c0ea5b64243e4) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision 76ccffbbaf71efeeead896f05c0d800c9367ab73) @@ -1466,13 +1466,33 @@ { switch ( disinfect ) { - case USAGE_INFO_HEAT_DISINFECT: - dgUsageInfoGroup.dgUsageInfo.lastHeatDisDateEpoch = epochTime; + case USAGE_INFO_BASIC_FLUSH: + dgUsageInfoGroup.dgUsageInfo.lastBasicFlushCompleteDateEpoch = epochTime; break; - case USAGE_INFO_CHEMICAL_DISINFECT: - dgUsageInfoGroup.dgUsageInfo.lastChemicalDisDateEpoch = epochTime; + case USAGE_INFO_CHEM_DIS_START: + dgUsageInfoGroup.dgUsageInfo.lastChemDisStartDateEpoch = epochTime; break; + + case USAGE_INFO_CHEM_DIS: + dgUsageInfoGroup.dgUsageInfo.lastChemDisCompleteDateEpoch = epochTime; + break; + + case USAGE_INFO_CHEM_FLUSH: + dgUsageInfoGroup.dgUsageInfo.lastChemDisFlushCompleteDateEpoch = epochTime; + break; + + case USAGE_INFO_HEAT_DIS: + dgUsageInfoGroup.dgUsageInfo.lastHeatDisCompleteDateEpoch = epochTime; + break; + + case USAGE_INFO_FILTER_FLUSH: + dgUsageInfoGroup.dgUsageInfo.lastFilterFlushCompleteDateEpoch = epochTime; + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_USAGE_INFO_SELECTED, disinfect ); + break; } dgUsageInfoGroup.dgUsageInfo.crc = crc16( (U08*)&dgUsageInfoGroup.dgUsageInfo, sizeof( DG_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); @@ -1493,38 +1513,6 @@ /*********************************************************************//** * @brief - * The setDisinfectStatus sets a queue job to write whether the device is already - * disinfected or not. - * @details Inputs: dgUsageInfoGroup - * @details Outputs: dgUsageInfoGroup - * @param disinfectStatus disinfect status - * @return TRUE if queue is not full - *************************************************************************/ -BOOL setDisinfectStatus( BOOL disinfectStatus ) -{ - BOOL status = FALSE; - - if ( FALSE == isQueueFull() ) - { - dgUsageInfoGroup.dgUsageInfo.isDisinfected = disinfectStatus; - dgUsageInfoGroup.dgUsageInfo.crc = crc16( (U08*)&dgUsageInfoGroup.dgUsageInfo, sizeof( DG_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); - dgUsageInfoGroup.crc = crc16( (U08*)&dgUsageInfoGroup, sizeof( DG_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); - usageWriteTries = 0; - status = TRUE; - - enqueueRecordJob( NVDATAMGMT_WRITE, RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].dataLoc, NVDATAMGMT_USAGE_INFO_RECORD ); - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ) - } - else if ( ++usageWriteTries > MAX_NUM_OF_WRITE_TRIES ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_WRITE_USAGE_INFO_TO_NV_FAILURE, USAGE_INFO_DISIFNECT_STATUS ); - } - - return status; -} - -/*********************************************************************//** - * @brief * The setHeatersInfoRecord sets a queue job to write the DG heaters info * back to the RTC RAM. * @details Inputs: none @@ -2786,15 +2774,14 @@ if ( calcCRC != recordCRC ) { - dgUsageInfoGroup.dgUsageInfo.isDisinfected = FALSE; - dgUsageInfoGroup.dgUsageInfo.lastChemicalDisDateEpoch = 0; - dgUsageInfoGroup.dgUsageInfo.lastHeatDisDateEpoch = 0; - dgUsageInfoGroup.dgUsageInfo.roWaterGenSinceLastServiceL = 0.0F; - dgUsageInfoGroup.dgUsageInfo.roWaterGenTotalL = 0.0F; - dgUsageInfoGroup.dgUsageInfo.lastResetTimeEpoch = getRTCTimestamp(); - dgUsageInfoGroup.dgUsageInfo.crc = crc16( (U08*)&dgUsageInfoGroup.dgUsageInfo, sizeof( DG_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); - dgUsageInfoGroup.crc = crc16( (U08*)&dgUsageInfoGroup, sizeof( DG_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); - status = FALSE; + dgUsageInfoGroup.dgUsageInfo.lastChemDisCompleteDateEpoch = 0; + dgUsageInfoGroup.dgUsageInfo.lastHeatDisCompleteDateEpoch = 0; + dgUsageInfoGroup.dgUsageInfo.roWaterGenSinceLastServiceL = 0.0F; + dgUsageInfoGroup.dgUsageInfo.roWaterGenTotalL = 0.0F; + dgUsageInfoGroup.dgUsageInfo.lastResetTimeEpoch = getRTCTimestamp(); + dgUsageInfoGroup.dgUsageInfo.crc = crc16( (U08*)&dgUsageInfoGroup.dgUsageInfo, sizeof( DG_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); + dgUsageInfoGroup.crc = crc16( (U08*)&dgUsageInfoGroup, sizeof( DG_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); + status = FALSE; activateAlarmNoData( ALARM_ID_DG_INVALID_USAGE_RECORD_CRC ); } Index: NVDataMgmt.h =================================================================== diff -u -r7574a250df6c0a773344ccafb62431c22930f6a3 -r76ccffbbaf71efeeead896f05c0d800c9367ab73 --- NVDataMgmt.h (.../NVDataMgmt.h) (revision 7574a250df6c0a773344ccafb62431c22930f6a3) +++ NVDataMgmt.h (.../NVDataMgmt.h) (revision 76ccffbbaf71efeeead896f05c0d800c9367ab73) @@ -135,7 +135,6 @@ #ifdef _DG_ BOOL setROWaterGeneratedL( F32 liters ); BOOL setLastDisinfectDate( DG_USAGE_INFO_ITEMS_T disinfect, U32 epochTime ); -BOOL setDisinfectStatus( BOOL disinfectStatus ); BOOL setHeatersInfoRecord( U08 *addressPtr, U32 infoLength ); #endif #ifdef _HD_ Index: NVDataMgmtDGRecords.h =================================================================== diff -u -r1afbd991f98562fda8059c75c59c0ea5b64243e4 -r76ccffbbaf71efeeead896f05c0d800c9367ab73 --- NVDataMgmtDGRecords.h (.../NVDataMgmtDGRecords.h) (revision 1afbd991f98562fda8059c75c59c0ea5b64243e4) +++ NVDataMgmtDGRecords.h (.../NVDataMgmtDGRecords.h) (revision 76ccffbbaf71efeeead896f05c0d800c9367ab73) @@ -224,8 +224,12 @@ typedef enum dg_usage_items { USAGE_INFO_RO_GEN_WATER = 0, ///< Usage info RO generated water. - USAGE_INFO_HEAT_DISINFECT, ///< Usage info heat disinfect. - USAGE_INFO_CHEMICAL_DISINFECT, ///< Usage info chemical disinfect. + USAGE_INFO_BASIC_FLUSH, ///< Usage info basic flush. + USAGE_INFO_CHEM_DIS_START, ///< Usage info chemcial disinfect start. + USAGE_INFO_CHEM_DIS, ///< Usage info chemical disinfect complete. + USAGE_INFO_CHEM_FLUSH, ///< Usage info chemical flush complete. + USAGE_INFO_HEAT_DIS, ///< Usage info heat disinfect complete. + USAGE_INFO_FILTER_FLUSH, ///< Usage info filter flush complete. USAGE_INFO_DISIFNECT_STATUS, ///< Usage info disinfect (heat or chemical) status. NUM_OF_USAGE_INFO_ITEMS ///< Number of usage info items. } DG_USAGE_INFO_ITEMS_T; @@ -480,18 +484,6 @@ DG_SCHEDULED_RUN_T dgScheduledRun[ NUM_OF_DG_SCHEDULED_RUNS ]; ///< DG scheduled run. } DG_SCHEDULED_RUN_RECORD_T; -/// DG usage info structure. -typedef struct -{ - F32 roWaterGenTotalL; ///< Total RO water generated in liters. (Cannot be reset) - F32 roWaterGenSinceLastServiceL; ///< RO water generated since last treatment in liters. - U32 lastHeatDisDateEpoch; ///< Last heat disinfect date in epoch. - U32 lastChemicalDisDateEpoch; ///< Last chemical disinfect date in epoch. - BOOL isDisinfected; ///< Disinfect status boolean flag. - U32 lastResetTimeEpoch; ///< Last time the record was reset in epoch. - U16 crc; ///< CRC for the DG usage info structure. -} DG_USAGE_INFO_RECORD_T; - /// DG heaters information structure typedef struct {