Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rd6545ea964a5bc990f0d5cafba2ca18c6bef50ce -rb5f9997c044f5d3516ac84ce1d756705215895f5 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision d6545ea964a5bc990f0d5cafba2ca18c6bef50ce) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b5f9997c044f5d3516ac84ce1d756705215895f5) @@ -7,15 +7,16 @@ * * @file ModePreTreat.c * -* @author (last) Varshini Nagabooshanam -* @date (last) 26-Jan-2026 +* @author (last) Raghu Kallala +* @date (last) 08-May-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 * ***************************************************************************/ #include "Buttons.h" +#include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" #include "Timers.h" @@ -292,14 +293,38 @@ *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ) { - BOOL paramsValid = getValidTreatParamsReceived(); - BOOL paramsConfirmed = getTreatParamsConfirmed(); - TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + BOOL paramsValid = getValidTreatParamsReceived(); + BOOL paramsConfirmed = getTreatParamsConfirmed(); + BOOL isDialysateGoodToDeliver = TRUE; // TODO replace TRUE with getDialysateGoodToDeliverStatus() when we are ready + F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; + F32 presUFVolumeL = 0.0F; + F32 presUFRateMlMin = 0.0F; + U32 ddSubMode = getDDSubMode(); + 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: Patient Connection if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) { - state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + // 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 ); + presUFRateMlMin = ( presUFVolumeL * (F32)ML_PER_LITER ) / (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); + // Direct DD to generate dialysate and bypass while priming blood + cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateMlMin, + getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, + getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), + bicarbConvFactor, + getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), + getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); + } + // TODO: when additional Pre-Treatment states are implemented, change to TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE. + // state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + if ( ( ddOpMode == DD_MODE_GEND ) && ( TRUE == isDialysateGoodToDeliver ) ) + { + requestNewOperationMode( MODE_TREA ); + } } return state; @@ -319,7 +344,7 @@ // TODO : after implementing this state, place the transition in the right place - requestNewOperationMode( MODE_TREA ); + //requestNewOperationMode( MODE_TREA ); return state; } @@ -337,4 +362,27 @@ goToInstallStateRequested = TRUE; } +/*********************************************************************//** + * @brief + * The signalAlarmActionToPreTreatmentMode function executes the given alarm action + * as appropriate while in Pre-Treatment Mode. + * @details \b Inputs: none + * @details \b Outputs: given alarm action executed + * @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 + break; + + default: + // do not handle other actions in pre-treatment mode + break; + } +} + /**@}*/ Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -rd6545ea964a5bc990f0d5cafba2ca18c6bef50ce -rb5f9997c044f5d3516ac84ce1d756705215895f5 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision d6545ea964a5bc990f0d5cafba2ca18c6bef50ce) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision b5f9997c044f5d3516ac84ce1d756705215895f5) @@ -7,8 +7,8 @@ * * @file ModePreTreat.h * -* @author (last) Dara Navaei -* @date (last) 26-Oct-2025 +* @author (last) Raghu Kallala +* @date (last) 08-May-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 @@ -20,6 +20,7 @@ #include "TDCommon.h" #include "TDDefs.h" +#include "DDDefs.h" /** * @defgroup TDPreTreatmentMode TDPreTreatmentMode @@ -34,6 +35,7 @@ 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. Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r5a29e093e8a11f971c312cab5f6e7fedae2953db -rb5f9997c044f5d3516ac84ce1d756705215895f5 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 5a29e093e8a11f971c312cab5f6e7fedae2953db) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision b5f9997c044f5d3516ac84ce1d756705215895f5) @@ -7,8 +7,8 @@ * * @file OperationModes.c * -* @author (last) Varshini Nagabooshanam -* @date (last) 29-Jan-2026 +* @author (last) Raghu Kallala +* @date (last) 07-May-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -319,9 +319,9 @@ case MODE_STAN: signalAlarmActionToStandbyMode( action ); break; -// case MODE_PRET: -// signalAlarmActionToPreTreatmentMode( action ); -// break; + case MODE_PRET: + signalAlarmActionToPreTreatmentMode( action ); + break; case MODE_TREA: signalAlarmActionToTreatmentMode( action ); break; Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r253979e460b82c6d038e0a566f3be8c6df0a28c9 -rb5f9997c044f5d3516ac84ce1d756705215895f5 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 253979e460b82c6d038e0a566f3be8c6df0a28c9) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision b5f9997c044f5d3516ac84ce1d756705215895f5) @@ -8,7 +8,7 @@ * @file AlarmMgmtSWFaults.h * * @author (last) Raghu Kallala -* @date (last) 29-Apr-2026 +* @date (last) 30-Apr-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -186,11 +186,12 @@ SW_FAULT_ID_TD_AIR_PUMP_DUTY_CYCLE_OUT_OF_RANGE = 155, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER = 156, SW_FAULT_ID_INVALID_TREATMENT_MODALITY = 157, - SW_FAULT_ID_MODE_PRE_TX_INSTALL_INVALID_STATE = 158, - SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE = 159, - SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1 = 160, - SW_FAULT_ID_MODE_POST_TX_AUTO_EJECT_INVALID_STATE = 161, - SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 162, + SW_FAULT_ID_INVALID_DD_DIALYSATE_DATA = 158, + SW_FAULT_ID_MODE_PRE_TX_INSTALL_INVALID_STATE = 159, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE = 160, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1 = 161, + SW_FAULT_ID_MODE_POST_TX_AUTO_EJECT_INVALID_STATE = 162, + SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 163, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r253979e460b82c6d038e0a566f3be8c6df0a28c9 -rb5f9997c044f5d3516ac84ce1d756705215895f5 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 253979e460b82c6d038e0a566f3be8c6df0a28c9) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision b5f9997c044f5d3516ac84ce1d756705215895f5) @@ -8,7 +8,7 @@ * @file Messaging.c * * @author (last) Raghu Kallala -* @date (last) 06-Apr-2026 +* @date (last) 30-Apr-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -108,6 +108,7 @@ { MSG_ID_FW_VERSIONS_REQUEST, &handleVersionRequestMessage }, { MSG_ID_UI_CHECK_IN, &handleUICheckIn }, { MSG_ID_DD_OP_MODE_DATA, &setDDOpMode }, + { MSG_ID_DD_GEN_DIALYSATE_MODE_DATA, &setDialysateData }, { MSG_ID_DD_PRESSURES_DATA, &setDialysatePressure }, { MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE, &validateAndSetTreatmentParameters }, { MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW, &signalUserInitiateTreatment },