Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -73,6 +73,8 @@ static BUTTON_STATE_T lastOffButtonState = BUTTON_STATE_RELEASED; // TODO - test code - remove later +static BOOL pendingUserEndTreatmentRequest; ///< Flag indicates user has requested treatment end. + static U32 pendingParamChangesTimer; ///< User required to confirm UF volume change within 1 minute. static F32 pendingUFVolumeChange; ///< An ultrafiltration volume change (mL) is pending user confirmation. static F32 pendingUFRateChange; ///< An ultrafiltration rate change (mL/min) is pending user confirmation. @@ -109,6 +111,8 @@ presMaxUFVolumeML = 0.0; presUFRate = 0.0; + pendingUserEndTreatmentRequest = FALSE; + pendingParamChangesTimer = 0; pendingUFVolumeChange = 0.0; pendingUFRateChange = 0.0; @@ -133,8 +137,13 @@ initTreatmentStop(); // temporary test code. TODO - remove later #ifndef UF_TEST_ENABLED +#ifndef RUN_PUMPS_OPEN_LOOP + setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); #endif #ifdef RM46_EVAL_BOARD_TARGET @@ -158,6 +167,29 @@ /*********************************************************************//** * @brief + * The userRequestEndTreatment function conveys a user request to end the + * treatment. + * @details + * Inputs : currentTreatmentState + * Outputs : response to user request sent + * @return TRUE if request accepted, FALSE if not + *************************************************************************/ +BOOL userRequestEndTreatment( void ) +{ + BOOL result = FALSE; + + if ( TREATMENT_STOP_STATE == currentTreatmentState ) + { + pendingUserEndTreatmentRequest = TRUE; + result = TRUE; + } + sendTreatmentEndResponseMsg( result ); + + return result; +} + +/*********************************************************************//** + * @brief * The execTreatmentMode function executes the Treatment Mode state machine. * @details * Inputs : currentTreatmentState @@ -341,8 +373,16 @@ { TREATMENT_STATE_T result = TREATMENT_STOP_STATE; - // execute state machine for treatment stop sub-mode - execTreatmentStop(); + // if user requests treatment end, end treatment + if ( TRUE == pendingUserEndTreatmentRequest ) + { + result = TREATMENT_END_STATE; + } + else + { + // execute state machine for treatment stop sub-mode + execTreatmentStop(); + } // TODO - test code - remove later if ( getOffButtonState() == BUTTON_STATE_PRESSED )