Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rbb114842e73659f097bb8b8ec0d670bfa4f8cb73 -r125a27d5a3a116e7b7473ff180daf247270d8e57 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision bb114842e73659f097bb8b8ec0d670bfa4f8cb73) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 125a27d5a3a116e7b7473ff180daf247270d8e57) @@ -38,13 +38,17 @@ /// Interval (ms/task time) at which the pre-treatment state data is published on the CAN bus. #define PRE_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) +/// Wait time for ui to transition on completion of a sub-mode (ms/task time). +#define SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) + #define DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN 100 ///< Patient connection sub-mode dialysate inlet pump flow rate in mL/min. #define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1300 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. #define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 700 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. #define PRIMARY_HEATER_TARGET_TEMP_OFFSET 2.0 ///< Primary heater target temperature offset from trimmer heater temperature. + /// States of the pre-treatment reservoir management state machine. typedef enum PreTreatmentReservoirMgmt_States { @@ -71,6 +75,7 @@ static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. static U32 preTreatmentPublishTimerCounter; ///< Pre-treatment data broadcast timer counter used to schedule when to transmit data. +static U32 submodeCompleteTransitionTimeCounter; ///< Sub-mode completed transition wait time counter. static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current pre-treatment reservoir management state. static BOOL fillReservoirOneStartRequested; ///< Flag indicates fill reservoir one has been requested. @@ -115,6 +120,7 @@ setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; fillReservoirOneStartRequested = FALSE; + submodeCompleteTransitionTimeCounter = 0; reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; @@ -532,9 +538,13 @@ if ( CONSUMABLE_SELF_TESTS_COMPLETE_STATE == getConsumableSelfTestState() ) { - state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - fillReservoirOneStartRequested = TRUE; - transitionToNoCartSelfTests(); + if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) + { + submodeCompleteTransitionTimeCounter = 0; + state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + fillReservoirOneStartRequested = TRUE; + transitionToNoCartSelfTests(); + } } return state; @@ -564,10 +574,14 @@ execNoCartSelfTests(); - if ( TRUE == isNoCartSelfTestsPassed() ) + if ( NO_CART_SELF_TESTS_COMPLETE_STATE == getNoCartSelfTestsState() ) { - state = HD_PRE_TREATMENT_CART_INSTALL_STATE; - transitionToCartridgeInstallation(); + if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) + { + submodeCompleteTransitionTimeCounter = 0; + state = HD_PRE_TREATMENT_CART_INSTALL_STATE; + transitionToCartridgeInstallation(); + } } return state; @@ -620,10 +634,14 @@ execDrySelfTests(); - if ( TRUE == isDrySelfTestsPassed() ) + if ( DRY_SELF_TESTS_COMPLETE_STATE == getDrySelfTestsState() ) { - state = HD_PRE_TREATMENT_PRIME_STATE; - transitionToPrime(); + if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) + { + submodeCompleteTransitionTimeCounter = 0; + state = HD_PRE_TREATMENT_PRIME_STATE; + transitionToPrime(); + } } return state; @@ -653,11 +671,15 @@ execPrime(); - if ( TRUE == isPrimeCompleted() ) + if ( HD_PRIME_COMPLETE == getPrimeState() ) { - state = HD_PRE_TREATMENT_RECIRCULATE_STATE; - activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); - transitionToPreTreatmentRecirc(); + if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) + { + submodeCompleteTransitionTimeCounter = 0; + state = HD_PRE_TREATMENT_RECIRCULATE_STATE; + activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); + transitionToPreTreatmentRecirc(); + } } return state;