Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r8d14f6af0d1c2edd293a2157ed56b5e7e475d2df -r19fc8f015489be63932eed969d28329d123332e0 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 8d14f6af0d1c2edd293a2157ed56b5e7e475d2df) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 19fc8f015489be63932eed969d28329d123332e0) @@ -81,10 +81,10 @@ static U32 primePauseStartTime; ///< Priming pause start time (in ms). static U32 primeStatusBroadcastTimerCounter; ///< Prime status data broadcast timer counter used to schedule when to transmit data. -static BOOL primeStartReqReceived; ///< Flag to indicate if a request to start priming has been received. -static BOOL primePauseReqReceived; ///< Flag to indicate if a request to pause priming has been received. -static BOOL primeResumeReqReceived; ///< Flag to indicate if a request to resume priming has been received. -static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag to indicate if a reservoir has been filled. +static BOOL primeStartRequested; ///< Flag indicates user requesting to start prime. +static BOOL primeStopRequested; ///< Flag indicates alarm requesting to stop prime. +static BOOL primeResumeRequested; ///< Flag indicates user requesting prime resume. +static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been filled. static U32 noAirDetectedStartTime; ///< starting time when detecting no air. static U32 purgeAirTimeOutStartTime; ///< Starting time for purge air state time out. @@ -95,11 +95,13 @@ // ********** private function prototypes ********** +static void resetPrimeFlags(); static void handlePrimePauseRequest( void ); static void broadcastPrimingStatus( void ); static void execPrimeReservoirMgmt( void ); static void purgeAirValvesBloodPumpControl( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWaitForUserStartState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimePurgeAirState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeCircBloodCircuitState( void ); @@ -140,17 +142,15 @@ primeStartTime = getMSTimerCount(); primePauseStartTime = 0; primeStatusBroadcastTimerCounter = 0; - // TODO: set to false after integration with UI - primeStartReqReceived = TRUE; - primeResumeReqReceived = FALSE; - primePauseReqReceived = FALSE; reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); + + resetPrimeFlags(); } /*********************************************************************//** @@ -170,10 +170,14 @@ #ifdef SKIP_PRIMING currentPrimeState = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; #else - currentPrimeState = HD_PRIME_SALINE_SETUP_STATE; + currentPrimeState = HD_PRIME_WAIT_FOR_USER_START_STATE; #endif break; + case HD_PRIME_WAIT_FOR_USER_START_STATE: + currentPrimeState = handlePrimeWaitForUserStartState(); + break; + case HD_PRIME_SALINE_SETUP_STATE: currentPrimeState = handlePrimeSalineSetupState(); break; @@ -220,6 +224,9 @@ break; } + // Prime flags should be handled by now + resetPrimeFlags(); + // Handle prime pause request handlePrimePauseRequest(); @@ -242,36 +249,45 @@ return primeCompleted; } +/*********************************************************************//** + * @brief + * The signalResumePrime function signals the prime sub-mode to resume + * previous operation. + * @details Inputs: none + * @details Outputs: primeResumeRequested + * @return none + *************************************************************************/ +void signalResumePrime( void ) +{ + primeResumeRequested = TRUE; +} /*********************************************************************//** * @brief - * The signalAlarmActionToPrimeMode function executes the given alarm action - * as appropriate while in Prime Mode. + * The signalStopPrime function signals the prime sub-mode to stop when an + * alarm with stop property has been triggered. * @details Inputs: none - * @details Outputs: given alarm action executed - * @param action ID of alarm action to execute + * @details Outputs: primeStopRequested * @return none *************************************************************************/ -void signalAlarmActionToPrimeMode( ALARM_ACTION_T action ) +void signalStopPrime( void ) { - switch ( action ) - { - case ALARM_ACTION_STOP: - primePauseReqReceived = TRUE; - break; + primeStopRequested = TRUE; +} - case ALARM_ACTION_RESUME: - primeResumeReqReceived = TRUE; - break; - - case ALARM_ACTION_ACK: - // Nothing to be done here - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRIME_INVALID_ALARM_ACTION, (U32)action ) - break; - } +/*********************************************************************//** + * @brief + * The resetPrimeFlags function resets all prime signal flags. + * @details Inputs: none + * @details Outputs: signal flags set to FALSE + * @return none + *************************************************************************/ +static void resetPrimeFlags( void ) +{ + // TODO: set to false after integration with UI + primeStartRequested = TRUE; + primeResumeRequested = FALSE; + primeStopRequested = FALSE; } /*********************************************************************//** @@ -283,13 +299,13 @@ *************************************************************************/ static void handlePrimePauseRequest( void ) { - if ( ( TRUE == primePauseReqReceived ) && ( HD_PRIME_PAUSE != currentPrimeState ) ) + if ( ( TRUE == primeStopRequested ) && ( HD_PRIME_PAUSE != currentPrimeState ) ) { signalDialOutPumpHardStop(); signalDialInPumpHardStop(); signalBloodPumpHardStop(); - primePauseReqReceived = FALSE; + primeStopRequested = FALSE; primePauseStartTime = getMSTimerCount(); previousPrimeState = currentPrimeState; currentPrimeState = HD_PRIME_PAUSE; @@ -471,23 +487,37 @@ * @details Outputs: control valves to purge air * @return current state *************************************************************************/ -static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWaitForUserStartState( void ) { - HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_SETUP_STATE; + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_WAIT_FOR_USER_START_STATE; - if ( TRUE == primeStartReqReceived ) + if ( TRUE == primeStartRequested ) { - purgeAirValvesBloodPumpControl(); - purgeAirTimeOutStartTime = getMSTimerCount(); - primeStartReqReceived = FALSE; - state = HD_PRIME_SALINE_PURGE_AIR_STATE; + primeStartRequested = FALSE; + state = HD_PRIME_SALINE_SETUP_STATE; } return state; } /*********************************************************************//** * @brief + * The handlePrimeSalineSetupState function checks user's request to start + * priming. + * @details Inputs: primeStartReqReceived + * @details Outputs: control valves to purge air + * @return current state + *************************************************************************/ +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ) +{ + purgeAirValvesBloodPumpControl(); + purgeAirTimeOutStartTime = getMSTimerCount(); + + return HD_PRIME_SALINE_PURGE_AIR_STATE; +} + +/*********************************************************************//** + * @brief * The handlePrimePurgeAirState function checks for air trap level and moves * to blood circuit circulation state if fluid is detected at upper sensor. * @details Inputs: air trap levels @@ -725,17 +755,16 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_PAUSE; - if ( TRUE == primeResumeReqReceived ) + if ( TRUE == primeResumeRequested ) { - primeResumeReqReceived = FALSE; + primeResumeRequested = FALSE; primeStartTime += calcTimeSince( primePauseStartTime ); switch ( previousPrimeState ) { case HD_PRIME_SALINE_SETUP_STATE: case HD_PRIME_SALINE_PURGE_AIR_STATE: case HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE: - primeStartReqReceived = TRUE; state = HD_PRIME_SALINE_SETUP_STATE; break;