Index: firmware/App/Controllers/SubstitutionPump.c =================================================================== diff -u -re8f0c7b5b75c64011832e6bbf5d35e4a24ea6e0f -rb93fd36af5af02e88044107d4331125b11a9bc0e --- firmware/App/Controllers/SubstitutionPump.c (.../SubstitutionPump.c) (revision e8f0c7b5b75c64011832e6bbf5d35e4a24ea6e0f) +++ firmware/App/Controllers/SubstitutionPump.c (.../SubstitutionPump.c) (revision b93fd36af5af02e88044107d4331125b11a9bc0e) @@ -40,7 +40,7 @@ #define SUBSTITUTION_PUMP_ZERO_REVOLUTION_COUNT 0 ///< Revolution count reached to Zero. #define SUBSTITUTION_PUMP_ZERO_FLOW_RATE 0xFFFFFFFF ///< Pulse width value when zero flow rate or pump is off #define SUBSTITUTION_PUMP_STEP_PER_REV 200.0F ///< Number of steps for every revolution. -#define SUBSTITUTION_PUMP_MICRO_STEPS_PER_STEP 64.0F ///< Number of micro-steps ( fractions of step) per step. +#define SUBSTITUTION_PUMP_MICRO_STEPS_PER_STEP 64.0F ///< Number of micro-steps ( fractions of step) per step. #define SUBSTITUTION_PUMP_VOLUME_TO_REVOLUTION ( ( 1.0F / SUBSTITUTION_PUMP_VOLUME_PER_REV ) * \ ( SUBSTITUTION_PUMP_STEP_PER_REV * \ SUBSTITUTION_PUMP_MICRO_STEPS_PER_STEP ) ) ///< Convert volume in to number of revolutions needed. Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r43c231c0f9a56e2481f94cdbc51f45ef1af23c46 -rb93fd36af5af02e88044107d4331125b11a9bc0e --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 43c231c0f9a56e2481f94cdbc51f45ef1af23c46) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision b93fd36af5af02e88044107d4331125b11a9bc0e) @@ -1421,6 +1421,7 @@ { fpgaActuatorSetPoints.fpgaD92PumpRevCount = count; } + /*********************************************************************//** * @brief * The setFPGAD5HeaterOnOffControl function sets the primary heater @@ -4013,4 +4014,5 @@ { return fpgaSensorReadings.fpgaD92SpeedCnt; } + /**@}*/ Index: firmware/App/Services/TDInterface.c =================================================================== diff -u -re8f0c7b5b75c64011832e6bbf5d35e4a24ea6e0f -rb93fd36af5af02e88044107d4331125b11a9bc0e --- firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision e8f0c7b5b75c64011832e6bbf5d35e4a24ea6e0f) +++ firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision b93fd36af5af02e88044107d4331125b11a9bc0e) @@ -83,6 +83,7 @@ TD_TREATMENT_OVERRIDE_DIALYSATE_TEMP, ///< TD Target Dialysate Temperature TD_TREATMENT_OVERRIDE_ACID_TYPE, ///< TD Acid type TD_TREATMENT_OVERRIDE_BICARB_TYPE, ///< TD Bicarb type + TD_TREATMENT_OVERRIDE_SUB_FLOWRATE, ///< TD Substitution flow rate NUM_OF_TD_TREATMENT_OVERRIDES, ///< Number of TD override treatment parameters } TD_TREATMENT_OVERRIDE_INDEX_T; @@ -101,6 +102,7 @@ static OVERRIDE_F32_T tdBicarbConvFactor; ///< TD Bicarb conversion factor static OVERRIDE_U32_T tdSodium; ///< TD Sodium concentrate static OVERRIDE_U32_T tdBicarbonate; ///< TD Bicarbonate concentrate +static OVERRIDE_F32_T tdSubstitutionFlowRate; ///< TD Subsitution flow rate // ********** private function prototypes ********** @@ -116,46 +118,51 @@ void initTDInterface( void ) { // Initialize unit state variables - tdCurrentOpMode = MODE_INIT; - tdSubMode = 0U; - tdDialyzerBypass = FALSE; - tdOpModeDataFreshFlag = FALSE; + tdCurrentOpMode = MODE_INIT; + tdSubMode = 0U; + tdDialyzerBypass = FALSE; + tdOpModeDataFreshFlag = FALSE; // Initialize treatment parameters from TD - tdDialysateFlowrate.data = 0.0F; - tdDialysateFlowrate.ovData = 0.0F; - tdDialysateFlowrate.ovInitData = TD_DIALYSATE_FLOWRATE_MIN_ML_MIN; - tdDialysateFlowrate.override = OVERRIDE_RESET; + tdDialysateFlowrate.data = 0.0F; + tdDialysateFlowrate.ovData = 0.0F; + tdDialysateFlowrate.ovInitData = TD_DIALYSATE_FLOWRATE_MIN_ML_MIN; + tdDialysateFlowrate.override = OVERRIDE_RESET; - tdUFRate.data = 0.0F; - tdUFRate.ovData = 0.0F; - tdUFRate.ovInitData = TD_UF_RATE_MIN_ML_MIN; - tdUFRate.override = OVERRIDE_RESET; + tdUFRate.data = 0.0F; + tdUFRate.ovData = 0.0F; + tdUFRate.ovInitData = TD_UF_RATE_MIN_ML_MIN; + tdUFRate.override = OVERRIDE_RESET; - tdDialysateTemp.data = 0.0F; - tdDialysateTemp.ovData = 0.0F; - tdDialysateTemp.ovInitData = TD_DIALYSATE_TEMP_MIN_DEGC; - tdDialysateTemp.override = OVERRIDE_RESET; + tdDialysateTemp.data = 0.0F; + tdDialysateTemp.ovData = 0.0F; + tdDialysateTemp.ovInitData = TD_DIALYSATE_TEMP_MIN_DEGC; + tdDialysateTemp.override = OVERRIDE_RESET; - tdAcidConvFactor.data = 0.0F; - tdAcidConvFactor.ovData = 0.0F; - tdAcidConvFactor.ovInitData = ACID_CONVERSION_FACTOR[ TD_ACID_TYPE_MIN ]; - tdAcidConvFactor.override = OVERRIDE_RESET; + tdAcidConvFactor.data = 0.0F; + tdAcidConvFactor.ovData = 0.0F; + tdAcidConvFactor.ovInitData = ACID_CONVERSION_FACTOR[ TD_ACID_TYPE_MIN ]; + tdAcidConvFactor.override = OVERRIDE_RESET; - tdBicarbConvFactor.data = 0.0F; - tdBicarbConvFactor.ovData = 0.0F; - tdBicarbConvFactor.ovInitData = BICARBONATE_CONVERSION_FACTOR; - tdBicarbConvFactor.override = OVERRIDE_RESET; + tdBicarbConvFactor.data = 0.0F; + tdBicarbConvFactor.ovData = 0.0F; + tdBicarbConvFactor.ovInitData = BICARBONATE_CONVERSION_FACTOR; + tdBicarbConvFactor.override = OVERRIDE_RESET; - tdSodium.data = 0.0F; - tdSodium.ovData = 0.0F; - tdSodium.ovInitData = TD_SODIUM_MIN; - tdSodium.override = OVERRIDE_RESET; + tdSodium.data = 0.0F; + tdSodium.ovData = 0.0F; + tdSodium.ovInitData = TD_SODIUM_MIN; + tdSodium.override = OVERRIDE_RESET; - tdBicarbonate.data = 0.0F; - tdBicarbonate.ovData = 0.0F; - tdBicarbonate.ovInitData = TD_BICARBONATE_MIN; - tdBicarbonate.override = OVERRIDE_RESET; + tdBicarbonate.data = 0.0F; + tdBicarbonate.ovData = 0.0F; + tdBicarbonate.ovInitData = TD_BICARBONATE_MIN; + tdBicarbonate.override = OVERRIDE_RESET; + + tdSubstitutionFlowRate.data = 0.0F; + tdSubstitutionFlowRate.ovData = 0.0F; + tdSubstitutionFlowRate.ovInitData = TD_BICARBONATE_MIN; + tdSubstitutionFlowRate.override = OVERRIDE_RESET; } /**********************************************************************//** @@ -369,6 +376,18 @@ /*********************************************************************//** * @brief + * The getTDSubstitutionFlowRate function gets the latest TD + * substitution flow rate. + * @details \b Inputs: tdSubstitutionFlowRate + * @details \b Outputs: none + * @return Latest target substitution flow rate + *************************************************************************/ +F32 getTDSubstitutionFlowRate( void ) +{ + return getF32OverrideValue( &tdSubstitutionFlowRate ); +} +/*********************************************************************//** + * @brief * The getTDDialyzerBypass function gets the latest TD dailyzer bypass valve * enable flag. * @details \b Inputs: tdDialyzerBypass @@ -539,11 +558,12 @@ setTDUFRate( startTxRequest.ufRate ); setTDTargetDialysateTemperature( startTxRequest.dialTemp ); - // Set concentrate types, Bypass dialyzer + // Set concentrate types, Bypass dialyzer and substitution rate setTDAcidAndBicarbType( startTxRequest.acidConvFactor, startTxRequest.bicarbConvFactor, startTxRequest.sodium, startTxRequest.bicarbonate ); setTDDialyzerBypass( startTxRequest.bypassDialyzer ); - setSubstitutionPumpTargetSpeed( D92_PUMP, startTxRequest.hdfRate ); + tdSubstitutionFlowRate.data = startTxRequest.substitutionrate; + setSubstitutionPumpTargetSpeed( D92_PUMP, getTDSubstitutionFlowRate() ); // start dialysate generation result = requestDDGenDialStart(); @@ -569,10 +589,12 @@ setTDUFRate( startTxRequest.ufRate ); setTDTargetDialysateTemperature( startTxRequest.dialTemp ); - // Set concentrate types, Bypass dialyzer + // Set concentrate types, Bypass dialyzer and substitution rate setTDAcidAndBicarbType( startTxRequest.acidConvFactor, startTxRequest.bicarbConvFactor, startTxRequest.sodium, startTxRequest.bicarbonate ); setTDDialyzerBypass( startTxRequest.bypassDialyzer ); + tdSubstitutionFlowRate.data = startTxRequest.substitutionrate; + setSubstitutionPumpTargetSpeed( D92_PUMP, getTDSubstitutionFlowRate() ); // Signal to update treatement parameters setTreatmentParamUpdate(); @@ -634,6 +656,11 @@ result = f32Override( message, &tdBicarbConvFactor); break; + case TD_TREATMENT_OVERRIDE_SUB_FLOWRATE: + result = f32Override( message, &tdSubstitutionFlowRate); + setSubstitutionPumpTargetSpeed( D92_PUMP, getTDSubstitutionFlowRate() ); + break; + default: result = FALSE; break;