/************************************************************************** * * Copyright (c) 2020-2025 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file ModeTreatmentParams.h * * @author (last) Dara Navaei * @date (last) 19-Nov-2025 * * @author (original) Sean Nash * @date (original) 29-May-2020 * ***************************************************************************/ #ifndef __MODE_OP_PARAMS_H__ #define __MODE_OP_PARAMS_H__ #include "HDCommon.h" #include "HDDefs.h" #include "NVDataMgmt.h" #include "Utilities.h" /** * @defgroup HDTreatmentParamsMode HDTreatmentParamsMode * @brief Treatment parameters mode module. * * @addtogroup HDTreatmentParamsMode * @{ */ // ********** public definitions ********** #define MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ( 30 ) ///< Minimum pressure alarm limit delta (in mmHg) #define MAX_UF_RATE_ML_MIN ( 2000.01F / (F32)MIN_PER_HOUR ) ///< Maximum ultrafiltration rate (in mL/min). Added small decimal to prevent float round off issues. #define MIN_UF_RATE_ML_MIN ( 0.0F ) ///< Minimum ultrafiltration rate (in mL/min). #define MAX_UF_VOLUME_ML ( 8 * ML_PER_LITER ) ///< Maximum ultrafiltration volume (in mL). /// Record structure for a treatment parameters payload. typedef struct { U32 bloodFlowRate_mL_min; ///< User set blood flow rate (in mL/min) U32 dialysateFlowRate_mL_min; ///< User set dialysate flow rate (in mL/min) U32 treatmentDuration_min; ///< User set treatment duration (in min) U32 heparinPreStop_min; ///< User set heparin pre-stop time (in min) U32 salineBolusVolume_mL; ///< User set saline bolus volume (in mL) U32 acidConcentrate; ///< User set acid concentrate option U32 bicarbConcentrate; ///< User set bicarbonate concentrate option U32 dialyzerType; ///< User set dialyzer type option U32 heparinType; ///< User set heparin type option U32 bloodPressureMeasurementInterval_min; ///< User set blood pressure measurement interval (in min) U32 rinsebackFlowRate_mL_min; ///< User set rinseback flow rate (in mL/min) S32 arterialPressureLimitWindow_mmHg; ///< User set alarm limit window for arterial pressure (in mmHg) S32 venousPressureLimitWindow_mmHg; ///< User set alarm limit window for venous pressure (in mmHg) S32 venousPressureLimitAsymmetric_mmHg; ///< User set alarm limit asymmetric for venous pressure (in mmHg) F32 heparinDispenseRate_mL_hr; ///< User set heparin dispense rate (in mL/hr) F32 heparinBolusVolume_mL; ///< User set heparin bolus volume (in mL) F32 dialysateTemperature_degC; ///< User set dialysate temperature (in deg C) } TREATMENT_PARAMS_DATA_PAYLOAD_T; /// Record structure for adjustable treatment parameters typedef struct { U32 bloodFlowRate_mL_min; ///< Original blood flow rate (in mL/min) set by user before treatment start U32 dialysateFlowRate_mL_min; ///< Original dialysate flow rate (in mL/min) set by user before treatment start U32 treatmentDuration_min; ///< Original treatment duration (in min) set by user before treatment start S32 arterialPressureLimitWindow_mmHg; ///< Original alarm limit window for arterial pressure (in mmHg) set by user before treatment start S32 venousPressureLimitWindow_mmHg; ///< Original alarm limit window for venous pressure (in mmHg) set by user before treatment start S32 venousPressureLimitAsymmetric_mmHg; ///< Original alarm limit asymmetric for venous pressure (in mmHg) set by user before treatment start F32 uFVolume_L; ///< Original ultrafiltration volume (in L) set by user before treatment start } ADJ_TREATMENT_PARAMS_T; /// Record structure for current treatment parameters typedef struct { U32 accepted; ///< Accepted or rejected based on if critical data has been set. TREATMENT_PARAMS_DATA_PAYLOAD_T treatment_parameters; ///< Record structure of treatment parameters F32 uFVolume_L; ///< Current ultrafiltration volume (in L). } CURRENT_TREATMENT_PARAMS_DATA_PAYLOAD_T; // ********** Public function prototypes ********** void initTreatParamsMode( void ); // Initialize this module U32 transitionToTreatParamsMode( void ); // Prepares for transition to treatment parameters mode U32 execTreatParamsMode( void ); // Execute the treatment parameters mode state machine (call from OperationModes) BOOL validateAndSetTreatmentParameters( TREATMENT_PARAMS_DATA_PAYLOAD_T params ); // User provided treatment params to be set and validated BOOL signalUserConfirmationOfTreatmentParameters( void ); // User has confirmed treatment parameters BOOL signalUserRejectionOfTreatmentParameters( void ); // User has rejected treatment parameters BOOL signalUserCancelTreatment( void ); // User has cancelled treatment void signalAlarmActionToTreatParamsMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for treatment parameters mode BOOL validateAndSetUFVolume( F32 uFVolumeMl ); // User provided ultrafiltration volume to be set and validated BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ); // Set a specified unsigned integer treatment parameter value BOOL setTreatmentParameterS32( TREATMENT_PARAM_T param, S32 value ); // Set a specified signed integer treatment parameter value BOOL setTreatmentParameterF32( TREATMENT_PARAM_T param, F32 value ); // Set a specified floating point treatment parameter value U32 getTreatmentParameterU32( TREATMENT_PARAM_T param ); // Get a specified unsigned integer treatment parameter S32 getTreatmentParameterS32( TREATMENT_PARAM_T param ); // Get a specified signed integer treatment parameter F32 getTreatmentParameterF32( TREATMENT_PARAM_T param ); // Get a specified floating point treatment parameter S32 getTreatmentParameterS32DefaultValue( TREATMENT_PARAM_T param ); // Get the default value for a specified signed integer treatment parameter BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); // Check range for a proposed treatment parameter value S32 getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ); // Get the lower range limit for a signed integer treatment parameter S32 getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ); // Get the upper range limit for a signed integer treatment parameter U32 getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ); // Get the lower range limit for an unsigned integer treatment parameter U32 getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ); // Get the upper range limit for an unsigned integer treatment parameter F32 getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ); // Get the lower range limit for a float treatment parameter F32 getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ); // Get the upper range limit for a float treatment parameter S32 getS32DefaultTreatmentParamEdge( TREATMENT_PARAM_T param, BOOL isMin ); U32 getU32DefaultTreatmentParamEdge( TREATMENT_PARAM_T param, BOOL isMin ); F32 getF32DefaultTreatmentParamEdge( TREATMENT_PARAM_T param, BOOL isMin ); S32 getMinVenousPressureWideValueMMHG( void ); BOOL isNVInstitutionalRecordInRange( HD_INSTITUTIONAL_RECORD_T* nvInstRcrd ); // Is non-volatile memory institutional record in range void setNVInstitutionalRecordToTxParamsRecord( HD_INSTITUTIONAL_RECORD_T* nvInstitutionalRecord ); // Set the recently received institution record from NV to local tx parameters F32 getUltrafiltrationVolumeOriginal( void ); // Get the original ultrafiltration volume, set in pre-treatment mode by user. F32 getUltrafiltrationRateOriginal( void ); // Get/calculate the original ultrafiltration rate, by ultrafiltration volume and treatment duration set in pre-treatment mode by user. BOOL testSetTreatmentParameter( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); // Set a specific treatment parameter value BOOL testSendCurrentTreatmentParameters(); // Update current treatment parameters /**@}*/ #endif