Index: firmware/App/Modes/StateTxBloodPrime.c =================================================================== diff -u -rce58760d9ec26a8ddc4d2462671d7f3db961f621 -r6f876554db45a19590eaf2122ef47e33f7a7d69b --- firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision ce58760d9ec26a8ddc4d2462671d7f3db961f621) +++ firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision 6f876554db45a19590eaf2122ef47e33f7a7d69b) @@ -19,6 +19,7 @@ #include "BloodFlow.h" #include "Buttons.h" #include "DDInterface.h" +#include "FluidBolus.h" #include "Messaging.h" #include "ModeTreatment.h" #include "TxParams.h" @@ -96,6 +97,7 @@ static BLOOD_PRIME_STATE_T handleBloodPrimePausedState( void ); static void handleBloodPrimePauseTimer( void ); static void publishBloodPrimeData( void ); +static BLOOD_PRIME_STATE_T handleBloodPrimeFluidBolusState( void ); /*********************************************************************//** * @brief @@ -234,6 +236,10 @@ bloodPrimeState = handleBloodPrimePausedState(); break; + case BLOOD_PRIME_FLUID_BOLUS_STATE: + bloodPrimeState = handleBloodPrimeFluidBolusState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_BLOOD_PRIME_INVALID_STATE, bloodPrimeState ); break; @@ -543,6 +549,56 @@ /*********************************************************************//** * @brief + * The handleBloodPrimeFluidBolusState function handles the fluid bolus + * state of the blood prime sub-mode. + * @details \b Inputs: bloodPrimeResumeState, bloodPrimeState + * @details \b Outputs: bloodPrimeState + * @return next blood prime state + *************************************************************************/ +static BLOOD_PRIME_STATE_T handleBloodPrimeFluidBolusState( void ) +{ + BLOOD_PRIME_STATE_T state = BLOOD_PRIME_FLUID_BOLUS_STATE; + + // start fluid bolus + signalStartFluidBolus(); + + // Call fluid bolus service + execFluidBolus(); + + if ( FALSE == isFluidBolusActive() ) + { + setBloodPumpTargetFlowRate( lastBloodPrimeFlowRate_mL_min, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + // Open art/ven pinch valves + setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); + setValvePosition( H19_VALV, VALVE_POSITION_B_OPEN ); + // Return to state prior to bolus + state = bloodPrimeResumeState; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The bloodPrimeSetPendingFluidBolusRequest function handles a fluid bolus + * request while in blood prime sub-mode. + * @details \b Inputs: bloodPrimeState + * @details \b Outputs: bloodPrimeResumeState, lastBloodPrimeFlowRate_mL_min, + * bloodPrimeState + * @return none + *************************************************************************/ +void signalBloodPrimeFluidBolusRequest( void ) +{ + if ( ( BLOOD_PRIME_RAMP_STATE == bloodPrimeState ) || ( BLOOD_PRIME_RUN_STATE == bloodPrimeState ) ) + { + bloodPrimeResumeState = bloodPrimeState; + lastBloodPrimeFlowRate_mL_min = (U32)getTargetBloodFlowRate(); + bloodPrimeState = BLOOD_PRIME_FLUID_BOLUS_STATE; + } +} + +/*********************************************************************//** + * @brief * The publishBloodPrimeData function publishes blood prime data * at interval. * @details \b Message \b Sent: MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA