Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -rda7e8c1b71db9273f83e9d0ba7d20e74e758a8ad -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision da7e8c1b71db9273f83e9d0ba7d20e74e758a8ad) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -62,6 +62,7 @@ static void publishAirPumpData( void ); static void execAirPumpMonitor( void ); static void setAirPumpMotor( AIR_PUMP_MOTOR_STATE_T state ); +static AIR_PUMP_MOTOR_STATE_T getAirPumpMotorState( void ); /*********************************************************************//** * @brief @@ -185,10 +186,12 @@ { if ( MODE_TREA == getCurrentOperationMode() ) { - if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_AIR_PUMP_TIMEOUT, (BOOL)getAirPumpMotorState() ) ) + BOOL isAirPumpOn = ( AIR_PUMP_MOTOR_OFF == getAirPumpMotorState() ? FALSE : TRUE ); + + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_AIR_PUMP_TIMEOUT, isAirPumpOn ) ) { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AIR_PUMP_TIMEOUT, getAirPumpMotorState() ); - setAirPumpState(AIR_PUMP_STATE_OFF); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AIR_PUMP_TIMEOUT, isAirPumpOn ); + setAirPumpState( AIR_PUMP_STATE_OFF ); } } } Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -rda7e8c1b71db9273f83e9d0ba7d20e74e758a8ad -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision da7e8c1b71db9273f83e9d0ba7d20e74e758a8ad) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -346,6 +346,7 @@ pendingStopAirTrapController = FALSE; result = AIR_TRAP_MANUAL_CONTROL_STATE; } + //Turn on air pump if fluid reaches upper level. else if ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) { Index: firmware/App/Controllers/Bubble.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -209,6 +209,7 @@ { case TREATMENT_BLOOD_PRIME_STATE: case TREATMENT_DIALYSIS_STATE: + case TREATMENT_STOP_STATE: case TREATMENT_END_STATE: activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); break; Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r5d9c5362b537331248dc592e05b6b016267eb6d3 -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 5d9c5362b537331248dc592e05b6b016267eb6d3) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -474,7 +474,8 @@ // Check arterial pressure during treatment mode against either user set limits or fixed max limits depending on treatment state if ( ( MODE_TREA == getCurrentOperationMode() ) && ( ( ( TREATMENT_DIALYSIS_STATE == txState ) && ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) ) || - ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) ) ) + ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) || + ( TREATMENT_BLOOD_PRIME_STATE == txState ) ) ) { F32 artLowLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT ); F32 artHighLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT ); @@ -540,7 +541,8 @@ // Check venous pressure during treatment mode against either user set limits or fixed max limits depending on treatment state if ( ( MODE_TREA == getCurrentOperationMode() ) && ( ( ( TREATMENT_DIALYSIS_STATE == txState ) && ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) ) || - ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) ) ) + ( ( TREATMENT_STOP_STATE == txState ) && ( TRUE == isBloodPumpRunning() ) ) || + ( TREATMENT_BLOOD_PRIME_STATE == txState ) ) ) { F32 venLowLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ); F32 venHighLimit = (F32)getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); Index: firmware/App/Modes/BloodPrime.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -37,7 +37,6 @@ // ********** private definitiions *********** #define TUBING_BLOOD_PRIME_VOLUME_ML 80.0F ///< Target blood prime volume to prime the blood side circuit (in mL). -#define DEFAULT_BLOOD_PRIME_VOLUME_ML 300.0F ///< Default blood prime volume (in mL). #define MAX_BLOOD_PRIME_VOLUME_ERROR_ML 60.0F ///< Maximum error in total additional blood prime volume (20% of total). #define MIN_RAMP_TIME_SEC 60 ///< Minimum ramp time for blood prime (in seconds). @@ -94,7 +93,6 @@ bloodPrimePublishTimerCtr = BLOOD_PRIME_DATA_PUBLISH_INTERVAL - 2; // setup so publish will occur time after next cumulativeBloodPrimeVolume_mL.data = 0.0; expectedBloodPrimeVolume_mL = 0.0; - bloodPrimeTargetVolume_mL = DEFAULT_BLOOD_PRIME_VOLUME_ML; resetBloodPrimeFlags(); bloodPrimeTargetVolume_mL = (F32)TUBING_BLOOD_PRIME_VOLUME_ML + (F32)getDialyzerBloodVolume(); Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r81c902fb595b9fcde229f8898d14e43312969f26 -r33c3a81272ce8c9bae64ae20537e9be45b11edd0 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 81c902fb595b9fcde229f8898d14e43312969f26) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 33c3a81272ce8c9bae64ae20537e9be45b11edd0) @@ -128,15 +128,17 @@ { U16 i; - currentDialysisState = DIALYSIS_START_STATE; - currentUFState = UF_START_STATE; + currentDialysisState = DIALYSIS_UF_STATE; + currentUFState = UF_RUNNING_STATE; currentSalineBolusState = SALINE_BOLUS_STATE_IDLE; + lastUFTimeStamp = getMSTimerCount(); + uFTimeMS = 0; + refUFVolume = 0.0; measUFVolume = 0.0; measUFVolumeFromPriorReservoirs = 0.0; - // Send reset UF volumes to dialysate outlet pump - setDialOutUFVolumes( refUFVolume, measUFVolume ); + setDialOutUFVolumes( refUFVolume, measUFVolume ); // Send reset UF volumes to dialysate outlet pump driver uFTimeMS = 0; lastUFTimeStamp = 0; @@ -152,11 +154,12 @@ uFAccuracyCheckTimerCtr = 0; lastUFVolumeChecked = 0.0; - for (i=0; i