Index: firmware/App/Controllers/Bubble.c =================================================================== diff -u -rcdb087f7607a88b29c5ed4cdc9a76e3240fe42a3 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision cdb087f7607a88b29c5ed4cdc9a76e3240fe42a3) +++ firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -51,6 +51,7 @@ static U32 bubblesSelfTestStartTime[ NUM_OF_BUBBLES ]; ///< Air bubble detectors self-test start times. static BOOL bubblesSelfTestRequested[ NUM_OF_BUBBLES ]; ///< Air bubble detectors self-test requested flags. +static BOOL bubbleDetectionEnabled[ NUM_OF_BUBBLES ]; ///< Flag indicates whether air bubble alarm detection is enabled. /// Interval (in ms) at which to publish air bubble detectors data on CAN bus. static OVERRIDE_U32_T bubblesDataPublishInterval = { BUBBLE_PUB_INTERVAL, BUBBLE_PUB_INTERVAL, 0, 0 }; @@ -142,6 +143,20 @@ /*********************************************************************//** * @brief + * The setVenousBubbleDetectionEnabled function enabled or disables venous + * bubble detection. + * @details Inputs: none + * @details Outputs: bubbleDetectionEnabled[] + * @param enabled flag indicates whether venous bubble detection is enabled + * @return none + *************************************************************************/ +void setVenousBubbleDetectionEnabled( BOOL enabled ) +{ + bubbleDetectionEnabled[ ADV ] = enabled; +} + +/*********************************************************************//** + * @brief * The getBubbleStatus function gets the current reading for a given air bubble * detector. * @details Inputs: bubblesStatus @@ -201,35 +216,13 @@ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_BUBBLE_ALARMS ) != SW_CONFIG_ENABLE_VALUE ) #endif { - // Check status reading and act upon but the pump track switch must be closed - if ( ( BUBBLE_DETECTED == getBubbleStatus( bubble ) ) && ( STATE_CLOSED == getSwitchStatus( PUMP_TRACK_SWITCH ) ) ) + // Check for venous bubble alarm if enabled and pump track closed. + if ( ( BUBBLE_DETECTED == getBubbleStatus( bubble ) ) && + ( STATE_CLOSED == getSwitchStatus( PUMP_TRACK_SWITCH ) ) && + ( bubbleDetectionEnabled[ ADV ] != FALSE ) ) { - if ( getCurrentOperationMode() == MODE_TREA ) - { - switch ( treatmentState ) - { - case TREATMENT_BLOOD_PRIME_STATE: - case TREATMENT_DIALYSIS_STATE: - case TREATMENT_STOP_STATE: - case TREATMENT_END_STATE: - activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); - break; - - case TREATMENT_RINSEBACK_STATE: - activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK ); - break; - - default: - // Ignore other treatment states - break; - } - } + activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); } - else // Air bubble not detected - { - clearAlarmCondition( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); - clearAlarmCondition( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK ); - } } if ( TRUE == bubblesSelfTestRequested[ bubble ] ) Index: firmware/App/Controllers/Bubble.h =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Controllers/Bubble.h (.../Bubble.h) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Controllers/Bubble.h (.../Bubble.h) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -62,6 +62,8 @@ void execBubbles( void ); void selfTestBubble( BUBBLES_T ); +void setVenousBubbleDetectionEnabled( BOOL enabled ); + BUBBLE_STATUS_T getBubbleStatus( BUBBLES_T bubble ); SELF_TEST_STATUS_T getBubbleSelfTestStatus( BUBBLES_T bubble ); Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r0a61f7fa5ff6945ebc2e507d8ecb71a652c38eaa -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 0a61f7fa5ff6945ebc2e507d8ecb71a652c38eaa) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -73,6 +73,7 @@ requestAlarmLampPattern( LAMP_PATTERN_FAULT ); // in case we get here before LED POST can take alarm lamp out of manual control. doorClosedRequired( FALSE, FALSE ); syringeDetectionRequired( FALSE ); + setVenousBubbleDetectionEnabled( FALSE ); // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -rc1b9ac0dbf2196280895d2e440dd7ac288ac8424 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision c1b9ac0dbf2196280895d2e440dd7ac288ac8424) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -158,6 +158,8 @@ exitBloodLeakNormalState(); + setVenousBubbleDetectionEnabled( FALSE ); + return currentPostTreatmentState; } Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r12708a04ae3365e11180182fc52d005c229a7bc6 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 12708a04ae3365e11180182fc52d005c229a7bc6) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -146,6 +146,7 @@ resetBloodPumpRotorCount(); resetDialInPumpRotorCount(); resetPreLoadStatus(); + setVenousBubbleDetectionEnabled( FALSE ); // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r2a03f6c87706478406a4962d70f5bae2ccb57728 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2a03f6c87706478406a4962d70f5bae2ccb57728) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -217,6 +217,8 @@ initRinseback(); initTreatmentRecirc(); initTreatmentEnd(); + // Enable venous bubble detection in treatment mode + setVenousBubbleDetectionEnabled( TRUE ); return currentTreatmentState; } Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r12708a04ae3365e11180182fc52d005c229a7bc6 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 12708a04ae3365e11180182fc52d005c229a7bc6) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -123,6 +123,8 @@ stopSyringePump(); cmdStopDGTrimmerHeater(); setupForTxEndWait4RinsebackState(); + // Enable venous bubble detection + setVenousBubbleDetectionEnabled( TRUE ); } /*********************************************************************//** Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u -r12708a04ae3365e11180182fc52d005c229a7bc6 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 12708a04ae3365e11180182fc52d005c229a7bc6) +++ firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -122,6 +122,9 @@ setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setupForRecirculationStopState(); + // Disable venous bubble detection while recirculating + setVenousBubbleDetectionEnabled( FALSE ); + // Ensure syringe pump is stopped stopSyringePump(); // Stop air trap leveling control Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -r1d07de4e970f54f2ae1786ef546cf5567df9ba8e -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 1d07de4e970f54f2ae1786ef546cf5567df9ba8e) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -111,6 +111,9 @@ // Reset saline bolus state in case alarm interrupted one resetSalineBolus(); + // Enable venous bubble detection (in case returning from mid-treatment rinseback) + setVenousBubbleDetectionEnabled( TRUE ); + // Should always have an alarm active in treatment stop sub-mode so that user can take action if ( FALSE == isAnyAlarmActive() ) { Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r1d07de4e970f54f2ae1786ef546cf5567df9ba8e -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 1d07de4e970f54f2ae1786ef546cf5567df9ba8e) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -1745,6 +1745,10 @@ handleBloodPumpHardStopRequest( message ); break; + case MSG_ID_HD_ENABLE_VENOUS_BUBBLE_ALARM_DETECTION: + handleEnableVenousBubbleAlarmDetectionRequest( message ); + break; + // The default cannot be reached in VectorCAST since the cases are run in a for loop default: // Unrecognized message ID received - ignore Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r12708a04ae3365e11180182fc52d005c229a7bc6 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 12708a04ae3365e11180182fc52d005c229a7bc6) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -8027,6 +8027,7 @@ // Verify payload length if ( ( 0 == message->hdr.payloadLen ) && ( TRUE == isTestingActivated() ) ) { + result = TRUE; signalDialInPumpHardStop(); } @@ -8050,6 +8051,7 @@ // Verify payload length if ( ( 0 == message->hdr.payloadLen ) && ( TRUE == isTestingActivated() ) ) { + result = TRUE; signalDialOutPumpHardStop(); } @@ -8073,11 +8075,39 @@ // Verify payload length if ( ( 0 == message->hdr.payloadLen ) && ( TRUE == isTestingActivated() ) ) { + result = TRUE; signalBloodPumpHardStop(); } // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleEnableVenousBubbleAlarmDetectionRequest function handles a + * request to enable/disable venous bubble alarm detection. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleEnableVenousBubbleAlarmDetectionRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify payload length + if ( sizeof( BOOL ) == message->hdr.payloadLen ) + { + BOOL enabled; + + memcpy( &enabled, message->payload, sizeof( BOOL ) ); + result = TRUE; + setVenousBubbleDetectionEnabled( enabled ); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r19f13e67288117e7f81c1245a75cc6b5f8aaf899 -rf63f470a02e5584d107becc6d6ffcacaac88b19e --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 19f13e67288117e7f81c1245a75cc6b5f8aaf899) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f63f470a02e5584d107becc6d6ffcacaac88b19e) @@ -968,6 +968,10 @@ // MSG_ID_HD_BLOOD_PUMP_HARD_STOP void handleBloodPumpHardStopRequest( MESSAGE_T *message ); +// MSG_ID_HD_ENABLE_VENOUS_BUBBLE_ALARM_DETECTION +void handleEnableVenousBubbleAlarmDetectionRequest( MESSAGE_T *message ); + + /**@}*/ #endif