Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Heaters.c * * @author (last) Vinayakam Mani -* @date (last) 07-Oct-2024 +* @date (last) 18-Sep-2025 * * @author (original) Vinayakam Mani -* @date (original) 07-Oct-2024 +* @date (original) 11-Oct-2024 * ***************************************************************************/ Index: firmware/App/DDCommon.h =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/DDCommon.h (.../DDCommon.h) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 DDCommon.h * * @author (last) Vinayakam Mani -* @date (last) 06-Aug-2024 +* @date (last) 14-Nov-2025 * * @author (original) Vinayakam Mani -* @date (original) 06-Aug-2024 +* @date (original) 07-Aug-2024 * ***************************************************************************/ @@ -22,10 +22,10 @@ // ********** version ********** -#define DD_VERSION_MAJOR 0 -#define DD_VERSION_MINOR 0 -#define DD_VERSION_MICRO 0 -#define DD_VERSION_BUILD 18 +#define DD_VERSION_MAJOR 0 +#define DD_VERSION_MINOR 0 +#define DD_VERSION_MICRO 0 +#define DD_VERSION_BUILD 27 // ********** development build switches ********** @@ -51,6 +51,9 @@ //Uncomment below for bicarb chamber filling //#define __BICARB_CHAMBER_FILL__ 1 +//Uncomment below for Maxon controller speed change +//#define __MAXON_SPEED_UPDATE__ 1 + //Uncomment below to disable heaters debug message #define __HEATERS_DEBUG__ 1 Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 ConductivitySensors.c * * @author (last) Vinayakam Mani -* @date (last) 10-Sep-2024 +* @date (last) 18-Sep-2025 * * @author (original) Vinayakam Mani -* @date (original) 10-Sep-2024 +* @date (original) 13-Sep-2024 * ***************************************************************************/ #include // Used for calculating the polynomial calibration equation. Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 ModeGenDialysate.c * * @author (last) Vinayakam Mani -* @date (last) 30-Oct-2024 +* @date (last) 14-Nov-2025 * * @author (original) Vinayakam Mani -* @date (original) 30-Oct-2024 +* @date (original) 06-Nov-2024 * ***************************************************************************/ @@ -60,7 +60,8 @@ #define LINEAR_SLOPE_FACTOR -0.0029F ///< Slope factor used in adjusted dialysate temperature linear calculation for high Qds #define LINEAR_INTERCEPT_FACTOR 3.47F ///< Intercept factor used in adjusted dialysate temperature linear calculation for high Qds #define LOW_DIAL_FLOW_RATE 150.0F ///< Dialysate flow rate lesser than 150 considered to be low Qds. -#define SPENT_CHAMBER_FILL_MAX_COUNT 15 ///< Total number of spent chamber fill allowed. +#define ZERO_DIAL_FLOW_RATE 0.0F ///< Zero dialysate flow rate +#define SPENT_CHAMBER_FILL_MAX_COUNT 10 ///< Total number of spent chamber fill allowed. #define BICARB_CHAMBER_FILL_TIMEOUT ( 1 * MS_PER_SECOND ) ///< Bicarb chamber fill timeout. //Testing #define DELAY_BC_SWITCHING_AT_START_UP ( 10 * MS_PER_SECOND ) ///< Provide a balancing chamber switching start up delay to stabilize pump speed etc., @@ -211,12 +212,13 @@ case DD_GEND_DIALYSATE_BYPASS_STATE: setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D64_VALV, VALVE_STATE_CLOSED ); setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve // Turn on the primary heater calculateTargetDialysateTemp(); @@ -245,7 +247,7 @@ setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D64_VALV, VALVE_STATE_CLOSED ); setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve // Turn on the primary heater calculateTargetDialysateTemp(); @@ -265,15 +267,17 @@ setValveState( D34_VALV, VALVE_STATE_CLOSED ); // Bypass valve setValveState( D35_VALV, VALVE_STATE_OPEN ); // VDI setValveState( D40_VALV, VALVE_STATE_OPEN ); // VDO + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve break; case DD_GEND_SPENT_CHAMBER_FILL_STATE: //Set valves and actuators setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D14_VALV, VALVE_STATE_OPEN ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve setValveState( D47_VALV, VALVE_STATE_OPEN ); // Spent chamber purge valve requestConcentratePumpOff( D76_PUMP, FALSE ); @@ -307,9 +311,10 @@ setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO setValveState( D14_VALV, VALVE_STATE_CLOSED ); - setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve + setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve setValveState( D64_VALV, VALVE_STATE_OPEN ); // Bicarb chamber purge valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); // Bicarb valve bicarbFillStartTimeMS = getMSTimerCount(); // Turn on the primary heater @@ -327,22 +332,40 @@ break; case DD_GEND_DIALYSATE_DELIVERY_PAUSE: - // stop the motor during pause conditions - signalDialysatePumpHardStop( D12_PUMP ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); signalDialysatePumpHardStop( D48_PUMP ); requestConcentratePumpOff( D11_PUMP, FALSE ); requestConcentratePumpOff( D10_PUMP, FALSE ); requestConcentratePumpOff( D76_PUMP, FALSE ); //Rinse pump Off setRinsePumpState( RINSE_PUMP_STATE_OFF ); - stopHeater( D5_HEAT ); + // Turn on the primary heater + calculateTargetDialysateTemp(); + setHeaterTargetTemperature( D5_HEAT, getGenDialysateTargetTemperature() ); + //Disable the D28 based temp control as fluid dispense being stopped by balancing chamber. + setD28TempFeedbackControl( FALSE ); + startHeater( D5_HEAT ); stopHeater( D45_HEAT ); - //Enable bypass valve - setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI - setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO - setValveState( D34_VALV, VALVE_STATE_OPEN ); // Bypass valve + //close valves + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + setValveState( D31_VALV, VALVE_STATE_CLOSED ); + setValveState( D47_VALV, VALVE_STATE_CLOSED ); + setValveState( D64_VALV, VALVE_STATE_CLOSED ); + setValveState( D54_VALV, VALVE_STATE_CLOSED ); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D52_VALV, VALVE_STATE_CLOSED ); + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + setValveState( D81_VALV, VALVE_STATE_CLOSED ); + setValveState( D8_VALV, VALVE_STATE_CLOSED ); + //Close all balancing chamber valves + valveControlForBCClosedState(); + + setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D53_VALV, VALVE_STATE_OPEN ); + setValveState( D80_VALV, VALVE_STATE_OPEN ); break; case DD_GEND_ISOLATED_UF_STATE: @@ -449,8 +472,9 @@ BOOL hydChamberWaterInletControl( void ) { // Read floater switch - BOOL result = FALSE; - LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + BOOL result = FALSE; + LEVEL_STATE_T floaterLevel = getLevelStatus( D6_LEVL ); + BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); // High level is met if ( LEVEL_STATE_HIGH == floaterLevel ) @@ -461,7 +485,7 @@ // Water level reached high. result = TRUE; } - else + else if ( LEVEL_STATE_LOW == floaterLevel || TRUE != balancingChambFillInProgress ) { // if level is not met,allow inlet water to hydraulics chamber setValveState( D3_VALV, VALVE_STATE_OPEN ); @@ -613,9 +637,10 @@ *************************************************************************/ static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ) { - DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_STATE; - LEVEL_STATE_T spentChamberLevel = getLevelStatus( D46_LEVL ); - LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); + DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_STATE; + LEVEL_STATE_T spentChamberLevel = getLevelStatus( D46_LEVL ); + LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); + BOOL balancingChambFillInProgress = getBalancingChamberFillinProgressStatus(); // if TD asks for bypass or dialysate is not good to deliver //transition to bypass dialystate state @@ -763,8 +788,13 @@ static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_PAUSE; + F32 dialFlowrate = getTDDialysateFlowrate(); - //TODO : Handle pause state. + // Resume pause when Qd is not zero + if ( dialFlowrate > ZERO_DIAL_FLOW_RATE ) + { + state = DD_GEND_DIALYSATE_BYPASS_STATE; + } return state; } Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r1768e1d302978a3748ab1e684576f208472e4a54 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 1768e1d302978a3748ab1e684576f208472e4a54) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Conductivity.c * -* @author (last) Vinayakam Mani -* @date (last) 10-Sep-2024 +* @author (last) “rkallala” +* @date (last) 09-Dec-2025 * * @author (original) Vinayakam Mani -* @date (original) 10-Sep-2024 +* @date (original) 13-Sep-2024 * ***************************************************************************/ #include // Used for calculating the polynomial calibration equation. @@ -20,6 +20,7 @@ #include "Conductivity.h" #include "MessageSupport.h" #include "Messaging.h" +#include "ModeGenPermeate.h" #include "OperationModes.h" #include "TaskPriority.h" #include "Utilities.h" @@ -37,6 +38,9 @@ #define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 500 ) ///< Filter conductivity temperature data for given time #define SIZE_OF_FLOW_ROLLING_AVG ( CONDUCTIVITY_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity moving average sample count. #define SIZE_OF_FLOW_TEMP_ROLLING_AVG ( CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity temprature moving average sample count. +#define RO_RR_MOVING_AVG_NUM_OF_SAMPLES 30 ///< RO rejection ratio moving average number of samples. +#define FRACTION_TO_PERCENT_CONVERSION_FACTOR 100.0F ///< RO rejection ratio factor to percentage conversion factor value +#define RO_RR_SAMPLE_COLLECTION_INTERVAL 10 ///< Collect RO rejection ratio sample for every 10th time in priority task /// Filter conductivity readings record. typedef struct @@ -66,13 +70,26 @@ static OVERRIDE_U32_T ddConductivityDataPublishInterval; ///< DD Conductivity sensors publish time interval override. static U32 fpConductivityPublishTimerCounter; ///< FP Conductivity data publication counter. static OVERRIDE_U32_T fpConductivityDataPublishInterval; ///< FP Conductivity sensors publish time interval override. +static F32 roRejectionRatio; ///< All time RO rejection ratio. +static F32 roRejectionRatioTankFill; ///< RO rejection ratio during permeate tank fill state. +static U32 roRRPublishTimerCounter; ///< RO rejection ratio publication counter. +static OVERRIDE_U32_T roRRDataPublishInterval; ///< RO rejection ratio publish time interval override. +static OVERRIDE_F32_T roRRAvg; ///< Average RO rejection ratio. +static F32 roRRRunningSum; ///< RO rejection ratio running sum. +static F32 roRRSamples[ RO_RR_MOVING_AVG_NUM_OF_SAMPLES ]; ///< RO rejection ratio samples array. +static U32 roRRSamplesNextIndex; ///< RO rejection ratio sample next index number. +static U32 roRRCount; ///< RO rejection ratio Number of samples in average buffer. +static F32 roRRTankFillAvg; ///< Average RO rejection ratio during permeate tank fill state. +static U32 roRRSampleIntervalCounter; ///< RO rejection ratio sample collection timer counter. // ********** private function prototypes ********** static void publishConductivitySensorsData( void ); static void filterConductivitySensors( void ); static void filterConductivitySensorReadings( void ); static void filterConductivitySensorTemperatureReadings( void ); +static void calcRORejectionRatio( void ); +static void filterRORejectionRatioReadings( void ); /*********************************************************************//** * @brief @@ -90,7 +107,21 @@ ddConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; fpConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + roRRPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + roRejectionRatio = 0.0F; + roRejectionRatioTankFill = 0.0F; + roRRRunningSum = 0.0F; + roRRSamplesNextIndex = 0; + roRRCount = 0; + roRRTankFillAvg = 0.0F; + roRRAvg.data = 0.0F; + roRRAvg.ovData = 0.0F; + roRRAvg.ovInitData = 0.0F; + roRRAvg.override = OVERRIDE_RESET; + roRRSampleIntervalCounter = 0; + memset( &roRRSamples, 0, sizeof( roRRSamples ) ); + // Initialize override structures for each conductivity sensor for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { @@ -122,6 +153,11 @@ fpConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; fpConductivityDataPublishInterval.ovInitData = 0; fpConductivityDataPublishInterval.override = OVERRIDE_RESET; + + roRRDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + roRRDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + roRRDataPublishInterval.ovInitData = 0; + roRRDataPublishInterval.override = OVERRIDE_RESET; } /*********************************************************************//** @@ -152,6 +188,8 @@ #endif filterConductivitySensors(); + calcRORejectionRatio(); // TODO: should this be called here or inside filter function + filterRORejectionRatioReadings(); // publish conductivity sensors publishConductivitySensorsData(); } @@ -302,10 +340,123 @@ /*********************************************************************//** * @brief + * The calcRORejectionRatio function calculates the RO rejection ratio using + * the P9 sensor conductivity value and P18 sensor conductivity value. + * @details Inputs: P9 sensor conductivity, P18 sensor conductivity + * @details Outputs: RO rejection ratio, Tank fill RO rejection ratio + * @return none + *************************************************************************/ +static void calcRORejectionRatio( void ) +{ + F32 feedConductivity = getFilteredConductivity( P9_COND ); + F32 permeateConductivity = getFilteredConductivity( P18_COND ); + + roRejectionRatio = RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE; + + if ( fabs(feedConductivity) >= NEARLY_ZERO ) + { + roRejectionRatio = FRACTION_TO_PERCENT_CONVERSION_FACTOR * ( ( feedConductivity - permeateConductivity ) / feedConductivity ); + } + if ( getCurrentGenPermeateState() == FP_GENP_TANK_FILL_STATE ) + { + roRejectionRatioTankFill = roRejectionRatio; + } +} + +/*********************************************************************//** + * @brief + * The filterRORejectionRatioReadings function adds a new ro rejection ratio + * sample to the filters. + * @details \b Inputs: RO rejection ratio all time and during tank fill state + * @details \b Outputs: roRRRunningSumC, roRRSamples[], roRRSamplesNextIndex, + * roRRCount, roRRAvg, roRRTankFillAvg + * @return none + *************************************************************************/ +static void filterRORejectionRatioReadings( void ) +{ + F32 roRR = 0.0F; + + // Moving average samples are collected for every 100 msec + if ( ++roRRSampleIntervalCounter >= RO_RR_SAMPLE_COLLECTION_INTERVAL ) + { + // Filter RO rejection ratio + roRRRunningSum -= roRRSamples[ roRRSamplesNextIndex ]; + roRR = getRORejectonRatio(); + roRRSamples[ roRRSamplesNextIndex ] = roRR; + roRRRunningSum += roRR; + roRRSamplesNextIndex = INC_WRAP( roRRSamplesNextIndex, 0, RO_RR_MOVING_AVG_NUM_OF_SAMPLES - 1 ); + roRRCount = INC_CAP( roRRCount, RO_RR_MOVING_AVG_NUM_OF_SAMPLES ); + roRRAvg.data = roRRRunningSum / (F32)roRRCount; + roRRSampleIntervalCounter = 0; + + // Update the Filter RO rejection ratio during tank fill if the tank is filling + if ( getCurrentGenPermeateState() == FP_GENP_TANK_FILL_STATE ) + { + roRRTankFillAvg = roRRAvg.data; + } + } +} + +/*********************************************************************//** + * @brief + * The getRORejectonRatio function returns the RO rejection ratio + * @details \b Inputs: roRejectionRatio + * @details \b Outputs: none + * @return the RO rejection ratio in percentage + *************************************************************************/ +F32 getRORejectonRatio( void ) +{ + return roRejectionRatio; +} + +/*********************************************************************//** + * @brief + * The getTankFillRORejectionRatio function returns the RO rejection ratio + * during tank fill state + * @details \b Inputs: roRejectionRatioTankFill + * @details \b Outputs: none + * @return the tank fill RO rejection ratio in percentage + *************************************************************************/ +F32 getTankFillRORejectionRatio( void ) +{ + return roRejectionRatioTankFill; +} + +/*********************************************************************//** + * @brief + * The getRORRAverage function returns the average RO rejection ratio + * @details \b Inputs: roRRAvg + * @details \b Outputs: none + * @return the average RO rejection ratio in percentage + *************************************************************************/ +F32 getRORRAverage( void ) +{ + F32 avgRORR = getF32OverrideValue( &roRRAvg ); + + return avgRORR; +} + +/*********************************************************************//** + * @brief + * The getTankFillRORRAverage function returns the average RO rejection ratio + * during tank fill state + * @details \b Inputs: roRRTankFillAvg + * @details \b Outputs: none + * @return the average tank fill RO rejection ratio in percentage + *************************************************************************/ +F32 getTankFillRORRAverage( void ) +{ + return roRRTankFillAvg; +} + +/*********************************************************************//** + * @brief * The publishConductivitySensorsData function publishes DD conductivity data * at a set interval. - * @details \b Inputs: conductivityPublishTimerCounter - * @details \b Outputs: conductivityPublishTimerCounter + * @details \b Inputs: ddconductivityPublishTimerCounter, fpConductivityPublishTimerCounter, + * roRRPublishTimerCounter + * @details \b Outputs: ddconductivityPublishTimerCounter, fpConductivityPublishTimerCounter, + * roRRPublishTimerCounter, DD, FP, RO data broadcast message sent * @details \b Message \b Sent: MSG_ID_DD_CONDUCTIVITY_DATA to publish DD conductivity data. * @details \b Message \b Sent: MSG_ID_FP_CONDUCTIVITY_DATA to publish FP conductivity data. * @return none @@ -338,6 +489,21 @@ broadcastData( MSG_ID_FP_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( FP_CONDUCTIVITY_DATA_T ) ); } + + // publish ro rejection ratio data on interval + if ( ++roRRPublishTimerCounter >= getU32OverrideValue( &roRRDataPublishInterval ) ) + { + RO_REJECTION_RATIO_DATA_T data; + + data.rawRORejectionRatio = getRORejectonRatio(); + data.rawRORejectionRatioTankFill = getTankFillRORejectionRatio(); + data.avgRORejectionRatio = getRORRAverage(); + data.avgRORejectionRatioTankFill = getTankFillRORRAverage(); + data.genPermeateState = (U32)getCurrentGenPermeateState(); + roRRPublishTimerCounter = 0; + + broadcastData( MSG_ID_FP_RO_REJECTION_RATIO_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( RO_REJECTION_RATIO_DATA_T ) ); + } } @@ -478,4 +644,38 @@ return result; } +/*********************************************************************//** + * @brief + * The testRORejectionRatioDataPublishIntervalOverride function overrides the + * RO Rejection ratio data publish interval. + * @details \b Inputs: none + * @details \b Outputs: roRRDataPublishInterval + * @param message Override message from Dialin which includes the value + * that override valves states publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testRORejectionRatioDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &roRRDataPublishInterval, TASK_PRIORITY_INTERVAL ); + + return result; +} + +/*********************************************************************//** + * @brief + * The testRORejectionRatioFilteredOverride function + * overrides the filtered RO rejection value with a given value. + * @details \b Inputs: none + * @details \b Outputs: roRRAvg + * @param message Override message from Dialin which includes override value + * of the RO rejection ratio. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testRORejectionRatioFilteredOverride( MESSAGE_T *message ) +{ + BOOL result = f32Override( message, &roRRAvg ); + + return result; +} + /**@}*/ Index: firmware/App/Monitors/Conductivity.h =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Conductivity.h * -* @author (last) Vinayakam Mani -* @date (last) 10-Sep-2024 +* @author (last) “rkallala” +* @date (last) 09-Dec-2025 * * @author (original) Vinayakam Mani -* @date (original) 10-Sep-2024 +* @date (original) 13-Sep-2024 * ***************************************************************************/ @@ -37,6 +37,9 @@ // ********** public definitions ********** +#define RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE 100.0F ///< Out of range value for RO rejection ratio when CPi conductivity is zero. + +#pragma pack(push, 1) /// Conductivity data struct. typedef struct { @@ -54,19 +57,36 @@ F32 p18Conductivity; ///< (P18) conductivity sensor value } FP_CONDUCTIVITY_DATA_T; +/// RO rejection ratio data struct. +typedef struct +{ + F32 rawRORejectionRatio; ///< RO rejection ratio during tank full and fill state + F32 rawRORejectionRatioTankFill; ///< RO rejection ratio during tank fill state + F32 avgRORejectionRatio; ///< RO rejection ratio average during tank full and fill state + F32 avgRORejectionRatioTankFill; ///< RO rejection ratio average during tank fill state + U32 genPermeateState; ///< Permeate tank state +} RO_REJECTION_RATIO_DATA_T; +#pragma pack(pop) + // ********** public function prototypes ********** void initConductivity( void ); void execConductivity( void ); F32 getFilteredConductivity( CONDUCTIVITY_SENSORS_T sensor ); F32 getFilteredConductivitySensorTemperature( CONDUCTIVITY_SENSORS_T sensor ); +F32 getRORejectonRatio( void ); +F32 getTankFillRORejectionRatio( void ); +F32 getRORRAverage( void ); +F32 getTankFillRORRAverage( void ); BOOL testDDConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testDDConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ); BOOL testDDConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testRORejectionRatioDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testRORejectionRatioFilteredOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Temperature.c * -* @author (last) Vinayakam Mani -* @date (last) 23-Sep-2024 +* @author (last) Zoltan Miskolci +* @date (last) 10-Dec-2025 * * @author (original) Vinayakam Mani -* @date (original) 23-Sep-2024 +* @date (original) 25-Sep-2024 * ***************************************************************************/ @@ -468,7 +468,7 @@ TEMPERATURE_SENSORS_DD_DATA_T data; data.d1Temp = getTemperatureValue( D1_TEMP ); - data.d78Temp = getTemperatureValue( D78_TEMP ); + data.d78Temp = getTemperatureValue( D78_TEMP ); data.d4Temp = getTemperatureValue( D4_TEMP ); data.d50Temp = getTemperatureValue( D50_TEMP ); data.boardTemp = getTemperatureValue( BRD_TEMP ); @@ -506,7 +506,6 @@ { TEMPERATURE_SENSORS_FP_DATA_T data; - data.m1Temp = getFilteredPressureSensorTemperature( M1_PRES ); data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); @@ -515,6 +514,7 @@ data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); + data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); broadcastData( MSG_ID_FP_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_FP_DATA_T ) ); fpTempDataPublicationTimerCounter = 0; Index: firmware/App/Services/Interrupts.c =================================================================== diff -u -r9ccc651bf491c37bc202ad8d80f0e4063523320d -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 9ccc651bf491c37bc202ad8d80f0e4063523320d) +++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Interrupts.c * * @author (last) Vinayakam Mani -* @date (last) 06-Aug-2024 +* @date (last) 30-Aug-2024 * * @author (original) Vinayakam Mani -* @date (original) 05-Aug-2024 +* @date (original) 07-Aug-2024 * ***************************************************************************/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rd305a91c82fe89a76d9accbb8faa3d81e3106341 -rff82c2f697e729f16098416acad3d98e337a38cd --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision d305a91c82fe89a76d9accbb8faa3d81e3106341) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision ff82c2f697e729f16098416acad3d98e337a38cd) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-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 Messaging.c * -* @author (last) Vinayakam Mani -* @date (last) 06-Aug-2024 +* @author (last) Dara Navaei +* @date (last) 29-Dec-2025 * * @author (original) Vinayakam Mani -* @date (original) 06-Aug-2024 +* @date (original) 07-Aug-2024 * ***************************************************************************/ @@ -51,6 +51,7 @@ #include "PAL.h" #include "PermeateTank.h" #include "Pressure.h" +#include "RinsePump.h" #include "ROPump.h" #include "SafetyShutdown.h" #include "SpentChamberFill.h" @@ -234,10 +235,17 @@ { MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredTemperatureReadingsOverride }, { MSG_ID_DD_VOLTAGE_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, { MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, + { MSG_ID_DD_TREATMENT_PARAMS_OVERRIDE_REQUEST, &testTDTreatmentParamsOverride }, { MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPLevelsDataPublishIntervalOverride }, { MSG_ID_FP_LEVEL_OVERRIDE_REQUEST, &testFPLevelStateOverride }, { MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateTankDataPublishIntervalOverride }, { MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, + { MSG_ID_DD_RINSE_PUMP_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testRinsePumpDataPublishIntervalOverride }, + { MSG_ID_DD_RINSE_PUMP_PWM_PERCENT_OVERRIDE_REQUEST, &testRinsePumpPWMPercentOverride }, + { MSG_ID_DD_RINSE_PUMP_TURN_ON_OFF_REQUEST, &testRinsePumpTurnOnOffRequest }, + { MSG_ID_FP_SET_START_STOP_OVERRIDE_REQUEST, &testSetGeneratePermeateSignal }, + { MSG_ID_FP_RO_REJECTION_RATIO_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testRORejectionRatioDataPublishIntervalOverride }, + { MSG_ID_FP_RO_FILTERED_REJECTION_RATIO_OVERRIDE_REQUEST, &testRORejectionRatioFilteredOverride }, }; /// Calculation for number of entries in the incoming message function handler look-up table. @@ -457,10 +465,7 @@ // ACK/NAK request if ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) { -// if ( respBuffer != COMM_BUFFER_NOT_USED ) -// { -// sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, respBuffer, ack ); -// } + // only Sending Test ACK for dialin messages. } else {