Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -re23087e0c17f6ea81d60641fdb52121a8dd5a099 -r27f3db92495948d4c1192421c1b0c20338c4a034 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision e23087e0c17f6ea81d60641fdb52121a8dd5a099) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 27f3db92495948d4c1192421c1b0c20338c4a034) @@ -108,7 +108,9 @@ /// Blood flow sensor signal strength low alarm persistence. #define FLOW_SIG_STRGTH_ALARM_PERSIST ( 5 * MS_PER_SECOND ) -#define MIN_FLOW_SIG_STRENGTH 0.9 ///< Minimum flow sensor signal strength (90%). +#define MIN_FLOW_SIG_STRENGTH 0.9 ///< Minimum flow sensor signal strength (90%). + +#define BFM_SENSOR_PARAM_CORRUPT_STATUS 0x7 ///< Blood flow meter NVM parameter status. /// Enumeration of blood pump controller states. typedef enum BloodPump_States @@ -188,9 +190,6 @@ static U32 bpCurrErrorDurationCtr = 0; ///< Used for tracking persistence of bp current errors -static BLOOD_FLOW_SELF_TEST_STATE_T bloodPumpSelfTestState = BLOOD_FLOW_SELF_TEST_STATE_START; ///< Current blood pump self-test state -static U32 bloodPumpSelfTestTimerCount = 0; ///< Timer counter for blood pump self-test - // ********** private function prototypes ********** static BLOOD_PUMP_STATE_T handleBloodPumpOffState( void ); @@ -430,8 +429,13 @@ { HD_OP_MODE_T opMode = getCurrentOperationMode(); U16 bpRPM = getIntADCReading( INT_ADC_BLOOD_PUMP_SPEED ); - U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); - F32 bpFlow = ( ( getFPGABloodFlow() ) * bloodFlowCalGain ) + bloodFlowCalOffset; + U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); + +#ifndef V1_5_SYSTEM + F32 bpFlow = ( getFPGABloodFlow() * bloodFlowCalGain ) + bloodFlowCalOffset; +#else + F32 bpFlow = ( ( getFPGABloodFlow() * -1.0 ) * bloodFlowCalGain ) + bloodFlowCalOffset; // Blood flow sensor installed backwards on HD +#endif adcBloodPumpMCSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_TO_RPM_FACTOR; adcBloodPumpMCCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_TO_MA_FACTOR; @@ -1267,28 +1271,12 @@ SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; CALIBRATION_DATA_T cal; - switch ( bloodPumpSelfTestState ) + // Retrieve blood flow sensor calibration data and check for sensor connected status + if ( ( TRUE == getCalibrationData( &cal ) ) && ( BFM_SENSOR_PARAM_CORRUPT_STATUS != getFPGABloodFlowMeterStatus() ) ) { - case BLOOD_FLOW_SELF_TEST_STATE_START: - // Retrieve blood flow sensor calibration data - if ( TRUE == getCalibrationData( &cal ) ) - { - bloodFlowCalGain = cal.bloodFlowGain; - bloodFlowCalOffset = cal.bloodFlowOffset_mL_min; - bloodPumpSelfTestState = BLOOD_FLOW_TEST_STATE_COMPLETE; // TODO - implement rest of self-test(s) - result = SELF_TEST_STATUS_PASSED; - } - break; - - case BLOOD_FLOW_TEST_STATE_IN_PROGRESS: - break; - - case BLOOD_FLOW_TEST_STATE_COMPLETE: - break; - - default: - // TODO - s/w fault - break; + bloodFlowCalGain = cal.bloodFlowGain; + bloodFlowCalOffset = cal.bloodFlowOffset_mL_min; + result = SELF_TEST_STATUS_PASSED; } return result;