Index: NVDataMgmt.c =================================================================== diff -u -rba2efce4509d89ecc27a5f179774e32ac358b9ce -r425252f82959bdd382d3a63a978f002e7bfe3011 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision ba2efce4509d89ecc27a5f179774e32ac358b9ce) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision 425252f82959bdd382d3a63a978f002e7bfe3011) @@ -492,7 +492,6 @@ #endif #ifdef _HD_ static BOOL isHDCalibrationRecordValid( void ); -static BOOL isNonlinearRecordValid( NON_LINEAR_CAL_PAYLOAD_T* record, BOOL isRecordNeeded ); static BOOL isHDValveRecordValid( HD_VALVE_CAL_PAYLOAD_T* record, BOOL isRecordNeeded ); static BOOL isHDPumpRecordValid( HD_PUMP_CAL_PAYLOAD_T* record, BOOL isRecordNeeded ); static BOOL isHDAccelerometerSensorValid( HD_ACCELEROMETER_SENSOR_CAL_RECORD_T* record, BOOL isRecordNeeded ); @@ -3521,57 +3520,6 @@ #ifdef _HD_ /*********************************************************************//** * @brief - * The isNonlinearRecordValid function checks whether the records are still - * valid by calculating the CRCs and comparing it to the strucutre's CRC. - * @details Inputs: none - * @details Outputs: none - * @param record: pointer to a non-linear calibration payload. The actual - * calibration data to be checked - * @param isRecordNeeded: TRUE is the calibration record is need in the - * firmware right now otherwise, FALSE - * @return TRUE if the records' data is valid otherwise FALSE - *************************************************************************/ -static BOOL isNonlinearRecordValid( NON_LINEAR_CAL_PAYLOAD_T* record, BOOL isRecordNeeded ) -{ - BOOL status = TRUE; - U16 calcCRC = crc16 ( (U08*)record, sizeof(NON_LINEAR_CAL_PAYLOAD_T) - sizeof(U16) ); - U16 recordCRC = record->crc; - - if ( calcCRC != recordCRC ) - { - // CRC did not pass so set all values to default - record->gain = RECORD_DEFAULT_GAIN; - record->offset = RECORD_DEFAULT_OFFSET; - record->reservedParam1 = RECORD_DEFAULT_CONST; - record->reservedParam2 = RECORD_DEFAULT_CONST; - record->reservedParam3 = RECORD_DEFAULT_CONST; - record->calibrationTime = RECORD_DEFAULT_TIME; - // Recalculate the CRC with the default values - record->crc = crc16 ( (U08*)record, sizeof(NON_LINEAR_CAL_PAYLOAD_T) - sizeof(U16) ); - - // Alarm if the CRC did not pass - activateAlarmNoData( ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_CRC_INVALID ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - // Check if the record is needed. If it is needed, it should have a valid - // calibration time associated with it. - if ( TRUE == isRecordNeeded ) - { - // Check if the calibration time of the record is the default value - if ( record->calibrationTime == RECORD_DEFAULT_TIME ) - { - activateAlarmNoData( ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_TIME_INVALID ); - } - } - - return status; -} - -/*********************************************************************//** - * @brief * The isHDCalibrationRecordValid function checks whether HD calibration * record is valid or not. * @details Inputs: none @@ -3581,65 +3529,73 @@ static BOOL isHDCalibrationRecordValid( void ) { U32 i; - LINEAR_CAL_PAYLOAD_T* linearRecord; - NON_LINEAR_CAL_PAYLOAD_T* nonlinearRecord; - BOOL isRecordValid = TRUE; + POLYNOMIAL_CAL_PAYLOAD_T* record; + BOOL isHardwareRecordValid = TRUE; + BOOL isCalRecordValid = TRUE; HD_PUMPS_CAL_RECORD_T* pump = &hdCalibrationRecord.hdCalibrationGroups.pumpsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_HD_PUMPS; i++ ) { - isRecordValid = isRecordValid == FALSE ? FALSE : isHDPumpRecordValid( &pump->hdPumps[ i ], FALSE ); + isHardwareRecordValid = isHDPumpRecordValid( &pump->hdPumps[ i ], FALSE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_VALVES_CAL_RECORD_T* valve = &hdCalibrationRecord.hdCalibrationGroups.valvesCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_HD_VALVES; i++ ) { - isRecordValid = isRecordValid == FALSE ? FALSE : isHDValveRecordValid( &valve->hdvalves[ i ], FALSE ); + isHardwareRecordValid = isHDValveRecordValid( &valve->hdvalves[ i ], FALSE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_OCCLUSION_SENSORS_CAL_RECORD_T* occlusion = &hdCalibrationRecord.hdCalibrationGroups.occlusionSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_OCCLUSION_SENSORS; i++ ) { // Get calibration payload and assign it to a pointer - linearRecord = (LINEAR_CAL_PAYLOAD_T*)&occlusion->hdOcclusionSensors[ i ]; + record = (POLYNOMIAL_CAL_PAYLOAD_T*)&occlusion->hdOcclusionSensors[ i ]; // Check in the validity of the calibration data // If the variable is already FALSE, let it be FALSE. Even if one record is not // valid, the values should be set to benign values. This variable is used to decide // whether a write should be scheduled or not so it should not be overwritten with a TRUE // once a record set it to FALSE - isRecordValid = isRecordValid == FALSE ? FALSE : isPolynomialRecordValid( linearRecord, TRUE ); + isHardwareRecordValid = isPolynomialRecordValid( record, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_FLOW_SENSORS_CAL_RECORD_T* flow = &hdCalibrationRecord.hdCalibrationGroups.flowSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_HD_FLOW_SENSORS; i++ ) { - linearRecord = (LINEAR_CAL_PAYLOAD_T*)&flow->hdFlowSensors[ i ]; - isRecordValid = isRecordValid == FALSE ? FALSE : isPolynomialRecordValid( linearRecord, TRUE ); + record = (POLYNOMIAL_CAL_PAYLOAD_T*)&flow->hdFlowSensors[ i ]; + isHardwareRecordValid = isPolynomialRecordValid( record, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_PRESSURE_SENSORS_CAL_RECORD_T* pressure = &hdCalibrationRecord.hdCalibrationGroups.pressureSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_HD_PRESSURE_SESNSORS; i++ ) { - nonlinearRecord = (NON_LINEAR_CAL_PAYLOAD_T*)&pressure->hdPressureSensors[ i ]; - isRecordValid = isRecordValid == FALSE ? FALSE : isNonlinearRecordValid( nonlinearRecord, TRUE ); + record = (POLYNOMIAL_CAL_PAYLOAD_T*)&pressure->hdPressureSensors[ i ]; + isHardwareRecordValid = isPolynomialRecordValid( record, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } HD_TEMP_SENSORS_CAL_RECORD_T* temperature = &hdCalibrationRecord.hdCalibrationGroups.tempSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_HD_TEMP_SENSORS; i++ ) { - nonlinearRecord = (NON_LINEAR_CAL_PAYLOAD_T*)&temperature->hdTemperatureSensors[ i ]; - isRecordValid = isRecordValid == FALSE ? FALSE : isNonlinearRecordValid( nonlinearRecord, TRUE ); + record = (POLYNOMIAL_CAL_PAYLOAD_T*)&temperature->hdTemperatureSensors[ i ]; + isHardwareRecordValid = isPolynomialRecordValid( record, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE :isHardwareRecordValid; } HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T* heparinForce = &hdCalibrationRecord.hdCalibrationGroups.heparinForceSensorCalRecord; - nonlinearRecord = (NON_LINEAR_CAL_PAYLOAD_T*)&heparinForce->hdHeparinForceSensor; - isRecordValid = isRecordValid == FALSE ? FALSE : isNonlinearRecordValid( nonlinearRecord, TRUE ); + record = (POLYNOMIAL_CAL_PAYLOAD_T*)&heparinForce->hdHeparinForceSensor; + isHardwareRecordValid = isPolynomialRecordValid( record, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; HD_ACCELEROMETER_SENSOR_CAL_RECORD_T* accelerometer = &hdCalibrationRecord.hdCalibrationGroups.accelerometerCalRecord; - isRecordValid = isRecordValid == FALSE ? FALSE : isHDAccelerometerSensorValid( accelerometer, TRUE ); + isHardwareRecordValid = isHDAccelerometerSensorValid( accelerometer, TRUE ); + isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - return isRecordValid; + return isCalRecordValid; } /*********************************************************************//** Index: NVDataMgmtHDRecords.h =================================================================== diff -u -r96e4bcdf7e21468eda4f54cd504daf897f7e78b0 -r425252f82959bdd382d3a63a978f002e7bfe3011 --- NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision 96e4bcdf7e21468eda4f54cd504daf897f7e78b0) +++ NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision 425252f82959bdd382d3a63a978f002e7bfe3011) @@ -89,27 +89,18 @@ } CAL_DATA_HD_TEMEPERATURE_SENSORS_T; #pragma pack(push, 1) -/// Linear calibration structure +/// Polynomial calibration structure typedef struct { + F32 fourthOrderCoeff; ///< Fourth order coefficient. + F32 thirdOrderCoeff; ///< Third order coefficient. + F32 secondOrderCoeff; ///< Second order coefficient. F32 gain; ///< Gain. F32 offset; ///< Offset. U32 calibrationTime; ///< Calibration time. - U16 crc; ///< CRC for the linear calibration payload. -} LINEAR_CAL_PAYLOAD_T; + U16 crc; ///< CRC for the polynomial calibration payload. +} POLYNOMIAL_CAL_PAYLOAD_T; -/// Non-linear calibration structure -typedef struct -{ - F32 gain; ///< Gain. - F32 offset; ///< Offset. - F32 reservedParam1; ///< Reserved parameter 1 - F32 reservedParam2; ///< Reserved parameter 2 - F32 reservedParam3; ///< Reserved parameter 3 - U32 calibrationTime; ///< Calibration time. - U16 crc; ///< CRC for the non-linear calibration payload. -} NON_LINEAR_CAL_PAYLOAD_T; - /// HD pump calibration structure typedef struct { @@ -144,31 +135,31 @@ /// HD occlusion sensors calibration record typedef struct { - LINEAR_CAL_PAYLOAD_T hdOcclusionSensors[ NUM_OF_CAL_DATA_OCCLUSION_SENSORS ]; ///< HD occlusion sensors calibration data. + POLYNOMIAL_CAL_PAYLOAD_T hdOcclusionSensors[ NUM_OF_CAL_DATA_OCCLUSION_SENSORS ]; ///< HD occlusion sensors calibration data. } HD_OCCLUSION_SENSORS_CAL_RECORD_T; /// HD flow sensors calibration record typedef struct { - LINEAR_CAL_PAYLOAD_T hdFlowSensors[ NUM_OF_CAL_DATA_HD_FLOW_SENSORS ]; ///< HD flow sensors calibration data. + POLYNOMIAL_CAL_PAYLOAD_T hdFlowSensors[ NUM_OF_CAL_DATA_HD_FLOW_SENSORS ]; ///< HD flow sensors calibration data. } HD_FLOW_SENSORS_CAL_RECORD_T; /// HD pressure sensors calibration record typedef struct { - NON_LINEAR_CAL_PAYLOAD_T hdPressureSensors[ NUM_OF_CAL_DATA_HD_PRESSURE_SESNSORS ]; ///< HD pressure sensors calibration data. + POLYNOMIAL_CAL_PAYLOAD_T hdPressureSensors[ NUM_OF_CAL_DATA_HD_PRESSURE_SESNSORS ]; ///< HD pressure sensors calibration data. } HD_PRESSURE_SENSORS_CAL_RECORD_T; /// HD temperature sensors calibration record typedef struct { - NON_LINEAR_CAL_PAYLOAD_T hdTemperatureSensors[ NUM_OF_CAL_DATA_HD_TEMP_SENSORS ]; ///< HD temperature sensors calibration data. + POLYNOMIAL_CAL_PAYLOAD_T hdTemperatureSensors[ NUM_OF_CAL_DATA_HD_TEMP_SENSORS ]; ///< HD temperature sensors calibration data. } HD_TEMP_SENSORS_CAL_RECORD_T; /// HD heparin force sensor calibration record typedef struct { - NON_LINEAR_CAL_PAYLOAD_T hdHeparinForceSensor; ///< HD heparin force sensor calibration data. + POLYNOMIAL_CAL_PAYLOAD_T hdHeparinForceSensor; ///< HD heparin force sensor calibration data. } HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T; /// HD accelerometer sensor calibration record