Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r14d1cffaeeebd5729f5c05c21b9eb1ac414b4750 -rb71077660606609cc3b06911ad4aaa2ffaebd9f2 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 14d1cffaeeebd5729f5c05c21b9eb1ac414b4750) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b71077660606609cc3b06911ad4aaa2ffaebd9f2) @@ -75,28 +75,6 @@ /// Macro to calculate the remaining treatment time in seconds. #define CALC_TREAT_TIME_REMAINING_IN_SECS() ( (S32)presTreatmentTimeSecs - (S32)( treatmentTimeMS / MS_PER_SECOND ) ) -// 3.07 + 12.28 has been received from the mechanical team and 5 mL of margine has been added for safety -#define DPI_TO_BLD_VOLUME_ML ( 3.07F + 12.28F + 5.0F ) ///< Dialysate inlet pump to blood detect sensor volume in milliliters. - -/// Blood leak zeroing states -typedef enum BloodLeakZeroingState -{ - BLD_ZEROING_SET_TO_BYPASS = 0, ///< Blood leak zeroing set to bypass. - BLD_ZEROING_FLUSH, ///< Blood leak zeroing flush. - BLD_ZEROING_ZERO, ///< Blood leak zeroing zero. - BLD_ZEROING_VERIFY_ZEROING, ///< Blood leak zeroing verify zeroing. - BLD_ZEROING_COMPLETE, ///< Blood leak zeroing complete. - NUM_OF_BLD_ZEROING ///< Number of blood leak zeroing state. -} BLOOD_LEAK_ZEROING_STATE_T; - -/// Blood leak treatment zeroing data structure -typedef struct -{ - F32 DPiToBLDFlushedVolML; ///< Dialysate inlet pump to blood leak flushed volume in milliliters. - BOOL hasBloodLeakZeroingBeenCompleted; ///< Flag to indicate blood leak zeroing has been completed successfully. - BLOOD_LEAK_ZEROING_STATE_T bloodLeakZeroingState; ///< Blood leak zeroing state. -} BLOOD_LEAK_ZEROING_T ; - // ********** private data ********** static TREATMENT_STATE_T currentTreatmentState; ///< Current state (sub-mode) of treatment mode. @@ -155,8 +133,6 @@ static U32 treatmentStartTimeStamp; ///< Treatment start timestampt for logging purpose. static U32 treatmentEndTimeStamp; ///< Treatment end timestampt for logging purpose. -static BLOOD_LEAK_ZEROING_T bloodLeakZeroing; ///< Blood leak zeroing status. - // ********** private function prototypes ********** static void broadcastTreatmentSettingsRanges( void ); @@ -171,7 +147,6 @@ static TREATMENT_STATE_T handleTreatmentEndState( void ); static void resetSignalFlags( void ); static void resetAlarmSignalFlags( void ); -static BOOL hasDPiToBLDVolumeBeenFlushed( void ); /*********************************************************************//** * @brief @@ -224,8 +199,6 @@ treatmentStartTimeStamp = getRTCTimestamp(); treatmentEndTimeStamp = 0; - memset( &bloodLeakZeroing, 0x0, sizeof( BLOOD_LEAK_ZEROING_T ) ); - // reset dialysate temperature alarm persistences prior to starting a treatment. resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP ); resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP ); @@ -816,7 +789,7 @@ DIALYSIS_STATE_T dialysisState = getDialysisState(); // Update treatment time (unless delivering a saline bolus or is in blood leak zeroing state) - if ( ( dialysisState != DIALYSIS_SALINE_BOLUS_STATE ) || ( dialysisState != DIALYSIS_BLOOD_LEAK_ZEROING_STATE ) ) + if ( ( dialysisState != DIALYSIS_SALINE_BOLUS_STATE ) && ( dialysisState != DIALYSIS_BLOOD_LEAK_ZEROING_STATE ) ) { treatmentTimeMS += msSinceLast; } @@ -1531,105 +1504,6 @@ /*********************************************************************//** * @brief - * The execBloodLeakZeroing function handles the blood leak zeroing sequence - * @details Inputs: bloodLeakZeroing - * @details Outputs: bloodLeakZeroing - * @return none - *************************************************************************/ -void execBloodLeakZeroing( void ) -{ - BOOL status = FALSE; - SELF_TEST_STATUS_T zeroStatus = getBloodLeakSelfTestStatus(); - BLOOD_LEAK_ZEROING_STATE_T prevState = bloodLeakZeroing.bloodLeakZeroingState; - - // TODO investigate whether we need to stop the before going to bypass - - switch( bloodLeakZeroing.bloodLeakZeroingState ) // TODO we need handlers for this state machine? - { - case BLD_ZEROING_SET_TO_BYPASS: - // Set Dialysate valves to bypass filter for recirculation - signalDialOutPumpHardStop(); - stopSyringePump(); - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); - setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_FLUSH; - break; - - case BLD_ZEROING_FLUSH: - status = hasDPiToBLDVolumeBeenFlushed(); - bloodLeakZeroing.bloodLeakZeroingState = ( TRUE == status ? BLD_ZEROING_ZERO : BLD_ZEROING_FLUSH ); - break; - - case BLD_ZEROING_ZERO: - status = zeroBloodLeak(); - bloodLeakZeroing.bloodLeakZeroingState = ( TRUE == status ? BLD_ZEROING_VERIFY_ZEROING : BLD_ZEROING_ZERO ); - break; - - case BLD_ZEROING_VERIFY_ZEROING: - if ( SELF_TEST_STATUS_PASSED == status ) - { - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_COMPLETE; - } - else if ( SELF_TEST_STATUS_FAILED == status ) - { - if ( TRUE == hasBloodLeakZeroSequenceFailed() ) - { - activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SENSOR_ZERO_SEQUENCE_FAILED ); - } - else - { - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_ZERO; - } - } - break; - - case BLD_ZEROING_COMPLETE: - bloodLeakZeroing.hasBloodLeakZeroingBeenCompleted = TRUE; - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_INVALID_BLOOD_LEAK_ZEROING_STATE, - bloodLeakZeroing.bloodLeakZeroingState ) - break; - } - - if ( prevState != bloodLeakZeroing.bloodLeakZeroingState ) - { - setCurrent4thLevelState( (U32)bloodLeakZeroing.bloodLeakZeroingState ); - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, prevState, bloodLeakZeroing.bloodLeakZeroingState ); - } -} - -/*********************************************************************//** - * @brief - * The requestBloodLeakZeroing function sets the flag the requests the - * blood leak zeroing. - * @details Inputs: none - * @details Outputs: bloodLeakZeroing - * @return none - *************************************************************************/ -void requestBloodLeakZeroing( void ) -{ - bloodLeakZeroing.DPiToBLDFlushedVolML = 0.0F; - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_SET_TO_BYPASS; - bloodLeakZeroing.hasBloodLeakZeroingBeenCompleted = FALSE; -} - -/*********************************************************************//** - * @brief - * The isBloodLeakZeroingComplete function returns the status of the blood - * leak zeroing complete - * @details Inputs: none - * @details Outputs: bloodLeakZeroing - * @return TRUE if blood leak zeroing was complete otherwise, FALSE - *************************************************************************/ -BOOL isBloodLeakZeroingComplete( void ) -{ - return bloodLeakZeroing.hasBloodLeakZeroingBeenCompleted; -} - -/*********************************************************************//** - * @brief * The broadcastTreatmentSettingsRanges function computes and broadcasts * updated treatment parameter ranges that the user may change during treatment. * It is assumed that prescription settings have already been set prior to calling @@ -1785,26 +1659,6 @@ endTreatmentAlarmResponseRequest = FALSE; } -/*********************************************************************//** - * @brief - * The hasDPiToBLDVolumeBeenFlushed function checks whether the line in - * between dialysate inlet pump to the blood leak detector has been flushed - * with fresh fluid or not. - * @details Inputs: bloodLeakZeroing - * @details Outputs: bloodLeakZeroing - * @return TRUE if the line has been flushed otherwise, FALSE - *************************************************************************/ -static BOOL hasDPiToBLDVolumeBeenFlushed( void ) -{ - BOOL status = FALSE; - F32 measuredDPiMLPM = getMeasuredDialInFlowRate(); - - bloodLeakZeroing.DPiToBLDFlushedVolML += ( measuredDPiMLPM * TASK_GENERAL_INTERVAL ) / ( SEC_PER_MIN * MS_PER_SECOND ); - status = ( ( bloodLeakZeroing.DPiToBLDFlushedVolML - DPI_TO_BLD_VOLUME_ML ) < NEARLY_ZERO ? TRUE : FALSE ); - - return status; -} - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/