Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -rf364406cd1f672078ca38ae8aad5bc508e9b64dd -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision f364406cd1f672078ca38ae8aad5bc508e9b64dd) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -108,7 +108,7 @@ static U32 bcSwitchingBasedOnClosedPeriodCounter; ///< Valve-close segments remaining before first-cycle relaxations clear after Qd timing apply. //TODO: remove later once level sensor working -static U32 bicarbChamberPeriodicFillCounter; +static U32 bicarbChamberPeriodicFillCounter; // ********** private function prototypes ********** @@ -632,7 +632,7 @@ freshDialPressure = getFilteredPressure( D18_PRES ); spentDialPressure = getFilteredPressure( D51_PRES ); - if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) == TRUE ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) ) { //Set Trimmer heater Target temp every BC cycle to catch up fresh dialysate temp setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); @@ -946,10 +946,11 @@ acidVolume = getF32OverrideValue( &acidDoseVolume ); bicarbVolume = getF32OverrideValue( &bicarbDoseVolume ); } + freshDialPressure = getFilteredPressure( D18_PRES ); spentDialPressure = getFilteredPressure( D51_PRES ); - if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) == TRUE ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) ) { //Set Trimmer heater Target temp every BC cycle to catch up fresh dialysate temp setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); @@ -1219,7 +1220,7 @@ // Check if a request made was to activate the balancing chamber switching. if ( TRUE == isBalChamberSwitchingOnRequested ) { - //Clear the request flag to indicate that the request was processed. + //Clear request was processed. isBalChamberSwitchingOnRequested = FALSE; // Set flag to indicate that balancing chamber switching is active Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -rb65c5a8339507472f1933979c21af7601abf9c1a -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision b65c5a8339507472f1933979c21af7601abf9c1a) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -41,7 +41,7 @@ #define CONCENTRATE_PUMP_CLEANING_SPD_OUT_OF_RANGE_TOL_PCT 0.05F ///< Concentrate pump cleaning mode speed out of range tolerance when on in percentage. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_SLOW_MLPM 0.5F ///< Concentrate pump speed out of range tolerance when slow in mL/min. #define CONCENTRATE_PUMP_LOW_SPEED_THRESHOLD_MLPM 5.0F ///< Concentrate pump low speed threshold in mL/min. -#define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFFFFFF ///< Pulse width value when zero flow rate or pump is off +#define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFFFFFF ///< Pulse width value when zero flow rate or pump is off. #define CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER 0.4F ///< Volume output every revolution (mL). #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.1F ///< Volume output every revolution (mL). Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -rcabab4c56b6840c94126b71696d2c95011cb01a0 -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision cabab4c56b6840c94126b71696d2c95011cb01a0) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -48,7 +48,6 @@ #define DRY_BICART_PERSISTENCE_DURATION_MS 200 ///< Fill persistence duration to overcome the pressure overshoot/ drop for beta 1.9 and above. // Dry Bicart Fill - #define DRY_BICART_FILL_COMPLETE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to reset the request flag after fill complete #define DRY_BICART_WCID2_FILL_COMPLETE_PRESSURE_PSI ( 10.0F + WCDI2_PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed for WCID2 #define DRY_BICART_WCID1_FILL_COMPLETE_PRESSURE_PSI ( 10.0F + WCID1_PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed for WCID1 @@ -85,6 +84,10 @@ #define DRY_BICART_DRAIN_COND_ZERO_THRESH 0.05F ///< Zero conductivity threshold #define DRY_BICART_DRAIN_COND_STABLE_SAMPLES 10U ///< De-bounce samples (10*50ms=500ms) +#define STD_MIX_BC_VOLUME 30.0F ///< Standard balancing chamber volume +#define TARGET_ADJ_BICARB_SETTING 137.0F ///< User defined Bicarb setting +#define TARGET_ADJ_NA_SETTINGS 32.0F ///< User defined Na setting + /// Payload record structure for dry bicart fill request typedef struct { Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r5531ef9081711c5d57cceba2d51ff9bb24b7c254 -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 5531ef9081711c5d57cceba2d51ff9bb24b7c254) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -61,11 +61,11 @@ #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. - #define PUMP_SPEED_SLOPE_FACTOR_DIENER_2000 1.24F ///< D48 Diener 2000 pump speed slope (y = 1.24x + 30). #define PUMP_SPEED_INTERCEPT_FACTOR_DIENER_2000 30.0F ///< D48 Diener 2000 pump speed intercept. #define PUMP_SPEED_SLOPE_FACTOR_DIENER_1000 2.869F ///< D48 Diener 1000 pump speed slope (y = 2.869x + 25.956). #define PUMP_SPEED_INTERCEPT_FACTOR_DIENER_1000 25.956F ///< D48 Diener 1000 pump speed intercept. + #define BICARB_CHAMBER_FILL_TIMEOUT ( 1 * MS_PER_SECOND ) ///< Bicarb chamber fill timeout. //Testing @@ -270,7 +270,7 @@ startHeater( D5_HEAT ); //Turn on Trimmer heater - if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) == TRUE ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) ) { setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); } @@ -319,7 +319,7 @@ startHeater( D5_HEAT ); //Turn on Trimmer heater - if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) == TRUE ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_0_HW ) ) { setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); } Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r39fbf9fd993d5e735092cf4ad802d58d0f92f7b1 -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 39fbf9fd993d5e735092cf4ad802d58d0f92f7b1) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -34,7 +34,10 @@ #define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. #define COND_SENSOR_UPDATE_INTERVAL ( 700 / TASK_PRIORITY_INTERVAL ) ///< Time in task intervals for new sensor data -#define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. +#define DD_CONDUCTIVITY_DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. +#define FP_CONDUCTIVITY_DATA_PUBLISH_COUNTER_START_COUNT 41 ///< Data publish counter start count. +#define RO_DATA_PUBLISH_COUNTER_START_COUNT 42 ///< Data publish counter start count. +#define RESISTANCE_DATA_PUBLISH_COUNTER_START_COUNT 43 ///< Data publish counter start count. #define CONDUCTIVITY_SAMPLE_FILTER_MS ( 210 ) ///< Filter conductivity data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) #define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 30 ) ///< Filter conductivity temperature data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) #define SIZE_OF_COND_ROLLING_AVG ( CONDUCTIVITY_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity moving average sample count. @@ -53,7 +56,7 @@ } FILTER_CONDUCTIVITY_READINGS_T; /// Filter conductivity sensor temperature readings record. -typedef struct +typedef struct publishConductivitySensorsData { F32 conductivityTempReadings[ SIZE_OF_COND_TEMP_ROLLING_AVG ]; ///< Holds conductivity sample rolling average. U32 conductivityTempReadingsIdx; ///< Index for next sample in rolling average array. @@ -84,6 +87,8 @@ 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. +static U32 conductivityResistancePublishTimerCounter; ///< DD and FP Conductivity data publication counter. +static OVERRIDE_U32_T conductivityResistanceDataPublishInterval; ///< DD and FP Conductivity sensors publish time interval override. // ********** private function prototypes ********** @@ -108,20 +113,21 @@ initConductivityTeensy(); initConductivitySensors(); - 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; + ddConductivityPublishTimerCounter = DD_CONDUCTIVITY_DATA_PUBLISH_COUNTER_START_COUNT; + fpConductivityPublishTimerCounter = FP_CONDUCTIVITY_DATA_PUBLISH_COUNTER_START_COUNT; + roRRPublishTimerCounter = RO_DATA_PUBLISH_COUNTER_START_COUNT; + conductivityResistancePublishTimerCounter = RESISTANCE_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 ) ); @@ -150,20 +156,26 @@ condTempPrevReadCount[ sensor ] = 0; } - ddConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; - ddConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; - ddConductivityDataPublishInterval.ovInitData = 0; - ddConductivityDataPublishInterval.override = OVERRIDE_RESET; + ddConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + ddConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + ddConductivityDataPublishInterval.ovInitData = 0; + ddConductivityDataPublishInterval.override = OVERRIDE_RESET; - fpConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; - fpConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; - fpConductivityDataPublishInterval.ovInitData = 0; - fpConductivityDataPublishInterval.override = OVERRIDE_RESET; + fpConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + 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; + roRRDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + roRRDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + roRRDataPublishInterval.ovInitData = 0; + roRRDataPublishInterval.override = OVERRIDE_RESET; + + conductivityResistanceDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + conductivityResistanceDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + conductivityResistanceDataPublishInterval.ovInitData = 0; + conductivityResistanceDataPublishInterval.override = OVERRIDE_RESET; + } /*********************************************************************//** @@ -546,6 +558,33 @@ broadcastData( MSG_ID_FP_RO_REJECTION_RATIO_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( RO_REJECTION_RATIO_DATA_T ) ); } + + if ( FALSE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_9_HW ) ) + { + // publish conductivity resistance data on interval + if ( ++conductivityResistancePublishTimerCounter >= getU32OverrideValue( &conductivityResistanceDataPublishInterval ) ) + { + CONDUCTIVITY_RESISTANCE_DATA_T data; + + data.d17CondResist = getConductivityRawResistance( D17_COND ); + data.d27CondResist = getConductivityRawResistance( D27_COND ); + data.d29CondResist = getConductivityRawResistance( D29_COND ); + data.d43CondResist = getConductivityRawResistance( D43_COND ); + data.d74CondResist = getConductivityRawResistance( D74_COND ); + data.p9CondResist = getConductivityRawResistance( P9_COND ); + data.p18CondResist = getConductivityRawResistance( P18_COND ); + data.d17RTDResist = getConductivityRawRTD( D17_COND ); + data.d27RTDResist = getConductivityRawRTD( D27_COND ); + data.d29RTDResist = getConductivityRawRTD( D29_COND ); + data.d43RTDResist = getConductivityRawRTD( D43_COND ); + data.d74RTDResist = getConductivityRawRTD( D74_COND ); + data.p9RTDResist = getConductivityRawRTD( P9_COND ); + data.p18RTDResist = getConductivityRawRTD( P18_COND ); + conductivityResistancePublishTimerCounter = 0; + + broadcastData( MSG_ID_DD_CONDUCTIVITY_SENSOR_RESISTANCE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( CONDUCTIVITY_RESISTANCE_DATA_T ) ); + } + } } Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r84b54a6a2e4478c49853f461b8e1ba560441f147 -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 84b54a6a2e4478c49853f461b8e1ba560441f147) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -294,7 +294,9 @@ { MSG_ID_FP_SET_RECOVERY_VALVES_REQUEST, &testIOFPSetValveRecoveryConfig }, { MSG_ID_DD_SUBSTITUTION_PUMP_START_STOP_OVERRIDE_REQUEST, &testSubstitutionPumpStartStopOverride }, { MSG_ID_DD_SUBSTITUTION_PUMP_BROADCAST_INTERVAL_OVERRIDE_REQUEST, &testSubstitutionPumpDataPublishIntervalOverride }, - { MSG_ID_DD_SUBSTITUTION_PUMP_TARGET_RATE_OVERRIDE_REQUEST, &testSubstitutionPumpTargetRateOverride }, + { MSG_ID_DD_SUBSTITUTION_PUMP_TARGET_RATE_OVERRIDE_REQUEST, &testSubstitutionPumpTargetRateOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_CAL_REQUEST, &testHandleConductivitySensorCalRequest }, + { MSG_ID_FP_CONDUCTIVITY_SENSOR_CAL_REQUEST, &testHandleConductivitySensorCalRequest }, }; /// Calculation for number of entries in the incoming message function handler look-up table. Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r5531ef9081711c5d57cceba2d51ff9bb24b7c254 -rff6b765b44991e46891475022fa819cf3af05156 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 5531ef9081711c5d57cceba2d51ff9bb24b7c254) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision ff6b765b44991e46891475022fa819cf3af05156) @@ -30,6 +30,7 @@ #include "PermeateTank.h" #include "RinsePump.h" #include "ROPump.h" +#include "SubstitutionPump.h" #include "SystemCommDD.h" #include "TaskGeneral.h" #include "WatchdogMgmt.h" @@ -104,6 +105,9 @@ execDryBicart(); } + // Control Substitution pump + execSubstitutionPumpController(); + // Control RO pump execROPumpController();