Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -rfdb7ee915da2741dc200fef1b624b7f383f4db85 -r8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision fdb7ee915da2741dc200fef1b624b7f383f4db85) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d) @@ -60,17 +60,19 @@ static BOOL ejectorHomeRequested; ///< Flag indicating that ejector home operation is requested. static BOOL ejectorRetractRequested; ///< Flag indicating that ejector retract operation is requested. static BOOL ejectorExtendRequested; ///< Flag indicating that ejector extend operation is requested. +static BOOL ejectorAbortRequested; ///< Flag indicating that ejector abort operation in requested. // ********** private function prototypes ********** static EJECTOR_STATE_T handleEjectorStartState( void ); static EJECTOR_STATE_T handleEjectorHomingState( void ); -static EJECTOR_STATE_T handleEjectorRetractedState ( void ); -static EJECTOR_STATE_T handleEjectorExtendedState ( void ); -static EJECTOR_STATE_T handleEjectorRetractingState ( void ); -static EJECTOR_STATE_T handleEjectorExtendingState ( void ); +static EJECTOR_STATE_T handleEjectorRetractedState( void ); +static EJECTOR_STATE_T handleEjectorExtendedState( void ); +static EJECTOR_STATE_T handleEjectorRetractingState( void ); +static EJECTOR_STATE_T handleEjectorExtendingState( void ); static EJECTOR_STATE_T handleEjectorRetractBackoffState( void ); static EJECTOR_STATE_T handleEjectorDirChangeStopState( void ); +static EJECTOR_STATE_T handleEjectorAbortState( void ); static void resetEjectorFlags( void ); static void publishEjectorData( void ); @@ -103,14 +105,15 @@ * The resetEjectorFlags function resets the ejector flags to FALSE. * @details \b Inputs: none * @details \b Outputs: ejectorHomeRequested, ejectorRetractRequested, - * ejectorExtendRequested + * ejectorExtendRequested, ejectorAbortRequested * @return none *************************************************************************/ static void resetEjectorFlags( void ) { ejectorHomeRequested = FALSE; ejectorRetractRequested = FALSE; ejectorExtendRequested = FALSE; + ejectorAbortRequested = FALSE; } /*********************************************************************//** @@ -175,6 +178,20 @@ /*********************************************************************//** * @brief + * The extendEjector function requests an ejector extend operation. + * @details \b Inputs: currentEjectorState + * @details \b Outputs: ejectorExtendRequested + * @return TRUE if extend command accepted, FALSE if not + *************************************************************************/ +void abortEjector( void ) +{ + setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); + // Set the flag to TRUE regardless of where the ejector is at + ejectorAbortRequested = TRUE; +} + +/*********************************************************************//** + * @brief * The getEjectorState function returns the current ejector control state machine. * @details \b Inputs: currentEjectorState * @details \b Outputs: none @@ -229,11 +246,21 @@ currentEjectorState = handleEjectorDirChangeStopState(); break; + case EJECTOR_STATE_ABORT: + currentEjectorState = handleEjectorAbortState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_EJECTOR_INVALID_STATE, (U32)currentEjectorState ) break; } + if ( TRUE == ejectorAbortRequested ) + { + // If abort has been called, set it to abort state no matter where we are at. + currentEjectorState = EJECTOR_STATE_ABORT; + } + // reset request flags after processing ejector control state machine (they expire) resetEjectorFlags(); @@ -416,6 +443,13 @@ return state; } +static EJECTOR_STATE_T handleEjectorAbortState( void ) +{ + EJECTOR_STATE_T state = EJECTOR_STATE_ABORT; + + return state; +} + /*********************************************************************//** * @brief * The publishEjectorData function constructs and sends the air pump data Index: firmware/App/Controllers/Ejector.h =================================================================== diff -u -rfdb7ee915da2741dc200fef1b624b7f383f4db85 -r8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d --- firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision fdb7ee915da2741dc200fef1b624b7f383f4db85) +++ firmware/App/Controllers/Ejector.h (.../Ejector.h) (revision 8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d) @@ -53,6 +53,7 @@ EJECTOR_STATE_EXTENDING, ///< Ejector Extending state EJECTOR_STATE_DIR_CHANGE_STOP, ///< Ejector Direction Change Stop state EJECTOR_STATE_RETRACT_BACKOFF, ///< Ejector Backing Off Retracted state + EJECTOR_STATE_ABORT, ///< Ejector abort state NUM_OF_EJECTOR_STATES, ///< Number of ejector states } EJECTOR_STATE_T; @@ -64,6 +65,7 @@ BOOL homeEjector( void ); BOOL retractEjector( void ); BOOL extendEjector( void ); +void abortEjector( void ); BOOL testEjectorDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testEjectorCommand( MESSAGE_T *message ); Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rb57e35bcded6968444b66e7a58dec34c3dd99082 -r8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision b57e35bcded6968444b66e7a58dec34c3dd99082) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d) @@ -114,6 +114,7 @@ *************************************************************************/ U32 execFaultMode( void ) { + // The stop button press events are consumed here upon requesting to stop. isStopButtonPressed(); switch( faultState ) @@ -129,7 +130,7 @@ default: // Fault in fault mode is needed? SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_FAULT_INVALID_STATE, (U32)faultState ) - faultState = TD_FAULT_DEENERGIZED_STATE; + faultState = TD_FAULT_ENERGIZED_STATE; break; } @@ -168,7 +169,7 @@ setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - // Not calling ejector means off + abortEjector(); // stopSyringePump(); break; @@ -179,7 +180,7 @@ setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - // Not calling ejector means off + abortEjector(); // stopSyringePump(); break; Index: firmware/App/Modes/StateTxPaused.c =================================================================== diff -u -rb57e35bcded6968444b66e7a58dec34c3dd99082 -r8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d --- firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision b57e35bcded6968444b66e7a58dec34c3dd99082) +++ firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision 8749beb3f7bed2f9d7fcd2c6916496ea300d9f9d) @@ -97,7 +97,8 @@ // Set user alarm recovery actions allowed in this sub-mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); if ( FALSE ) // TODO ( TRUE == getRinsebackCompleted() ) - { // block rinseback action if already done + { + // block rinseback action if already done setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); } else @@ -259,7 +260,6 @@ { TREATMENT_PAUSED_STATE_T result = TREATMENT_PAUSED_NO_RECIRC_STATE; - doorClosedRequired( FALSE ); handleTreatmentPausedBloodSittingTimer(); result = handleTreatmentPausedAlarmsAndSignals( result ); @@ -278,8 +278,9 @@ { TREATMENT_PAUSED_STATE_T result = TREATMENT_PAUSED_RECOVER_BLOOD_DETECT_STATE; + // TODO uncomment //execBloodLeakZeroing(); - // + //// Keep reseting the blood sitting timer handleTreatmentPausedBloodSittingTimer(); result = handleTreatmentPausedAlarmsAndSignals( result ); @@ -397,6 +398,7 @@ { U32 targetBloodFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ); U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + setBloodPumpTargetFlowRate( targetBloodFlowMLPM, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); @@ -406,12 +408,14 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + doorClosedRequired( FALSE ); } break; case TREATMENT_PAUSED_RECIRC_DIALYSATE_ONLY_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); @@ -421,12 +425,14 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + doorClosedRequired( FALSE ); } break; case TREATMENT_PAUSED_RECIRC_BLOOD_ONLY_STATE: { U32 targetBloodFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ); + setBloodPumpTargetFlowRate( targetBloodFlowMLPM, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_B_OPEN ); @@ -436,6 +442,7 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( 0.0F ); cmdChangeQuf( 0.0F ); + doorClosedRequired( TRUE ); } break; @@ -449,6 +456,7 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( 0.0F ); cmdChangeQuf( 0.0F ); + doorClosedRequired( FALSE ); break; case TREATMENT_PAUSED_RECOVER_BLOOD_DETECT_STATE: