Index: firmware/App/Services/NVRecordsDD.c =================================================================== diff -u -r1e742ba641458eaf36c8d953275a3e1c32b943d4 -r7b414857790dd5282137bf67d56688a703d4bfe7 --- firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 1e742ba641458eaf36c8d953275a3e1c32b943d4) +++ firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 7b414857790dd5282137bf67d56688a703d4bfe7) @@ -1265,7 +1265,7 @@ // TODO: Update lastUpdatedTime to current timestamp published by UI. ddServiceGroup.ddServiceRecord.fpRecord.lastResetTimeEpoch = RECORD_DEFAULT_TIME; - ddServiceGroup.ddServiceRecord.fpRecord.crc = crc16( (U08*)&ddServiceGroup.fpServiceRecord, + ddServiceGroup.ddServiceRecord.fpRecord.crc = crc16( (U08*)&ddServiceGroup.ddServiceRecord.fpRecord, sizeof( SERVICE_RECORD_FP_T ) - sizeof( U16 ) ); } @@ -1281,8 +1281,8 @@ static void initDDServiceRecord( void ) { ddServiceGroup.ddServiceRecord.ddRecord.isHDFOnlineFluidAvailable = 0; - ddServiceGroup.ddServiceRecord.ddRecord.UltraFilter1ReplacementDate = 0; - ddServiceGroup.ddServiceRecord.ddRecord.UltraFilter2ReplacementDate = 0; + ddServiceGroup.ddServiceRecord.ddRecord.ultraFilter1ReplacementDate = 0; + ddServiceGroup.ddServiceRecord.ddRecord.ultraFilter2ReplacementDate = 0; ddServiceGroup.ddServiceRecord.ddRecord.UFPumpTubingReplacementDate = 0; ddServiceGroup.ddServiceRecord.ddRecord.serviceLoc = 0; ddServiceGroup.ddServiceRecord.ddRecord.lastServiceEpochDate = 0; @@ -1376,12 +1376,12 @@ *************************************************************************/ static void initFPUsageRecord( void ) { - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.primaryFilterTreatmentNum; = 0; - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.primaryFilterDisinfectionNum; = 0; - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.secondaryFilterTreatmentNum; = 0; - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.secondaryFilterDisinfectionNum; = 0; - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.ROMembraneTreatmentNum; = 0; - ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.ROMembraneDisinfectionNum; = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.primaryFilterTreatmentNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.primaryFilterDisinfectionNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.secondaryFilterTreatmentNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.secondaryFilterDisinfectionNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.ROMembraneTreatmentNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.ROMembraneDisinfectionNum = 0; // TODO: Update lastUpdatedTime to current timestamp published by UI. ddUsageInfoGroup.ddUsageInfoRecord.fpRecord.lastResetTimeEpoch = RECORD_DEFAULT_TIME; @@ -1403,10 +1403,10 @@ { ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.roWaterGenTotalL = 0.0F; ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.roWaterGenSinceLastServiceL = 0.0F; - ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UltraFilter1TreatmentNum = 0; - ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UltraFilter1DisinfectionNum = 0; - ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UltraFilter2TreatmentNum = 0; - ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UltraFilter2DisinfectionNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.ultraFilter1TreatmentNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.ultraFilter1DisinfectionNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.ultraFilter2TreatmentNum = 0; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.ultraFilter2DisinfectionNum = 0; ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UFPumpTubingTreatmentNum = 0; ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.UFPumpTubingDisinfectionNum = 0; ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.lastBasicFlushCompleteDateEpoch = 0; @@ -1498,15 +1498,13 @@ switch ( recType ) { case NVM_SYSTEM_RECORD: - ddSystemGroup.ddSystemRecord.crc = crc16 ( (U08*)&ddSystemGroup.ddSystemRecord, - sizeof( DD_SYSTEM_RECORD_T ) - sizeof( U16 ) ); - ddSystemGroup.crc = crc16 ( (U08*)&ddSystemGroup, - sizeof( DD_SYSTEM_GROUP_T ) - sizeof( U16 ) ); - break; + ddSystemGroup.ddSystemRecord.crc = crc16 ( (U08*)&ddSystemGroup.ddSystemRecord, + sizeof( DD_SYSTEM_RECORD_T ) - sizeof( U16 ) ); + ddSystemGroup.crc = crc16 ( (U08*)&ddSystemGroup, + sizeof( DD_SYSTEM_GROUP_T ) - sizeof( U16 ) ); + break; case NVM_SERVICE_RECORD: - ddServiceGroup.ddServiceRecord.crc = crc16 ( (U08*)&ddServiceGroup.ddServiceRecord, - sizeof( DD_SERVICE_RECORD_T ) - sizeof( U16 ) ); ddServiceGroup.crc = crc16 ( (U08*)&ddServiceGroup, sizeof( DD_SERVICE_GROUP_T ) - sizeof( U16 ) ); break; @@ -1522,8 +1520,6 @@ break; case NVM_USAGE_INFO_RECORD: - ddUsageInfoGroup.ddUsageInfoRecord.crc = crc16 ( (U08*)&ddUsageInfoGroup.ddUsageInfoRecord, - sizeof( DD_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); ddUsageInfoGroup.crc = crc16 ( (U08*)&ddUsageInfoGroup, sizeof( DD_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); break; @@ -1554,30 +1550,32 @@ switch ( disinfect ) { case USAGE_INFO_BASIC_FLUSH: - ddUsageInfoGroup.ddUsageInfoRecord.lastBasicFlushCompleteDateEpoch = epochTime; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.lastBasicFlushCompleteDateEpoch = epochTime; break; case USAGE_INFO_HEAT_DIS: - ddUsageInfoGroup.ddUsageInfoRecord.lastHeatDisCompleteDateEpoch = epochTime; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.lastHeatDisCompleteDateEpoch = epochTime; break; case USAGE_INFO_FILTER_FLUSH: - ddUsageInfoGroup.ddUsageInfoRecord.lastFilterFlushCompleteDateEpoch = epochTime; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.lastFilterFlushCompleteDateEpoch = epochTime; break; case USAGE_INFO_HEAT_DIS_ACTIVE_COOL: - ddUsageInfoGroup.ddUsageInfoRecord.lastHeatActiveCoolCompleteDateEpoch = epochTime; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.lastHeatActiveCoolCompleteDateEpoch = epochTime; break; default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_NVM_INVALID_USAGE_INFO_SELECTED, ( U32 )disinfect ); break; } - ddUsageInfoGroup.ddUsageInfoRecord.crc = crc16( (U08*)&ddUsageInfoGroup.ddUsageInfoRecord, sizeof( DD_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); - ddUsageInfoGroup.crc = crc16( (U08*)&ddUsageInfoGroup, sizeof( DD_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); - usageWriteTries = 0; - status = TRUE; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.crc = crc16( (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.ddRecord, + sizeof( USAGE_RECORD_DD_T ) - sizeof( U16 ) ); + ddUsageInfoGroup.crc = crc16( (U08*)&ddUsageInfoGroup, + sizeof( DD_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); + usageWriteTries = 0; + status = TRUE; enqueueEraseAndWriteSector( NVM_USAGE_INFO_RECORD ); sendNVEvent( NVM_USAGE_INFO_RECORD, 0, 0 ); @@ -1608,16 +1606,22 @@ { // When the service record is changed, all the sector 0 must be re-written plus the stack's usage information must be updated. // Therefore, at least 4 queues are needed to be able to update all the records. The usage records are changed: - // In HD the treatment time since last service is reset to 0 - // In DG the RO water generation since the last service in reset to 0 + // In TD the treatment time since last service is reset to 0 + // In DD the RO water generation since the last service in reset to 0 -// ddServiceGroup.ddServiceRecord.lastServiceEpochDate = getRTCTimestamp(); - ddServiceGroup.ddServiceRecord.crc = crc16( (U08*)&ddServiceGroup.ddServiceRecord, sizeof( DD_SERVICE_RECORD_T ) - sizeof( U16 ) ); - ddServiceGroup.crc = crc16( (U08*)&ddServiceGroup, sizeof( DD_SERVICE_GROUP_T ) - sizeof( U16 ) ); + // TODO: Update lastUpdatedTime to current timestamp published by UI. +// ddServiceGroup.ddServiceRecord.ddRecord.lastServiceEpochDate = getRTCTimestamp(); + + ddServiceGroup.ddServiceRecord.ddRecord.crc = crc16( (U08*)&ddServiceGroup.ddServiceRecord.ddRecord, + sizeof( SERVICE_RECORD_DD_T ) - sizeof( U16 ) ); + ddServiceGroup.crc = crc16( (U08*)&ddServiceGroup, + sizeof( DD_SERVICE_GROUP_T ) - sizeof( U16 ) ); // Update the DG usage info - ddUsageInfoGroup.ddUsageInfoRecord.roWaterGenSinceLastServiceL = 0; - ddUsageInfoGroup.ddUsageInfoRecord.crc = crc16( (U08*)&ddUsageInfoGroup.ddUsageInfoRecord, sizeof( DD_USAGE_INFO_RECORD_T ) - sizeof( U16 ) ); - ddUsageInfoGroup.crc = crc16( (U08*)&ddUsageInfoGroup, sizeof( DD_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.roWaterGenSinceLastServiceL = 0; + ddUsageInfoGroup.ddUsageInfoRecord.ddRecord.crc = crc16( (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.ddRecord, + sizeof( USAGE_RECORD_DD_T ) - sizeof( U16 ) ); + ddUsageInfoGroup.crc= crc16( (U08*)&ddUsageInfoGroup, + sizeof( DD_USAGE_INFO_GROUP_T ) - sizeof( U16 ) ); // Service record has been touched so the entire sector 0 of the EEPROM must be rewritten enqueueEraseAndWriteSector( NVM_SERVICE_RECORD ); @@ -1694,11 +1698,16 @@ nvDataLength = sizeof( ddSystemGroup.ddSystemRecord ); break; - case NV_DD_DATA_SERVICE_RECORD: - nvDataStartPtr = (U08*)&ddServiceGroup.ddServiceRecord; - nvDataLength = sizeof( ddServiceGroup.ddServiceRecord ); + case NV_DD_DATA_FP_SERVICE_RECORD: + nvDataStartPtr = (U08*)&ddServiceGroup.ddServiceRecord.fpRecord; + nvDataLength = sizeof( ddServiceGroup.ddServiceRecord.fpRecord ); break; + case NV_DD_DATA_DD_SERVICE_RECORD: + nvDataStartPtr = (U08*)&ddServiceGroup.ddServiceRecord.ddRecord; + nvDataLength = sizeof( ddServiceGroup.ddServiceRecord.ddRecord ); + break; + case NV_DD_DATA_CAL_PRESSURE_SENOSRS: nvDataStartPtr = (U08*)&ddCalibrationGroup.ddCalibrationRecord.presSensorsCalRecord; nvDataLength = sizeof( ddCalibrationGroup.ddCalibrationRecord.presSensorsCalRecord ); @@ -1782,11 +1791,16 @@ nvDataLength = sizeof( ddInstitutionalGroup.ddInstitutionalRecord.additionalRecord ); break; - case NV_DD_DATA_USAGE_INFO_RECORD: - nvDataStartPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord; - nvDataLength = sizeof( ddUsageInfoGroup.ddUsageInfoRecord ); + case NV_DD_DATA_FP_USAGE_INFO_RECORD: + nvDataStartPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.fpRecord; + nvDataLength = sizeof( ddUsageInfoGroup.ddUsageInfoRecord.fpRecord ); break; + case NV_DD_DATA_DD_USAGE_INFO_RECORD: + nvDataStartPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.ddRecord; + nvDataLength = sizeof( ddUsageInfoGroup.ddUsageInfoRecord.ddRecord ); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_NVM_INVALID_RECORD_SELECTED, ( U32 )nvData ); break; @@ -1849,12 +1863,18 @@ recTypeGroup = NVM_SYSTEM_RECORD; break; - case NV_DD_DATA_SERVICE_RECORD: - destPtr = (U08*)&ddServiceGroup.ddServiceRecord; - dataSize = sizeof( ddServiceGroup.ddServiceRecord ); + case NV_DD_DATA_FP_SERVICE_RECORD: + destPtr = (U08*)&ddServiceGroup.ddServiceRecord.fpRecord; + dataSize = sizeof( ddServiceGroup.ddServiceRecord.fpRecord ); recTypeGroup = NVM_SERVICE_RECORD; break; + case NV_DD_DATA_DD_SERVICE_RECORD: + destPtr = (U08*)&ddServiceGroup.ddServiceRecord.ddRecord; + dataSize = sizeof( ddServiceGroup.ddServiceRecord.ddRecord ); + recTypeGroup = NVM_SERVICE_RECORD; + break; + case NV_DD_DATA_CAL_PRESSURE_SENOSRS: destPtr = (U08*)&ddCalibrationGroup.ddCalibrationRecord.presSensorsCalRecord.pressureSensors[ idx ]; dataSize = sizeof( ddCalibrationGroup.ddCalibrationRecord.presSensorsCalRecord.pressureSensors[ 0 ] ); @@ -1935,12 +1955,18 @@ recTypeGroup = NVM_INSTITUTIONAL_RECORD; break; - case NV_DD_DATA_USAGE_INFO_RECORD: - destPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord; - dataSize = sizeof( ddUsageInfoGroup.ddUsageInfoRecord ); + case NV_DD_DATA_FP_USAGE_INFO_RECORD: + destPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.fpRecord; + dataSize = sizeof( ddUsageInfoGroup.ddUsageInfoRecord.fpRecord ); recTypeGroup = NVM_USAGE_INFO_RECORD; break; + case NV_DD_DATA_DD_USAGE_INFO_RECORD: + destPtr = (U08*)&ddUsageInfoGroup.ddUsageInfoRecord.ddRecord; + dataSize = sizeof( ddUsageInfoGroup.ddUsageInfoRecord.ddRecord ); + recTypeGroup = NVM_USAGE_INFO_RECORD; + break; + default: break; } @@ -2048,15 +2074,15 @@ break; case NVM_SERVICE_RECORD: - ddServiceGroup.ddServiceRecord.crc = crc; + ddServiceGroup.crc = crc; break; case NVM_INSTITUTIONAL_RECORD: ddInstitutionalGroup.crc = crc; break; case NVM_USAGE_INFO_RECORD: - ddUsageInfoGroup.ddUsageInfoRecord.crc = crc; + ddUsageInfoGroup.crc = crc; break; default: