Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r8b7c7ff2bdb82aca355e3eed90cbdc6eb9507719 -rfee71ca73745dad573b28acd13b66624cceeabc0 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 8b7c7ff2bdb82aca355e3eed90cbdc6eb9507719) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision fee71ca73745dad573b28acd13b66624cceeabc0) @@ -34,6 +34,7 @@ // ********** private data ********** static BOOL treatStartReqReceived = FALSE; ///< Flag indicates user requests treatment begin. +static BOOL patientConnectionStartReqReceived = FALSE; ///< Flag indicates user requests patient connection. static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. @@ -42,7 +43,6 @@ static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( 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 handleSelfTestWetState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); @@ -56,6 +56,7 @@ void initPreTreatmentMode( void ) { treatStartReqReceived = FALSE; + patientConnectionStartReqReceived = FALSE; currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; } @@ -115,10 +116,6 @@ currentPreTreatmentState = handlePrimeState(); break; - case HD_PRE_TREATMENT_SELF_TEST_WET_STATE: - currentPreTreatmentState = handleSelfTestWetState(); - break; - case HD_PRE_TREATMENT_RECIRCULATE_STATE: currentPreTreatmentState = handleRecirculateState(); break; @@ -148,8 +145,7 @@ { BOOL result = FALSE; - // TODO Change to appropriate constraint when UI action is available - if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) ) + if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == currentPreTreatmentState ) ) { treatStartReqReceived = TRUE; result = TRUE; @@ -252,33 +248,10 @@ execPrime(); - if ( TRUE == isPrimingCompleted() ) + if ( TRUE == isWetSelfTestsPassed() ) { - state = HD_PRE_TREATMENT_SELF_TEST_WET_STATE; - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestWetState function performs wet self-tests. - * @details Inputs: none - * @details Outputs: performed wet self-tests and transition to recirculate - * when everything passes - * @return current state (sub-mode) - *************************************************************************/ -static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestWetState( void ) -{ - HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_WET_STATE; - - // TODO: Perform wet self-tests and collect result - BOOL isPassed = TRUE; - - if ( TRUE == isPassed ) - { - activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); state = HD_PRE_TREATMENT_RECIRCULATE_STATE; + activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -308,8 +281,10 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_RECIRCULATE_STATE; - // TODO Change to appropriate user action when UI action is available - if ( TRUE == treatStartReqReceived ) + // TODO Add handler to UI interaction + patientConnectionStartReqReceived = TRUE; + + if ( TRUE == patientConnectionStartReqReceived ) { state = HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; } Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rab12c5e387a1a55675e13ad1e61a3dee7620f976 -rfee71ca73745dad573b28acd13b66624cceeabc0 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision ab12c5e387a1a55675e13ad1e61a3dee7620f976) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision fee71ca73745dad573b28acd13b66624cceeabc0) @@ -75,7 +75,7 @@ static U32 primeStartTime; ///< Starting time of priming (in ms). static U32 primeStatusBroadcastTimerCounter; ///< Prime status data broadcast timer counter used to schedule when to transmit data. -static BOOL isPrimeCompleted; ///< Status if prime sequence has been completed. +static BOOL wetSelfTestsResult; ///< Result of wet self-tests. static BOOL primeStartReqReceived; ///< Flag to indicate if a request to start priming has been received. static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag to indicate if a reservoir has been filled. @@ -99,6 +99,7 @@ static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateDialyzerState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeReservoirTwoFillCompleteState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateBypassState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWetSelfTestsState( void ); /*********************************************************************//** * @brief @@ -118,15 +119,15 @@ * The transitionToPrime function prepares for transition to prime sub-mode. * This function will reset anything required before the start of priming sequence. * @details Inputs: none - * @details Outputs: currentPrimeState, isPrimeCompleted, primeStartReqReceived, reservoirFilledStatus[] + * @details Outputs: currentPrimeState, wetSelfTestsResult, primeStartReqReceived, reservoirFilledStatus[] * @return none *************************************************************************/ void transitionToPrime( void ) { currentPrimeState = HD_PRIME_START_STATE; currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_STATE; - isPrimeCompleted = FALSE; + wetSelfTestsResult = FALSE; primeStartTime = getMSTimerCount(); primeStatusBroadcastTimerCounter = 0; // TODO: set to false after integration with UI @@ -181,6 +182,10 @@ currentPrimeState = handlePrimeDialysateBypassState(); break; + case HD_PRIME_WET_SELF_TESTS_STATE: + currentPrimeState = handlePrimeWetSelfTestsState(); + break; + default: currentPrimeState = HD_PRIME_START_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_PRIME_INVALID_STATE, (U32)currentReservoirMgmtState ); @@ -196,14 +201,15 @@ /*********************************************************************//** * @brief - * The isPrimingCompleted function returns the status of prime mode. + * The isWetSelfTestsPassed function returns the status of wet self-tests + * after priming. * @details Inputs: none * @details Outputs: none - * @return TRUE if prime has completed, otherwise FALSE + * @return TRUE if wet self-tests passed, otherwise FALSE *************************************************************************/ -BOOL isPrimingCompleted( void ) +BOOL isWetSelfTestsPassed( void ) { - return isPrimeCompleted; + return wetSelfTestsResult; } /*********************************************************************//** @@ -544,12 +550,16 @@ *************************************************************************/ static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateBypassState( void ) { + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_DIALYSATE_BYPASS_STATE; F32 const loadcellWeight = getReservoirWeightSmallFilter( DG_RESERVOIR_2 ); F32 const weightChange = fabs( 1.0 - ( previousLoadCellReading / loadcellWeight ) ); if ( weightChange < LOAD_CELL_VOLUME_NOISE_TOLERANCE ) { - isPrimeCompleted = didTimeout( loadcellSteadyVolumeStartTime, MIN_LOAD_CELL_STEADY_VOLUME_TIME ); + if ( TRUE == didTimeout( loadcellSteadyVolumeStartTime, MIN_LOAD_CELL_STEADY_VOLUME_TIME ) ) + { + state = HD_PRIME_WET_SELF_TESTS_STATE; + } } else { @@ -562,7 +572,22 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT, PRIME_DIALYSATE_BYPASS_TIME_LIMIT ); } - return HD_PRIME_DIALYSATE_BYPASS_STATE; + return state; } +/*********************************************************************//** + * @brief + * The handlePrimeWetSelfTestsState function perform wet self-tests after + * priming is completed and collect the result. + * @details Inputs: none + * @details Outputs: isWetSelfTestsPassed + * @return current state + *************************************************************************/ +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWetSelfTestsState( void ) +{ + // TODO Perform wet self-tests and collect result + wetSelfTestsResult = TRUE; + return HD_PRIME_WET_SELF_TESTS_STATE; +} + /**@}*/ Index: firmware/App/Modes/Prime.h =================================================================== diff -u -rab12c5e387a1a55675e13ad1e61a3dee7620f976 -rfee71ca73745dad573b28acd13b66624cceeabc0 --- firmware/App/Modes/Prime.h (.../Prime.h) (revision ab12c5e387a1a55675e13ad1e61a3dee7620f976) +++ firmware/App/Modes/Prime.h (.../Prime.h) (revision fee71ca73745dad573b28acd13b66624cceeabc0) @@ -49,7 +49,7 @@ void transitionToPrime( void ); void execPrime( void ); -BOOL isPrimingCompleted( void ); +BOOL isWetSelfTestsPassed( void ); /**@}*/