Index: firmware/App/Controllers/BloodLeak.h =================================================================== diff -u -r57f9f2d3b4c109c952034003c77a315bb3c41717 -re5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc --- firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision 57f9f2d3b4c109c952034003c77a315bb3c41717) +++ firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision e5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc) @@ -63,7 +63,7 @@ SELF_TEST_STATUS_T execBloodLeakSelfTest( void ); BLOOD_LEAK_STATUS_T getBloodLeakStatus( void ); -SELF_TEST_STATUS_T getBloodLeakSelfTestStatus( void ); +SELF_TEST_STATUS_T getBloodLeakSelfTestStatus( void ); BOOL testSetBloodLeakDataPublishIntervalOverride( U32 value ); BOOL testResetBloodLeakDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rca238a4fc2400ffaf3c2a90c6e923a87b8dac4d2 -re5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision ca238a4fc2400ffaf3c2a90c6e923a87b8dac4d2) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision e5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc) @@ -81,6 +81,7 @@ #define PSI_TO_MMHG ( 51.7149F ) ///< Conversion factor for converting PSI to mmHg. +// The new arterial pressure sensor is the same as the venous pressure sensor #define VENOUS_PRESSURE_NORMAL_OP 0 ///< Venous pressure status bits indicate normal operation. #define VENOUS_PRESSURE_CMD_MODE 1 ///< Venous pressure status bits indicate sensor in command mode. #define VENOUS_PRESSURE_STALE_DATA 2 ///< Venous pressure status bits indicate data is stale (no new data since last fpga read). @@ -838,7 +839,6 @@ } } } - // Check for occlusion in Treatment modes where pumps are moving else if ( MODE_TREA == getCurrentOperationMode() ) { Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rca238a4fc2400ffaf3c2a90c6e923a87b8dac4d2 -re5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc --- firmware/App/Modes/Prime.c (.../Prime.c) (revision ca238a4fc2400ffaf3c2a90c6e923a87b8dac4d2) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision e5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc) @@ -1029,8 +1029,6 @@ else if ( TRUE == doesAlarmStatusIndicateStop() ) { setupForPrimePause(); - state = HD_PRIME_PAUSE; - setCurrent4thLevelState( NO_SUB_STATE ); } return state; Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r57f9f2d3b4c109c952034003c77a315bb3c41717 -re5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 57f9f2d3b4c109c952034003c77a315bb3c41717) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision e5e75b8c211cf7f26fa5a8adf9290ea0b5d1afbc) @@ -117,6 +117,7 @@ static BOOL wetSelfTestsResult; ///< Result of wet self-tests. static WET_SELF_TESTS_STATE_T currentWetSelfTestsState; ///< Current state of the wet self-tests state machine. +static WET_SELF_TESTS_STATE_T checkpointWetSelfTestsState; ///< Checkpoint state of the wet self tests state machine. static U32 settleStartTime; ///< Wait for reservoir to settle start time. static U32 displacementStartTime; ///< Dialysate displacement starting time. static F32 fmdIntegratedVolume; ///< FMD integrated volume over displacement time. @@ -581,6 +582,7 @@ { wetSelfTestsResult = FALSE; currentWetSelfTestsState = WET_SELF_TESTS_START_STATE; + checkpointWetSelfTestsState = WET_SELF_TESTS_START_STATE; settleStartTime = 0; displacementStartTime = 0; fmdIntegratedVolume = 0.0; @@ -1602,7 +1604,7 @@ * The handleWetSelfTestSetupState function setup for bubble self-test * check. * @details Inputs: none - * @details Outputs: bubble detector self-test requested + * @details Outputs: bubble detector self-test requested, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestSetupState( void ) @@ -1613,6 +1615,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_BUBBLE_CHECK_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1625,7 +1628,7 @@ * The handleWetSelfTestBubblesState function waiting for air bubble detectors * self-tests to finish. * @details Inputs: bubbleSelfTestStatus - * @details Outputs: none + * @details Outputs: checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestBubblesState( void ) @@ -1639,6 +1642,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_BUBBLE_CHECK_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1651,7 +1655,7 @@ * The handleWetSelfTestPrimeCheckState function checks arterial and venous * lines to make sure they are primed. * @details Inputs: Arterial and venous bubble detectors status - * @details Outputs: Test pass/fail + * @details Outputs: Test pass/fail, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( void ) @@ -1673,6 +1677,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_PRIME_CHECK_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1721,7 +1726,7 @@ * self-test for blood leak detector. * @details Inputs: none * @details Outputs: bloodLeakDebubbleStartTimeMS, settleStartTime, - * isValvesSettingSent + * isValvesSettingSent, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestBloodLeakDetectorState( void ) @@ -1758,6 +1763,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1770,7 +1776,7 @@ * The handleWetSelfTestStartFirstDisplacementState function setups the valves * and pumps to start first dialysate displacement. * @details Inputs: settleStartTime, isValvesSettingSent - * @details Outputs: isValvesSettingSent + * @details Outputs: isValvesSettingSent, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementSetupState( void ) @@ -1803,6 +1809,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1815,7 +1822,7 @@ * The handleWetSelfTestFirstDisplacementState function handles the first * dialysate displacement from reservoir 1 to reservoir 2. * @details Inputs: displacementStartTime, fmdIntegratedVolume, settleStartTime - * @details Outputs: settleStartTime, displacementStartTime + * @details Outputs: settleStartTime, displacementStartTime, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementState( void ) @@ -1848,6 +1855,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_FIRST_DISPLACEMENT_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1860,7 +1868,7 @@ * The handleWetSelfTestFirstDisplacementVerifyState function checks the load cell * readings and FMD integrated volume after the first dialysate displacement. * @details Inputs: settleStartTime, fmdIntegratedVolume - * @details Outputs: none + * @details Outputs: checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( void ) @@ -1910,6 +1918,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1922,7 +1931,7 @@ * The handleWetSelfTestSecondDisplacementSetupState function setups the valves * and pumps to start second dialysate displacement. * @details Inputs: settleStartTime, isValvesSettingSent - * @details Outputs: isValvesSettingSent + * @details Outputs: isValvesSettingSent, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementSetupState( void ) @@ -1955,6 +1964,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1967,7 +1977,7 @@ * The handleWetSelfTestSecondDisplacementState function handles the first * dialysate displacement from reservoir 2 to reservoir 1. * @details Inputs: displacementStartTime, fmdIntegratedVolume, settleStartTime - * @details Outputs: displacementStartTime + * @details Outputs: displacementStartTime, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementState( void ) @@ -1998,6 +2008,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_SECOND_DISPLACEMENT_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -2010,7 +2021,7 @@ * The handleWetSelfTestSecondDisplacementVerifyState function checks the load cell * readings and FMD integrated volume after the second dialysate displacement. * @details Inputs: settleStartTime, reservoirVolume[], reservoirs' weights - * @details Outputs: verify correctness of dialysate flow meter and load cell + * @details Outputs: verify correctness of dialysate flow meter and load cell, checkpointWetSelfTestsState * @return the next state of wet self-tests state machine *************************************************************************/ static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( void ) @@ -2060,6 +2071,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + checkpointWetSelfTestsState = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; state = WET_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -2071,7 +2083,7 @@ * @brief * The handleWetSelfTestStoppedState function handles the stopped wet self-tests * operation. - * @details Inputs: selfTestsResumeRequested + * @details Inputs: selfTestsResumeRequested, checkpointWetSelfTestsState * @details Outputs: selfTestsResumeRequested, selfTestStartTime * @return the next state of wet self-tests state machine *************************************************************************/ @@ -2088,7 +2100,37 @@ selfTestStartTime = getMSTimerCount(); doorClosedRequired( TRUE, TRUE ); selfTestsResumeRequested = FALSE; - state = WET_SELF_TESTS_START_STATE; // TODO - should start state make sure there is sufficient/appropriate res volumes to restart wet self-tests? and if not, should it signal res mgmt to drain and fill R1 and R2 before resuming wet self-tests? + + switch( checkpointWetSelfTestsState ) + { + case WET_SELF_TESTS_BUBBLE_CHECK_SETUP_STATE: + case WET_SELF_TESTS_BUBBLE_CHECK_STATE: + case WET_SELF_TESTS_PRIME_CHECK_STATE: + case WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE: + state = WET_SELF_TESTS_START_STATE; + break; + + case WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE: + case WET_SELF_TESTS_FIRST_DISPLACEMENT_STATE: + state = WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE; + break; + + case WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE: + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; + break; + + case WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE: + case WET_SELF_TESTS_SECOND_DISPLACEMENT_STATE: + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; + break; + + case WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE: + case WET_SELF_TESTS_COMPLETE_STATE: + state = WET_SELF_TESTS_COMPLETE_STATE; + + default: + state = WET_SELF_TESTS_START_STATE; + } } return state;