Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r2b3e0e31be725bca3d859240cbf8efd19fcb009f -r19fc8f015489be63932eed969d28329d123332e0 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 2b3e0e31be725bca3d859240cbf8efd19fcb009f) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 19fc8f015489be63932eed969d28329d123332e0) @@ -34,24 +34,21 @@ // ********** private data ********** static BOOL treatStartReqReceived = FALSE; ///< Flag indicates user requests treatment begin. -static BOOL alarmActionStopReceived = FALSE; ///< Flag indicates alarm action stop received. +static BOOL alarmActionStopReceived = FALSE; ///< Flag indicates an alarm w/ stop property was triggered. static BOOL alarmActionResumeReceived = FALSE; ///< Flag indicates alarm action resume received. static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. -static HD_PRE_TREATMENT_MODE_STATE_T resumePreTreatmentState; ///< Pre-treatment mode state to be resumed when alarm action resume signal receives. // ********** private function prototypes ********** -static void handleAlarmActionStop( void ); -static void handleAlarmActionResume( void ); +static void resetSignalFlags( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); -static HD_PRE_TREATMENT_MODE_STATE_T handlePretreatmentPauseState( void ); /*********************************************************************//** * @brief @@ -62,11 +59,9 @@ *************************************************************************/ void initPreTreatmentMode( void ) { - treatStartReqReceived = FALSE; - alarmActionStopReceived = FALSE; - alarmActionResumeReceived = FALSE; currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; - resumePreTreatmentState = HD_PRE_TREATMENT_START_STATE; + + resetSignalFlags(); } /*********************************************************************//** @@ -106,6 +101,7 @@ break; case HD_PRE_TREATMENT_WATER_SAMPLE_STATE: + transitionToNoCartSelfTests(); currentPreTreatmentState = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; break; @@ -133,16 +129,15 @@ currentPreTreatmentState = handlePatientConnectionState(); break; - case HD_PRE_TREATMENT_PAUSE_STATE: - currentPreTreatmentState = handlePretreatmentPauseState(); - break; - default: currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); break; } + // Alarm response request flags should be handled at this point, reset in case not handled in current state + resetSignalFlags(); + return (U32)currentPreTreatmentState; } @@ -183,15 +178,15 @@ switch( action ) { case ALARM_ACTION_STOP: - handleAlarmActionStop(); + alarmActionStopReceived = TRUE; break; case ALARM_ACTION_RESUME: - handleAlarmActionResume(); + alarmActionResumeReceived = TRUE; break; case ALARM_ACTION_END_TREATMENT: - requestNewOperationMode( MODE_POST ); + requestNewOperationMode( MODE_STAN ); break; case ALARM_ACTION_ACK: @@ -206,78 +201,20 @@ /*********************************************************************//** * @brief - * The handleAlarmActionStop function forwards the alarm action to corresponding - * sub-mode and sets appropriate flag to allow corresponding sub-mode handles. - * @details Inputs: currentPreTreatmentState - * @details Outputs: signals corresponding sub-mode of alarm action + * The resetSignalFlags function resets all signal flags. + * @details Inputs: none + * @details Outputs: signal flags set to FALSE * @return none *************************************************************************/ -static void handleAlarmActionStop( void ) +static void resetSignalFlags( void ) { - switch ( currentPreTreatmentState ) - { - case HD_PRE_TREATMENT_PRIME_STATE: - signalAlarmActionToPrimeMode( ALARM_ACTION_STOP ); - break; - - case HD_PRE_TREATMENT_RECIRCULATE_STATE: - // The corresponding sub-mode will handle the signal - alarmActionStopReceived = TRUE; - break; - - case HD_PRE_TREATMENT_START_STATE: - case HD_PRE_TREATMENT_WATER_SAMPLE_STATE: - case HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: - case HD_PRE_TREATMENT_SELF_TEST_DRY_STATE: - case HD_PRE_TREATMENT_CART_INSTALL_STATE: - case HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: - // do nothing - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); - break; - } + treatStartReqReceived = FALSE; + alarmActionStopReceived = FALSE; + alarmActionResumeReceived = FALSE; } /*********************************************************************//** * @brief - * The handleAlarmActionResume function forwards the alarm action to corresponding - * sub-mode and sets appropriate flag to allow corresponding sub-mode handles. - * @details Inputs: currentPreTreatmentState - * @details Outputs: signals corresponding sub-mode of alarm action - * @return none - *************************************************************************/ -static void handleAlarmActionResume( void ) -{ - switch ( currentPreTreatmentState ) - { - case HD_PRE_TREATMENT_PRIME_STATE: - signalAlarmActionToPrimeMode( ALARM_ACTION_RESUME ); - break; - - case HD_PRE_TREATMENT_RECIRCULATE_STATE: - case HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: - case HD_PRE_TREATMENT_SELF_TEST_DRY_STATE: - case HD_PRE_TREATMENT_START_STATE: - case HD_PRE_TREATMENT_WATER_SAMPLE_STATE: - case HD_PRE_TREATMENT_CART_INSTALL_STATE: - case HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: - // do nothing - break; - - case HD_PRE_TREATMENT_PAUSE_STATE: - alarmActionResumeReceived = TRUE; - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); - break; - } -} - -/*********************************************************************//** - * @brief * The handleSelfTestNoCartState function handles self-test with no cartridge. * @details Inputs: none * @details Outputs: home blood pump and dialysate pumps @@ -292,6 +229,16 @@ activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); } + if ( TRUE == alarmActionResumeReceived ) + { + signalResumeSelfTests(); + } + + if ( TRUE == alarmActionStopReceived ) + { + signalStopSelfTests(); + } + execNoCartSelfTests(); if ( TRUE == isNoCartSelfTestsPassed() ) @@ -334,16 +281,20 @@ if ( STATE_OPEN == getFPGADoorState() ) { activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - state = HD_PRE_TREATMENT_CART_INSTALL_STATE; } - execDrySelfTests(); + if ( TRUE == alarmActionResumeReceived ) + { + signalResumeSelfTests(); + } - if ( ( TRUE == isAlarmActive( ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY ) ) || ( TRUE == isAlarmActive( ALARM_ID_INSTALL_NEW_CARTRIDGE ) ) ) + if ( TRUE == alarmActionStopReceived ) { - state = HD_PRE_TREATMENT_CART_INSTALL_STATE; + signalStopSelfTests(); } + execDrySelfTests(); + if ( TRUE == isDrySelfTestsPassed() ) { transitionToPrime(); @@ -369,6 +320,16 @@ activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); } + if ( TRUE == alarmActionResumeReceived ) + { + signalResumePrime(); + } + + if ( TRUE == alarmActionStopReceived ) + { + signalStopPrime(); + } + execPrime(); if ( TRUE == isPrimeCompleted() ) @@ -393,6 +354,23 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_RECIRCULATE_STATE; + if ( STATE_OPEN == getFPGADoorState() ) + { + activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); + } + + if ( TRUE == alarmActionResumeReceived ) + { + signalResumePreTreatmentRecirc(); + } + + if ( TRUE == alarmActionStopReceived ) + { + signalStopPreTreatmentRecirc(); + } + + execPreTreatmentRecirc(); + if ( TRUE == isPatientConnectionRequested() ) { state = HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; @@ -422,24 +400,4 @@ return HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; } -/*********************************************************************//** - * @brief - * The handlePretreatmentPauseState function handles pre-treatment pause state. - * @details Inputs: previousPrimeState - * @details Outputs: primeStartTime, primeResumeReqReceived - * @return current state - *************************************************************************/ -static HD_PRE_TREATMENT_MODE_STATE_T handlePretreatmentPauseState( void ) -{ - HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_PAUSE_STATE; - - if ( TRUE == alarmActionResumeReceived ) - { - alarmActionResumeReceived = FALSE; - state = resumePreTreatmentState; - } - - return state; -} - /**@}*/