Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -ra631e128cd6be44aa232e23b58a229bfb8fe9043 -r788a0b1a638d815df1e83af80cba7be03af2020c --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision a631e128cd6be44aa232e23b58a229bfb8fe9043) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 788a0b1a638d815df1e83af80cba7be03af2020c) @@ -23,10 +23,11 @@ #include "FpgaDD.h" #include "Heaters.h" #include "Level.h" +#include "MessageSupport.h" +#include "Messaging.h" #include "MixingControl.h" #include "ModeGenDialysate.h" #include "ModeStandby.h" -#include "Messaging.h" #include "OperationModes.h" #include "Pressure.h" #include "TaskGeneral.h" @@ -109,6 +110,8 @@ //TODO: remove later once level sensor working static U32 bicarbChamberPeriodicFillCounter; +// Balancing chamber state change tracker +static BAL_CHAMBER_EXEC_STATE_T prevBalChamberState; ///< Balancing chamber Previous State tracking variable // ********** private function prototypes ********** @@ -185,6 +188,7 @@ pendingTdDialysateFlowrate = 0.0F; isBalChamberSwitchingPeriodUpdatePending = FALSE; bcSwitchingBasedOnClosedPeriodCounter = 0; + prevBalChamberState = BAL_CHAMBER_STATE_IDLE; //TODO:remove once level sensor working bicarbChamberPeriodicFillCounter = 0; } @@ -357,8 +361,8 @@ /*********************************************************************//** * @brief * The execBalancingChamberControl function executes the balancing chamber state machine. - * @details \b Inputs: balChamberExecState - * @details \b Outputs: balChamberExecState + * @details \b Inputs: balChamberExecState, prevBalChamberState + * @details \b Outputs: balChamberExecState prevBalChamberState * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT when wrong balancing chamber state invoked. * @return current state. *************************************************************************/ @@ -443,6 +447,17 @@ break; } + if ( prevBalChamberState != balChamberExecState ) + { + if ( ( BAL_CHAMBER_STATE_IDLE == balChamberExecState ) || + ( BAL_CHAMBER_STATE1_FILL_START == balChamberExecState ) || + ( BAL_CHAMBER_STATE2_FILL_START == balChamberExecState ) ) + { + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_BC_STATE_CHANGE, prevBalChamberState, balChamberExecState ); + } + } + prevBalChamberState = balChamberExecState; + //Publish balancing chamber data publishBalChamberData(); @@ -1494,14 +1509,15 @@ * @brief * The setBalChamberSwitchingOnlyStatus function sets the balancing chamber * switching only On/Off status. - * @details \b Inputs: balanceChamberSwitchingOnly + * @details \b Inputs: balanceChamberSwitchingOnly, isBalChamberSwitchingActive * @details \b Outputs: none * @param OnOff to set the BC switch status * @return none *************************************************************************/ void setBalChamberSwitchingOnlyStatus( BOOL OnOff ) { balanceChamberSwitchingOnly = OnOff; + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_BC_SWITCH_ONLY_MODE_CHANGE, balanceChamberSwitchingOnly, isBalChamberSwitchingActive ); } /*********************************************************************//** Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -ra631e128cd6be44aa232e23b58a229bfb8fe9043 -r788a0b1a638d815df1e83af80cba7be03af2020c --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision a631e128cd6be44aa232e23b58a229bfb8fe9043) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 788a0b1a638d815df1e83af80cba7be03af2020c) @@ -24,6 +24,7 @@ #include "DryBiCart.h" #include "Level.h" #include "Messaging.h" +#include "MessageSupport.h" #include "MixingControl.h" #include "ModeGenDialysate.h" #include "OperationModes.h" @@ -141,6 +142,31 @@ static BOOL dryBiCartPressureDecayStartTimeFlag; ///< Dry bicart d66 pressure decay start timer. static DRY_BICART_OPERATION_T dryBicartStartRequest; ///< Dry bicart operation, fill or supply or drain request +// drybicart mixing +static OVERRIDE_F32_T dryBiCartAcidMixVolume; ///< Acid concentrate volume in ml ( overrideable). +static OVERRIDE_F32_T dryBiCartBicarbMixVolume; ///< Bicarb concentrate volume in ml ( overrideable). + +static OVERRIDE_F32_T dryBiCartAcidMixVolumeKpGain; ///< Acid kp gain. +static OVERRIDE_F32_T dryBiCartAcidMixVolumeKiGain; ///< Acid ki gain. + +static OVERRIDE_F32_T dryBiCartBicarbMixVolumeKpGain; ///< Bicarb kp gain +static OVERRIDE_F32_T dryBiCartBicarbMixVolumeKiGain; ///< Acid ki gain. + +static DIALYSATE_MIXING_DATA_T dialysateMix[ NUM_OF_DIALYSATE_MIXING_ID ]; ///< Array of dialysate mixing data structure. + +static OVERRIDE_F32_T dryBiCartBicarbTargetConductivity; ///< Target bicarb conductivity +static OVERRIDE_F32_T dryBiCartBicarbDeltaConductivity; ///< Target delta conductivity + +static OVERRIDE_F32_T dryBiCartDialysateTargetConductivity; ///< Acid bicarb mix conductivity +static OVERRIDE_F32_T dryBiCartDialysateDeltaConductivity; ///< Acid bicarb delta conductivity + +static OVERRIDE_U32_T dryBiCartMixControlInterval; ///< Mix control interval + +static PI_CONTROLLER_SIGNALS_DATA bicarbControlSignals; ///< Bicarb closed loop control signal data +static PI_CONTROLLER_SIGNALS_DATA acidControlSignals; ///< Acid closed loop control signal data + +static DRY_BICART_OPERATION_T prevDryBicartState; ///< Last dry bicart operation prior to current state. + // ********** private function prototypes ********** static void updateDrybicartOperation(void); @@ -245,8 +271,9 @@ dryBiCartDrainLastCondSampleTime = 0; dryBiCartDrainCondStableCount = 0; dryBiCartDrainTimePeriod = 0; - dryBiCartPersistenceStartTime = 0; + dryBiCartPersistanceStartTime = 0; drybicartPersistenceOnLowercartPressureStartTime = 0; + prevDryBicartState = DRY_BICART_IDLE; } /*********************************************************************//** @@ -266,8 +293,8 @@ * @brief * The execDryBicart function executes the set of dry bicarbonate cartridge fill, * bicarbonate chamber fill and bicarbonate cartridge drain related state machines one at time - * @details \b Inputs: dryBicartStartRequest - * @details \b Outputs: none + * @details \b Inputs: dryBicartStartRequest, prevDryBicartState + * @details \b Outputs: prevDryBicartState * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT when wrong dry bicart state machine is * invoked. * @return none. @@ -311,6 +338,12 @@ break; } + if ( prevDryBicartState != dryBicartStartRequest ) + { + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_DRY_BICART_STATE_CHANGE, prevDryBicartState, dryBicartStartRequest ); + prevDryBicartState = dryBicartStartRequest; + } + // Publish dry bicart data publishDryBicartData(); } Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r9eae2f683887bededd2240f51ddfc667d8c1d566 -r788a0b1a638d815df1e83af80cba7be03af2020c --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9eae2f683887bededd2240f51ddfc667d8c1d566) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 788a0b1a638d815df1e83af80cba7be03af2020c) @@ -206,6 +206,7 @@ static U32 startTimeToInitiateOuterloopTimeout; ///< Time to wait for temperature uptrend to seen,else initiate the outer loop control static U32 startTimeToCheckUpTrendTemperature; ///< Time to wait for measured dialyzer temperature uptrend check. static U32 startTimeToUndoOffsetFromHeatlossEstimation; ///< Time to remove the offset that is added to heatloss model for Low Qds. +static BOOL previousHeaterState[ NUM_OF_DD_HEATERS ]; ///< Previous State of Heater. //For testing #ifdef __HEATERS_DEBUG__ @@ -275,6 +276,10 @@ d5OuterLoopControlInterval = D5_TARGET_TEMP_ADJUST_HIGH_QD_INTERVAL; tempRiseMonitoringInterval = TEMP_RISE_MONITORING_LOW_QD_INTERVAL; + //Initialize Previous Heater State + previousHeaterState[ D5_HEAT ] = FALSE; + previousHeaterState[ D45_HEAT ] = FALSE; + // Assign counter close to the target period heatersStatus[ D5_HEAT ].controlIntervalCounter = D5_HEAT_CONTROL_INTERVAL_START_COUNT; heatersStatus[ D45_HEAT ].controlIntervalCounter = 0; @@ -798,8 +803,8 @@ /*********************************************************************//** * @brief * The execHeatersControl function executes the heaters state machine. - * @details \b Inputs: heaterStatus - * @details \b Outputs: heaterStatus + * @details \b Inputs: heaterStatus, previousHeaterState + * @details \b Outputs: heaterStatus, previousHeaterState * @details \b Alarms: ALARM_ID_DD_SOFTWARE_FAULT when invalid heater * executive state found. * @return none @@ -840,6 +845,13 @@ // stop the heater stopHeater( heater ); } + + if ( heatersStatus[ heater ].heaterOnState != previousHeaterState[ heater ] ) + { + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_HEATER_STATE_CHANGE, heater, + heatersStatus[ heater ].heaterOnState ); + previousHeaterState[ heater ] = heatersStatus[ heater ].heaterOnState; + } } } Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -ree311636fcfb7db1913edef2d9fea22153465a87 -r788a0b1a638d815df1e83af80cba7be03af2020c --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision ee311636fcfb7db1913edef2d9fea22153465a87) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 788a0b1a638d815df1e83af80cba7be03af2020c) @@ -7,8 +7,8 @@ * * @file TaskPriority.c * -* @author (last) Michael Garthwaite -* @date (last) 01-Jun-2026 +* @author (last) Sameer Kalliadan Poyil +* @date (last) 16-Jun-2026 * * @author (original) Vinayakam Mani * @date (original) 07-Aug-2024 @@ -107,8 +107,9 @@ // Monitor rinse pump execRinsePumpMonitor(); + //TODO: revert back once HDF issue resolved. // Monitor Substitution pump - execSubstitutionPumpMonitor(); + //execSubstitutionPumpMonitor(); // Second pass for FPGA execFPGA( FALSE );