Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r9d9cd0ac6bce1de703e34cce9808b9dc357cd687 -r970e3eba4d1a6da19656cc56f2c6e5e288789bdd --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 9d9cd0ac6bce1de703e34cce9808b9dc357cd687) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 970e3eba4d1a6da19656cc56f2c6e5e288789bdd) @@ -35,18 +35,18 @@ #define BLOOD_PUMP_FLOW_RATE_PURGE_AIR 100 ///< 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 NO_AIR_DETECTED_COUNT ( 10 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< No air detected time period count. -#define PURGE_AIR_TIME_OUT_COUNT ( 30 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Time period count for purge air time out. #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 MIN_LOAD_CELL_STEADY_VOLUME_TIME ( 10 * MS_PER_SECOND ) ///< Minimum time load cell reading need to remain steady in ms. #define PRIME_DRAIN_RESERVOIR_TO_VOLUME_ML 100 ///< Drain reservoir to this volume (in mL) during prime. #define PRIME_FILL_RESERVOIR_TO_VOLUME_ML 1700 ///< Fill reservoir to this volume (in mL) during prime. -#define PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ( 60 * MS_PER_SECOND ) ///< Time limit for priming dialysate dialyzer circuit. -#define PRIME_DIALYSATE_BYPASS_TIME_LIMIT ( 60 * MS_PER_SECOND ) ///< Time limit for priming dialysate bypass circuit. +#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 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. /// States of the treatment reservoir management state machine. typedef enum PrimeReservoirMgmt_States @@ -68,12 +68,11 @@ static BOOL isPrimeCompleted; ///< Status if prime sequence has been completed. 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. -static U32 noAirDetectedTimerCounter; ///< No air detected timer counter. -static U32 purgeAirTimeOutTimerCount; ///< Timer counter for purse air state time out. - -static U32 primeDialysateDialyzerTimeStart; ///< Starting time of priming dialysate dialyzer circuit. -static U32 primeBypassDialyzerTimeStart; ///< Starting time of priming dialysate bypass circuit. +static U32 noAirDetectedStartTime; ///< starting time when detecting no air. +static U32 purgeAirTimeOutStartTime; ///< Starting time for purge air state time out. +static U32 primeDialysateDialyzerStartTime; ///< Starting time of priming dialysate dialyzer circuit. +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. @@ -118,13 +117,7 @@ isPrimeCompleted = FALSE; // TODO: set to false after integration with UI primeStartReqReceived = TRUE; - purgeAirTimeOutTimerCount = 0; - primeDialysateDialyzerTimeStart = 0; - primeDialysateBypassTimeStart = 0; - previousLoadCellReading = 0; - loadcellSteadyVolumeStartTime = 0; - reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; } @@ -315,7 +308,7 @@ if ( TRUE == primeStartReqReceived ) { purgeAirValvesBloodPumpControl(); - purgeAirTimeOutTimerCount = 0; + purgeAirTimeOutStartTime = getMSTimerCount(); state = PRIME_SALINE_PURGE_AIR_STATE; } @@ -334,7 +327,7 @@ { PRE_TREATMENT_PRIME_STATE_T state = PRIME_SALINE_PURGE_AIR_STATE; - if ( ++purgeAirTimeOutTimerCount > PURGE_AIR_TIME_OUT_COUNT ) + if ( TRUE == didTimeout( purgeAirTimeOutStartTime, PURGE_AIR_TIME_OUT_COUNT ) ) { activateAlarmNoData( ALARM_ID_HD_PRIME_PURGE_AIR_TIME_OUT ); } @@ -348,7 +341,7 @@ setValveAirTrap( STATE_CLOSED ); setBloodPumpTargetFlowRate( BLOOD_PUMP_FLOW_RATE_CIRC_BLOOD_CIRCUIT, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - noAirDetectedTimerCounter = 0; + noAirDetectedStartTime = getMSTimerCount(); state = PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; } @@ -371,11 +364,11 @@ if ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) { purgeAirValvesBloodPumpControl(); - purgeAirTimeOutTimerCount = 0; + purgeAirTimeOutStartTime = getMSTimerCount(); state = PRIME_SALINE_PURGE_AIR_STATE; } - if ( ++noAirDetectedTimerCounter > NO_AIR_DETECTED_COUNT ) + if ( TRUE == didTimeout( noAirDetectedStartTime, NO_AIR_DETECTED_COUNT ) ) { signalBloodPumpHardStop(); state = PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; @@ -409,7 +402,7 @@ previousLoadCellReading = 0; loadcellSteadyVolumeStartTime = getMSTimerCount(); - primeDialysateDialyzerTimeStart = getMSTimerCount(); + primeDialysateDialyzerStartTime = getMSTimerCount(); state = PRIME_DIALYSATE_DIALYZER_STATE; } @@ -444,7 +437,7 @@ loadcellSteadyVolumeStartTime = getMSTimerCount(); } - if ( TRUE == didTimeout( primeDialysateDialyzerTimeStart, PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ) ) + if ( TRUE == didTimeout( primeDialysateDialyzerStartTime, PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ) ) { activateAlarm1Data( ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT, PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ); } @@ -476,7 +469,7 @@ setValveAirTrap( STATE_CLOSED ); previousLoadCellReading = 0; - primeDialysateBypassTimeStart = getMSTimerCount(); + primeDialysateBypassStartTime = getMSTimerCount(); loadcellSteadyVolumeStartTime = getMSTimerCount(); state = PRIME_DIALYSATE_BYPASS_STATE; } @@ -507,7 +500,7 @@ loadcellSteadyVolumeStartTime = getMSTimerCount(); } - if ( TRUE == didTimeout( primeDialysateBypassTimeStart, PRIME_DIALYSATE_BYPASS_TIME_LIMIT ) ) + if ( TRUE == didTimeout( primeDialysateBypassStartTime, PRIME_DIALYSATE_BYPASS_TIME_LIMIT ) ) { activateAlarm1Data( ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT, PRIME_DIALYSATE_BYPASS_TIME_LIMIT ); }