Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r32309398e7ef59471bd624e34ab6b91cdaaf9d24 -r9ded16038a0d6dd844da697aaf03505ec3ed335a --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 32309398e7ef59471bd624e34ab6b91cdaaf9d24) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 9ded16038a0d6dd844da697aaf03505ec3ed335a) @@ -74,22 +74,24 @@ /// Macro to calculate the remaining treatment time in seconds. #define CALC_TREAT_TIME_REMAINING_IN_SECS() ( (S32)presTreatmentTimeSecs - (S32)( treatmentTimeMS / MS_PER_SECOND ) ) -#define DPI_TO_BLD_VOLUME_ML ( 3.07F + 12.28F ) ///< Dialysate inlet pump to blood detect sensor volume in milliliters. +#define DPI_TO_BLD_VOLUME_ML ( 3.07F + 12.28F ) ///< Dialysate inlet pump to blood detect sensor volume in milliliters. +/// Blood leak zeroing states typedef enum BloodLeakZeroingState { - BLD_ZEROING_FLUSH = 0, - BLD_ZEROING_ZERO, - BLD_ZEROING_VERIFY_SEQ, - BLD_ZEROING_VERIFY_INTENSITY, - BLD_ZEROING_COMPLETE, - NUM_OF_BLD_ZEROING + BLD_ZEROING_FLUSH = 0, ///< 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; - BLOOD_LEAK_ZEROING_STATE_T bloodLeakZeroingState; + F32 DPiToBLDFlushedVolML; ///< Dialysate inlet pump to blood leak flushed volume in milliliters. + BOOL hasBloodLeakZeroingBeenRequested; ///< Flag to indicate blood leak zeroing has been requested. + BLOOD_LEAK_ZEROING_STATE_T bloodLeakZeroingState; ///< Blood leak zeroing state. } BLOOD_LEAK_ZEROING_T ; // ********** private data ********** @@ -1522,11 +1524,19 @@ } } -void handleBloodLeakZeroing( void ) +/*********************************************************************//** + * @brief + * The execBloodLeakZeroing function handles the blood leak zeroing sequence + * @details Inputs: bloodLeakZeroing + * @details Outputs: bloodLeakZeroing + * @return none + *************************************************************************/ +void execBloodLeakZeroing( void ) { - BOOL status = FALSE; + BOOL status = FALSE; + SELF_TEST_STATUS_T zeroStatus = getBloodLeakSelfTestStatus(); - switch( bloodLeakZeroing.bloodLeakZeroingState ) + switch( bloodLeakZeroing.bloodLeakZeroingState ) // TODO we need handlers for this state machine { case BLD_ZEROING_FLUSH: status = hasDPiToBLDVolumeBeenFlushed(); @@ -1535,16 +1545,13 @@ case BLD_ZEROING_ZERO: status = zeroBloodLeak(); - bloodLeakZeroing.bloodLeakZeroingState = ( TRUE == status ? BLD_ZEROING_VERIFY_SEQ : BLD_ZEROING_ZERO ); + bloodLeakZeroing.bloodLeakZeroingState = ( TRUE == status ? BLD_ZEROING_VERIFY_ZEROING : BLD_ZEROING_ZERO ); break; - case BLD_ZEROING_VERIFY_SEQ: - { - SELF_TEST_STATUS_T status = getBloodLeakSelfTestStatus(); - + case BLD_ZEROING_VERIFY_ZEROING: if ( SELF_TEST_STATUS_PASSED == status ) { - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_VERIFY_INTENSITY; + bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_COMPLETE; } else if ( SELF_TEST_STATUS_FAILED == status ) { @@ -1557,29 +1564,39 @@ bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_ZERO; } } - } break; - case BLD_ZEROING_VERIFY_INTENSITY: - if ( BLOOD_LEAK_INTENSITY_IN_RANGE == getBloodLeakIntensityStatusAfterZeroing() ) - { - bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_COMPLETE; - } - else - { - // TODO can we try intensity for 3 times too? - // TODO alarm for intensity failure - } + case BLD_ZEROING_COMPLETE: + // Do nothing done with zeroing break; default: // TODO software fault break; } + + if ( TRUE == bloodLeakZeroing.hasBloodLeakZeroingBeenRequested ) + { + bloodLeakZeroing.bloodLeakZeroingState = BLD_ZEROING_FLUSH; + bloodLeakZeroing.hasBloodLeakZeroingBeenRequested = FALSE; + } } /*********************************************************************//** * @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.hasBloodLeakZeroingBeenRequested = TRUE; +} + +/*********************************************************************//** + * @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