Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rcc3b00ea3b364c69d3c53829dde5d0671b76c664 -r63829407ef68efd9e151dc069b622dbd65494e23 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision cc3b00ea3b364c69d3c53829dde5d0671b76c664) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 63829407ef68efd9e151dc069b622dbd65494e23) @@ -144,8 +144,8 @@ * @brief * The getPreTreatmentSubState function gets the current * pre-treatment mode state. - * @details Inputs: currentPreTreatmentState - * @details Outputs: none + * @details \b Inputs: currentPreTreatmentState + * @details \b Outputs: none * @return currentPreTreatmentState *************************************************************************/ TD_PRE_TREATMENT_MODE_STATE_T getPreTreatmentSubState( void ) @@ -156,8 +156,8 @@ /*********************************************************************//** * @brief * The handleSelfTestDryState function performs dry self-test. - * @details Inputs: none - * @details Outputs: transition to prime state on user request + * @details \b Inputs: none + * @details \b Outputs: transition to prime state on user request * @return current state (sub-mode) *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handleDrySelfTestState( void ) @@ -167,7 +167,7 @@ if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; - signalResumeSelfTests(); + signalResumeDrySelfTests(); } execDrySelfTests(); @@ -195,8 +195,8 @@ /*********************************************************************//** * @brief * The handleRxState function executes the Confirm Rx pre-treatment step. - * @details Inputs: none - * @details Outputs: Requests transition to Treatment mode when the prescription + * @details \b Inputs: none + * @details \b Outputs: Requests transition to Treatment mode when the prescription * is valid and confirmed otherwise remains in Confirm Rx. * @return next Pre-Treatment mode sub-state. *************************************************************************/ Index: firmware/App/Services/DrySelfTests.c =================================================================== diff -u -r7834f4156d6966d689de334c4c53d599e742e038 -r63829407ef68efd9e151dc069b622dbd65494e23 --- firmware/App/Services/DrySelfTests.c (.../DrySelfTests.c) (revision 7834f4156d6966d689de334c4c53d599e742e038) +++ firmware/App/Services/DrySelfTests.c (.../DrySelfTests.c) (revision 63829407ef68efd9e151dc069b622dbd65494e23) @@ -56,7 +56,7 @@ #define ARTERIAL_PRESSURE_TIMEOUT_MS ( 30 * MS_PER_SECOND ) ///< Max time allowed to reach arterial pressure target. #define MAX_DRY_SELF_TEST_TIME ( 12 * SEC_PER_MIN ) ///< Maximum total dry self-test duration. #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( 1 * MS_PER_SECOND ) ///< Interval for publishing self-test progress data. -#define TUBE_SET_AUTH_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Tube set authentication timeout +#define TUBE_SET_AUTH_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Tube set authentication timeout //Pressure self-test pump flow #define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 ///< Blood pump flow rate during arterial pressure self-test (mL/min). @@ -95,22 +95,20 @@ static U32 selfTestTubeSetSettleTime; ///< Delay after tube set insertion static BOOL selfTestsResumeRequested; ///< Resume requested from STOPPED state static BOOL tubeSetUsedTestRun; ///< Indicates tube set used test executed +static BOOL tubeSetLeakChecksStarted; ///< Indicates tube set leak check started static BOOL barcodeScanResponseReceived; ///< Barcode response received flag -static BOOL barcodeScanSuccessful; ///< Barcode scan result static U32 authenticationStartTime; ///< Authentication start timer static BOOL authResponseReceived; ///< Indicates UI auth response received static BOOL authResponseValidTubeSet; ///< Indicates tube set is valid static BOOL authResponseModalityAccepted; ///< Indicates tube set modality is accepted static U32 pressureSelfTestPreNormalStartTime; ///< Start time for pre-normal pressure setup delay static U32 venousSetupStartTime; ///< Venous setup start time -static BOOL venousSetupStateEntered; ///< Venous pressure setup state entry static F32 peakVenousPressure; ///< Peak venous pressure during stabilization static U32 venousPressureStabilizationStartTime; ///< Start time for venous stabilization static F32 venousPressureP1; ///< First stable venous pressure sample static F32 venousPressureP2; ///< Second venous pressure sample for leak check static U32 venousPressureLeakCheckStartTime; ///< Start time for venous leak check static U32 venousPressureReliefStartTime; ///< Start time for venous pressure relief -static BOOL arterialSetupStateEntered; ///< Arterial setup start time static U32 arterialSetupStartTime; ///< Arterial pressure setup state entry static U32 pressureSelfTestArterialStartTime; ///< Start time for arterial pressure build-up static F32 peakArterialPressure; ///< Peak arterial pressure during stabilization @@ -119,10 +117,10 @@ static F32 arterialPressureP2; ///< Second arterial pressure sample for leak check static U32 arterialPressureLeakCheckStartTime; ///< Start time for arterial leak check static U32 arterialPressureReliefStartTime; ///< Start time for arterial pressure relief -static BOOL dryPressureTestsCompleted; ///< Indicates dry pressure tests completed // ********** private function prototypes ********** +static void publishDrySelfTestProgress( void ); static void resetSelfTestsFlags( void ); static void setAlarmResumePerDoor( void ); static void transitionToDrySelfTestsState( DRY_SELF_TESTS_STATE_T newState ); @@ -169,13 +167,9 @@ selfTestsResumeRequested = FALSE; tubeSetUsedTestRun = FALSE; barcodeScanResponseReceived = FALSE; - barcodeScanSuccessful = FALSE; authResponseReceived = FALSE; authResponseValidTubeSet = FALSE; authResponseModalityAccepted = FALSE; - venousSetupStateEntered = FALSE; - arterialSetupStateEntered = FALSE; - dryPressureTestsCompleted = FALSE; peakVenousPressure = 0.0F; venousPressureP1 = 0.0F; venousPressureP2 = 0.0F; @@ -303,32 +297,45 @@ if ( priorSubState != currentDrySelfTestsState ) { + transitionToDrySelfTestsState( currentDrySelfTestsState ); setCurrentSubState( (U32)currentDrySelfTestsState ); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDrySelfTestsState ); } - // Publish current self-test time data + + publishDrySelfTestProgress(); +} + +/*********************************************************************//** +* @brief +* The publishDrySelfTestProgress function publishes dry self-test progress. +* @details \b Inputs: selfTestPreviousPublishDataTime +* @details \b Outputs: progress data broadcast +* @return none +*************************************************************************/ +static void publishDrySelfTestProgress( void ) +{ if ( calcTimeSince( selfTestPreviousPublishDataTime ) >= SELF_TEST_TIME_DATA_PUB_INTERVAL ) { U32 const elapsedSelfTestTimeInSecs = calcTimeSince( selfTestStartTime ) / MS_PER_SECOND; SELF_TEST_DRY_PAYLOAD_T data; selfTestPreviousPublishDataTime = getMSTimerCount(); - data.timeout = MAX_DRY_SELF_TEST_TIME; + data.timeout = MAX_DRY_SELF_TEST_TIME; data.countdown = ( elapsedSelfTestTimeInSecs <= MAX_DRY_SELF_TEST_TIME ? ( MAX_DRY_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ) : 0 ); broadcastData( MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( SELF_TEST_DRY_PAYLOAD_T ) ); } } /*********************************************************************//** * @brief - * The signalResumeSelfTests function signals the self-tests to resume + * The signalResumeDrySelfTests function signals the self-tests to resume * previous operation. * @details \b Inputs: none * @details \b Outputs: primeResumeRequested * @return none *************************************************************************/ -void signalResumeSelfTests( void ) +void signalResumeDrySelfTests( void ) { selfTestsResumeRequested = TRUE; } @@ -398,12 +405,8 @@ if ( STATE_CLOSED == door ) { - // Ensure occlusion sensor has time to settle after TubeSet insertion before starting dry self-tests - if ( TRUE == didTimeout( selfTestTubeSetSettleTime, TUBESET_INSERT_PRESSURE_SETTLE_TIME_MS ) ) - { - doorClosedRequired( TRUE ); - state = DRY_SELF_TESTS_USED_TUBE_SET_CHECK_STATE; - } + doorClosedRequired( TRUE ); + state = DRY_SELF_TESTS_USED_TUBE_SET_CHECK_STATE; } return state; @@ -427,6 +430,7 @@ if ( ( BUBBLE_DETECTED == bubble ) && ( AIR_TRAP_LEVEL_AIR == lower ) && ( AIR_TRAP_LEVEL_AIR == upper ) ) { resetArtVenPressureOffsets(); + // TODO: Send barcode scan command through FPGA interface sendMessage( MSG_ID_TD_TUBING_SET_BARCODE_SCAN_REQUEST, COMM_BUFFER_OUT_CAN_TD_2_UI, NULL, 0 ); state = DRY_SELF_TESTS_TUBE_SET_LOADED_CHECK_STATE; } @@ -435,13 +439,13 @@ // Allow wet tube set only for test configuration if ( TRUE == getTestConfigStatus( TEST_CONFIG_USE_WET_TUBE_SET ) ) { + // TODO: Send barcode scan command through FPGA interface state = DRY_SELF_TESTS_TUBE_SET_LOADED_CHECK_STATE; - tubeSetUsedTestRun = TRUE; } else { // If tube set is invalid it triggers an alarm - activateAlarmNoData( ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET ); + //SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET, (U32)bubble, (U32)lower, (U32)upper ); //signalGoToInstallState(); } } @@ -464,20 +468,16 @@ if ( TRUE == barcodeScanResponseReceived ) { barcodeScanResponseReceived = FALSE; - - if ( TRUE == barcodeScanSuccessful ) - { - // Send barcode for authentication - sendMessage( MSG_ID_TD_TUBE_SET_AUTHENTICATION_REQUEST, COMM_BUFFER_OUT_CAN_TD_2_UI, NULL, 0 ); - authenticationStartTime = getMSTimerCount(); - state = DRY_SELF_TESTS_TUBE_SET_AUTHENTICATION_STATE; - } - else - { - activateAlarmNoData( ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET ); - //signalGoToInstallState(); - } + // Send barcode for authentication + sendMessage( MSG_ID_TD_TUBE_SET_AUTHENTICATION_REQUEST, COMM_BUFFER_OUT_CAN_TD_2_UI, NULL, 0 ); + authenticationStartTime = getMSTimerCount(); + state = DRY_SELF_TESTS_TUBE_SET_AUTHENTICATION_STATE; } + else + { + activateAlarmNoData( ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET ); + //signalGoToInstallState(); + } return state; } @@ -514,6 +514,8 @@ // If valid it goes to next state else { + //tubeSetChecksCompleted = TRUE; + pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; } } @@ -575,23 +577,13 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureSetupState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; - - // Execute once on state entry - if ( FALSE == venousSetupStateEntered ) - { - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE, 0 ); - venousSetupStartTime = getMSTimerCount(); - venousSetupStateEntered = TRUE; - } - F32 ven = getFilteredVenousPressure(); // If it reaches to traget venous pressure >= 250 mmHg then the transition to venous pressure stablization state if ( ven >= VENOUS_PRESSURE_TARGET_MMHG ) { peakVenousPressure = ven; venousPressureStabilizationStartTime = getMSTimerCount(); - venousSetupStateEntered = FALSE; state = DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE; } // Time out alarm if it does not reach within 60 sec tolerance @@ -661,7 +653,7 @@ } else { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LEAK, diff ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LEAK, venousPressureP1, venousPressureP2 ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -711,31 +703,20 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureSetupState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE; - - // Log only once on entry - if ( FALSE == arterialSetupStateEntered ) - { - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE, 0 ); - pressureSelfTestArterialStartTime = getMSTimerCount(); - arterialSetupStateEntered = TRUE; - } - F32 art = getFilteredArterialPressure(); // Check the target for arterial pressure <= -200 mmHg and then transition to arterial pressure stabilization state if ( art <= ARTERIAL_PRESSURE_TARGET_MMHG ) { peakArterialPressure = art; arterialPressureStabilizationStartTime = getMSTimerCount(); - arterialSetupStateEntered = FALSE; state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE; } // Time out alarm if it does not reach within 30 sec tolerance else if ( TRUE == didTimeout( pressureSelfTestArterialStartTime, ARTERIAL_PRESSURE_TIMEOUT_MS ) ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT, art ); - arterialSetupStateEntered = FALSE; state = DRY_SELF_TESTS_STOPPED_STATE; } @@ -790,7 +771,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; - if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) + if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, ARTERIAL_PRESSURE_LEAK_CHECK_TIME ) ) { arterialPressureP2 = getFilteredArterialPressure(); F32 diff = fabs( arterialPressureP1 - arterialPressureP2 ); @@ -844,8 +825,7 @@ * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests * operation. - * @details \b Inputs: selfTestsResumeRequested, dryPressureTestsCompleted, - * tubeSetUsedTestRun, heparinOcclusionTestRun + * @details \b Inputs: selfTestsResumeRequested, tubeSetLeakChecksStarted * @details \b Outputs: selfTestsResumeRequested, selfTestStartTime, selfTestTubeSetSettleTime * @return the next state of dry self-tests state machine *************************************************************************/ @@ -856,33 +836,21 @@ setAlarmResumePerDoor(); doorClosedRequired( FALSE ); - if ( FALSE == dryPressureTestsCompleted ) - { - if ( getFilteredVenousPressure() <= VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) - { - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); - setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - endAirTrapControl(); - } - } - // if resume request, resume dry self-tests if ( TRUE == selfTestsResumeRequested ) { // Restart self-test start time selfTestsResumeRequested = FALSE; selfTestStartTime = getMSTimerCount(); - selfTestTubeSetSettleTime = getMSTimerCount(); doorClosedRequired( TRUE ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); - if ( TRUE == tubeSetUsedTestRun ) + if ( TRUE == tubeSetLeakChecksStarted ) { - resetArtVenPressureOffsets(); + pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_TUBE_SET_LOADED_CHECK_STATE; } else { - selfTestTubeSetSettleTime = getMSTimerCount(); state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; } } @@ -909,18 +877,14 @@ { UI_TUBE_SET_AUTH_RESPONSE_PAYLOAD_T payload; - memcpy( &payload, message->payload, sizeof(payload)); + memcpy( &payload, message->payload, sizeof( payload ) ); authResponseValidTubeSet = (BOOL)payload.validTubeSet; authResponseModalityAccepted = (BOOL)payload.modalityMatch; authResponseReceived = TRUE; result = TRUE; } - response.accepted = result; - response.rejectionReason = REQUEST_REJECT_REASON_NONE; - sendMessage( MSG_ID_TD_TUBE_SET_AUTHENTICATION_ACK_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)&response, sizeof( response ) ); - return result; } @@ -937,30 +901,14 @@ { switch ( newState ) { - case DRY_SELF_TESTS_START_STATE: - { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - - signalBloodPumpHardStop(); - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); - setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - endAirTrapControl(); - set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - cmdBypassDialyzer( TRUE ); - cmdChangeQd( targetDialysateFlowMLPM ); - cmdChangeQuf( 0.0F ); - } - break; - case DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); @@ -1008,12 +956,16 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + if ( DRY_SELF_TESTS_TUBE_SET_AUTHENTICATION_STATE == newState ) + { + authenticationStartTime = getMSTimerCount(); + } } break; @@ -1024,7 +976,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); cmdBypassDialyzer( TRUE ); @@ -1040,12 +992,14 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - startAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_ON, AIR_PUMP_DUTY_CYCLE_MAX ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE, 0 ); + venousSetupStartTime = getMSTimerCount(); } break; @@ -1056,7 +1010,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); @@ -1072,7 +1026,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); @@ -1088,7 +1042,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_B_OPEN ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); cmdBypassDialyzer( TRUE ); @@ -1104,12 +1058,14 @@ setBloodPumpTargetFlowRate( BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE, 0 ); + pressureSelfTestArterialStartTime = getMSTimerCount(); } break; @@ -1120,7 +1076,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); @@ -1136,7 +1092,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); @@ -1152,7 +1108,7 @@ signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_B_OPEN ); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); cmdBypassDialyzer( TRUE ); @@ -1163,28 +1119,19 @@ case DRY_SELF_TESTS_COMPLETE_STATE: signalBloodPumpHardStop(); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); cmdChangeQuf( 0.0F ); break; case DRY_SELF_TESTS_STOPPED_STATE: { signalBloodPumpHardStop(); - endAirTrapControl(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); // Set valves for stop set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - - // Vent pressure only during dry self-test if pressure tests not completed - if ( ( TD_PRE_TREATMENT_SELF_TEST_DRY_STATE == getPreTreatmentSubState() ) && ( FALSE == dryPressureTestsCompleted ) ) - { - setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); - } - else - { - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); - } setAlarmResumePerDoor(); doorClosedRequired( FALSE ); } Index: firmware/App/Services/DrySelfTests.h =================================================================== diff -u -rfa58741ab8fbca9ad24e5f3929f41da510ee02ba -r63829407ef68efd9e151dc069b622dbd65494e23 --- firmware/App/Services/DrySelfTests.h (.../DrySelfTests.h) (revision fa58741ab8fbca9ad24e5f3929f41da510ee02ba) +++ firmware/App/Services/DrySelfTests.h (.../DrySelfTests.h) (revision 63829407ef68efd9e151dc069b622dbd65494e23) @@ -44,7 +44,7 @@ void transitionToDrySelfTests( void ); void execDrySelfTests( void ); -void signalResumeSelfTests( void ); +void signalResumeDrySelfTests( void ); U32 getDrySelfTestsState( void ); BOOL drySelfTestHandleTubeSetAuthResponse( MESSAGE_T *message );