Index: firmware/App/Controllers/SyringePump.h =================================================================== diff -u -r104bd9ab84f7619fe04670a5cee37638e30f5a39 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision 104bd9ab84f7619fe04670a5cee37638e30f5a39) +++ firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -7,8 +7,8 @@ * * @file SyringePump.h * -* @author (last) Arpita Srivastava -* @date (last) 18-May-2026 +* @author (last) suresh +* @date (last) 18-Jun-2026 * * @author (original) Arpita Srivastava * @date (original) 18-Feb-2026 Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r1fa3d19e3ca08af7cedbf481265989830dba2627 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 1fa3d19e3ca08af7cedbf481265989830dba2627) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -23,6 +23,7 @@ #include "Messaging.h" #include "ModePreTreat.h" #include "OperationModes.h" +#include "StatePreTxHeparinSetup.h" #include "StatePreTxRecirculate.h" #include "SyringePump.h" #include "TaskGeneral.h" @@ -49,7 +50,8 @@ static TD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current Pre-Treatment sub-state static BOOL goToInstallStateRequested; ///< Flag indicating a request to transition to Install state. -static BOOL continueFromRecirculateRequested; ///< Flag indicating a request to transition to Confirm Rx. +static BOOL continueFromRecirculateRequested; ///< Flag indicating a request to transition to Confirm Rx state. +static BOOL continueFromHeparinSetupRequested; ///< Flag indicating a request to transition to Patient Connection state. static BOOL treatmentStartRequested; ///< Flag indicating the UI requested treatment start. static U32 preTreatmentStateBroadcastTimerCtr; ///< Pre-Treatment state data broadcast timer counter. static OVERRIDE_U32_T preTreatmentStatePublishInterval; ///< Pre-Treatment state data publication interval override. @@ -62,6 +64,7 @@ static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); ///< Handle Prime state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); ///< Handle Recirculate state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ); ///< Handle Confirm Rx state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleHeparinSetupState( void ); ///< Handle Heparin Setup state during Pre-Treatment. static TD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); ///< Handle Patient Connection state during Pre-Treatment static void publishPreTreatmentStates( void ); ///< Publish Pre-Treatment states to the UI. @@ -77,9 +80,12 @@ { // Start a fresh Treatment Parameters session for this run. initTreatmentParameters(); + initPreTxHeparinSetup(); + currentPreTreatmentState = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; goToInstallStateRequested = FALSE; continueFromRecirculateRequested = FALSE; + continueFromHeparinSetupRequested = FALSE; treatmentStartRequested = FALSE; preTreatmentStateBroadcastTimerCtr = PRE_TREATMENT_STATE_DATA_PUB_INITIAL_OFFSET; @@ -159,6 +165,10 @@ currentPreTreatmentState = handleRecirculateState(); break; + case TD_PRE_TREATMENT_HEPARIN_SETUP_STATE: + currentPreTreatmentState = handleHeparinSetupState(); + break; + case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: currentPreTreatmentState = handlePatientConnectionState(); break; @@ -214,6 +224,10 @@ // No action required. break; + case TD_PRE_TREATMENT_HEPARIN_SETUP_STATE: + // Heparin Setup transition is already handled in handleRxState(). + break; + case TD_PRE_TREATMENT_RECIRCULATE_STATE: // No action required. break; @@ -253,12 +267,12 @@ { TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; - // call tube set install service to auto-load tube set + // Call Tube Set Install Service to auto-load the tube set. execTubeSetInstall(); if ( TRUE == isTubeSetInstallComplete() ) { - state = TD_PRE_TREATMENT_SELF_TEST_DRY_STATE; + state = TD_PRE_TREATMENT_SELF_TEST_DRY_STATE ; } return state; @@ -332,6 +346,29 @@ /*********************************************************************//** * @brief + * The handleHeparinSetupState function executes the Heparin Setup state of + * pre-treatment mode. + * @details \b Inputs: continueFromHeparinSetupRequested. + * @details \b Outputs: continueFromHeparinSetupRequested + * @return next Pre-Treatment mode state. + *************************************************************************/ +static TD_PRE_TREATMENT_MODE_STATE_T handleHeparinSetupState( void ) +{ + TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_HEPARIN_SETUP_STATE; + + execPreTxHeparinSetup(); + + if ( TRUE == continueFromHeparinSetupRequested ) + { + continueFromHeparinSetupRequested = FALSE; + state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleRxState function executes the Confirm Rx pre-treatment step. * @details \b Inputs: none * @details \b Outputs: Requests transition to the next Pre-Treatment state when the prescription @@ -342,6 +379,8 @@ { BOOL paramsValid = getValidTreatParamsReceived(); BOOL paramsConfirmed = getTreatParamsConfirmed(); + BOOL heparinIsPrescribed = ( ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) > 0.0F ) || + ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0F ) ) ? TRUE : FALSE; BOOL isDialysateGoodToDeliver = TRUE; // TODO replace TRUE with getDialysateGoodToDeliverStatus() when we are ready F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; F32 presUFVolumeL = 0.0F; @@ -350,10 +389,9 @@ TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; DD_OP_MODE_T ddOpMode = getDDOpMode(); - // Valid + confirmed – move to next state: Recirculate State + // Valid + confirmed – move to Heparin Setup or Patient Connection. if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) { - // TODO this command of requesting dialysate delivery will move to appropriate state in pre-treatment once implemented if ( ( ddOpMode == DD_MODE_PREG ) && ( ddSubMode == DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND ) ) { presUFVolumeL = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); @@ -366,11 +404,18 @@ getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); } + if ( TRUE == heparinIsPrescribed ) + { + transitionToPreTxHeparinSetup(); + state = TD_PRE_TREATMENT_HEPARIN_SETUP_STATE; + } + else + { + state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + } + } - state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; - } - - return state; + return state; } /*********************************************************************//** @@ -423,92 +468,124 @@ /*********************************************************************//** * @brief - * The handleStartTreatmentRequest function handles the UI request to - * start treatment. - * @details \b Message \b Received: MSG_ID_UI_START_TREATMENT_REQUEST. - * @details \b Message \b Sent: MSG_ID_TD_START_TREATMENT_RESPONSE. - * @details \b Inputs: current operation mode and Pre-Treatment state. - * @details \b Outputs: treatmentStartRequested. - * @param message Pointer to the received Start Treatment request message. - * @return TRUE if the request was accepted, otherwise FALSE. + * The PreTxRequestContinueFromHeparinSetupRequested function signals a request to + * transition the Pre-Treatment mode state machine to Patient Connection state. + * @details \b Inputs: none + * @details \b Outputs: continueFromHeparinSetupRequested + * @return none *************************************************************************/ +void PreTxRequestContinueFromHeparinSetupRequested( void ) +{ + continueFromHeparinSetupRequested = TRUE; +} + +/*********************************************************************//** +* @brief +* The handleStartTreatmentRequest function handles the UI request to +* start treatment. +* @details \b Message \b Received: MSG_ID_UI_START_TREATMENT_REQUEST. +* @details \b Message \b Sent: MSG_ID_TD_START_TREATMENT_RESPONSE. +* @details \b Inputs: current operation mode and Pre-Treatment state. +* @details \b Outputs: treatmentStartRequested. +* @param message Pointer to the received Start Treatment request message. +* @return TRUE if the request was accepted, otherwise FALSE. +*************************************************************************/ BOOL handleStartTreatmentRequest( MESSAGE_T *message ) { - TD_OP_MODE_T mode = getCurrentOperationMode(); - TD_PRE_TREATMENT_MODE_STATE_T preTxState = currentPreTreatmentState; - U32 payloadLen = message->hdr.payloadLen; - BOOL accepted = FALSE; - UI_RESPONSE_PAYLOAD_T response; + TD_OP_MODE_T mode = getCurrentOperationMode(); + TD_PRE_TREATMENT_MODE_STATE_T preTxState = currentPreTreatmentState; + U32 payloadLen = message->hdr.payloadLen; + BOOL accepted = FALSE; + UI_RESPONSE_PAYLOAD_T response; - response.accepted = FALSE; - response.rejectionReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; + response.accepted = FALSE; + response.rejectionReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; - if ( ( 0U == payloadLen ) && ( MODE_PRET == mode ) && - ( TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == preTxState ) ) + if ( ( 0U == payloadLen ) && ( MODE_PRET == mode ) && + ( TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == preTxState ) ) - { - treatmentStartRequested = TRUE; - accepted = TRUE; - response.accepted = TRUE; - response.rejectionReason = REQUEST_REJECT_REASON_NONE; - } + { + treatmentStartRequested = TRUE; + accepted = TRUE; + response.accepted = TRUE; + response.rejectionReason = REQUEST_REJECT_REASON_NONE; + } - sendMessage( MSG_ID_TD_START_TREATMENT_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, - (U08 *)&response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + sendMessage( MSG_ID_TD_START_TREATMENT_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, + (U08 *)&response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); - return accepted; + return accepted; } /*********************************************************************//** - * @brief - * The signalPreTreatmentBackoutToStandby function handles a request to - * back out of Pre-Treatment to Standby. - * @details \b Inputs: current operation mode, currentPreTreatmentState, - * and Tube Set Install state. - * @details \b Outputs: Requests Standby Mode when backout is allowed. - * @return TRUE if the request is accepted, otherwise FALSE. - *************************************************************************/ +* @brief +* The signalPreTreatmentBackoutToStandby function handles a request to +* back out of Pre-Treatment to Standby. +* @details \b Inputs: current operation mode, currentPreTreatmentState, +* and Tube Set Install state. +* @details \b Outputs: Requests Standby Mode when backout is allowed. +* @return TRUE if the request is accepted, otherwise FALSE. +*************************************************************************/ BOOL signalPreTreatmentBackoutToStandby( void ) { - BOOL accepted = FALSE; + BOOL accepted = FALSE; - if ( ( MODE_PRET == getCurrentOperationMode() ) && - ( TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE == currentPreTreatmentState ) && - ( TRUE == isTubeSetInstallAwaitingConfirmation() ) ) - { - requestNewOperationMode( MODE_STAN ); - accepted = TRUE; - } + if ( ( MODE_PRET == getCurrentOperationMode() ) && + ( TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE == currentPreTreatmentState ) && + ( TRUE == isTubeSetInstallAwaitingConfirmation() ) ) + { + requestNewOperationMode( MODE_STAN ); + accepted = TRUE; + } - return accepted; + return accepted; } /*********************************************************************//** * @brief * The signalAlarmActionToPreTreatmentMode function executes the given alarm action * as appropriate while in Pre-Treatment Mode. - * @details \b Inputs: currentPreTreatmentState - * @details \b Outputs: given alarm action executed - * @param action ID of alarm action to execute + * @details \b Inputs: currentPreTreatmentState and current Heparin Setup sub-state. + * @details \b Outputs: Alarm action handled for the active Pre-Treatment state. + * @param action ID of alarm action to execute. * @return none *************************************************************************/ void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ) { switch ( action ) { case ALARM_ACTION_STOP: - // TODO add logic once we have pre-treatment mode developed + // TODO add logic once we have pre-treatment mode developed. break; case ALARM_ACTION_RESUME: - if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) - { + if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) + { signalResumePreTxRecirculate(); - } - break; + } + else if ( TD_PRE_TREATMENT_HEPARIN_SETUP_STATE == currentPreTreatmentState ) + { + signalResumePreTxHeparinSetup(); + } + else + { + // No action required. + } + break; + case ALARM_ACTION_ACK: + if ( ( TD_PRE_TREATMENT_HEPARIN_SETUP_STATE == currentPreTreatmentState ) && + ( TRUE == isPreTxHeparinAwaitingSyringeLoadConfirmation() ) && + ( FALSE == isAlarmActive( ALARM_ID_TD_PRE_TX_HEPARIN_LOAD_SYRINGE ) ) ) + { + // OK on the Load Syringe clear-only alarm confirms that + // the syringe was loaded and resumes the paused state. + signalResumePreTxHeparinSetup(); + } + break; + default: - // do not handle other actions in pre-treatment mode + // Do not handle other actions in Pre-Treatment mode. break; } } Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r3f032347c774cab541bd9efb143fa874f65d25e9 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 3f032347c774cab541bd9efb143fa874f65d25e9) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -8,7 +8,7 @@ * @file ModePreTreat.h * * @author (last) Vijay Pamula -* @date (last) 12-Jun-2026 +* @date (last) 30-Jul-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 @@ -32,15 +32,19 @@ // ********** public function prototypes ********** -void initPreTreatmentMode( void ); // Initialize this module -U32 transitionToPreTreatmentMode( void ); // Prepares for transition to pre-treatment mode -U32 execPreTreatmentMode( void ); // Execute the pre-treatment mode state machine (call from OperationModes) -void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode +void initPreTreatmentMode( void ); // Initialize this module +U32 transitionToPreTreatmentMode( void ); // Prepares for transition to pre-treatment mode +U32 execPreTreatmentMode( void ); // Execute the pre-treatment mode state machine (call from OperationModes) +void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode -void PreTxRequestTubeSetInstall( void ); // Request Pre-Treatment mode to transition to Install state. -void PreTxRequestContinueFromRecirculate( void ); // Request Pre-Treatment mode to transition to Confirm Rx state. -void PreTxRequestContinueFromHeparinSetupRequested(void ); // Request Pre-Treatment mode to transition to Patient Connection state. +void PreTxRequestTubeSetInstall( void ); // Request Pre-Treatment mode to transition to Install state. +void PreTxRequestContinueFromRecirculate( void ); // Request Pre-Treatment mode to transition to Confirm Rx. +void PreTxRequestContinueFromHeparinSetupRequested(void ); // Request Pre-Treatment mode to transition to Patient Connection state. +BOOL handleStartTreatmentRequest ( MESSAGE_T *message ); // Handle UI request to start treatment. +BOOL signalPreTreatmentBackoutToStandby( void ); // Request transition from Pre-Treatment Install: Await Confirmation to Standby. +BOOL testPreTreatmentStatePublishIntervalOverride( MESSAGE_T *message ); + /**@}*/ #endif Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -r8a3f16888f564619ab04fe904e4acbe9e8c24117 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 8a3f16888f564619ab04fe904e4acbe9e8c24117) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -270,7 +270,7 @@ default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, - SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE, + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_REQUESTED_STATE, state ); break; } Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rc27a2530b0cab5dc46459037c7ff7816b1a21dad -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -8,7 +8,7 @@ * @file AlarmMgmtSWFaults.h * * @author (last) Praneeth Bunne -* @date (last) 02-Jul-2026 +* @date (last) 07-Aug-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -199,7 +199,13 @@ SW_FAULT_ID_PRE_TX_RECIRC_INVALID_STATE = 168, SW_FAULT_ID_TD_VALVES_INVALID_VALVE2 = 169, SW_FAULT_ID_INVALID_TUBE_SET_TYPE = 170, - SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE =171, + SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 171, + SW_FAULT_ID_TD_BP_DRIVER_STATE = 172, + SW_FAULT_ID_TD_BP_MODULE_STATE = 173, + SW_FAULT_ID_INVALID_RINSEBACK_STATE = 174, + SW_FAULT_ID_TREATMENT_INVALID_RECIRC_STATE = 175, + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE =176, + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_REQUESTED_STATE = 177, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/AlarmMgmtTD.c =================================================================== diff -u -r9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision 9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7) +++ firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -7,8 +7,8 @@ * * @file AlarmMgmtTD.c * -* @author (last) Santhosh Reddy -* @date (last) 06-Jul-2026 +* @author (last) Praneeth Bunne +* @date (last) 04-Aug-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -158,6 +158,7 @@ alarmStatus.noBloodRecirc = FALSE; alarmStatus.noDialRecirc = FALSE; alarmStatus.ok = FALSE; + alarmStatus.noTempBreak = FALSE; alarmsBlockedTimer = 0; lastUserAlarmActionReceivedTime = 0; @@ -501,6 +502,13 @@ } break; + case ALARM_USER_ACTION_TEMPORARY_BREAK: + if ( ( alarmStatus.noTempBreak != TRUE ) && ( alarmStatus.noRinseback != TRUE ) ) + { + alarmActionIsValid = TRUE; + } + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_ALARM_USER_ACTION1, action ); break; @@ -547,7 +555,8 @@ break; case ALARM_USER_ACTION_RINSEBACK: - initiateAlarmAction( ALARM_ACTION_RINSEBACK ); + // Send message to UI to get user confirmation to rinseback (blood return & end treatment) - action initiated only upon receipt of user confirmation from UI + addConfirmationRequest( GENERIC_CONFIRM_ID_RINSEBACK, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); break; case ALARM_USER_ACTION_END_TREATMENT: @@ -559,6 +568,11 @@ initiateAlarmAction( ALARM_ACTION_ACK ); break; + case ALARM_USER_ACTION_TEMPORARY_BREAK: + // Send message to UI to get user confirmation to temporary break - action initiated only upon receipt of user confirmation from UI + addConfirmationRequest( GENERIC_CONFIRM_ID_TEMPORARY_BREAK, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); + break; + // This default cannot be reached in VectorCAST due to check above for alarmActionIsValid #ifndef _VECTORCAST_ default: @@ -928,7 +942,8 @@ /*********************************************************************//** * @brief * The monitorAlarms function monitors alarm audio current and also looks - * for and executes a user confirmation of user request to end treatment. + * for and executes a user confirmation of user request to shutdown, + * end treatment, temporary break, rinseback. * @details \b Inputs: none * @details \b Outputs: none * @return none @@ -946,6 +961,20 @@ initiateAlarmAction( ALARM_ACTION_END_TREATMENT ); } + // Check for user confirmation of rinseback (Blood return & end treatment) alarm response + if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == getConfirmationRequestStatus( GENERIC_CONFIRM_ID_RINSEBACK ) ) + { + clearAllRecoverableAlarms( ALARM_USER_ACTION_RINSEBACK ); + initiateAlarmAction( ALARM_ACTION_RINSEBACK ); + } + + // Check for user confirmation of temp break alarm response + if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == getConfirmationRequestStatus( GENERIC_CONFIRM_ID_TEMPORARY_BREAK ) ) + { + clearAllRecoverableAlarms( ALARM_USER_ACTION_TEMPORARY_BREAK ); + initiateAlarmAction( ALARM_ACTION_TEMPORARY_BREAK ); + } + // TODO - Check current vs. expected audio output } @@ -1153,6 +1182,7 @@ BOOL endTxOnlyAlarmActive = FALSE; BOOL usrAckReq = FALSE; BOOL noMinimize = TRUE; + BOOL noTempBreak = FALSE; TD_OP_MODE_T currentMode = getCurrentOperationMode(); ALARM_T propsTop = getAlarmProperties( alarmStatus.alarmTop ); ALARM_ID_T a; @@ -1161,10 +1191,12 @@ alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RESUME ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RESUME ] ? FALSE : TRUE ); alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RINSEBACK ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RINSEBACK ] ? FALSE : TRUE ); alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_END_TREATMENT ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_END_TREATMENT ] ? FALSE : TRUE ); + alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_TEMP_BREAK ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_TEMPORARY_BREAK ] ? FALSE : TRUE ); // Reset user alarm recovery actions allowed by active alarms flags alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RESUME ] = FALSE; alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RINSEBACK ] = FALSE; alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT ] = FALSE; + alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_TEMP_BREAK ] = FALSE; // Determine alarm flags for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) @@ -1181,6 +1213,7 @@ alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RESUME ] |= props.alarmNoResume; alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RINSEBACK ] |= props.alarmNoRinseback; alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT ] |= props.alarmNoEndTreatment; + alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_TEMP_BREAK ] |= props.alarmNoRinseback; if ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RESUME ] ) { noResume = ( TRUE == props.alarmNoResume ? TRUE : noResume ); @@ -1205,6 +1238,14 @@ { noEndTreatment = TRUE; } + if ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_TEMPORARY_BREAK ] ) + { + noTempBreak = ( TRUE == props.alarmNoRinseback ? TRUE : noTempBreak ); + } + else + { + noTempBreak = TRUE; + } // if there are any active alarms that only allow end treatment, set flag so we can ensure we do not allow OK option. if ( ( TRUE == props.alarmNoResume ) && ( TRUE == props.alarmNoRinseback ) && @@ -1230,6 +1271,7 @@ noResume = TRUE; noRinseback = TRUE; noEndTreatment = TRUE; + noTempBreak = TRUE; } // if OK option enabled and there are any active alarms that only allow end treatment, block OK option and allow end treatment option (DEN-16594). @@ -1246,6 +1288,7 @@ noResume = TRUE; noRinseback = TRUE; noEndTreatment = TRUE; + noTempBreak = TRUE; } // If in Treatment-Stop state or Fault/Service/Standby Mode, allow user to minimize the alarm window @@ -1264,6 +1307,7 @@ alarmStatus.noEndTreatment = noEndTreatment; alarmStatus.ok = usrAckReq; alarmStatus.noMinimize = noMinimize; + alarmStatus.noTempBreak = noTempBreak; resumeBlockedByAlarmProperty = noResumePerAlarmPropertyOnly; } @@ -1402,6 +1446,7 @@ payload.alarmsFlags |= ( almStatus.noResume ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RESUME) : 0 ); payload.alarmsFlags |= ( almStatus.noRinseback ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK) : 0 ); payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT) : 0 ); + payload.alarmsFlags |= ( almStatus.noTempBreak ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_TEMPORARY_BREAK) : 0 ); payload.alarmsFlags |= ( almStatus.ok ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY) : 0 ); payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED) : 0 ); payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_LAMP_ON) : 0 ); Index: firmware/App/Services/TxParams.c =================================================================== diff -u -ra1f14a4e422f94b6bc25d1b91839761e7e1196d7 -rea4df318f602d13eb9494e62331bbc1067a1afe7 --- firmware/App/Services/TxParams.c (.../TxParams.c) (revision a1f14a4e422f94b6bc25d1b91839761e7e1196d7) +++ firmware/App/Services/TxParams.c (.../TxParams.c) (revision ea4df318f602d13eb9494e62331bbc1067a1afe7) @@ -1913,7 +1913,7 @@ pressureValid = isPressureLimitValueValid( value, getU32SysConfigTreatmentParamLowerRangeLimit( TREATMENT_PARAM_VEN_PRES_HIGH_LIMIT_WINDOW ), - getU32SysConfigTreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRES_LOW_LIMIT_WINDOW ) ); + getU32SysConfigTreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRES_HIGH_LIMIT_WINDOW ) ); return pressureValid; } @@ -1933,7 +1933,7 @@ pressureValid = isPressureLimitValueValid( value, - getU32SysConfigTreatmentParamLowerRangeLimit( TREATMENT_PARAM_VEN_PRES_HIGH_LIMIT_WINDOW ), + getU32SysConfigTreatmentParamLowerRangeLimit( TREATMENT_PARAM_VEN_PRES_LOW_LIMIT_WINDOW ), getU32SysConfigTreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRES_LOW_LIMIT_WINDOW ) ); return pressureValid;