Index: firmware/App/Services/NVRecordsDD.c =================================================================== diff -u -r0face6417892ea9de28d146bf88d44a9f30cf2a4 -r66b03c4d4724df628b4fd175567880f23eb35259 --- firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 0face6417892ea9de28d146bf88d44a9f30cf2a4) +++ firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 66b03c4d4724df628b4fd175567880f23eb35259) @@ -48,9 +48,9 @@ #define DEFAULT_ACID_BOTTLE_VOL_ML 3430.0F ///< Record default acid bottle volume in milliliters. #define DEFAULT_ACID_COND_US_PER_CM 11645.05F ///< Record default acid conductivity in uS/cm. #define DEFAULT_ACID_BOTTLE_TEMP_C 23.5F ///< Record default acid bottle temperature in C. -#define DEFAULT_RSRVR_TEMP_TAU_C_PER_MIN -0.25F ///< Reservoir temperature time constant C/min. #define DEFAULT_UF_TEMP_TAU_C_PER_MIN -0.6F ///< Ultrafilter temperature time constant C/min. #define DEFAULT_UF_VOLUME_ML 700 ///< Ultrafilter volume in milliliters. +#define DEFAULT_BLOOD_LEAK_SET_POINT 20 ///< Blood leak default set point. #define DEFAULT_FILL_1251_1_ACID_SNSR_US_PER_CM 0.0F ///< Fill acid 1251_1 acid sensor conductivity uS/cm. #define DEFAULT_FILL_1251_1_BIC_SNSR_US_PER_CM 13616.23F ///< Fill acid 1251_1 bicarb sensor conductivity uS/cm. @@ -88,22 +88,15 @@ /// DD calibration groups structure typedef struct { - DD_PRES_SENSORS_CAL_RECORD_T presSensorsCalRecord; ///< DD pressure sensors. - DD_FLOW_SENSORS_CAL_RECORD_T flowSensorsCalRecord; ///< DD flow sensors. - DD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; ///< DD temperature sensors. - DD_CONC_PUMPS_CAL_RECORD_T concentratePumpsRecord; ///< DD concentrate pumps. - DD_DRAIN_PUMP_CAL_RECORD_T drainPumpRecord; ///< DD drain pump. - DD_RO_PUMP_CAL_RECORD_T roPumpRecord; ///< DD RO pump. - DD_DRAIN_LINE_VOLUME_T drainLineVolumeRecord; ///< DD drain line volume. - DD_PRE_RO_PURGE_VOLUME_T preROPurgeVolumeRecord; ///< DD RO purge volume. - DD_GENERIC_VOLUME_RECORD_T genericVolumeRecord; ///< DD generic volume (magic number because the value is unknown). - DD_ACID_CONCENTRATES_RECORD_T acidConcentratesRecord; ///< DD acid concentrates. - DD_BICARB_CONCENTRATES_RECORD_T bicarbConcentratesRecord; ///< DD bicarb concentrates. - DD_FILTERS_CAL_RECORD_T filtersRecord; ///< DD filters. - DD_FANS_CAL_RECORD_T fansRecord; ///< DD fans. - DD_ACCEL_SENSOR_CAL_RECORD_T accelerometerSensorCalRecord; ///< DD accelerometer sensor. - DD_HEATING_CAL_RECORD_T heatingCalRecord; ///< DD heating calibration record. - DD_CONCENTRATES_COND_CAL_RECORD_T concentratesCondCalRecord; ///< DD fill acid/bicarb target conductivities calibration record. + DD_PRES_SENSORS_CAL_RECORD_T presSensorsCalRecord; ///< DD pressure sensors calibration record + DD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; ///< DD temperature sensors calibration record + DD_CONC_PUMPS_CAL_RECORD_T concentratePumpsRecord; ///< DD concentrate pumps calibration record + DD_DIALYSATE_PUMPS_CAL_RECORD_T dialysatePumpsRecord; ///< DD dialysate pumps calibration record + DD_ACID_CONCENTRATES_RECORD_T acidConcentratesRecord; ///< DD acid concentrates calibration record + DD_BICARB_CONCENTRATES_RECORD_T bicarbConcentratesRecord; ///< DD bicarb concentrates calibration record + DD_ACCEL_SENSOR_CAL_RECORD_T accelerometerSensorCalRecord; ///< DD accelerometer sensor. + DD_CONCENTRATES_COND_CAL_RECORD_T concentratesCondCalRecord; ///< DD fill acid/bicarb target conductivities calibration record. + DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T bloodLeakSensorCalRecord; ///< DD blood leak detector calibration record } DD_CALIBRATION_GROUPS_T; /// DG calibration records structure @@ -202,18 +195,11 @@ static BOOL isDDServiceRecordValid( void ); static BOOL isDDUsageRecordValid( void ); static BOOL isDDCalibrationRecordValid( void ); -static BOOL isDDDrainPumpRecordValid( DD_DRAIN_PUMP_CAL_RECORD_T* record ); -static BOOL isDDROPumpRecordValid( DD_RO_PUMP_CAL_RECORD_T* record ); -static BOOL isDDPreROPurgeVolumeRecordValid( DD_PRE_RO_PURGE_VOLUME_T* record ); -static BOOL isDDDrainLineVolRecordValid( DD_DRAIN_LINE_VOLUME_T* record ); -static BOOL isDDGenericVolRecordValid( DD_GENERIC_VOLUME_DATA_T* record ); static BOOL isDDAcidConcentrateRecordValid( DD_ACID_CONCENTRATE_T* record ); static BOOL isDDBicarbConcentrateRecordValid( DD_BICARB_CONCENTRATE_T* record ); -static BOOL isDDFilterRecordValid( DD_FILTER_CAL_RECORD_T* record ); -static BOOL isDDFanRecordValid( DD_FAN_CAL_RECORD_T* record ); static BOOL isDDAccelerometerSensorRecordValid( DD_ACCEL_SENSOR_CAL_RECORD_T* record ); -static BOOL isDDHeatingCalRecordValid( DD_HEATING_CAL_RECORD_T* record ); static BOOL isDDFillConductiviesRecordValid( DD_ACID_BICARB_FILL_COND_VALUES_T* record, DD_ACID_TYPES_T acidType, DD_FILL_COND_OPS_T operation ); +static BOOL isDDBloodLeakSesnorValid( DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* record ); void initNVRecordsDD( void ) { @@ -494,7 +480,6 @@ if ( calcCRC != recordCRC ) { - ddUsageInfoGroup.ddUsageInfo.lastChemDisCompleteDateEpoch = 0; ddUsageInfoGroup.ddUsageInfo.lastHeatDisCompleteDateEpoch = 0; ddUsageInfoGroup.ddUsageInfo.roWaterGenSinceLastServiceL = 0.0F; ddUsageInfoGroup.ddUsageInfo.roWaterGenTotalL = 0.0F; @@ -548,50 +533,27 @@ isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - DD_FLOW_SENSORS_CAL_RECORD_T* flow = &ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord; - for ( i = 0; i < NUM_OF_CAL_DATA_FLOW_SENSORS; i++ ) - { - record = (POLYNOMIAL_CAL_PAYLOAD_T*)&flow->flowSensors[ i ]; - isHardwareRecordValid = isPolynomialRecordValid( record ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - } - DD_TEMP_SENSORS_CAL_RECORD_T* temperature = &ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord; - for ( i = 0; i < NUM_OF_CAL_DATA_TEMP_SENSORS; i++ ) + for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) { record = (POLYNOMIAL_CAL_PAYLOAD_T*)&temperature->tempSensors[ i ]; isHardwareRecordValid = isPolynomialRecordValid( record ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } DD_CONC_PUMPS_CAL_RECORD_T* concPump = &ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord; - for ( i = 0; i < NUM_OF_CAL_DATA_DD_CONC_PUMPS; i++ ) + for ( i = 0; i < NUM_OF_CONCENTRATE_PUMPS; i++ ) { record = &concPump->concentratePumps[ i ]; isHardwareRecordValid = isPolynomialRecordValid( record ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - DD_DRAIN_PUMP_CAL_RECORD_T* drainPump = &ddCalibrationRecord.ddCalibrationGroups.drainPumpRecord; - isHardwareRecordValid = isDDDrainPumpRecordValid( drainPump ) != TRUE ? FALSE : isCalRecordValid; - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_RO_PUMP_CAL_RECORD_T* roPump = &ddCalibrationRecord.ddCalibrationGroups.roPumpRecord; - isHardwareRecordValid = isDDROPumpRecordValid( roPump ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_PRE_RO_PURGE_VOLUME_T* preROPurgeVolume = &ddCalibrationRecord.ddCalibrationGroups.preROPurgeVolumeRecord; - isHardwareRecordValid = isDDPreROPurgeVolumeRecordValid( preROPurgeVolume ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_DRAIN_LINE_VOLUME_T* drainLineVol = &ddCalibrationRecord.ddCalibrationGroups.drainLineVolumeRecord; - isHardwareRecordValid = isDDDrainLineVolRecordValid( drainLineVol ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_GENERIC_VOLUME_RECORD_T* genericVol = &ddCalibrationRecord.ddCalibrationGroups.genericVolumeRecord; - for ( i = 0; i < GENERIC_VOL_RESERVED_SPACE_COUNT; i++ ) + DD_DIALYSATE_PUMPS_CAL_RECORD_T* dialPump = &ddCalibrationRecord.ddCalibrationGroups.dialysatePumpsRecord; + for ( i = 0; i < NUM_OF_DIALYSATE_PUMPS; i++ ) { - isHardwareRecordValid = isDDGenericVolRecordValid( &genericVol->genericVolume[ i ] ); + record = &dialPump->dialysatePump[ i ]; + isHardwareRecordValid = isPolynomialRecordValid( record ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } @@ -609,41 +571,10 @@ isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - DD_FILTER_CAL_RECORD_T* roFilter = &ddCalibrationRecord.ddCalibrationGroups.filtersRecord.roFilter; - isHardwareRecordValid = isDDFilterRecordValid( roFilter ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_FILTER_CAL_RECORD_T* ultraFilter = &ddCalibrationRecord.ddCalibrationGroups.filtersRecord.ultraFilter; - isHardwareRecordValid = isDDFilterRecordValid( ultraFilter ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_FILTER_CAL_RECORD_T* sedimentFilter = &ddCalibrationRecord.ddCalibrationGroups.filtersRecord.sedimentFilter; - isHardwareRecordValid = isDDFilterRecordValid( sedimentFilter ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_FILTER_CAL_RECORD_T* carbonFilter = &ddCalibrationRecord.ddCalibrationGroups.filtersRecord.carbonFilter; - isHardwareRecordValid = isDDFilterRecordValid( carbonFilter ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_FILTER_CAL_RECORD_T* carbonPolishFilter = &ddCalibrationRecord.ddCalibrationGroups.filtersRecord.carbonPolishFilter; - isHardwareRecordValid = isDDFilterRecordValid( carbonPolishFilter ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - DD_FANS_CAL_RECORD_T* fan = &ddCalibrationRecord.ddCalibrationGroups.fansRecord; - for ( i = 0; i < NUM_OF_CAL_DATA_FANS; i++ ) - { - isHardwareRecordValid = isDDFanRecordValid( &fan->fans[ i ] ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - } - DD_ACCEL_SENSOR_CAL_RECORD_T* accelerometer = &ddCalibrationRecord.ddCalibrationGroups.accelerometerSensorCalRecord; isHardwareRecordValid = isDDAccelerometerSensorRecordValid( accelerometer ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - DD_HEATING_CAL_RECORD_T* heating = &ddCalibrationRecord.ddCalibrationGroups.heatingCalRecord; - isHardwareRecordValid = isDDHeatingCalRecordValid( heating ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - DD_FILL_COND_OPS_T j; DD_CONCENTRATES_COND_CAL_RECORD_T* acidBicarbTempRecord = &ddCalibrationRecord.ddCalibrationGroups.concentratesCondCalRecord; for ( i = 0; i < NUM_OF_ACID_TYPE; i++ ) @@ -655,6 +586,10 @@ } } + DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* bloodLeak = &ddCalibrationRecord.ddCalibrationGroups.bloodLeakSensorCalRecord; + isHardwareRecordValid = isDDBloodLeakSesnorValid( bloodLeak ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; + // If the sub groups failed, they are all updated to their benign values // so the main CRC of the calibration group is calculated again if ( ( FALSE == isCalRecordValid ) || ( recordCRC != ddCalibrationRecord.crc ) ) @@ -670,153 +605,6 @@ /*********************************************************************//** * @brief - * The isDDDrainPumpRecordValid function checks whether the calibration - * record of drain pump is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_DRAIN_PUMP_CAL_RECORD_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDDrainPumpRecordValid( DD_DRAIN_PUMP_CAL_RECORD_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_DRAIN_PUMP_CAL_RECORD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->stepSpeed2FlowRatio = RECORD_DEFAULT_RATIO; - record->voltage2SpeedRatio = RECORD_DEFAULT_RATIO; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_DRAIN_PUMP_CAL_RECORD_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief - * The isDDROPumpRecordValid function checks whether the calibration - * record of RO pump is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_RO_PUMP_CAL_RECORD_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDROPumpRecordValid( DD_RO_PUMP_CAL_RECORD_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_RO_PUMP_CAL_RECORD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->gain1Ratio = RECORD_DEFAULT_RATIO; - record->gain2Ratio = RECORD_DEFAULT_RATIO; - record->gain3Ratio = RECORD_DEFAULT_RATIO; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_RO_PUMP_CAL_RECORD_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief - * The isDDPreROPurgeVolumeRecordValid function checks whether the - * calibration record of pre RO purge is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_PRE_RO_PURGE_VOLUME_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDPreROPurgeVolumeRecordValid( DD_PRE_RO_PURGE_VOLUME_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_PRE_RO_PURGE_VOLUME_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->pressure2FlowRatio = RECORD_DEFAULT_RATIO; - record->volume = RECORD_DEFAULT_CONST; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_PRE_RO_PURGE_VOLUME_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief - * The isDDDrainLineVolRecordValid function checks whether the calibration - * record of drain line volume is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_DRAIN_LINE_VOLUME_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDDrainLineVolRecordValid( DD_DRAIN_LINE_VOLUME_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_DRAIN_LINE_VOLUME_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->volume = DEFAULT_FLUSH_LINES_VOLUME_L; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_DRAIN_LINE_VOLUME_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief - * The isDDGenericVolRecordValid function checks whether the calibration - * record of generic volume is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_GENERIC_VOLUME_DATA_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDGenericVolRecordValid( DD_GENERIC_VOLUME_DATA_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof( DD_GENERIC_VOLUME_DATA_T ) - sizeof( U16 ) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->volume = RECORD_DEFAULT_CONST; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof( DD_GENERIC_VOLUME_DATA_T ) - sizeof( U16 ) ); - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief * The isDDAcidConcentrateRecordValid function checks whether the calibration * record of acid concentrate is valid or not. * @details Inputs: none @@ -877,62 +665,6 @@ /*********************************************************************//** * @brief - * The isDDFilterRecordValid function checks whether the calibration - * record of filter is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_FILTER_CAL_RECORD_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDFilterRecordValid( DD_FILTER_CAL_RECORD_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_FILTER_CAL_RECORD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_FILTER_CAL_RECORD_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief - * The isDDFanRecordValid function checks whether the calibration record - * of fan is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_FAN_CAL_RECORD_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDFanRecordValid( DD_FAN_CAL_RECORD_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_FAN_CAL_RECORD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_FAN_CAL_RECORD_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief * The isDDAccelerometerSensorRecordValid function checks whether the * calibration record of accelerometer sensor is valid or not. * @details Inputs: none @@ -964,37 +696,6 @@ /*********************************************************************//** * @brief - * The isDDHeatingCalRecordValid function checks whether the calibration record - * of heating parameters is valid or not. - * @details Inputs: none - * @details Outputs: none - * @param record: DD_HEATING_CAL_RECORD_T pointer - * @return TRUE if the record is valid otherwise FALSE - *************************************************************************/ -static BOOL isDDHeatingCalRecordValid( DD_HEATING_CAL_RECORD_T* record ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(DD_HEATING_CAL_RECORD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->reservoirTempTauCPerMin = DEFAULT_RSRVR_TEMP_TAU_C_PER_MIN; - record->ultrafilterTempTauCPerMin = DEFAULT_UF_TEMP_TAU_C_PER_MIN; - record->ultrafilterVolmL = DEFAULT_UF_VOLUME_ML; - record->calibrationTime = RECORD_DEFAULT_TIME; - record->crc = crc16 ( (U08*)record, sizeof(DD_HEATING_CAL_RECORD_T) - sizeof(U16) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} - -/*********************************************************************//** - * @brief * The isDGFillConductiviesRecordValid function checks whether fill conductivity * record is valid or not. * @details Inputs: none @@ -1092,7 +793,34 @@ return status; } +/*********************************************************************//** + * @brief + * The isDDBloodLeakSesnorValid function checks whether the calibration record + * of DD blood leak sensor is valid or not. + * @details Inputs: none + * @details Outputs: none + * @param record: DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T pointer + * @return TRUE if the record is valid otherwise FALSE + *************************************************************************/ +static BOOL isDDBloodLeakSesnorValid( DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* record ) +{ + BOOL status = TRUE; + U16 calcCRC = crc16 ( (U08*)record, sizeof( DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T ) - sizeof( U16 ) ); + U16 recordCRC = record->crc; + if ( calcCRC != recordCRC ) + { + record->setPoint = DEFAULT_BLOOD_LEAK_SET_POINT; + record->calibrationTime = RECORD_DEFAULT_TIME; + record->crc = crc16 ( (U08*)record, sizeof( DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T ) - sizeof( U16 ) ); + + // Set the to FALSE since the record is not valid + status = FALSE; + } + + return status; +} + /*********************************************************************//** * @brief * The setLastDisinfectDate sets a queue job to write the last time that DG @@ -1115,18 +843,6 @@ ddUsageInfoGroup.ddUsageInfo.lastBasicFlushCompleteDateEpoch = epochTime; break; - case USAGE_INFO_CHEM_DIS_START: - ddUsageInfoGroup.ddUsageInfo.lastChemDisStartDateEpoch = epochTime; - break; - - case USAGE_INFO_CHEM_DIS: - ddUsageInfoGroup.ddUsageInfo.lastChemDisCompleteDateEpoch = epochTime; - break; - - case USAGE_INFO_CHEM_FLUSH: - ddUsageInfoGroup.ddUsageInfo.lastChemDisFlushCompleteDateEpoch = epochTime; - break; - case USAGE_INFO_HEAT_DIS: ddUsageInfoGroup.ddUsageInfo.lastHeatDisCompleteDateEpoch = epochTime; break; @@ -1259,13 +975,20 @@ isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.presSensorsCalRecord.pressureSensors[ i ].calibrationTime ? TRUE : FALSE ); break; - case GET_CAL_FLOW_SENSORS: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord ); + case GET_CAL_TEMP_SENSORS: + nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord; + nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord ); for ( i = 0; i < numOfSnsrs2Check; i++ ) - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord.flowSensors[ i ].calibrationTime ? TRUE : FALSE ); + isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord.tempSensors[ i ].calibrationTime ? TRUE : FALSE ); break; + case GET_CAL_CONCENTRATE_PUMPS_RECORD: + nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord; + nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord ); + for ( i = 0; i < numOfSnsrs2Check; i++ ) + isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord.concentratePumps[ i ].calibrationTime ? TRUE : FALSE ); + break; + case GET_CAL_ACID_CONCENTREATES: nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.acidConcentratesRecord; nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.acidConcentratesRecord ); @@ -1285,67 +1008,6 @@ isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.accelerometerSensorCalRecord.calibrationTime ? TRUE : FALSE ); break; - case GET_CAL_TEMP_SENSORS: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord ); - for ( i = 0; i < numOfSnsrs2Check; i++ ) - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord.tempSensors[ i ].calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_HEATING_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.heatingCalRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.heatingCalRecord ); - isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.heatingCalRecord.calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_DRAIN_LINE_VOLUME_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.drainLineVolumeRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.drainLineVolumeRecord ); - isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.drainLineVolumeRecord.calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_RO_PUMP_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.roPumpRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.roPumpRecord ); - isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.roPumpRecord.calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_CONCENTRATE_PUMPS_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord ); - for ( i = 0; i < numOfSnsrs2Check; i++ ) - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord.concentratePumps[ i ].calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_DRAIN_PUMP_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.drainPumpRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.drainPumpRecord ); - isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.drainPumpRecord.calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_FANS_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.fansRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.fansRecord ); - for ( i = 0; i < numOfSnsrs2Check; i++ ) - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.fansRecord.fans[ i ].calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_PRE_RO_PURGE_VOLUME_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.preROPurgeVolumeRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.preROPurgeVolumeRecord ); - isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.preROPurgeVolumeRecord.calibrationTime ? TRUE : FALSE ); - break; - - case GET_CAL_FILTERS_RECORD: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.filtersRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.filtersRecord ); - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.filtersRecord.carbonFilter.calibrationTime ? TRUE : FALSE ); - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.filtersRecord.carbonPolishFilter.calibrationTime ? TRUE : FALSE ); - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.filtersRecord.roFilter.calibrationTime ? TRUE : FALSE ); - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.filtersRecord.sedimentFilter.calibrationTime ? TRUE : FALSE ); - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.filtersRecord.ultraFilter.calibrationTime ? TRUE : FALSE ); - break; - case GET_CAL_FILL_CONDUCTIVITIES_RECORD: { DD_FILL_COND_OPS_T fillOps; @@ -1363,6 +1025,12 @@ } break; + case GET_CAL_BLOOD_LEAK_SENSOR: + nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.bloodLeakSensorCalRecord; + nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.bloodLeakSensorCalRecord ); + isNVDataInvalid = ( 0 == ddCalibrationRecord.ddCalibrationGroups.bloodLeakSensorCalRecord.calibrationTime ? TRUE : FALSE ); + break; + case GET_SYS_RECORD: nvDataStartPtr = (U08*)&ddSystemGroup.ddSystemRecord; nvDataLength = sizeof( ddSystemGroup.ddSystemRecord ); @@ -1414,6 +1082,21 @@ return ( FALSE == isNVDataInvalid ? TRUE : FALSE ); } +void updateNVSelfTestResult( SELF_TEST_STATUS_T result ) +{ + nvDataMgmtSelfTestResult = result; +} + +void updateNVSelfTestState( NVDATAMGMT_SELF_TEST_STATE_T state ) +{ + nvDataMgmtSelfTestState = state; +} + +void updateSelfTestReadRecordsFlag ( BOOL value ) +{ + isSelfTestReadRecordsDone = value; +} + /*********************************************************************//** * @brief * The testSetNVRecordCRCOverride overrides the non-volatile record CRC override. @@ -1461,20 +1144,5 @@ return status; } -void updateNVSelfTestResult( SELF_TEST_STATUS_T result ) -{ - nvDataMgmtSelfTestResult = result; -} - -void updateNVSelfTestState( NVDATAMGMT_SELF_TEST_STATE_T state ) -{ - nvDataMgmtSelfTestState = state; -} - -void updateSelfTestReadRecordsFlag ( BOOL value ) -{ - isSelfTestReadRecordsDone = value; -} - /**@}*/