/************************************************************************** * * Copyright (c) 2025-2026 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 DryBiCart.h * * @author (last) Sameer Kalliadan Poyil * @date (last) 02-Feb-2026 * * @author (original) Vinayakam Mani * @date (original) 19-Nov-2025 * ***************************************************************************/ #ifndef __DRY_BICART_H__ #define __DRY_BICART_H__ #include "DDCommon.h" #include "DDDefs.h" #include "PIControllers.h" /** * @defgroup DryBiCart DryBiCart * @brief DryBiCart unit. Performs dry bicarbonate cartridge fill, bicarb * chamber(F) fill and cartridge draining functions via a state machine. * * @addtogroup DryBiCart * @{ */ // ********** public definitions ********** #pragma pack(push, 1) /// dry bicart data structure typedef struct { U32 dryBiCartFillExecState; ///< Dry bicart execution state U32 bicarbChamberFillExecState; ///< Bicarb chamber Fill execution state U32 dryBiCartDrainExecState; ///< Dry bicart drain execution state U32 dryBiCartFillCycleCounter; ///< Dry bicart fill cycle counter U32 dryBiCartMaxFillCycleCount; ///< Dry bicart fill cycle max count U32 dryBiCartFillRequest; ///< Dry bicart fill request U32 bicarbChamberFillRequest; ///< Bicarb chamber fill request U32 dryBiCartDrainRequest; ///< Dry bicart drain request U32 dryBiCartLastFillTime; ///< Dry bicart last fill duration in milli second U32 dryBiCartCurrentFillTime; ///< Dry bicart current fill duration in milli second U32 dryBiCartType; ///< Dry bicart type (small-0/large-1) U32 dryBiCartDrainTimePeriod; ///< Dry bicart drain time based on catridge type (small/large) // TODO: remove after closed loops stabilized PI_CONTROLLER_SIGNALS_DATA dryBiCartBicarbDosingControl; ///< Dry bicart bicarb dosing closed loop control signals data PI_CONTROLLER_SIGNALS_DATA dryBiCartAcidDosingControl; ///< Dry bicart acid dosing closed loop control signals data F32 dryBiCartAcidDoseVolume; ///< Dry bicart acid dose volume F32 dryBiCartBicarbDoseVolume; ///< Dry bicart bicarb dose volume F32 dryBiCartBicarbDosingKPgain; ///< Dry bicart bicarb dosing control kp gain F32 dryBiCartBicarbDosingKIgain; ///< Dry bicart bicarb dosing control ki gain F32 dryBiCartAcidDosingKPgain; ///< Dry bicart acid dosing control kp gain F32 dryBiCartAcidDosingKIgain; ///< Dry bicart acid dosing control ki gain } DRY_BICART_DATA_T; #pragma pack(pop) // ********** public function prototypes ********** void initDryBiCart( void ); void transitionToDryBicart( void ); U32 execDryBicartFillMode( void ); U32 execBicarbChamberFillMode( void ); U32 execDryBicartDrainMode( void ); void execDryBicart( void ); BOOL setBicarbChamberFillRequested( void ); BOOL setBicartFillRequested( void ); BOOL setBicartDrainRequested( void ); F32 getAcidBicarbTargetConductivity( void ); F32 getAcidBicarbDeltaConductivity( void ); F32 getBicarbTargetConductivity( void ); F32 getBicarbDeltaConductivity( void ); //void setBicarb( F32 targetValue ); //F32 getBicarb( void ); void setBicarbDoseVol( F32 targetValue ); F32 getBicarbDoseVol( void ); F32 getAcidDoseVol( void ); void setAcidDoseVol( F32 targetValue ); F32 getBicarbKpGainCoefficient( void ); F32 getBicarbKiGainCoefficient( void ); F32 getAcidKpGainCoefficient( void ); F32 getAcidKiGainCoefficient( void ); DRY_BICART_FILL_EXEC_STATE_T getCurrentDryBiCartFillExecState( void ); BOOL testDryBiCartDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testDryBiCartFillCycleMaxCountOverride( MESSAGE_T *message ); BOOL testDryBiCartFillRequestOverride( MESSAGE_T *message ); BOOL testBiCarbChamberFillRequestOverride( MESSAGE_T *message ); BOOL testDryBiCartDrainRequestOverride( MESSAGE_T *message ); BOOL testDryBiCartTypeOverride( MESSAGE_T *message ); BOOL testDryBiCartAcidDoseVolumeOverride( MESSAGE_T *message ); BOOL testDryBiCartBicarbDoseVolumeOverride( MESSAGE_T *message ); BOOL testDryBiCartBicarbDoseVolControlKpGainOverride( MESSAGE_T *message ); BOOL testDryBiCartBicarbDoseVolControlKiGainOverride( MESSAGE_T *message ); BOOL testDryBiCartAcidDoseVolControlKpGainOverride( MESSAGE_T *message ); BOOL testDryBiCartAcidDoseVolControlKiGainOverride( MESSAGE_T *message ); BOOL testDryBiCartTargetConductivityOverride( MESSAGE_T *message ); BOOL testDryBiCartDeltaConductivityOverride( MESSAGE_T *message ); BOOL testDryBiCartAcidBicarbDeltaConductivityOverride( MESSAGE_T *message ); BOOL testDryBiCartAcidBicarbTargetConductivityOverride( MESSAGE_T *message ); /**@}*/ #endif