Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r2e79230b93c7778c5f079604013e6b187b2634e4 -r5e0257ef85adb18a5c8837d9804304f405080266 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 2e79230b93c7778c5f079604013e6b187b2634e4) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 5e0257ef85adb18a5c8837d9804304f405080266) @@ -44,14 +44,6 @@ #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 PRIME_DRAIN_RESERVOIR_TO_VOLUME_ML 0 ///< Drain reservoir to this volume (in mL) during prime. - -#define PRIME_CONSUMED_DIALYSATE_VOLUME_ML 100 ///< Volume of dialysate consumed during prime. - -/// Fill reservoir 1 to this volume (in mL) during prime. -#define PRIME_FILL_RESERVOIR_ONE_VOLUME_ML ( FILL_RESERVOIR_TO_VOLUME_ML - PRIME_CONSUMED_DIALYSATE_VOLUME_ML ) -#define PRIME_FILL_RESERVOIR_TWO_VOLUME_ML 500 ///< Fill reservoir 2 to this volume (in mL) during prime. - #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. @@ -86,7 +78,6 @@ static BOOL primeStartRequested; ///< Flag indicates user requesting to start prime. static BOOL primeResumeRequested; ///< Flag indicates user requesting prime resume. -static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been filled. static U32 noAirDetectedStartTime; ///< starting time when detecting no air. static U32 purgeAirTimeOutStartTime; ///< Starting time for purge air state time out. @@ -100,7 +91,6 @@ static void resetPrimeFlags(); static void handlePrimePauseRequest( void ); static void broadcastPrimingStatus( void ); -static void execPrimeReservoirMgmt( void ); static void purgeAirValvesBloodPumpControl( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWaitForUserStartState( void ); @@ -145,9 +135,6 @@ primePauseStartTime = 0; primeStatusBroadcastTimerCounter = 0; - reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; - reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; - setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); @@ -168,7 +155,6 @@ switch ( currentPrimeState ) { case HD_PRIME_START_STATE: - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); #ifdef SKIP_PRIMING currentPrimeState = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; #else @@ -234,9 +220,6 @@ // Broadcast priming data broadcastPrimingStatus(); - - // Exec reservoir management for priming - execPrimeReservoirMgmt(); } /*********************************************************************//** @@ -363,126 +346,6 @@ /*********************************************************************//** * @brief - * The execPrimeReservoirMgmt function executes the state machine for the - * reservoir management during pre-treatment prime sub-mode. - * @details Inputs: currentReservoirMgmtState - * @details Outputs: DG reservoirs' fills managed. - * @return none - *************************************************************************/ -static void execPrimeReservoirMgmt( void ) -{ - DG_CMD_RESPONSE_T dgCmdResp; - DG_OP_MODE_T dgOpMode = getDGOpMode(); - U32 dgSubMode = getDGSubMode(); - - // treatment reservoir mgmt. state machine - switch ( currentReservoirMgmtState ) - { - case PRIME_RESERVOIR_MGMT_START_STATE: - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; - break; - - case PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: - if ( DG_MODE_CIRC == dgOpMode ) - { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_WAIT_FOR_DRAIN_CMD_RESP; - cmdStartDGDrain( PRIME_DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE ); - } - } - else - { - // TODO Handle when DG mode is out of sync - } - break; - - case PRIME_RESERVOIR_MGMT_WAIT_FOR_DRAIN_CMD_RESP: - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejected ) ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; - } - - if ( DG_MODE_DRAI == dgOpMode ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_DRAIN_STATE; - } - break; - - case PRIME_RESERVOIR_MGMT_DRAIN_STATE: - if ( DG_MODE_CIRC == dgOpMode ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_FILL_STATE; - } - break; - - case PRIME_RESERVOIR_MGMT_START_FILL_STATE: - if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_WAIT_FOR_FILL_CMD_RESP; - - if ( DG_RESERVOIR_1 == getDGInactiveReservoir() ) - { - cmdStartDGFill( PRIME_FILL_RESERVOIR_ONE_VOLUME_ML ); - } - else - { - cmdStartDGFill( PRIME_FILL_RESERVOIR_TWO_VOLUME_ML ); - } - } - break; - - case PRIME_RESERVOIR_MGMT_WAIT_FOR_FILL_CMD_RESP: - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_FILL, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejected ) ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_FILL_STATE; - } - - if ( DG_MODE_FILL == dgOpMode ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FILL_STATE; - } - break; - - case PRIME_RESERVOIR_MGMT_FILL_STATE: - if ( DG_MODE_CIRC == dgOpMode ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FILL_COMPLETE_STATE; - } - break; - - case PRIME_RESERVOIR_MGMT_FILL_COMPLETE_STATE: - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FILL_COMPLETE_STATE; - - if ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) - { - reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_WAIT_RESERVOIR_TWO_INACTIVE; - } - else if ( ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) ) - { - reservoirFilledStatus[ DG_RESERVOIR_2 ] = TRUE; - } - break; - - case PRIME_RESERVOIR_MGMT_WAIT_RESERVOIR_TWO_INACTIVE: - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_WAIT_RESERVOIR_TWO_INACTIVE; - - if ( DG_RESERVOIR_2 == getDGInactiveReservoir() ) - { - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; - } - break; - - default: - currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_STATE; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRIME_RESERVOIR_MGMT_INVALID_STATE, (U32)currentReservoirMgmtState ); - break; - } -} - -/*********************************************************************//** - * @brief * The purgeAirValvesBloodPumpControl function controls valves and blood pump * to purge air. * @details Inputs: none @@ -611,7 +474,7 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; - if ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) + if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_1 ) ) { cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); @@ -686,7 +549,7 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE; - if ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) + if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_2 ) ) { cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); signalDialOutPumpHardStop();