Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r63829407ef68efd9e151dc069b622dbd65494e23 -r0da5bca220fe41798cf066597d47a5e279f6e8f0 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 63829407ef68efd9e151dc069b622dbd65494e23) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 0da5bca220fe41798cf066597d47a5e279f6e8f0) @@ -7,8 +7,8 @@ * * @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 @@ -17,6 +17,7 @@ #include "Buttons.h" #include "DrySelfTests.h" +#include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" #include "TaskGeneral.h" @@ -202,19 +203,64 @@ *************************************************************************/ 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 ) ) { + // 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; - requestNewOperationMode( MODE_TREA ); + if ( ( ddOpMode == DD_MODE_GEND ) && ( TRUE == isDialysateGoodToDeliver ) ) + { + requestNewOperationMode( MODE_TREA ); + } } return state; } +/*********************************************************************//** + * @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; + } +} + /**@}*/