Index: firmware/App/Modes/StatePreTxDrySelfTests.c =================================================================== diff -u -rf3d2eff4db268123a85fd747fa50c35599cf92fe -ra5bffea070bf63effd45168604722146489c7dbc --- firmware/App/Modes/StatePreTxDrySelfTests.c (.../StatePreTxDrySelfTests.c) (revision f3d2eff4db268123a85fd747fa50c35599cf92fe) +++ firmware/App/Modes/StatePreTxDrySelfTests.c (.../StatePreTxDrySelfTests.c) (revision a5bffea070bf63effd45168604722146489c7dbc) @@ -50,85 +50,88 @@ #define SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ( 1 * MS_PER_SECOND ) ///< Delay before checking syringe pump occlusion after prime. // Pressure self-test timing -#define PRE_NORMAL_PRESSURE_SELF_TEST_DELAY_MS ( 5 * MS_PER_SECOND ) ///< Delay before capturing baseline arterial and venous pressures. -#define STABILTY_PRESSURE_SELF_TEST_TIME ( 5 * MS_PER_SECOND ) ///< Time allowed for pressure stabilization. +#define PRE_NORMAL_PRESSURE_DELAY_MS ( 5 * MS_PER_SECOND ) ///< Delay before capturing baseline arterial and venous pressures. +#define STABILITY_PRESSURE_CHECK_TIME_MS ( 4 * MS_PER_SECOND ) ///< Time allowed for pressure stabilization. #define VENOUS_PRESSURE_LEAK_CHECK_TIME ( 4 * MS_PER_SECOND ) ///< Time to monitor venous pressure decay (leak check). #define ARTERIAL_PRESSURE_LEAK_CHECK_TIME ( 4 * MS_PER_SECOND ) ///< Time to monitor arterial pressure decay (leak check). #define TUBESET_INSERT_PRESSURE_SETTLE_TIME_MS ( 10 * MS_PER_SECOND ) ///< Time required for pressure settling after tube set insertion. +#define VENOUS_PRESSURE_TIMEOUT_MS ( 60 * MS_PER_SECOND ) ///< Max time allowed to reach venous pressure target. +#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 //Pressure self-test pump flow #define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 ///< Blood pump flow rate during arterial pressure self-test (mL/min). // Pressure thresholds -#define ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG -200.0F ///< Target arterial pressure threshold during pressure build. -#define VENOUS_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure variation during stabilization. -#define ARTERIAL_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure variation during stabilization. -#define VENOUS_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure difference during leak check. -#define ARTERIAL_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure difference during leak check. -#define VENOUS_RELIEF_PRESSURE_THRESHOLD_MMHG 20.0F ///< Venous pressure must return within this threshold after relief. -#define ARTERIAL_RELIEF_PRESSURE_THRESHOLD_MMHG 20.0F ///< Arterial pressure must return within this threshold after relief. +#define ZERO_PRESSURE_THRESHOLD_MMHG 15.0F ///< Zeroing the pressure +#define VENOUS_PRESSURE_TARGET_MMHG 250.0F ///< Target venous pressure threshold during pressure build. +#define ARTERIAL_PRESSURE_TARGET_MMHG -200.0F ///< Target arterial pressure threshold during pressure build. +#define VENOUS_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure variation during stabilization. +#define ARTERIAL_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure variation during stabilization. +#define VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure difference during leak check. +#define ARTERIAL_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure difference during leak check. +#define VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG 20.0F ///< Venous pressure must return within this threshold after relief. +#define ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG 20.0F ///< Arterial pressure must return within this threshold after relief. -// Pressure self-test timeout values -#define ARTERIAL_PRESSURE_SELF_TEST_MAX_TIME ( 30 * MS_PER_SECOND ) ///< Max time allowed to reach arterial pressure target. +/// Payload record structure for dry self-test authentication response +typedef struct +{ + U32 validTubeSet; + U32 modalityMatch; +} UI_TUBE_SET_AUTH_RESPONSE_PAYLOAD_T; -// General dry self-test timing -#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. - -/// Payload structure for response to validate from cloud +/// Payload record structure for dry self-test authentication response typedef struct { U32 accepted; - U32 reason; -} TUBE_SET_AUTH_RESULT_PAYLOAD_T; + U32 modality; +} TD_TUBE_SET_AUTH_RESPONSE_PAYLOAD_T; // ********** private data ********** static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of Dry Self-Test state machine -static U32 selfTestStartTime; ///< Start time of dry self-tests static U32 selfTestPreviousPublishDataTime; ///< Last progress data publish time +static BOOL doorStateAfterTubeSetInstall; ///< Tracks door transition after tube set install +static U32 selfTestStartTime; ///< Start time of dry self-tests static U32 selfTestTubeSetSettleTime; ///< Delay after tube set insertion -static U32 syringeOcclusionDelayStartTime; ///< Delay before syringe occlusion check static BOOL selfTestsResumeRequested; ///< Resume requested from STOPPED state -static BOOL doorStateAfterTubeSetInstall; ///< Tracks door transition after tube set install -static BOOL useHeparin; ///< Indicates whether heparin is enabled +static BOOL tubeSetUsedTestRun; ///< Indicates tube set used test executed static BOOL barcodeScanResponseReceived; ///< Barcode response received flag -static BOOL barcodeScanSuccessful; ///< Barcode scan result -static BOOL authResponseReceived; ///< Indicates authentication response received +static BOOL barcodeScanSuccessfull; ///< Barcode scan result +static U32  authStartTime; +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 BOOL dryPressureTestsCompleted; ///< Indicates dry pressure tests completed -static BOOL tubeSetUsedTestRun; ///< Indicates tube set used test executed -static BOOL occlusionBaselineWasSet; ///< Indicates occlusion baseline established -static BOOL heparinOcclusionTestRun; ///< Indicates heparin occlusion test executed -static F32 previousNormalArterialPressure; ///< Arterial pressure at baseline -static F32 previousNormalVenousPressure; ///< Venous pressure at baseline +static U32 pressureSelfTestPreNormalStartTime; ///< Start time for pre-normal pressure setup delay +static U32 venousSetupStartTime; +static BOOL venousSetupStateEntered; 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 F32 peakArterialPressure; ///< Peak arterial pressure during stabilization -static F32 arterialPressureP1; ///< First stable arterial pressure sample -static F32 arterialPressureP2; ///< Second arterial pressure sample for leak check -static BOOL arterialPressureTargetReached; ///< Indicates arterial pressure target reached -static U32 pressureSelfTestPreNormalStartTime; ///< Start time for pre-normal pressure setup delay -static U32 venousPressureStabilizationStartTime; ///< Start time for venous stabilization static U32 venousPressureLeakCheckStartTime; ///< Start time for venous leak check static U32 venousPressureReliefStartTime; ///< Start time for venous pressure relief -static U32 pressureSelfTestBloodPumpRunStartTime; ///< Blood pump run start for pressure self-test -static U32 pressureSelfTestNormalizedStartTime; ///< Start time for pressure normalization +static BOOL arterialSetupStateEntered; +static U32 arterialSetupStartTime; static U32 pressureSelfTestArterialStartTime; ///< Start time for arterial pressure build-up +static F32 peakArterialPressure; ///< Peak arterial pressure during stabilization static U32 arterialPressureStabilizationStartTime; ///< Start time for arterial stabilization +static F32 arterialPressureP1; ///< First stable arterial pressure sample +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 authResponseReceived; ///< Indicates UI auth response received -static BOOL authResponseAccepted; ///< Indicates if authentication is accepted -static REQUEST_REJECT_REASON_CODE_T authResponseReason; ///< Reason for rejection +static BOOL useHeparin; ///< Indicates whether heparin is enabled +static U32 syringeOcclusionDelayStartTime; ///< Delay before syringe occlusion check +static BOOL heparinOcclusionTestRun; ///< Indicates heparin occlusion test executed +static BOOL dryPressureTestsCompleted; ///< Indicates dry pressure tests completed +static BOOL occlusionBaselineWasSet; ///< Indicates occlusion baseline established // ********** private function prototypes ********** static void resetSelfTestsFlags( void ); -static void setupForSelfTestsStop( void ); -static void setAlarmResumePerDoorAndLatch( void ); +static void setAlarmResumePerDoor( void ); static void transitionToDrySelfTestsState( DRY_SELF_TESTS_STATE_T newState ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStartState( void ); @@ -150,29 +153,6 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpOcclusionDetectionState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); -/*********************************************************************//** - * @brief - * The initSelfTests function initializes the SelfTests module. - * @details \b Inputs: none - * @details \b Outputs: SelfTests module initialized. - * @return none - *************************************************************************/ -void initSelfTests( void ) -{ - currentDrySelfTestsState = DRY_SELF_TESTS_START_STATE; - selfTestStartTime = 0; - selfTestPreviousPublishDataTime = 0; - selfTestTubeSetSettleTime = 0; - syringeOcclusionDelayStartTime = 0; - doorStateAfterTubeSetInstall = TRUE; - dryPressureTestsCompleted = FALSE; - tubeSetUsedTestRun = FALSE; - occlusionBaselineWasSet = FALSE; - heparinOcclusionTestRun = FALSE; - authResponseReceived = FALSE; - authResponseAccepted = FALSE; - authResponseReason = REQUEST_REJECT_REASON_NONE; -} /*********************************************************************//** * @brief @@ -200,53 +180,14 @@ } /*********************************************************************//** - * @brief - * The setupForSelfTestsStop function sets actuators appropriately for self-tests - * states. - * @details \b Inputs: dryPressureTestsCompleted, PreTreatmentSubState - * @details \b Outputs: All pumps stopped - * @return none - *************************************************************************/ -static void setupForSelfTestsStop( void ) -{ - signalBloodPumpHardStop(); - // Air trap control to stop - endAirTrapControl(); - -// if ( TRUE == isAlarmActive( ALARM_ID_TD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM ) ) -// { -// retractSyringePump(); -// } -// else -// { -// stopSyringePump(); -// } - - // Set valves - set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - 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 ); - } -} - -/*********************************************************************//** * @brief -* The setAlarmResumePerDoorAndLatch function enables resume only when +* The setAlarmResumePerDoor function enables resume only when * required conditions are satisfied. * @details \b Inputs: Front door switch state * @details \b Outputs: resume alarm enabled/disabled * @return none *************************************************************************/ -static void setAlarmResumePerDoorAndLatch( void ) +static void setAlarmResumePerDoor( void ) { BOOL doorClosed = FALSE; doorClosed = ( STATE_CLOSED == getSwitchState( H9_SWCH ) ); @@ -263,6 +204,54 @@ /*********************************************************************//** * @brief + * The initSelfTests function initializes the SelfTests module. + * @details \b Inputs: none + * @details \b Outputs: SelfTests module initialized. + * @return none + *************************************************************************/ +void initSelfTests( void ) +{ + void initSelfTests( void ) + { + currentDrySelfTestsState = DRY_SELF_TESTS_START_STATE; + selfTestStartTime = 0; + selfTestPreviousPublishDataTime = 0; + selfTestTubeSetSettleTime = 0; + pressureSelfTestPreNormalStartTime = 0; + venousSetupStartTime = 0; + venousPressureStabilizationStartTime = 0; + venousPressureLeakCheckStartTime = 0; + venousPressureReliefStartTime = 0; + pressureSelfTestArterialStartTime = 0; + arterialPressureStabilizationStartTime = 0; + arterialPressureLeakCheckStartTime = 0; + arterialPressureReliefStartTime = 0; + syringeOcclusionDelayStartTime = 0; + authStartTime = 0; + doorStateAfterTubeSetInstall = TRUE; + selfTestsResumeRequested = FALSE; + tubeSetUsedTestRun = FALSE; + barcodeScanResponseReceived = FALSE; + barcodeScanSuccessfull = FALSE; + authResponseReceived = FALSE; + authResponseValidTubeSet = FALSE; + authResponseModalityAccepted = FALSE; + venousSetupStateEntered = FALSE; + arterialSetupStateEntered = FALSE; + useHeparin = FALSE; + heparinOcclusionTestRun = FALSE; + dryPressureTestsCompleted = FALSE; + occlusionBaselineWasSet = FALSE; + peakVenousPressure = 0.0F; + venousPressureP1 = 0.0F; + venousPressureP2 = 0.0F; + peakArterialPressure = 0.0F; + arterialPressureP1 = 0.0F; + arterialPressureP2 = 0.0F; +} + +/*********************************************************************//** + * @brief * The transitionToDrySelfTests function resets anything required before * the start of dry self-tests. * @details \b Inputs: front door state @@ -272,10 +261,6 @@ *************************************************************************/ void transitionToDrySelfTests( void ) { - pressureSelfTestBloodPumpRunStartTime = 0; - pressureSelfTestNormalizedStartTime = 0; - previousNormalArterialPressure = 0.0F; - previousNormalVenousPressure = 0.0F; selfTestStartTime = getMSTimerCount(); selfTestPreviousPublishDataTime = getMSTimerCount(); selfTestTubeSetSettleTime = getMSTimerCount(); @@ -441,12 +426,12 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestStartState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_START_STATE; - OPN_CLS_STATE_T frontDoorSwitch = getSwitchState( H9_SWCH ); + OPN_CLS_STATE_T door = getSwitchState( H9_SWCH ); // Want to pinch off saline once door closed after tube set install handleDoorCloseAfterTubeSetInsertion(); - if ( STATE_CLOSED == frontDoorSwitch ) + 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 ) ) @@ -459,7 +444,6 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; @@ -476,29 +460,28 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; - OPN_CLS_STATE_T frontDoorSwitch = getSwitchState( H9_SWCH ); + OPN_CLS_STATE_T door = getSwitchState( H9_SWCH ); // Restart self-test start time selfTestStartTime = getMSTimerCount(); - if ( STATE_CLOSED == frontDoorSwitch ) + if ( STATE_CLOSED == door ) { state = DRY_SELF_TESTS_USED_TUBE_SET_CHECK_STATE; } if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; } /*********************************************************************//** * @brief -* The handleDrySelfTestUsedTubeSetCheckState Verifies that the installed -* tube set is unused (dry) by checking bubble detectors and air trap levels. +* The handleDrySelfTestUsedTubeSetCheckState function verify no fluid is +* detected by bubble detectors to ensure the tube set is new. * @details \b Inputs: none * @details \b Outputs: tubeSetUsedTestRun * @return the next state of dry self-tests state machine @@ -510,26 +493,22 @@ AIR_TRAP_LEVELS_T lowerAirTrap = getLevelSensorState( H17_LEVL ); AIR_TRAP_LEVELS_T upperAirTrap = getLevelSensorState( H16_LEVL ); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_TUBESET_RESULT, (U32)bubbleStatus, (U32)BUBBLE_DETECTED ); - // Check if tube set is dry - if ( ( BUBBLE_DETECTED == bubbleStatus ) && - ( AIR_TRAP_LEVEL_AIR == lowerAirTrap ) && - ( AIR_TRAP_LEVEL_AIR == upperAirTrap ) ) + if ( ( BUBBLE_DETECTED == bubbleStatus ) && ( AIR_TRAP_LEVEL_AIR == lowerAirTrap ) && ( AIR_TRAP_LEVEL_AIR == upperAirTrap ) ) { - // If tube set is valid proceed resetArtVenPressureOffsets(); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_TUBING_SET_BARCODE_SCAN_REQUEST, 0, 0 ); + // Request barcode scan + U32 requestScan = TRUE; + sendMessage( MSG_ID_TD_TUBING_SET_BARCODE_SCAN_REQUEST, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)&requestScan, sizeof(U32) ); state = DRY_SELF_TESTS_TUBE_SET_LOADED_CHECK_STATE; } else { // Allow wet tube set only for test configuration if ( TRUE == getTestConfigStatus( TEST_CONFIG_USE_WET_TUBE_SET ) ) { - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_TUBING_SET_BARCODE_SCAN_REQUEST, 0, 0 ); - tubeSetUsedTestRun = TRUE; state = DRY_SELF_TESTS_TUBE_SET_LOADED_CHECK_STATE; + tubeSetUsedTestRun = TRUE; } else { @@ -541,16 +520,16 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; } /*********************************************************************//** * @brief -* Verifies that a tube set is installed and barcode scan is successful. -* @details \b Inputs: barcode scan status +* The handleDrySelfTestTubeSetLoadedCheckState function handles barcode +* scan result and transitions to authentication state if scan succeeded. +* @details \b Inputs: barcodeScanResponseReceived, barcodeScanSuccessfull * @details \b Outputs: none * @return the next state of dry self-tests state machine *************************************************************************/ @@ -561,27 +540,27 @@ if ( TRUE == barcodeScanResponseReceived ) { barcodeScanResponseReceived = FALSE; - if ( TRUE == barcodeScanSuccessful ) + SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_TUBESET_RESULT, (U32)barcodeScanSuccessfull, 0 ); + + if ( TRUE == barcodeScanSuccessfull ) { - // If barcode is athuenticated move to next state - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_TUBING_SET_BARCODE_SCAN_AUTHENTICATED, 0, 0 ); + authStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_TUBE_SET_AUTHENTICATION_STATE; } else { // If barcode authentication is failed trigger an alarm - activateAlarmNoData( ALARM_ID_TD_INSTALL_NEW_TUBE_SET ); + activateAlarmNoData( ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET ); } } if ( TRUE == doesAlarmStatusIndicateStop() ) { - if ( TRUE == isAlarmActive( ALARM_ID_TD_NO_TUBE_SET_LOADED ) ) + if ( TRUE == isAlarmActive( ALARM_ID_TD_TUBE_SET_NOT_DETECTED ) ) { occlusionBaselineWasSet = FALSE; } state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; @@ -591,8 +570,6 @@ * @brief * The handleDrySelfTestTubeSetAuthenticationState function handles tube set * authentication and processes the authentication response. -* @details \b Message \b Received: MSG_ID_UI_TUBE_SET_AUTHENTICATION_REQUEST -* @details \b Message \b Sent: MSG_ID_TD_TUBE_SET_AUTHENTICATION_RESPONSE * @details \b Inputs: authResponseReceived, authResponseValidTubeSet, * authResponseModalityAccepted * @details \b Outputs: none @@ -601,45 +578,36 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubeSetAuthenticationState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_TUBE_SET_AUTHENTICATION_STATE; - TUBE_SET_AUTH_RESULT_PAYLOAD_T payload; - // Initialize the payload - memset( (U08*)&payload, 0, sizeof(payload) ); - + // Response received if ( TRUE == authResponseReceived ) { authResponseReceived = FALSE; - if ( ( TRUE == authResponseValidTubeSet ) && ( TRUE == authResponseModalityAccepted ) ) + if ( FALSE == authResponseValidTubeSet ) { - // Checking validity and modality match - payload.accepted = TRUE; - payload.reason = REQUEST_REJECT_REASON_NONE; - state = DRY_SELF_TESTS_SYRINGE_PUMP_SEEK_STATE; + activateAlarmNoData( ALARM_ID_TD_INVALID_TUBING_SET ); } + else if ( FALSE == authResponseModalityAccepted ) + { + state = TD_PRE_TREATMENT_CART_INSTALL_STATE; + } else { - payload.accepted = FALSE; - if ( FALSE == authResponseValidTubeSet ) + if ( getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ) > 0 ) { - // If invalid tube set occurs trigger an alarm - payload.reason = REQUEST_REJECT_REASON_TD_AUTHENTICATION_INVALID; - activateAlarmNoData( ALARM_ID_TD_INVALID_TUBE_SET ); + state = DRY_SELF_TESTS_SYRINGE_PUMP_SEEK_STATE; } else { - // Modality mismatch - payload.reason = REQUEST_REJECT_REASON_TD_AUTHENTICATION_MODALITY_MISMATCH; + state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; } } - - // Send response to UI - sendMessage( MSG_ID_TD_TUBE_SET_AUTHENTICATION_RESPONSE, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&payload, sizeof(payload) ); } - - if ( TRUE == doesAlarmStatusIndicateStop() ) + // Timeout alarm + else if ( TRUE == didTimeout( authStartTime, TUBE_SET_AUTH_TIMEOUT_MS ) ) { + activateAlarmNoData( ALARM_ID_TD_TUBE_SET_AUTHENTICATION_TIMEOUT ); state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; @@ -661,7 +629,6 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } // else // { // using Heparin? @@ -711,16 +678,23 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } - else + if ( TRUE == didTimeout( pressureSelfTestPreNormalStartTime, PRE_NORMAL_PRESSURE_DELAY_MS ) ) { - // wait for pressure to equalize w/ atmosphere and tare arterial and venous pressures - if ( TRUE == didTimeout( pressureSelfTestPreNormalStartTime, PRE_NORMAL_PRESSURE_SELF_TEST_DELAY_MS ) ) + F32 art = getFilteredArterialPressure(); + F32 ven = getFilteredVenousPressure(); + + if ( ( fabs(art) < ZERO_PRESSURE_THRESHOLD_MMHG ) && ( fabs(ven) < ZERO_PRESSURE_THRESHOLD_MMHG ) ) { setArtVenPressureOffsets(); + venousSetupStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRESSURE_TOO_HIGH_TO_ZERO, art, ven ); + state = DRY_SELF_TESTS_STOPPED_STATE; + } } return state; @@ -738,19 +712,30 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + // Execute once on state entry + if ( FALSE == venousSetupStateEntered ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); + 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; } - else + + 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 ) { - // Log start of venous pressure test - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE, 0 ); + peakVenousPressure = ven; venousPressureStabilizationStartTime = getMSTimerCount(); - peakVenousPressure = getFilteredVenousPressure(); + venousSetupStateEntered = FALSE; state = DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE; } + // Time out alarm if it does not reach within 60 sec tolerance + else if ( TRUE == didTimeout( venousSetupStartTime, VENOUS_PRESSURE_TIMEOUT_MS ) ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURIZATION_TIMEOUT, ven ); + state = DRY_SELF_TESTS_STOPPED_STATE; + } return state; } @@ -767,25 +752,20 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( venousPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else if ( TRUE == didTimeout( venousPressureStabilizationStartTime, STABILTY_PRESSURE_SELF_TEST_TIME ) ) - { - F32 current = getFilteredVenousPressure(); - F32 diff = fabs( peakVenousPressure - current ); + F32 currentVenousPressure = getFilteredVenousPressure(); + F32 diff = fabs( peakVenousPressure - currentVenousPressure ); - if ( diff < VENOUS_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG ) + if ( diff <= VENOUS_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG ) { - venousPressureP1 = current; + venousPressureP1 = currentVenousPressure; venousPressureLeakCheckStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, diff, VENOUS_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_DECAY, diff ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -805,24 +785,19 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME ) ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME ) ) - { venousPressureP2 = getFilteredVenousPressure(); F32 diff = fabs( venousPressureP1 - venousPressureP2 ); - if ( diff <= VENOUS_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG ) + if ( diff <= VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) { venousPressureReliefStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE; } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, diff, VENOUS_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LEAK, diff ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -842,22 +817,18 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( venousPressureReliefStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else if ( TRUE == didTimeout( venousPressureReliefStartTime, STABILTY_PRESSURE_SELF_TEST_TIME ) ) - { - F32 current = getFilteredVenousPressure(); + F32 ven = getFilteredVenousPressure(); - if ( current <= VENOUS_RELIEF_PRESSURE_THRESHOLD_MMHG ) + if ( fabs( ven ) <= VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG ) { + arterialSetupStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE; } else { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, current ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_RELIEF, ven ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -877,19 +848,32 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + // Log only once on entry + if ( FALSE == arterialSetupStateEntered ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else - { - // Log start of arterial pressure test SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE, 0 ); pressureSelfTestArterialStartTime = getMSTimerCount(); - arterialPressureTargetReached = FALSE; + 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; + } return state; } @@ -908,51 +892,22 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureStabilizationState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE; - F32 arterialPressure = getFilteredArterialPressure(); - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( arterialPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - arterialPressureTargetReached = FALSE; - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else - { - // Once reached to target - if ( FALSE == arterialPressureTargetReached ) + F32 currentArterialPressure = getFilteredArterialPressure(); + F32 diff = fabs( peakArterialPressure - currentArterialPressure ); + + if ( diff <= ARTERIAL_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG ) { - if ( arterialPressure <= ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG ) - { - peakArterialPressure = arterialPressure; - arterialPressureStabilizationStartTime = getMSTimerCount(); - arterialPressureTargetReached = TRUE; - } - if ( TRUE == didTimeout( pressureSelfTestArterialStartTime, ARTERIAL_PRESSURE_SELF_TEST_MAX_TIME ) ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, arterialPressure, ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG ); - state = DRY_SELF_TESTS_STOPPED_STATE; - } + arterialPressureP1 = currentArterialPressure; + arterialPressureLeakCheckStartTime = getMSTimerCount(); + state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; } - // Stability Check P1 else { - if ( TRUE == didTimeout( arterialPressureStabilizationStartTime, STABILTY_PRESSURE_SELF_TEST_TIME ) ) - { - F32 diff = fabs( peakArterialPressure - arterialPressure ); - if ( diff < ARTERIAL_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG ) - { - arterialPressureP1 = arterialPressure; - arterialPressureLeakCheckStartTime = getMSTimerCount(); - arterialPressureTargetReached = FALSE; - state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; - } - else - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, diff, ARTERIAL_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG ); - arterialPressureTargetReached = FALSE; - state = DRY_SELF_TESTS_STOPPED_STATE; - } - } + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, diff ); + state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -971,24 +926,19 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, ARTERIAL_PRESSURE_LEAK_CHECK_TIME ) ) - { arterialPressureP2 = getFilteredArterialPressure(); F32 diff = fabs( arterialPressureP1 - arterialPressureP2 ); - if ( diff <= ARTERIAL_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG ) + if ( diff <= ARTERIAL_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) { arterialPressureReliefStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE; } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, diff, ARTERIAL_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_LEAK, diff ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -1008,22 +958,17 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE; - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == didTimeout( arterialPressureReliefStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); - } - else if ( TRUE == didTimeout( arterialPressureReliefStartTime, STABILTY_PRESSURE_SELF_TEST_TIME ) ) - { - F32 pressure = getFilteredArterialPressure(); + F32 art = getFilteredArterialPressure(); - if ( fabs( pressure ) <= ARTERIAL_RELIEF_PRESSURE_THRESHOLD_MMHG ) + if ( fabs( art ) <= ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG ) { state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } else { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, pressure ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_RELIEF, art ); state = DRY_SELF_TESTS_STOPPED_STATE; } } @@ -1080,7 +1025,6 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; @@ -1110,7 +1054,6 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); } return state; @@ -1129,7 +1072,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_STOPPED_STATE; - setAlarmResumePerDoorAndLatch(); + setAlarmResumePerDoor(); doorClosedRequired( FALSE ); // if not enough heparin alarm, pre-load pusher after retract completes @@ -1159,7 +1102,7 @@ // depressurized the line from failed pressure self tests. if ( FALSE == dryPressureTestsCompleted ) { - if ( getFilteredVenousPressure() <= VENOUS_LEAK_PRESSURE_DIFF_TOLERANCE_MMHG ) + if ( getFilteredVenousPressure() <= VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) { setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -1208,29 +1151,35 @@ /*********************************************************************//** * @brief -* The drySelfTestHandleTubeSetAuthResponse function handles tube set -* authentication response. -* @details \b Message \b Received: MSG_ID_UI_TUBE_SET_AUTHENTICATION_RESPONSE -* @details \b Inputs: message containing authentication result -* @details \b Outputs: authResponseReceived, authResponseAccepted, -* authResponseReason -* @return TRUE if received authentication response is valid, FALSE if not +* The drySelfTestHandleBarcodeScanResponse function handles the UI +* barcode scan response. +* @details \b Message \b Received: MSG_ID_UI_TUBE_SET_AUTHENTICATION_ACK +* @details \b Message \b Sent: MSG_ID_TD_TUBE_SET_AUTHENTICATION_ACK +* @details \b Inputs: message containing barcode scan success status +* @details \b Outputs: barcodeScanSuccessful, barcodeScanResponseReceived +* @return TRUE if request is valid, FALSE otherwise *************************************************************************/ BOOL drySelfTestHandleTubeSetAuthResponse( MESSAGE_T *message ) { BOOL result = FALSE; + UI_RESPONSE_PAYLOAD_T response; - if ( sizeof( TUBE_SET_AUTH_RESULT_PAYLOAD_T ) == message->hdr.payloadLen ) + if ( sizeof( UI_TUBE_SET_AUTH_RESPONSE_PAYLOAD_T ) == message->hdr.payloadLen ) { - TUBE_SET_AUTH_RESULT_PAYLOAD_T payload; + UI_TUBE_SET_AUTH_RESPONSE_PAYLOAD_T payload; - memcpy( &payload, message->payload, sizeof( TUBE_SET_AUTH_RESULT_PAYLOAD_T ) ); - authResponseReceived = TRUE; - authResponseAccepted = (BOOL)payload.accepted; - authResponseReason = (REQUEST_REJECT_REASON_CODE_T)payload.reason; + 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; } @@ -1526,9 +1475,26 @@ break; case DRY_SELF_TESTS_STOPPED_STATE: - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); - setAlarmResumePerDoorAndLatch(); + { + signalBloodPumpHardStop(); + endAirTrapControl(); + // Set valves for stop + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + 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 ); + } break; default: @@ -1547,13 +1513,13 @@ *************************************************************************/ void handleDoorCloseAfterTubeSetInsertion( void ) { - OPN_CLS_STATE_T frontDoorSwitch = getSwitchState( H9_SWCH ); + OPN_CLS_STATE_T door = getSwitchState( H9_SWCH ); - if ( STATE_OPEN == frontDoorSwitch ) + if ( STATE_OPEN == door ) { doorStateAfterTubeSetInstall = FALSE; } - if ( ( STATE_CLOSED == frontDoorSwitch ) && ( FALSE == doorStateAfterTubeSetInstall ) ) + if ( ( STATE_CLOSED == door ) && ( FALSE == doorStateAfterTubeSetInstall ) ) { setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); doorStateAfterTubeSetInstall = TRUE; Index: firmware/App/Modes/StatePreTxDrySelfTests.h =================================================================== diff -u -rf42cda8b2f9a0494dedb2696cb250a5c0567b26e -ra5bffea070bf63effd45168604722146489c7dbc --- firmware/App/Modes/StatePreTxDrySelfTests.h (.../StatePreTxDrySelfTests.h) (revision f42cda8b2f9a0494dedb2696cb250a5c0567b26e) +++ firmware/App/Modes/StatePreTxDrySelfTests.h (.../StatePreTxDrySelfTests.h) (revision a5bffea070bf63effd45168604722146489c7dbc) @@ -44,6 +44,7 @@ void transitionToDrySelfTests( void ); void execDrySelfTests( void ); +void signalResumeSelfTests( void ); U32 getDrySelfTestsState( void ); BOOL drySelfTestHandleTubeSetAuthResponse( MESSAGE_T *message ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rf42cda8b2f9a0494dedb2696cb250a5c0567b26e -ra5bffea070bf63effd45168604722146489c7dbc --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision f42cda8b2f9a0494dedb2696cb250a5c0567b26e) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision a5bffea070bf63effd45168604722146489c7dbc) @@ -184,7 +184,7 @@ SW_FAULT_ID_BLOOD_PRIME_INVALID_STATE = 153, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE = 148, SW_FAULT_ID_TD_AIR_PUMP_DUTY_CYCLE_OUT_OF_RANGE = 149, - SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE = 150, + SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE = 157, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/Messaging.c =================================================================== diff -u -readc0ae426264da75e00f4137c94821e60ec33da -ra5bffea070bf63effd45168604722146489c7dbc --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision eadc0ae426264da75e00f4137c94821e60ec33da) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision a5bffea070bf63effd45168604722146489c7dbc) @@ -117,7 +117,6 @@ { MSG_ID_UI_PRESSURE_LIMIT_WIDEN_REQUEST, &pressureLimitHandleWidenRequest }, { MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST, &bloodPrimeHandleCmdRequest }, { MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST, &bloodPrimeHandleBloodFlowChangeRequest }, - { MSG_ID_UI_TUBE_SET_AUTHENTICATION_REQUEST, &drySelfTestHandleTubeSetAuthResponse }, { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride },