Index: NVDataMgmt.c =================================================================== diff -u -r1d4945e7608e24b685f54368d0791455ef2f48be -rd2ff6db64d23836f7e649c7c13240c3c93a8b5aa --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 1d4945e7608e24b685f54368d0791455ef2f48be) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision d2ff6db64d23836f7e649c7c13240c3c93a8b5aa) @@ -115,6 +115,7 @@ // HD specific defines #ifdef _HD_ +#define BLOOD_LEAK_DEFAULT_SET_POINT 20 ///< Blood leak default set point. #endif // DG specific defines @@ -229,8 +230,8 @@ U32 sizeofJob; ///< Jobs spec size of job. U32 maxWriteBufferSize; ///< Jobs max write allowed processing buffer size. U32 maxReadBufferSize; ///< Jobs max read allowed processing buffer size. - U08* structAddressPtr; - U08* structCRCPtr; + U08* structAddressPtr; ///< Jobs structure address pointer. + U08* structCRCPtr; ///< Jobs structure CRC pointer. } PROCESS_RECORD_SPECS_T; /// Process records job structure @@ -290,7 +291,7 @@ DG_BICARB_CONCENTRATES_RECORD_T bicarbConcentratesRecord; ///< DG bicarb concentrates. DG_FILTERS_CAL_RECORD_T filtersRecord; ///< DG filters. DG_FANS_CAL_RECORD_T fansRecord; ///< DG fans. - DG_ACCELEROMETER_SENSOR_CAL_RECORD_T accelerometerCalRecord; ///< DG accelerometer sensor. + DG_ACCELEROMETER_SENSOR_CAL_RECORD_T accelerometerSensorCalRecord; ///< DG accelerometer sensor. } DG_CALIBRATION_GROUPS_T; /// DG calibration records structure @@ -359,7 +360,8 @@ HD_PRESSURE_SENSORS_CAL_RECORD_T pressureSensorsCalRecord; ///< HD pressure sensors. HD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; ///< HD temperature sensors. HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T heparinForceSensorCalRecord; ///< HD heparin force sensor. - HD_ACCELEROMETER_SENSOR_CAL_RECORD_T accelerometerCalRecord; ///< HD accelerometer sensor. + HD_ACCELEROMETER_SENSOR_CAL_RECORD_T accelerometerSensorCalRecord; ///< HD accelerometer sensor. + HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T bloodLeakSensorCalRecord; ///< HD blood leak sensor. } HD_CALIBRATION_GROUPS; /// HD calibration records structure @@ -553,6 +555,7 @@ static BOOL isHDValveRecordValid( HD_VALVE_CAL_PAYLOAD_T* record ); static BOOL isHDPumpRecordValid( HD_PUMP_CAL_PAYLOAD_T* record ); static BOOL isHDAccelerometerSensorValid( HD_ACCELEROMETER_SENSOR_CAL_RECORD_T* record ); +static BOOL isHDBloodLeakSesnorValid( HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* record ); #endif /*********************************************************************//** @@ -1231,15 +1234,76 @@ * new calibration availability. * @details Inputs: none * @details Outputs: none - * @return isNewCalAvailable which is TRUE is cal is available, otherwise - * FALSE + * @return isNewCalAvailable which is TRUE if new calibration is available, + * otherwise FALSE *************************************************************************/ BOOL isNewCalibrationRecordAvailable( void ) { return isNewCalAvailable; } +/*********************************************************************//** + * @brief + * The getCalibrationRecord2Driver function copies the requested non-volatile + * data into the provided buffer by the caller. The function then checks if + * the non-volatile data is valid. If the data is not valid, it raises the + * provided alarm by the caller. + * @details Inputs: hdCalibrationRecord, dgCalibrationRecord + * @details Outputs: hdCalibrationRecord, dgCalibrationRecord + * @param nvData the non-volatile data to be copied + * @param bufferAddress the address of the provided buffer by the caller + * @param bufferLength the length of the provided buffer by the caller + * @param nvAlarm the corresponding alarm of the non-volatile data to be raised + * if the data is not valid + * @return TRUE if the non-volatile data is valid otherwise, FALSE + *************************************************************************/ +BOOL getCalibrationRecord2Driver( NV_DATA_T nvData, U08* bufferAddress, U32 bufferLength, ALARM_ID_T nvAlarm ) +{ + // TODO NOTE: This function is the replacement to the processCalibrationData functions in the drivers + // Also, remove the get functions in this driver once this function is used instead of get functions in the NVDataMgmt.h + U08 i; + U08* nvDataStartPtr = 0; + BOOL isNVDataValid = FALSE; + + switch ( nvData ) + { +#ifdef _HD_ + case CAL_GET_BLOOD_LEAK_SENSOR: + nvDataStartPtr = (U08*)&hdCalibrationRecord.hdCalibrationGroups.bloodLeakSensorCalRecord; + isNVDataValid = ( 0 == hdCalibrationRecord.hdCalibrationGroups.bloodLeakSensorCalRecord.calibrationTime ? FALSE : TRUE ); + break; + + case CAL_GET_TEMPERATURE_SESNORS: + nvDataStartPtr = (U08*)&hdCalibrationRecord.hdCalibrationGroups.tempSensorsCalRecord; + // Loop through each sensor's calibration data and make sure it is valid + for ( i = 0; i < NUM_OF_CAL_DATA_HD_TEMP_SENSORS; i++ ) + isNVDataValid |= ( 0 == hdCalibrationRecord.hdCalibrationGroups.tempSensorsCalRecord.hdTemperatureSensors[ i ].calibrationTime ? FALSE : TRUE ); + break; +#endif + #ifdef _DG_ + case CAL_LOAD_CELLS_SENSORS: + break; +#endif + } + + // Copy the data into the provided buffer + memcpy( bufferAddress, nvDataStartPtr, bufferLength ); + +#ifndef SKIP_CAL_CHECK + // Check if the non-volatile data is valid and if not raise the alarm + if ( FALSE == isNVDataValid ) + { + activateAlarmNoData( nvAlarm ); + } +#else + isNVDataValid = TRUE; +#endif + + return isNVDataValid; +} + +#ifdef _DG_ /*********************************************************************//** * @brief * The getDGPressureSensorsCalibrationRecord function returns the DG pressure @@ -1442,7 +1506,7 @@ *************************************************************************/ DG_ACCELEROMETER_SENSOR_CAL_RECORD_T getDGAccelerometerSensorCalibrationRecord( void ) { - return dgCalibrationRecord.dgCalibrationGroups.accelerometerCalRecord; + return dgCalibrationRecord.dgCalibrationGroups.accelerometerSensorsCalRecord; } /*********************************************************************//** @@ -1584,7 +1648,7 @@ *************************************************************************/ HD_ACCELEROMETER_SENSOR_CAL_RECORD_T getHDAccelerometerSensorCalibrationRecord( void ) { - return hdCalibrationRecord.hdCalibrationGroups.accelerometerCalRecord; + return hdCalibrationRecord.hdCalibrationGroups.accelerometerSensorCalRecord; } /*********************************************************************//** @@ -3379,7 +3443,7 @@ isHardwareRecordValid = isDGFanRecordValid( &fan->fan2 ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - DG_ACCELEROMETER_SENSOR_CAL_RECORD_T* accelerometer = &dgCalibrationRecord.dgCalibrationGroups.accelerometerCalRecord; + DG_ACCELEROMETER_SENSOR_CAL_RECORD_T* accelerometer = &dgCalibrationRecord.dgCalibrationGroups.accelerometerSensorCalRecord; isHardwareRecordValid = isDGAccelerometerSensorRecordValid( accelerometer ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; @@ -3822,6 +3886,7 @@ return status; } + /*********************************************************************//** * @brief * The isHDCalibrationRecordValid function checks whether HD calibration @@ -3886,19 +3951,22 @@ { record = (POLYNOMIAL_CAL_PAYLOAD_T*)&temperature->hdTemperatureSensors[ i ]; isHardwareRecordValid = isPolynomialRecordValid( record ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE :isHardwareRecordValid; + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T* heparinForce = &hdCalibrationRecord.hdCalibrationGroups.heparinForceSensorCalRecord; record = (POLYNOMIAL_CAL_PAYLOAD_T*)&heparinForce->hdHeparinForceSensor; isHardwareRecordValid = isPolynomialRecordValid( record ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - - HD_ACCELEROMETER_SENSOR_CAL_RECORD_T* accelerometer = &hdCalibrationRecord.hdCalibrationGroups.accelerometerCalRecord; + HD_ACCELEROMETER_SENSOR_CAL_RECORD_T* accelerometer = &hdCalibrationRecord.hdCalibrationGroups.accelerometerSensorCalRecord; isHardwareRecordValid = isHDAccelerometerSensorValid( accelerometer ); isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; + HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* bloodLeak = &hdCalibrationRecord.hdCalibrationGroups.bloodLeakSensorCalRecord; + isHardwareRecordValid = isHDBloodLeakSesnorValid( bloodLeak ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; + return isCalRecordValid; } @@ -3993,6 +4061,34 @@ return status; } + +/*********************************************************************//** + * @brief + * The isHDBloodLeakSesnorValid function checks whether the calibration record + * of HD blood leak sensor is valid or not. + * @details Inputs: none + * @details Outputs: none + * @param record: HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T pointer + * @return TRUE if the record is valid otherwise FALSE + *************************************************************************/ +static BOOL isHDBloodLeakSesnorValid( HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T* record ) +{ + BOOL status = TRUE; + U16 calcCRC = crc16 ( (U08*)record, sizeof( HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T ) - sizeof( U16 ) ); + U16 recordCRC = record->crc; + + if ( calcCRC != recordCRC ) + { + record->setPoint = BLOOD_LEAK_DEFAULT_SET_POINT; + record->calibrationTime = RECORD_DEFAULT_TIME; + record->crc = crc16 ( (U08*)record, sizeof( HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T ) - sizeof( U16 ) ); + + // Set the to FALSE since the record is not valid + status = FALSE; + } + + return status; +} #endif /*********************************************************************//** Index: NVDataMgmt.h =================================================================== diff -u -r17fdefc3752a193c0d2d495f1497cc8c1e35c406 -rd2ff6db64d23836f7e649c7c13240c3c93a8b5aa --- NVDataMgmt.h (.../NVDataMgmt.h) (revision 17fdefc3752a193c0d2d495f1497cc8c1e35c406) +++ NVDataMgmt.h (.../NVDataMgmt.h) (revision d2ff6db64d23836f7e649c7c13240c3c93a8b5aa) @@ -92,6 +92,8 @@ BOOL isNewCalibrationRecordAvailable( void ); +BOOL getCalibrationRecord2Driver( NV_DATA_T nvData, U08* bufferAddress, U32 bufferLength, ALARM_ID_T nvAlarm ); + #ifdef _DG_ DG_PRES_SENSORS_CAL_RECORD_T getDGPressureSensorsCalibrationRecord( void ); DG_FLOW_SENSORS_CAL_RECORD_T getDGFlowSensorsCalibrationRecord( void ); Index: NVDataMgmtDGRecords.h =================================================================== diff -u -r1d4945e7608e24b685f54368d0791455ef2f48be -rd2ff6db64d23836f7e649c7c13240c3c93a8b5aa --- NVDataMgmtDGRecords.h (.../NVDataMgmtDGRecords.h) (revision 1d4945e7608e24b685f54368d0791455ef2f48be) +++ NVDataMgmtDGRecords.h (.../NVDataMgmtDGRecords.h) (revision d2ff6db64d23836f7e649c7c13240c3c93a8b5aa) @@ -34,6 +34,14 @@ #define MAX_TOP_LEVEL_PN_CHARS 10U ///< Max number of characters for top level part number. #define MAX_TOP_LEVEL_SN_CHARS 15U ///< Max number of characters for top level serial number. +/// DG available NV data to get +typedef enum dg_nv_commands +{ + // TODO add more calibration commands + CAL_LOAD_CELLS_SENSORS = 0, + NUM_OF_NV_DG_DATA +} NV_DATA_T; + /// DG pressure sensors enumeration. typedef enum dg_pressure_sensors { Index: NVDataMgmtHDRecords.h =================================================================== diff -u -rcfa1142455dbcebceda091ae61e5d1f5e889fa6e -rd2ff6db64d23836f7e649c7c13240c3c93a8b5aa --- NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision cfa1142455dbcebceda091ae61e5d1f5e889fa6e) +++ NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision d2ff6db64d23836f7e649c7c13240c3c93a8b5aa) @@ -35,6 +35,14 @@ #define MAX_TOP_LEVEL_PN_CHARS 10U ///< Max number of characters for top level part number. #define MAX_TOP_LEVEL_SN_CHARS 15U ///< Max number of characters for top level serial number. +/// HD available NV data to get +typedef enum hd_nv_commands +{ + CAL_GET_BLOOD_LEAK_SENSOR = 0, + CAL_GET_TEMPERATURE_SESNORS, + NUM_OF_NV_HD_DATA +} NV_DATA_T; + /// HD pumps enumeration. typedef enum hd_pumps { @@ -48,7 +56,7 @@ typedef enum hd_valves { CAL_DATA_BLOOD_VENOUS_VALVE = 0, ///< Blood venous valve. - CAL_DATA_BLOOD_ARTERAIL_VALVE, ///< Blood arterial valve. + CAL_DATA_BLOOD_ARTERIAL_VALVE, ///< Blood arterial valve. CAL_DATA_DIALYZER_INLET_VALVE, ///< Dialyzer inlet valve. CAL_DATA_DIALYZER_OUTLET_VALVE, ///< Dialyzer outlet valve. NUM_OF_CAL_DATA_HD_VALVES ///< Number of HD valves. @@ -173,6 +181,14 @@ U16 crc; ///< CRC for the HD accelerometer sensor. } HD_ACCELEROMETER_SENSOR_CAL_RECORD_T; +/// HD blood leak calibration structure +typedef struct +{ + U32 setPoint; ///< Blood leak sensor set point. + U16 calibrationTime; ///< Calibration time. + U16 crc; ///< CRC for the HD blood leak calibration payload. +} HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T; + /// HD systems record structure typedef struct {