Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r780d9a73fe04ddd85282c413fbe5984f374f2b61 -r5c521c4e9f0840c337133dc041f5e61bc89353ea --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 780d9a73fe04ddd85282c413fbe5984f374f2b61) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 5c521c4e9f0840c337133dc041f5e61bc89353ea) @@ -122,7 +122,8 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ) + currentPreTreatmentState = PRE_TREATMENT_START_STATE; + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); break; } Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r1a685471524555a374854c0c9ec8e208e71fe2df -r5c521c4e9f0840c337133dc041f5e61bc89353ea --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 1a685471524555a374854c0c9ec8e208e71fe2df) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 5c521c4e9f0840c337133dc041f5e61bc89353ea) @@ -118,57 +118,6 @@ cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); cmdStartDG(); - currentStandbyState = STANDBY_FLUSH_DG_LINES_STATE; - } - break; - - case STANDBY_FLUSH_DG_LINES_STATE: - // temporary test code - TODO - remove later - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); - if ( DG_MODE_CIRC == dgOpMode ) - { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) - { - cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML ); - } - } - else if ( DG_MODE_DRAI == dgOpMode ) - { - currentStandbyState = STANDBY_DRAIN_RESERVOIR_STATE; - } - else - { - cmdStartDG(); - } - break; - - case STANDBY_DRAIN_RESERVOIR_STATE: - // temporary test code - TODO - remove later - if ( DG_MODE_CIRC == dgOpMode ) - { - currentStandbyState = STANDBY_WAIT_FOR_PRIME_STATE; - } - break; - - case STANDBY_WAIT_FOR_PRIME_STATE: - // temporary test code - TODO - remove later - if ( DG_MODE_CIRC == dgOpMode ) - { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) - { - cmdStartDGFill( FILL_RESERVOIR_TO_VOLUME_ML ); - } - } - else if ( DG_MODE_FILL == dgOpMode ) - { - currentStandbyState = STANDBY_FILL_RESERVOIR_STATE; - } - break; - - case STANDBY_FILL_RESERVOIR_STATE: - // temporary test code - TODO - remove later - if ( DG_MODE_CIRC == dgOpMode ) - { currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; } break; Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r780d9a73fe04ddd85282c413fbe5984f374f2b61 -r5c521c4e9f0840c337133dc041f5e61bc89353ea --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 780d9a73fe04ddd85282c413fbe5984f374f2b61) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 5c521c4e9f0840c337133dc041f5e61bc89353ea) @@ -39,20 +39,21 @@ #define PRIME_FILL_RESERVOIR_TO_VOLUME_ML 600 ///< Fill reservoir to this volume (in mL) during prime. /// States of the treatment reservoir management state machine. -typedef enum PreTreatmentReservoirMgmt_States +typedef enum PrimeReservoirMgmt_States { - PRETREATMENT_RESERVOIR_MGMT_START_STATE = 0, ///< If DG not already in re-circ mode, try to get it there. - PRETREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE, ///< In DG re-circ, wait for lines to flush - then start draining inactive reservoir. - PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_DRAIN_STATE, ///< Wait for drain to complete. - PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE, ///< Wait for fill to complete. - PRETREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE, ///< Reservoir fill has completed. - NUM_OF_PRETREATMENT_RESERVOIR_MGMT_STATES ///< Number of pre-treatment reservoir mgmt. states. -} PRETREATMENT_RESERVOIR_MGMT_STATE_T; + PRIME_RESERVOIR_MGMT_START_STATE = 0, ///< If DG not already in re-circ mode, try to get it there. + PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE, ///< In DG re-circ, wait for lines to flush - then start draining inactive reservoir. + PRIME_RESERVOIR_MGMT_DRAIN_STATE, ///< Wait for drain to complete. + PRIME_RESERVOIR_MGMT_START_FILL_STATE, ///< Command DG to start filling reservoir. + PRIME_RESERVOIR_MGMT_FILL_STATE, ///< Wait for fill to complete. + PRIME_RESERVOIR_MGMT_FILL_COMPLETE_STATE, ///< Reservoir fill has completed. + NUM_OF_PRIME_RESERVOIR_MGMT_STATES ///< Number of prime reservoir mgmt. states. +} PRIME_RESERVOIR_MGMT_STATE_T; // ********** private data ********** static PRE_TREATMENT_PRIME_STATE_T currentPrimeState; ///< Current state of the prime sub-mode state machine. -static PRETREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current reservoir management state. +static PRIME_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current reservoir management state. 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. @@ -96,6 +97,7 @@ currentPrimeState = PRIME_START_STATE; isPrimeCompleted = FALSE; primeStartReqReceived = FALSE; + purgeAirTimeOutTimerCount = 0; reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; reservoirFilledStatus[ DG_RESERVOIR_2 ] = FALSE; @@ -133,6 +135,11 @@ case PRIME_DIALYSATE_DIALYZER_STATE: currentPrimeState = handlePrimeDialysateDialyzerState(); break; + + default: + currentPrimeState = PRIME_START_STATE; + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_PRIME_INVALID_STATE, (U32)currentReservoirMgmtState ); + break; } execPreTreatmentReservoirMgmt(); @@ -166,58 +173,73 @@ // treatment reservoir mgmt. state machine switch ( currentReservoirMgmtState ) { - case PRETREATMENT_RESERVOIR_MGMT_START_STATE: - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; + case PRIME_RESERVOIR_MGMT_START_STATE: + if ( DG_MODE_CIRC == dgOpMode ) + { + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; + } + else + { + cmdStartDG(); + } break; - case PRETREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: - if ( DG_MODE_CIRC == dgOpMode ) + case PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: + if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) - { - cmdStartDGDrain( PRIME_DRAIN_RESERVOIR_TO_VOLUME_ML ); - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_DRAIN_STATE; - } + cmdStartDGDrain( PRIME_DRAIN_RESERVOIR_TO_VOLUME_ML ); } + + if ( DG_MODE_DRAI == dgOpMode ) + { + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_DRAIN_STATE; + } break; - case PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_DRAIN_STATE: + case PRIME_RESERVOIR_MGMT_DRAIN_STATE: if ( DG_MODE_CIRC == dgOpMode ) { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) - { - cmdStartDGFill( PRIME_FILL_RESERVOIR_TO_VOLUME_ML ); - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE; - } + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_FILL_STATE; } break; - case PRETREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE: + case PRIME_RESERVOIR_MGMT_START_FILL_STATE: + if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) + { + cmdStartDGFill( PRIME_FILL_RESERVOIR_TO_VOLUME_ML ); + } + if ( DG_MODE_FILL == dgOpMode ) + { + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FILL_STATE; + } + break; + + case PRIME_RESERVOIR_MGMT_FILL_STATE: if ( DG_MODE_CIRC == dgOpMode ) { - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FILL_COMPLETE_STATE; } break; - case PRETREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE: - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; + 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; cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; + currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; } - if ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] && FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) + if ( ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) ) { reservoirFilledStatus[ DG_RESERVOIR_2 ] = TRUE; } break; default: - // TODO - s/w fault - currentReservoirMgmtState = PRETREATMENT_RESERVOIR_MGMT_START_STATE; + 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; } } @@ -253,7 +275,9 @@ { PRE_TREATMENT_PRIME_STATE_T state = PRIME_SALINE_SETUP_STATE; +#ifndef DISABLE_UI_TREATMENT_WORKFLOW if ( TRUE == primeStartReqReceived ) +#endif { purgeAirValvesBloodPumpControl(); purgeAirTimeOutTimerCount = 0; Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r4d2dcd2d5ee3c7684be139b7e560b16d8c3abc06 -r5c521c4e9f0840c337133dc041f5e61bc89353ea --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 4d2dcd2d5ee3c7684be139b7e560b16d8c3abc06) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 5c521c4e9f0840c337133dc041f5e61bc89353ea) @@ -165,13 +165,13 @@ SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_DIRECTION, SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_STATE, // 40 SW_FAULT_ID_DIAL_OUT_FLOW_SET_TOO_HIGH, - SW_FAULT_ID____AVAILABLE_1, - SW_FAULT_ID____AVAILABLE_2, + SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, + SW_FAULT_ID_MODE_PRE_TREATMENT_PRIME_INVALID_STATE, SW_FAULT_ID_RTC_EXEC_INVALID_STATE, SW_FAULT_ID_RTC_SELF_TEST_INVALID_STATE, // 45 SW_FAULT_ID_RTC_TRANSACTION_SERVICE_INVALID_STATE, - SW_FAULT_ID_PRES_OCCL_INVALID_STATE, - SW_FAULT_ID____AVAILABLE_3, + SW_FAULT_ID_PRES_OCCL_INVALID_STATE, + SW_FAULT_ID_MODE_PRIME_RESERVOIR_MGMT_INVALID_STATE, SW_FAULT_ID____AVAILABLE_4, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL, // 50 SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, @@ -215,7 +215,6 @@ SW_FAULT_ID_AIR_TRAP_INVALID_STATE, SW_FAULT_ID_AIR_TRAP_INVALID_LEVEL_SENSOR, // 90 SW_FAULT_ID_DIALYSIS_INVALID_SALINE_BOLUS_STATE, - SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;