Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -617,6 +617,7 @@ { SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; +#ifndef DISABLE_OCCLUSION_SELF_TEST U32 const bpPressure = getMeasuredBloodPumpOcclusion(); U32 const dialysateInPressure = getMeasuredDialInPumpOcclusion(); U32 const dialysateOutPressure = getMeasuredDialOutPumpOcclusion(); @@ -648,6 +649,7 @@ activateAlarmNoData( ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY ); } } +#endif return result; } Index: firmware/App/HDCommon.h =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/HDCommon.h (.../HDCommon.h) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -67,6 +67,7 @@ #define SKIP_UI_INTERACTION 1 // Skip UI interaction. // #define DISABLE_BATT_COMM 1 // Disable battery communication. #define SKIP_AIR_BUBBLE_CHECK 1 // Skip air bubble detector self-test. + #define DISABLE_OCCLUSION_SELF_TEST 1 // Skip occlusion sensor self-test. #include #include Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -465,15 +465,20 @@ *************************************************************************/ static void transitionToPatientConnection( void ) { + VALVE_T valve; setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; treatmentStartRequested = FALSE; - cmdStartDGTrimmerHeater(); + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + { + setValvePosition( valve, VALVE_POSITION_C_CLOSE ); + } signalBloodPumpHardStop(); signalDialOutPumpHardStop(); setDialInPumpTargetFlowRate( DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + cmdStartDGTrimmerHeater(); } /*********************************************************************//** Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/Modes/Prime.c (.../Prime.c) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -38,14 +38,14 @@ #define MAX_PRIME_TIME ( 10 * SEC_PER_MIN ) ///< Maximum prime time (in seconds). #define PRIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the prime data is published on the CAN bus. -#define BLOOD_PUMP_FLOW_RATE_PURGE_AIR 100 ///< Blood pump flow rate during prime purge air state. +#define BLOOD_PUMP_FLOW_RATE_PURGE_AIR 500 ///< Blood pump flow rate during prime purge air state. #define BLOOD_PUMP_FLOW_RATE_CIRC_BLOOD_CIRCUIT 300 ///< Blood pump flow rate during prime recirculate blood circuit state. #define DIALYSATE_PUMP_PRIME_FLOW_RATE 300 ///< Dialysate pump flow rate during priming fluid path. #define LOAD_CELL_VOLUME_NOISE_TOLERANCE 0.05 ///< Allow 5% tolerance on load cell readings. -#define NO_AIR_DETECTED_COUNT ( 10 * MS_PER_SECOND ) ///< No air detected time period count. -#define PURGE_AIR_TIME_OUT_COUNT ( 30 * MS_PER_SECOND ) ///< Time period count for purge air time out. +#define NO_AIR_DETECTED_COUNT ( 20 * MS_PER_SECOND ) ///< No air detected time period count. +#define PURGE_AIR_TIME_OUT_COUNT ( 60 * MS_PER_SECOND ) ///< Time period count for purge air time out. #define MIN_LOAD_CELL_STEADY_VOLUME_TIME ( 10 * MS_PER_SECOND ) ///< Minimum time load cell reading need to remain steady in ms. #define PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ( 120 * MS_PER_SECOND ) ///< Time limit for priming dialysate dialyzer circuit. #define PRIME_DIALYSATE_BYPASS_TIME_LIMIT ( 120 * MS_PER_SECOND ) ///< Time limit for priming dialysate bypass circuit. @@ -84,6 +84,7 @@ static U32 primeDialysateBypassStartTime; ///< Starting time of priming dialysate bypass circuit. static U32 previousLoadCellReading; ///< Previous load cell reading. static U32 loadcellSteadyVolumeStartTime; ///< Load cell steady volume starting time. +static BOOL runBloodCircuitPrimeAgain; ///< Flag indicates HD should run blood circuit prime once more time. // ********** private function prototypes ********** @@ -132,6 +133,7 @@ primeStartTime = getMSTimerCount(); primePauseStartTime = 0; primeStatusBroadcastTimerCounter = 0; + runBloodCircuitPrimeAgain = TRUE; setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); @@ -338,6 +340,8 @@ setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_OPEN ); + signalDialOutPumpHardStop(); + signalDialInPumpHardStop(); setBloodPumpTargetFlowRate( BLOOD_PUMP_FLOW_RATE_PURGE_AIR, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); } @@ -532,7 +536,15 @@ { if ( TRUE == didTimeout( loadcellSteadyVolumeStartTime, MIN_LOAD_CELL_STEADY_VOLUME_TIME ) ) { - state = HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE; + if ( TRUE == runBloodCircuitPrimeAgain ) + { + runBloodCircuitPrimeAgain = FALSE; + state = HD_PRIME_SALINE_SETUP_STATE; + } + else + { + state = HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE; + } } } else Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rfeaae35e827b3ffeb5d0de9df41ba2390d058849 -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision feaae35e827b3ffeb5d0de9df41ba2390d058849) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -261,11 +261,10 @@ case NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE: execDialInFlowTest(); - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_PUMPS_STATE; - break; - case NO_CART_SELF_TESTS_PUMPS_STATE: - currentNoCartSelfTestsState = handleNoCartSelfTestPumpsState(); + // TODO: Use appropriate sensor driver + setFPGASensorTest( BLOOD_LEAK_SELF_TEST_SET ); + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; break; case NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE: @@ -285,6 +284,10 @@ currentNoCartSelfTestsState = handleNoCartSelfTestHomeValvesAndPumpState(); break; + case NO_CART_SELF_TESTS_PUMPS_STATE: + currentNoCartSelfTestsState = handleNoCartSelfTestPumpsState(); + break; + case NO_CART_SELF_TESTS_STOPPED_STATE: currentNoCartSelfTestsState = handleNoCartSelfTestStoppedState(); break; @@ -621,9 +624,7 @@ signalDialInPumpHardStop(); signalDialOutPumpHardStop(); - // TODO: Use appropriate sensor driver - setFPGASensorTest( BLOOD_LEAK_SELF_TEST_SET ); - state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; + state = NO_CART_SELF_TESTS_COMPLETE_STATE; } if ( TRUE == doesAlarmStatusIndicateStop() ) @@ -726,7 +727,7 @@ if ( ( FALSE == isDialInPumpRunning() ) && ( FALSE == isDialOutPumpRunning() ) && ( FALSE == isBloodPumpRunning() ) && ( TRUE == isSyringePumpHome() ) ) { - state = NO_CART_SELF_TESTS_COMPLETE_STATE; + state = NO_CART_SELF_TESTS_PUMPS_STATE; } if ( TRUE == doesAlarmStatusIndicateStop() ) Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rc3cf7af051c1ee070df90a9c072df16be48f478f -r838df450f09668adbd73e61fadbff8c81fe7926e --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision c3cf7af051c1ee070df90a9c072df16be48f478f) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 838df450f09668adbd73e61fadbff8c81fe7926e) @@ -1592,7 +1592,7 @@ { U16 const status = fpgaSensorReadings.fpgaGPIO & FPGA_ADA_INPUT_STATUS_MASK; - return ( 0 == status ? FALSE : TRUE ); + return ( 0 == status ? TRUE : FALSE ); } /*********************************************************************//**