Index: firmware/App/Modes/FPModes/ModePreGenPermeate.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -8,26 +8,26 @@ * @file ModePreGenPermeate.c * * @author (last) “rkallala” -* @date (last) 09-Dec-2025 +* @date (last) 20-Jan-2026 * * @author (original) Michael Garthwaite * @date (original) 08-Sep-2025 * ***************************************************************************/ #include "BoostPump.h" -#include "FlushFilter.h" -#include "FlushPermeate.h" -#include "FlushConcentrate.h" #include "FPModeStandby.h" #include "FPOperationModes.h" -#include "InletPressureCheck.h" #include "MessageSupport.h" #include "Messaging.h" #include "ModeGenPermeate.h" #include "ModePreGenPermeate.h" #include "PermeateTank.h" #include "ROPump.h" +#include "StateFlushConcentrate.h" +#include "StateFlushFilter.h" +#include "StateFlushPermeate.h" +#include "StateInletPressureCheck.h" #include "TaskGeneral.h" #include "Timers.h" #include "Valves.h" @@ -203,6 +203,7 @@ { setBoostPumpTargetPressure( VERIFY_WATER_BOOST_PUMP_TGT_PSI ); } + //TODO change target flow to 750 + rinse pump rate setROPumpTargetFlowRateMLPM( VERIFY_WATER_RO_PUMP_TGT_FLOW_ML, TRUE ); verifyWaterTimer = getMSTimerCount(); break; @@ -232,20 +233,13 @@ // state = FP_PRE_GENP_PAUSED; // } - if ( FALSE == isBoostPumpInstalled() ) + execInletPressureCheck(); + + if ( TRUE == isInletPressureCheckCompleted() ) { signalStartFilterFlush(); state = FP_PRE_GENP_FILTER_FLUSH; } - else - { - execInletPressureCheck(); - if ( TRUE == isInletPressureCheckCompleted() ) - { - signalStartFilterFlush(); - state = FP_PRE_GENP_FILTER_FLUSH; - } - } return state; } @@ -265,14 +259,21 @@ // state = FP_PRE_GENP_PAUSED; // } - execFilterFlush(); - - if ( TRUE == isFilterFlushComplete() ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_FP_SKIP_PRE_GEN_FLUSH ) ) { - signalStartPermeateFlush(); - state = FP_PRE_GENP_PERMEATE_FLUSH; + state = FP_PRE_GENP_VERIFY_WATER; } + else + { + execFilterFlush(); + if ( TRUE == isFilterFlushComplete() ) + { + signalStartPermeateFlush(); + state = FP_PRE_GENP_PERMEATE_FLUSH; + } + } + return state; } @@ -344,16 +345,35 @@ FP_PRE_GENP_MODE_STATE_T state = FP_PRE_GENP_VERIFY_WATER; F32 roCurrentDutyCycle = getCurrentROPumpDutyCyclePCT(); + checkROInletPressure(); + //Stay in this state for 25 seconds to stablize flow control if ( TRUE == didTimeout( verifyWaterTimer, FLOW_CONTROL_STABLIZED_TIMEOUT_MS ) ) { // check next 5 seconds for water quality // check permeate high flow rate is within range checkPermeateHighFlow(); + // check low flow rate is within range checkPermeateLowFlow(); - // check conductivity is within range + + // check inlet conductivity is within range + checkInletConductivity(); + + // check permeate conductivity is within range checkOutletConductivity(); + + // check RO duty cycle in range + checkRODutyCycle(); + + // check p21 is set to 15 PSI + checkPressureRelief(); + + // check RO rejection ratio + checkRORejectionRatio(); + + // check RO pressure (p13) + checkROPressures(); } // if ( TRUE == 1 ))// TODO Alarm and Stop State Rework Index: firmware/App/Monitors/Level.h =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Monitors/Level.h (.../Level.h) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Monitors/Level.h (.../Level.h) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -7,8 +7,8 @@ * * @file Level.h * -* @author (last) Michael Garthwaite -* @date (last) 15-Sep-2025 +* @author (last) “rkallala” +* @date (last) 15-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 14-Oct-2024 Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -7,8 +7,8 @@ * * @file Temperature.c * -* @author (last) Varshini Nagabooshanam -* @date (last) 22-Dec-2025 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 25-Sep-2024 @@ -536,15 +536,17 @@ { TEMPERATURE_SENSORS_FP_DATA_T data; - data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); - data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); - data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); - data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); - data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); - data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); - data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); - data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); - data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); + data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); + data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); + data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); + data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); + data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); + data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); + data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); + data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); + data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); + data.p7InternalTemp = getFlowInternalTemperature( P7_FLOW ); + data.p16InternalTemp = getFlowInternalTemperature( P16_FLOW ); 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/Monitors/Temperature.h =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -7,8 +7,8 @@ * * @file Temperature.h * -* @author (last) Varshini Nagabooshanam -* @date (last) 22-Dec-2025 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 25-Sep-2024 @@ -70,6 +70,9 @@ F32 p7Temp; ///< Temperature RO inlet F32 p16Temp; ///< Temperature RO outlet F32 p46Temp; ///< Temperature after sediment filter (P46) + F32 p7InternalTemp; ///< P7 internal Temperature + F32 p16InternalTemp; ///< P16 internal Temperature + } TEMPERATURE_SENSORS_FP_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -8,8 +8,8 @@ * * @file FpgaDD.c * -* @author (last) Dara Navaei -* @date (last) 09-Jan-2026 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 26-Aug-2024 @@ -3553,6 +3553,19 @@ /*********************************************************************//** * @brief + * The getFPGAFlowP16InternalTemp function gets the P16 flow sensor + * internal temperature. + * @details \b Inputs: fpgaSensorReadings.flowIntTempP16 + * @details \b Outputs: none + * @return P16 internal temperature + *************************************************************************/ +U16 getFPGAFlowP16InternalTemp( void ) +{ + return fpgaSensorReadings.flowIntTempP16; +} + +/*********************************************************************//** + * @brief * The getFPGAFlowP7 function gets the P7 flow rate (in mL/min). * @details \b Inputs: fpgaSensorReadings.flowRateP7 * @details \b Outputs: none @@ -3578,6 +3591,19 @@ /*********************************************************************//** * @brief + * The getFPGAFlowP7InternalTemp function gets the P7 flow sensor + * internal temperature. + * @details \b Inputs: fpgaSensorReadings.flowIntTempP7 + * @details \b Outputs: none + * @return P7 internal temperature + *************************************************************************/ +U16 getFPGAFlowP7InternalTemp( void ) +{ + return fpgaSensorReadings.flowIntTempP7; +} + +/*********************************************************************//** + * @brief * The setFPGAP9Control function sets the FPGA P9 sensor control register * to perform a given action. * bit 4..7: unused Index: firmware/App/Services/FpgaDD.h =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -7,8 +7,8 @@ * * @file FpgaDD.h * -* @author (last) Dara Navaei -* @date (last) 09-Jan-2026 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 26-Aug-2024 @@ -304,8 +304,10 @@ U16 getFPGAFlowP16( void ); U16 getFPGAFlowP16Temp( void ); +U16 getFPGAFlowP16InternalTemp( void ); U16 getFPGAFlowP7( void ); U16 getFPGAFlowP7Temp( void ); +U16 getFPGAFlowP7InternalTemp( void ); void setFPGAP9Control( U08 control ); void setFPGAP9Address( U16 address ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r9c0f227670dcf68439c5ea86768d116cc6f9585e -r3678601eac45b69684724bb46fe913049985c410 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 9c0f227670dcf68439c5ea86768d116cc6f9585e) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3678601eac45b69684724bb46fe913049985c410) @@ -7,8 +7,8 @@ * * @file Messaging.c * -* @author (last) Dara Navaei -* @date (last) 29-Dec-2025 +* @author (last) “rkallala” +* @date (last) 16-Jan-2026 * * @author (original) Vinayakam Mani * @date (original) 07-Aug-2024 @@ -28,23 +28,21 @@ #include "Flow.h" #include "FlowSensor.h" #include "FluidPump.h" -#include "FlushConcentrate.h" -#include "FlushFilter.h" -#include "FlushPermeate.h" #include "FpgaDD.h" #include "FPModeFault.h" #include "FPModeInitPOST.h" #include "FPModeStandby.h" #include "FPOperationModes.h" #include "Heaters.h" -#include "InletPressureCheck.h" #include "Level.h" #include "Messaging.h" #include "MessagePayloads.h" #include "ModeGenDialysate.h" #include "ModeGenPermeate.h" +#include "ModeGenPermeateDefeatured.h" #include "ModePreGenDialysate.h" #include "ModePreGenPermeate.h" +#include "ModePreGenPermeateDefeatured.h" #include "ModePostGenDialysate.h" #include "ModeStandby.h" #include "OperationModes.h" @@ -55,6 +53,11 @@ #include "ROPump.h" #include "SafetyShutdown.h" #include "SpentChamberFill.h" +#include "StateFlushConcentrate.h" +#include "StateFlushFilter.h" +#include "StateFlushFilterDefeatured.h" +#include "StateFlushPermeate.h" +#include "StateInletPressureCheck.h" #include "SystemCommDD.h" #include "Temperature.h" #include "TestSupport.h" @@ -63,6 +66,7 @@ #include "Ultrafiltration.h" #include "Valves.h" #include "Voltages.h" +#include "WaterQualityMonitor.h" /** * @addtogroup Messaging @@ -191,6 +195,7 @@ { MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredReadingsOverride }, { MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredTemperatureReadingsOverride }, { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterFPLogInRequest }, + { MSG_ID_FP_SOFTWARE_RESET_REQUEST, &handleDDSoftwareResetRequest }, { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetFPOperationMode }, { MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetFPOpModePublishIntervalOverride }, { MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenDataPublishIntervalOverride }, @@ -247,6 +252,19 @@ { MSG_ID_FP_SET_TEST_CONFIGURATION, &testSetTestConfiguration }, { MSG_ID_FP_GET_TEST_CONFIGURATION, &testGetTestConfiguration }, { MSG_ID_FP_RESET_ALL_TEST_CONFIGURATIONS, &testResetAllTestConfigurations }, + { MSG_ID_FP_RO_GET_CALCULATED_DUTY_CYCLE_REQUEST, &testROGetCurrentCalculatedDutyCycle }, + { MSG_ID_FP_FLUSH_FILTER_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFilterFlushDataPublishIntervalOverride }, + { MSG_ID_FP_FLUSH_FILTER_TIMER_OVERRIDE_REQUEST, &testFilterFlushTimerOverride }, + { MSG_ID_FP_FLUSH_PERMEATE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateFlushDataPublishIntervalOverride }, + { MSG_ID_FP_FLUSH_PERMEATE_TIMER_OVERRIDE_REQUEST, &testPermeateFlushTimerOverride }, + { MSG_ID_FP_FLUSH_PERMEATE_ALARM_TIMER_OVERRIDE_REQUEST, &testPermeateFlushAlarmTimerOverride }, + { MSG_ID_FP_FLUSH_CONCENTRATE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConcentrateFlushDataPublishIntervalOverride }, + { MSG_ID_FP_FLUSH_CONCENTRATE_TIMER_OVERRIDE_REQUEST, &testConcentrateFlushTimerOverride }, + { MSG_ID_FP_DEF_FLUSH_FILTER_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFilterFlushDefDataPublishIntervalOverride }, + { MSG_ID_FP_DEF_FLUSH_FILTER_TIMER_OVERRIDE_REQUEST, &testFilterFlushDefTimerOverride }, + { MSG_ID_FP_DEF_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenPermeateDefDataPublishIntervalOverride}, + { MSG_ID_FP_DEF_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testGenPermeateDefDataPublishIntervalOverride}, + { MSG_ID_FP_DEF_STATUS_REQUEST, &testGetFPDefeaturedStatus }, }; /// Calculation for number of entries in the incoming message function handler look-up table.