Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r1722e975682c9e41e0b75551ada1139d3dc522a6 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 1722e975682c9e41e0b75551ada1139d3dc522a6) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -204,14 +204,19 @@ data.cp1PulseInSeconds = cp1PulsetemporaryRemove; data.cp2PulseInSeconds = cp2PulsetemporaryRemove; -#ifndef DISABLE_DIALYSATE_CHECK - F32 cp1Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) - concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed; - F32 cp2Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) - concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed; - - checkPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, cp1Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp1Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); - checkPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, cp2Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp2Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONC_PUMPS_SPEED_ALARM ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + F32 cp1Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) - + concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed; + F32 cp2Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) - + concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed; + checkPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, cp1Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp1Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); + checkPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, cp2Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp2Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); + } + concentratePumpMonitorTimerCounter = 0; broadcastData( MSG_ID_DG_CONCENTRATE_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( CONCENTRATE_PUMP_DATA_T ) ); } @@ -299,9 +304,12 @@ { if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) { -#ifndef DISABLE_CONC_PUMPS - concentratePumps[ pumpId ].hasTurnOnPumpsBeenRequested = TRUE; +#ifndef _RLEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONC_PUMPS ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + concentratePumps[ pumpId ].hasTurnOnPumpsBeenRequested = TRUE; + } } else { Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -248,31 +248,34 @@ *************************************************************************/ void checkInletWaterConductivity( void ) { -#ifndef DISABLE_WATER_QUALITY_CHECK - F32 conductivity = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); - BOOL isConductTooLow = ( conductivity < MAX_COND_SENSOR_CPI_WARNING_LOW ? TRUE : FALSE ); - BOOL isConductInWarningRange = ( conductivity > MAX_COND_SENSOR_CPI_WARNING_HIGH ? TRUE : FALSE ); - - // Warning per PRS 403 - if ( TRUE == isConductTooLow ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE, isConductTooLow, conductivity, MAX_COND_SENSOR_CPI_WARNING_LOW ); - } - else if ( conductivity >= MIN_COND_SENSOR_CPI_WARNING_LOW ) - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE, FALSE, conductivity, MAX_COND_SENSOR_CPI_WARNING_LOW ); - } + F32 conductivity = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); + BOOL isConductTooLow = ( conductivity < MAX_COND_SENSOR_CPI_WARNING_LOW ? TRUE : FALSE ); + BOOL isConductInWarningRange = ( conductivity > MAX_COND_SENSOR_CPI_WARNING_HIGH ? TRUE : FALSE ); - // Warning per PRS 404 - if ( TRUE == isConductInWarningRange ) - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE, isConductInWarningRange, conductivity, MAX_COND_SENSOR_CPI_WARNING_HIGH ); + // Warning per PRS 403 + if ( TRUE == isConductTooLow ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE, isConductTooLow, conductivity, MAX_COND_SENSOR_CPI_WARNING_LOW ); + } + else if ( conductivity >= MIN_COND_SENSOR_CPI_WARNING_LOW ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE, FALSE, conductivity, MAX_COND_SENSOR_CPI_WARNING_LOW ); + } + + // Warning per PRS 404 + if ( TRUE == isConductInWarningRange ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE, isConductInWarningRange, conductivity, MAX_COND_SENSOR_CPI_WARNING_HIGH ); + } + else if ( conductivity <= MIN_COND_SENSOR_CPI_WARNING_HIGH ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE, FALSE, conductivity, MAX_COND_SENSOR_CPI_WARNING_HIGH ); + } } - else if ( conductivity <= MIN_COND_SENSOR_CPI_WARNING_HIGH ) - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE, FALSE, conductivity, MAX_COND_SENSOR_CPI_WARNING_HIGH ); - } -#endif } /*********************************************************************//** @@ -286,17 +289,20 @@ *************************************************************************/ void checkRORejectionRatio( void ) { -#ifndef DISABLE_RO_RATIO_CHECK - F32 cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); - BOOL isRORectionOutOfRange = ( roRejectionRatio > MAX_RO_REJECTION_RATIO_ALLOW ? TRUE : FALSE ); - BOOL isCPoOutOfRange = ( cpo >= MAX_CPO_CONDUCTIVITY_ALLOW ? TRUE : FALSE ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_RO_RATIO_CHECK ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + F32 cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); + BOOL isRORectionOutOfRange = ( roRejectionRatio > MAX_RO_REJECTION_RATIO_ALLOW ? TRUE : FALSE ); + BOOL isCPoOutOfRange = ( cpo >= MAX_CPO_CONDUCTIVITY_ALLOW ? TRUE : FALSE ); - // Fault alarm per PRS 483 - checkPersistentAlarm( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE, isCPoOutOfRange, cpo, MAX_CPO_CONDUCTIVITY_ALLOW ); + // Fault alarm per PRS 483 + checkPersistentAlarm( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE, isCPoOutOfRange, cpo, MAX_CPO_CONDUCTIVITY_ALLOW ); - // Fault alarm per PRS 483 - checkPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, isRORectionOutOfRange, roRejectionRatio, MAX_RO_REJECTION_RATIO_ALLOW ); -#endif + // Fault alarm per PRS 483 + checkPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, isRORectionOutOfRange, roRejectionRatio, MAX_RO_REJECTION_RATIO_ALLOW ); + } } /*********************************************************************//** @@ -398,19 +404,25 @@ ++internalErrorCount[ sensorId ]; if ( internalErrorCount[ sensorId ] > MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS ) { -#ifndef DISABLE_COND_SENSOR_CHECK - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, sensorId ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_COND_SENSOR_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, sensorId ); + } } } } else { if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR ) ) { -#ifndef DISABLE_COND_SENSOR_CHECK - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, sensorId ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_COND_SENSOR_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, sensorId ); + } } } } @@ -552,9 +564,12 @@ { if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR ) ) { -#ifndef DISABLE_COND_SENSOR_CHECK - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, CONDUCTIVITYSENSORS_CD1_SENSOR, CONDUCTIVITYSENSORS_CD2_SENSOR ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_COND_SENSOR_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_CONDUCTIVITY_SENSOR_FAULT, CONDUCTIVITYSENSORS_CD1_SENSOR, CONDUCTIVITYSENSORS_CD2_SENSOR ); + } } } } Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -336,40 +336,43 @@ drainPumpMeasuredRPM.data = CONVERSION_COEFF / getFPGADrainPumpSpeed(); } -#ifndef IGNORE_DRAIN_PUMP_MONITOR - // Check if the pump is in off state and the RPM is greater than the minimum RPM - if ( DRAIN_PUMP_OFF_STATE == drainPumpState ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRAIN_PUMP_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - BOOL isRPMTooHigh = ( getDrainPumpMeasuredRPM() > MIN_DRAIN_PUMP_RPM ? TRUE : FALSE ); + // Check if the pump is in off state and the RPM is greater than the minimum RPM + if ( DRAIN_PUMP_OFF_STATE == drainPumpState ) + { + BOOL isRPMTooHigh = ( getDrainPumpMeasuredRPM() > MIN_DRAIN_PUMP_RPM ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); - // If the off fault alarm has become active, trigger the safety shutdown - if ( TRUE == isAlarmActive( ALARM_ID_DRAIN_PUMP_OFF_FAULT ) ) - { - activateSafetyShutdown(); + // If the off fault alarm has become active, trigger the safety shutdown + if ( TRUE == isAlarmActive( ALARM_ID_DRAIN_PUMP_OFF_FAULT ) ) + { + activateSafetyShutdown(); + } } - } - // The RPM is only checked in open loop state that the pump is run at a fixed RPM. - else if ( DRAIN_PUMP_OPEN_LOOP_STATE == drainPumpState ) - { - // Using abs since the read RPM can be above or below the target - U32 rpmDiff = abs( getDrainPumpTargetRPM() - getDrainPumpMeasuredRPM() ); + // The RPM is only checked in open loop state that the pump is run at a fixed RPM. + else if ( DRAIN_PUMP_OPEN_LOOP_STATE == drainPumpState ) + { + // Using abs since the read RPM can be above or below the target + U32 rpmDiff = abs( getDrainPumpTargetRPM() - getDrainPumpMeasuredRPM() ); - // Check if RPM is out of range - BOOL isRPMOutOfRange = ( rpmDiff > MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ? TRUE : FALSE ); + // Check if RPM is out of range + BOOL isRPMOutOfRange = ( rpmDiff > MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, FALSE, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, FALSE, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); + } + else + { + // There are not out of range conditions, clear the alarms + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, FALSE, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); + } } - else - { - // There are not out of range conditions, clear the alarms - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); - checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, FALSE, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); - } -#endif // Publish drain pump data on interval publishDrainPumpData(); Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -26,6 +26,7 @@ #include "InternalADC.h" #include "MessageSupport.h" #include "ModeFill.h" +#include "NVDataMgmt.h" #include "OperationModes.h" #include "Reservoirs.h" #include "ROPump.h" @@ -327,9 +328,13 @@ cmdResponse.rejected = FALSE; heatersStatus[ DG_TRIMMER_HEATER ].targetTemp = heaterCmdPtr->targetTemp; // TODo do we need to remove this since the trimmer heater is set in the reservoirs -#ifndef DISABLE_HEATERS_AND_TEMPS - heatersStatus[ DG_TRIMMER_HEATER ].startHeaterSignal = TRUE; + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_TRIMMER_HEATER ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + heatersStatus[ DG_TRIMMER_HEATER ].startHeaterSignal = TRUE; + } } else { @@ -357,50 +362,53 @@ *************************************************************************/ void execHeatersMonitor( void ) { -#ifndef IGNORE_HEATERS_MONITOR - DG_HEATERS_T heater; - - for ( heater = DG_PRIMARY_HEATER; heater < NUM_OF_DG_HEATERS; heater++ ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_HEATERS_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - // Check if a heater is on and whether is duty cycle is not zero - if ( ( TRUE == heatersStatus[ heater ].isHeaterOn ) && ( ( heatersStatus[ heater ].dutycycle - HEATERS_MIN_DUTY_CYCLE ) > NEARLY_ZERO ) ) - { - // TODO add the function that gets the flow of the new flow sensor for DG. For now it is assumed that trimmer heater flow sensor - // is not 0 so the heater can run if needed - F32 measFlow = ( DG_PRIMARY_HEATER == heater ? getMeasuredROFlowRateLPM() : 50.0 ); - // TODO get the minimum new flow sensor flow sensor - F32 minFlow = ( DG_PRIMARY_HEATER == heater ? MIN_RO_FLOWRATE_LPM : MIN_RO_FLOWRATE_LPM ); - BOOL isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); + DG_HEATERS_T heater; - if ( TRUE == isFlowLow ) + for ( heater = DG_PRIMARY_HEATER; heater < NUM_OF_DG_HEATERS; heater++ ) + { + // Check if a heater is on and whether is duty cycle is not zero + if ( ( TRUE == heatersStatus[ heater ].isHeaterOn ) && ( ( heatersStatus[ heater ].dutycycle - HEATERS_MIN_DUTY_CYCLE ) > NEARLY_ZERO ) ) { - // Check if the flow of the heater is below minimum for the first time - if ( FALSE == heatersStatus[ heater ].isFlowBelowMin ) + // TODO add the function that gets the flow of the new flow sensor for DG. For now it is assumed that trimmer heater flow sensor + // is not 0 so the heater can run if needed + F32 measFlow = ( DG_PRIMARY_HEATER == heater ? getMeasuredROFlowRateLPM() : 50.0 ); + // TODO get the minimum new flow sensor flow sensor + F32 minFlow = ( DG_PRIMARY_HEATER == heater ? MIN_RO_FLOWRATE_LPM : MIN_RO_FLOWRATE_LPM ); + BOOL isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); + + if ( TRUE == isFlowLow ) { - heatersStatus[ heater ].isFlowBelowMin = TRUE; - heatersStatus[ heater ].heaterOnWithNoFlowTimer = getMSTimerCount(); + // Check if the flow of the heater is below minimum for the first time + if ( FALSE == heatersStatus[ heater ].isFlowBelowMin ) + { + heatersStatus[ heater ].isFlowBelowMin = TRUE; + heatersStatus[ heater ].heaterOnWithNoFlowTimer = getMSTimerCount(); + } + else if ( TRUE == didTimeout( heatersStatus[ heater ].heaterOnWithNoFlowTimer, HEATERS_ON_NO_FLOW_TIMEOUT_MS ) ) + { + // Heater has been on with no flow time out + stopHeater( heater ); + + ALARM_ID_T alarm = ( DG_PRIMARY_HEATER == heater ? ALARM_ID_DG_PRIMARY_HEATER_ON_WITH_NO_FLOW_TIMEOUT : + ALARM_ID_DG_TRIMMER_HEATER_ON_WITH_NO_FLOW_TIMEOUT ); + activateAlarmNoData( alarm ); + } } - else if ( TRUE == didTimeout( heatersStatus[ heater ].heaterOnWithNoFlowTimer, HEATERS_ON_NO_FLOW_TIMEOUT_MS ) ) + else { - // Heater has been on with no flow time out - stopHeater( heater ); - - ALARM_ID_T alarm = ( DG_PRIMARY_HEATER == heater ? ALARM_ID_DG_PRIMARY_HEATER_ON_WITH_NO_FLOW_TIMEOUT : - ALARM_ID_DG_TRIMMER_HEATER_ON_WITH_NO_FLOW_TIMEOUT ); - activateAlarmNoData( alarm ); + heatersStatus[ heater ].isFlowBelowMin = FALSE; + heatersStatus[ heater ].heaterOnWithNoFlowTimer = getMSTimerCount(); } } - else - { - heatersStatus[ heater ].isFlowBelowMin = FALSE; - heatersStatus[ heater ].heaterOnWithNoFlowTimer = getMSTimerCount(); - } } + + monitorHeatersVoltage(); } - monitorHeatersVoltage(); -#endif - // Check for data publication publishHeatersData(); } @@ -659,30 +667,33 @@ // Get the primary heater's efficiency and the last fill temperature from the ModeFill F32 heaterEfficiency = heatersStatus[ DG_PRIMARY_HEATER ].heaterEfficiency; -#ifndef DISABLE_HEATERS_EFFICIENCY - if ( TRUE == checkEfficiency ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_HEATERS_EFFICIENCY ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - F32 lastFillTemperature = getLastFillTemperature(); - F32 primaryTargetTemperature = heatersStatus[ DG_PRIMARY_HEATER ].targetTemp; - - // If the last fill temperature > target temperature, it means the primary heater overshot the duty cycle - // so with its efficiency is toned down for the next fill cycle - // If the heater under-shoots the duty cycle, the efficiency increases the duty cycle for the next fill cycle - if ( lastFillTemperature - primaryTargetTemperature > MAXIMUM_ALLOWED_TARGET_TEMPERATURE_DEVIATION_C ) + if ( TRUE == checkEfficiency ) { - heaterEfficiency -= ( lastFillTemperature - primaryTargetTemperature ) * PRIMARY_HEATER_DUTY_CYCLE_PER_TEMPERATURE_C; - } - else - { - heaterEfficiency += ( primaryTargetTemperature - lastFillTemperature ) * PRIMARY_HEATER_DUTY_CYCLE_PER_TEMPERATURE_C; - } + F32 lastFillTemperature = getLastFillTemperature(); + F32 primaryTargetTemperature = heatersStatus[ DG_PRIMARY_HEATER ].targetTemp; - heaterEfficiency = heaterEfficiency <= 0.0 ? 0.0 : heaterEfficiency; + // If the last fill temperature > target temperature, it means the primary heater overshot the duty cycle + // so with its efficiency is toned down for the next fill cycle + // If the heater under-shoots the duty cycle, the efficiency increases the duty cycle for the next fill cycle + if ( lastFillTemperature - primaryTargetTemperature > MAXIMUM_ALLOWED_TARGET_TEMPERATURE_DEVIATION_C ) + { + heaterEfficiency -= ( lastFillTemperature - primaryTargetTemperature ) * PRIMARY_HEATER_DUTY_CYCLE_PER_TEMPERATURE_C; + } + else + { + heaterEfficiency += ( primaryTargetTemperature - lastFillTemperature ) * PRIMARY_HEATER_DUTY_CYCLE_PER_TEMPERATURE_C; + } - // Update the heaters efficiency - heatersStatus[ DG_PRIMARY_HEATER ].heaterEfficiency = heaterEfficiency; + heaterEfficiency = heaterEfficiency <= 0.0 ? 0.0 : heaterEfficiency; + + // Update the heaters efficiency + heatersStatus[ DG_PRIMARY_HEATER ].heaterEfficiency = heaterEfficiency; + } } -#endif // Duty cycle = ( 69.73 * flow rate * deltaT / primary heater maximum power ) ^ 1/2 // Multiply the duty cycle to the heater efficiency Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r1af5c9d200064f18e2727e896f74308e683492a7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 1af5c9d200064f18e2727e896f74308e683492a7) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -136,18 +136,23 @@ void checkInletWaterPressure( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); - - // Alarm per PRS 401 - if ( TRUE == isPressureTooLow ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); + BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); + + // Alarm per PRS 401 + if ( TRUE == isPressureTooLow ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + } + else + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + } } - else - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); - } #endif } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r66cc826068b54bc436cde0fae70a05ba6c1ac974 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 66cc826068b54bc436cde0fae70a05ba6c1ac974) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -379,39 +379,42 @@ flowFilterCounter = 0; } -#ifndef IGNORE_RO_PUMP_MONITOR - // The feedback voltage is on the 0V line so when the duty cycle is 0, the feedback is 2.5V - // The duty cycle is calculated by getting the 1 - (ratio of feedback / to the voltage at 0 percent duty cycle). - roPumpFeedbackDutyCyclePct = 1.0 - ( roFeedbackVoltage / ROP_FEEDBACK_0_PCT_DUTY_CYCLE_VOLTAGE ); - - // To monitor the flow, the control mode must be in closed loop mode and the pump should be control to flow state - // If the pump is controlled to the maximum pressure, the flow might be different from the target flow for more than 10% - // but the pump is not able to achieve the flow. - if ( ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) && ( RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE == roPumpState ) ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_RO_PUMP_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - F32 currentFlow = getMeasuredROFlowRateLPM(); - F32 targetFlow = getTargetROPumpFlowRate(); - // The flow cannot be out of range for than 10% of the target flow - BOOL isFlowOutOfRange = ( fabs( 1.0 - ( currentFlow / targetFlow ) ) > MAX_ALLOWED_FLOW_DEVIATION ? TRUE : FALSE ); - // Figure out whether flow is out of range from which side - BOOL isFlowOutOfUpperRange = ( isFlowOutOfRange && ( currentFlow > targetFlow ) ? TRUE : FALSE ); - BOOL isFlowOutOfLowerRange = ( isFlowOutOfRange && ( currentFlow < targetFlow ) ? TRUE : FALSE ); + // The feedback voltage is on the 0V line so when the duty cycle is 0, the feedback is 2.5V + // The duty cycle is calculated by getting the 1 - (ratio of feedback / to the voltage at 0 percent duty cycle). + roPumpFeedbackDutyCyclePct = 1.0 - ( roFeedbackVoltage / ROP_FEEDBACK_0_PCT_DUTY_CYCLE_VOLTAGE ); - checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, isFlowOutOfUpperRange, currentFlow, targetFlow ); - checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, isFlowOutOfLowerRange, currentFlow, targetFlow ); - } + // To monitor the flow, the control mode must be in closed loop mode and the pump should be control to flow state + // If the pump is controlled to the maximum pressure, the flow might be different from the target flow for more than 10% + // but the pump is not able to achieve the flow. + if ( ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) && ( RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE == roPumpState ) ) + { + F32 currentFlow = getMeasuredROFlowRateLPM(); + F32 targetFlow = getTargetROPumpFlowRate(); + // The flow cannot be out of range for than 10% of the target flow + BOOL isFlowOutOfRange = ( fabs( 1.0 - ( currentFlow / targetFlow ) ) > MAX_ALLOWED_FLOW_DEVIATION ? TRUE : FALSE ); + // Figure out whether flow is out of range from which side + BOOL isFlowOutOfUpperRange = ( isFlowOutOfRange && ( currentFlow > targetFlow ) ? TRUE : FALSE ); + BOOL isFlowOutOfLowerRange = ( isFlowOutOfRange && ( currentFlow < targetFlow ) ? TRUE : FALSE ); - // Check whether the Duty cycle is out of range - BOOL isDCOutOfRange = ( fabs( roPumpFeedbackDutyCyclePct - roPumpDutyCyclePctSet ) > ROP_DUTY_CYCLE_OUT_OF_RANGE_TOLERANCE ? TRUE : FALSE ); + checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, isFlowOutOfUpperRange, currentFlow, targetFlow ); + checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, isFlowOutOfLowerRange, currentFlow, targetFlow ); + } - checkPersistentAlarm( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE, isDCOutOfRange, roPumpFeedbackDutyCyclePct, roPumpDutyCyclePctSet ); + // Check whether the Duty cycle is out of range + BOOL isDCOutOfRange = ( fabs( roPumpFeedbackDutyCyclePct - roPumpDutyCyclePctSet ) > ROP_DUTY_CYCLE_OUT_OF_RANGE_TOLERANCE ? TRUE : FALSE ); - // Check if it the alarm has timed out and if the pump is supposed to be off but it is still on, activate the safety shutdown - if ( ( TRUE == isAlarmActive( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE ) ) && ( FALSE == isROPumpOn ) ) - { - activateSafetyShutdown(); + checkPersistentAlarm( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE, isDCOutOfRange, roPumpFeedbackDutyCyclePct, roPumpDutyCyclePctSet ); + + // Check if it the alarm has timed out and if the pump is supposed to be off but it is still on, activate the safety shutdown + if ( ( TRUE == isAlarmActive( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE ) ) && ( FALSE == isROPumpOn ) ) + { + activateSafetyShutdown(); + } } -#endif // Publish RO pump data on interval publishROPumpData(); Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -241,11 +241,15 @@ // Initialize the heaters internal thermocouples constants tempSensors[ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].conversionCoeff = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].maxAllowedTemperature = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; tempSensors[ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].conversionCoeff = HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].maxAllowedTemperature = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; // Initialize the heaters cold junction constants tempSensors[ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].conversionCoeff = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].maxAllowedTemperature = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; tempSensors[ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].conversionCoeff = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; + tempSensors[ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].maxAllowedTemperature = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; // FPGA board temperature conversion coefficient tempSensors[ TEMPSENSORS_FPGA_BOARD_SENSOR ].conversionCoeff = 503.975 / (F32)TWELVE_BIT_RESOLUTION; @@ -366,32 +370,37 @@ void checkInletWaterTemperature( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - F32 temperature = getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ); - BOOL isWaterTempInHighRange = ( temperature > MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); - BOOL isWaterTempInLowRange = ( temperature < MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ? TRUE : FALSE ); - BOOL isWaterTempTooHigh = ( temperature > MAX_WATER_TEMPERATURE_ALARM ? TRUE : FALSE ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + F32 temperature = getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ); + BOOL isWaterTempInHighRange = ( temperature > MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); + BOOL isWaterTempInLowRange = ( temperature < MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ? TRUE : FALSE ); + BOOL isWaterTempTooHigh = ( temperature > MAX_WATER_TEMPERATURE_ALARM ? TRUE : FALSE ); - // Fault alarm per PRS 557 for high temperature - checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, isWaterTempTooHigh, temperature, MAX_WATER_TEMPERATURE_ALARM ); + // Fault alarm per PRS 557 for high temperature + checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, isWaterTempTooHigh, temperature, MAX_WATER_TEMPERATURE_ALARM ); - if ( TRUE == isWaterTempInHighRange ) // warning alarm per PRS 406 - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, isWaterTempInHighRange, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); - } - else if ( temperature <= MIN_WATER_TEMPERATURE_WARNING_HIGH_RANGE ) - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, FALSE, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); - } + if ( TRUE == isWaterTempInHighRange ) // warning alarm per PRS 406 + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, isWaterTempInHighRange, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + } + else if ( temperature <= MIN_WATER_TEMPERATURE_WARNING_HIGH_RANGE ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, FALSE, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + } - if ( TRUE == isWaterTempInLowRange ) // warning alarm per PRS 405 - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, isWaterTempInLowRange, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + if ( TRUE == isWaterTempInLowRange ) // warning alarm per PRS 405 + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, isWaterTempInLowRange, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + } + else if ( temperature >= MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, FALSE, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + } } - else if ( temperature >= MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ) - { - checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, FALSE, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); - } #endif } @@ -925,12 +934,17 @@ *************************************************************************/ static void monitorTemperatureSnsrs( U32 sensorIndex ) { - F32 temperature = getTemperatureValue( sensorIndex ); - - // Check both temperature and to be in range - if ( ( temperature < TEMP_SENSORS_MIN_ALLOWED_DEGREE_C ) || ( temperature > tempSensors[ sensorIndex ].maxAllowedTemperature ) ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_TEMPERATURE_SENSORS_ALARM ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE, TRUE, sensorIndex, temperature ); + F32 temperature = getTemperatureValue( sensorIndex ); + + // Check both temperature and to be in range + if ( ( temperature < TEMP_SENSORS_MIN_ALLOWED_DEGREE_C ) || ( temperature > tempSensors[ sensorIndex ].maxAllowedTemperature ) ) + { + checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE, TRUE, sensorIndex, temperature ); + } } } Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r9f5d2ce00deb3121935f43ea3824824576ca92da -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 9f5d2ce00deb3121935f43ea3824824576ca92da) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -397,13 +397,16 @@ // Get the health of the reactor (override or non-override) and decide the status BOOL isReactorUnhealthy = ( UV_REACTOR_HEALTHY == getUVReactorHealth( reactor ) ? FALSE : TRUE ); -#ifndef DISABLE_UV_REACTORS - // Check if the alarm has been active - if ( TRUE == checkPersistentAlarm( ALARM_ID_UV_REACTOR_NOT_HEALTHY, isReactorUnhealthy, (U32)reactor, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD ) ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UV_REACTORS ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - reactorsStatus[ reactor ].switchState = TURN_OFF; + // Check if the alarm has been active + if ( TRUE == checkPersistentAlarm( ALARM_ID_UV_REACTOR_NOT_HEALTHY, isReactorUnhealthy, (U32)reactor, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD ) ) + { + reactorsStatus[ reactor ].switchState = TURN_OFF; + } } -#endif // Check if it has been requested to turn off a reactor if ( TURN_OFF == reactorsStatus[ reactor ].switchState ) Index: firmware/App/DGCommon.h =================================================================== diff -u -r1af5c9d200064f18e2727e896f74308e683492a7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 1af5c9d200064f18e2727e896f74308e683492a7) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -34,44 +34,15 @@ // TODO: Removed debug build flags when release build is ready // #define BOARD_WITH_NO_HARDWARE 1 // Build switch // #define TASK_TIMING_OUTPUT_ENABLED 1 // Build switch // re-purposes drain pump enable pin for task timing -// #define DISABLE_HEATERS_AND_TEMPS 1 // Implement -// #define DISABLE_ACCELS 1 // Implement -// #define SKIP_POST 1 // Not needed - #define SKIP_CAL_CHECK 1 // Implement -// #define ENABLE_DIP_SWITCHES 1 // Not needed -// #define EMC_TEST_BUILD 1 // Build switch - #define ALARMS_DEBUG 1 // Not needed -// #define HEATERS_DEBUG 1 // Not needed -// #define PRESSURES_DEBUG 1 // Not needed - // #define IGNORE_DRAIN_PUMP_MONITOR 1 // Build switch - #define IGNORE_HEATERS_MONITOR 1 // Build switch - #define IGNORE_RO_PUMP_MONITOR 1 // Build switch - #define DISABLE_RO_RATIO_CHECK 1 // Implement -// #define DISABLE_COND_SENSOR_CHECK 1 // Disabled for Tom // Implement -// #define DISABLE_WATER_QUALITY_CHECK 1 // Disabled for Tom // Implement - #define DISABLE_RTC_CONFIG 1 // Not needed + #define DISABLE_ACK_ALARM 1 // Build switch #define THD_USING_TRO_CONNECTOR 1 // Build switch - #define DISABLE_FLOW_CHECK_IN_FILL 1 // Implement - #define IGNORE_CONC_PUMP_IN_HEAT_DISINFECT 1 // Not needed -// #define NEW_FMD_FLOW_SENSOR 1 // Not needed - #define DISABLE_HEATERS_EFFICIENCY 1 - #define DISABLE_COND_STATUS_CHECK 1 /// Build switch - #define DISABLE_DISINFECT_CONDUCTIVITY 1 // Implement -// #define DISABLE_CONC_PUMPS 1 -// #define DISABLE_CAP_SWITCHES 1 // Implement - #define DISABLE_UV_REACTORS 1 - #define DISABLE_ACID_BICARB_ALARMS 1 // Implement - #define DISABLE_EMPTY_BOTTLES_ALARMS 1 // Implement + #define DISABLE_COND_STATUS_CHECK 1 // Build switch +// #define EMC_TEST_BUILD 1 // Build switch -// #define DISABLE_PRIME_CONCENT_LINES 1 - #define DISABLE_BICARB_CONDUCTIVITY_TEST 1 - #define DISABLE_ACID_CONDUCTIVITY_TEST 1 - // Turn these flags on to disable dialysate mixing - #define DISABLE_DIALYSATE_CHECK 1 // Disabled for Tom // Implement -// #define DISABLE_MIXING 1 // Implement - //#define DISABLE_FLOW_CONTROL_TREATMENT 1 // Not needed - #define DISABLE_ACK_ALARM 1 // Build switch + #define DISABLE_RTC_CONFIG 1 // Not needed TODO investigate and remove + + #include #include #endif Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 3414e47b2664c56ab6b2f0cd5cd6b30ae9a5e333) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -606,13 +606,23 @@ // Check if flush time has elapsed if ( TRUE == didTimeout( stateTimer, FLUSH_DRAIN_WAIT_TIME_MS ) ) { -#ifndef DISABLE_DISINFECT_CONDUCTIVITY + BOOL hasConductivityPassed = FALSE; + // If the inlet temperature and conductivity are in range, move onto the next state if ( ( getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ) > MIN_INLET_TEMPERATURE_C ) && ( getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ) <= MAX_INLET_CONDUCTIVITY_US_PER_CM ) ) -#else - if ( TRUE ) + { + hasConductivityPassed = TRUE; + } + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DISINFECT_CONDUCTIVITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) + { + hasConductivityPassed = TRUE; + } #endif + + if ( TRUE == hasConductivityPassed ) { setValveState( VPD, VALVE_STATE_OPEN_C_TO_NC ); setROPumpTargetFlowRateLPM( RO_PUMP_TARGET_FLUSH_FILL_FLOW_RATE_LPM, MAX_RO_PUMP_FLUSH_FILL_PRESSURE_PSI ); @@ -991,15 +1001,13 @@ // Set the chemical disinfect that is published on the UI chemDisinfectUIState = CHEM_DISINFECT_UI_STATE_MIX_WATER_AND_ACID; -#ifndef DISABLE_DISINFECT_CONDUCTIVITY F32 cd2Conductivity = getConductivityValue( (U32)CONDUCTIVITYSENSORS_CD2_SENSOR ); if ( cd2Conductivity <= MIN_ACID_CONDUCTIVITY_US_PER_CM ) { primeAcidSteadyStateCounter = 0; } else -#endif { // Check if the acid conductivity value has been if ( ++primeAcidSteadyStateCounter >= PRIME_ACID_STEADY_CONDUCTIVITY_TIME_MS ) Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -re1c23ba7cd93c1d63ffdcbd894aa95ac7c39b584 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision e1c23ba7cd93c1d63ffdcbd894aa95ac7c39b584) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -123,9 +123,7 @@ // NOTE: The target flow rate should be set prior to setting the start primary heater // because the initial guess in the heaters driver needs the target flow to calculate // the new PWMs for the main and small primary heaters -#ifndef DISABLE_FLOW_CONTROL_TREATMENT setROPumpTargetFlowRateLPM( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); -#endif setHeaterTargetTemperature( DG_PRIMARY_HEATER, getPrimaryHeaterTargetTemperature() ); startHeater( DG_PRIMARY_HEATER ); @@ -248,22 +246,25 @@ setValveState( VRD2, VALVE_STATE_CLOSED ); } -#ifndef DISABLE_EMPTY_BOTTLES_ALARMS - // Detect empty bottles using integrated volumes - if ( ( ACID_CONCENTRATION_BOTTLE_VOLUME_ML - getChemicalUsedVolumeML( ACID ) ) <= CONCENTRATION_BOTTLE_LOW_VOLUME_ML ) // || // SRSDG 437 +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_EMPTY_BOTTLES_ALARM ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - resetChemicalUsedVolumeML( ACID ); - setThisFisrtFillFlag( TRUE ); // indicates bottles need prime - activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); - } + // Detect empty bottles using integrated volumes + if ( ( ACID_CONCENTRATION_BOTTLE_VOLUME_ML - getChemicalUsedVolumeML( ACID ) ) <= CONCENTRATION_BOTTLE_LOW_VOLUME_ML ) // || // SRSDG 437 + { + resetChemicalUsedVolumeML( ACID ); + setThisFisrtFillFlag( TRUE ); // indicates bottles need prime + activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); + } - if ( ( BICARB_CONCENTRATION_BOTTLE_VOLUME_ML - getChemicalUsedVolumeML( BICARB ) ) <= CONCENTRATION_BOTTLE_LOW_VOLUME_ML ) // || // SRSDG 438 - { - resetChemicalUsedVolumeML( BICARB ); - setThisFisrtFillFlag( TRUE ); - activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); + if ( ( BICARB_CONCENTRATION_BOTTLE_VOLUME_ML - getChemicalUsedVolumeML( BICARB ) ) <= CONCENTRATION_BOTTLE_LOW_VOLUME_ML ) // || // SRSDG 438 + { + resetChemicalUsedVolumeML( BICARB ); + setThisFisrtFillFlag( TRUE ); + activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); + } } -#endif if ( TRUE == isReservoirTarePending() ) { // Tare reservoir load cells at empty if requested Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -210,9 +210,7 @@ // NOTE: The target flow rate should be set prior to setting the start primary heater // because the initial guess in the heaters driver needs the target flow to calculate // the new PWMs for the main and small primary heaters -#ifndef DISABLE_FLOW_CONTROL_TREATMENT setROPumpTargetFlowRateLPM( getTargetFillFlowRateLPM(), TARGET_RO_PRESSURE_PSI ); -#endif setHeaterTargetTemperature( DG_PRIMARY_HEATER, getPrimaryHeaterTargetTemperature() ); startHeater( DG_PRIMARY_HEATER ); @@ -559,11 +557,22 @@ if ( TRUE == didTimeout( concentrateTestStartTime, CONCENTRATE_TEST_TIME_OUT_MS ) ) { - averageBicarbConductivity = totalBicarbConductivity / bicarbConductivitySampleCount; + BOOL isConductivityInRange = FALSE; + averageBicarbConductivity = totalBicarbConductivity / bicarbConductivitySampleCount; -#ifndef DISABLE_BICARB_CONDUCTIVITY_TEST if ( TRUE == isValueWithinPercentRange( averageBicarbConductivity, BICARB_TEST_CD2_TCD, FIVE_PERCENT_FACTOR ) ) + { + isConductivityInRange = TRUE; + } + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_BICARB_CONDUCTIVITY_TEST ) != SW_CONFIG_ENABLE_VALUE ) + { + isConductivityInRange = TRUE; + } #endif + + if ( TRUE == isConductivityInRange ) { // Initialization requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB ); @@ -579,15 +588,12 @@ // State transition concentrateTestStartTime = getMSTimerCount(); result = DG_FILL_MODE_STATE_TEST_ACID_CONDUCTIVITY; - } -#ifndef DISABLE_BICARB_CONDUCTIVITY_TEST else { // Bicarb test failed, go to fault SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE, averageBicarbConductivity ); } -#endif } return result; @@ -617,14 +623,26 @@ if ( TRUE == didTimeout( concentrateTestStartTime, CONCENTRATE_TEST_TIME_OUT_MS ) ) { + BOOL haveTestsPassed = FALSE; averageBicarbConductivity = totalBicarbConductivity / bicarbConductivitySampleCount; averageAcidConductivity = totalAcidConductivity / acidConductivitySampleCount; pctDiffInConductivity = fabs( 2.0 * ( averageAcidConductivity - averageBicarbConductivity ) / ( averageAcidConductivity + averageBicarbConductivity ) ); -#ifndef DISABLE_ACID_CONDUCTIVITY_TEST + if ( ( TRUE == isValueWithinPercentRange( averageAcidConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR ) ) && ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) ) + { + haveTestsPassed = TRUE; + } + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_BICARB_CONDUCTIVITY_TEST ) != SW_CONFIG_ENABLE_VALUE ) + { + haveTestsPassed = TRUE; + } #endif + + if ( TRUE == haveTestsPassed ) { setROPumpTargetFlowRateLPM( getTargetFillFlowRateLPM(), TARGET_RO_PRESSURE_PSI ); @@ -635,13 +653,11 @@ fillStatus.isThisFirstFill = FALSE; result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } -#ifndef DISABLE_ACID_CONDUCTIVITY_TEST else { // Acid conductivity did not pass, fault SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ); } -#endif } return result; @@ -662,9 +678,7 @@ // Prime mixing before deliver result to reservoir handleDialysateMixing( getMeasuredROFlowRateLPM() * ML_PER_LITER ); -#ifndef DISABLE_MIXING if ( concentratePumpPrimeCount++ > CONCENTRATE_PUMP_PRIME_INTERVAL ) -#endif { setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); @@ -716,14 +730,17 @@ F32 avgAcidConductivity = acidConductivityTotal / conductivitySampleCount; F32 avgBicarbConductivity = bicarbConductivityTotal / conductivitySampleCount; -#ifndef DISABLE_FLOW_CHECK_IN_FILL - if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) // SRSDG 240 +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_FLOW_VS_LOAD_CELL_CHECK_IN_FILL ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolumeML, integratedVolumeML ); + if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) // SRSDG 240 + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolumeML, integratedVolumeML ); + } } -#endif -#ifndef DISABLE_DIALYSATE_CHECK // SRSDG 400 + // SRSDG 400 if ( FALSE == isValueWithinPercentRange( avgBicarbConductivity, BICARB_NORMAL_CONDUCTIVITY, FIVE_PERCENT_FACTOR ) ) { setBadAvgConductivityDetectedFlag( TRUE ); // signal idle bad avg conductivity detected @@ -739,7 +756,7 @@ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_FILL_CONDUCTIVITY_OUT_OF_RANGE, avgAcidConductivity, ACID_NORMAL_CONDUCTIVITY ); // trigger replace bottles alarm #1 then activateAlarmNoData ( ALARM_ID_CREATING_DIALYSATE_PLEASE_WAIT ); } -#endif + // Done with this fill. Calculate the average fill flow rate and average temperature // Reset the variables for the next fill // Get the last fill temperature before leaving to Generation Idle @@ -882,7 +899,6 @@ *************************************************************************/ static void handleDialysateMixing( F32 measuredROFlowRate_mL_min ) { -#ifndef DISABLE_MIXING // TODO what should we do with start volume from the structure? DG_ACID_CONCENTRATES_RECORD_T acid = getAcidConcentrateCalRecord(); DG_BICARB_CONCENTRATES_RECORD_T bicarb = getBicarbConcentrateCalRecord(); @@ -897,7 +913,6 @@ setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, acidCP1PumpFlowRate ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, bicarbCP2PumpFlowRate ); -#endif } /*********************************************************************//** Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -125,11 +125,9 @@ // NOTE: The target flow rate should be set prior to setting the start primary heater // because the initial guess in the heaters driver needs the target flow to calculate // the new PWMs for the main and small primary heaters -#ifndef DISABLE_FLOW_CONTROL_TREATMENT setROPumpTargetFlowRateLPM( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); setHeaterTargetTemperature( DG_PRIMARY_HEATER, getPrimaryHeaterTargetTemperature() ); startHeater( DG_PRIMARY_HEATER ); -#endif return genIdleState; } Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rb8a409a6f04c2912cb20eb4c9191bff573080162 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision b8a409a6f04c2912cb20eb4c9191bff573080162) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -612,13 +612,23 @@ // Check if flush time has elapsed if ( TRUE == didTimeout( stateTimer, FLUSH_DRAIN_WAIT_TIME_MS ) ) { -#ifndef DISABLE_HEAT_DISINFECT_CONDUCTIVITY + BOOL hasConductivityPassed = FALSE; + // If the inlet temperature and conductivity are in range, move onto the next state if ( ( getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ) > MIN_INLET_TEMPERATURE_C ) && ( getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ) <= MAX_INLET_CONDUCTIVITY_US_PER_CM ) ) -#else - if ( TRUE ) + { + hasConductivityPassed = TRUE; + } + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DISINFECT_CONDUCTIVITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) + { + hasConductivityPassed = TRUE; + } #endif + + if ( TRUE == hasConductivityPassed ) { setValveState( VPD, VALVE_STATE_OPEN_C_TO_NC ); setROPumpTargetFlowRateLPM( RO_PUMP_TARGET_FLUSH_FILL_FLOW_RATE_LPM, MAX_RO_PUMP_FLUSH_FILL_PRESSURE_PSI ); @@ -696,15 +706,13 @@ else { areTempSensorsInRange = TRUE; -#ifndef IGNORE_CONC_PUMP_IN_HEAT_DISINFECT // Turn the pumps on in reverse setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_SPEED_ML_PER_MIN ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, ACID_PUMP_SPEED_ML_PER_MIN ); // Turn on the concentrate pumps - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); -#endif + requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); concentratePumpsPrimeTimer = getMSTimerCount(); } } @@ -1566,15 +1574,14 @@ // Turn on the drain pump to drain R2 setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); -#ifndef IGNORE_CONC_PUMP_IN_HEAT_DISINFECT + // Turn the pumps on in reverse setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_SPEED_ML_PER_MIN ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, ACID_PUMP_SPEED_ML_PER_MIN ); // Turn on the concentrate pumps - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); -#endif + requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); // This is the last drain of heat disinfect cycle isThisLastDrain = TRUE; @@ -1962,15 +1969,13 @@ // In disinfect R1 to R2, concentrate pumps are also run if ( DG_HEAT_DISINFECT_STATE_DISINFECT_R1_TO_R2 == heatDisinfectState ) { -#ifndef IGNORE_CONC_PUMP_IN_HEAT_DISINFECT // Turn the pumps on in reverse setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_SPEED_ML_PER_MIN ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, BICARB_PUMP_SPEED_ML_PER_MIN ); // During R1 to R2 disinfect, the concentrate pumps turn on - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); -#endif + requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); } } else if ( ( TRUE == isPartialDisinfectInProgress ) && ( ThdTemp > HEAT_DISINFECT_START_TEMPERATURE_C ) ) Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r45a4f6517bd771cde7cba75c9150acef8176fa13 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 45a4f6517bd771cde7cba75c9150acef8176fa13) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -149,11 +149,18 @@ break; case DG_POST_STATE_ACCELEROMETER: -#ifndef DISABLE_ACCELS - testStatus = execAccelTest(); -#else - testStatus = SELF_TEST_STATUS_PASSED; +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ACCELS ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + testStatus = execAccelTest(); + } +#ifndef _RELEASE_ + else + { + testStatus = SELF_TEST_STATUS_PASSED; + } +#endif postState = handlePOSTStatus( testStatus ); break; @@ -188,10 +195,18 @@ break; case DG_POST_STATE_UV_REACTORS: -#ifndef DISABLE_UV_REACTORS - testStatus = execUVReactorsSelfTest(); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UV_REACTORS ) != SW_CONFIG_ENABLE_VALUE ) #endif - testStatus = SELF_TEST_STATUS_PASSED; + { + testStatus = execUVReactorsSelfTest(); + } +#ifndef _RELEASE_ + else + { + testStatus = SELF_TEST_STATUS_PASSED; + } +#endif postState = handlePOSTStatus( testStatus ); break; @@ -338,9 +353,6 @@ // mode previous and current are both published as Init SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_OP_MODE_CHANGE, DG_MODE_INIT, DG_MODE_INIT ) state = DG_POST_STATE_FW_COMPATIBILITY; -#ifdef SKIP_POST - state = DG_POST_STATE_COMPLETED; -#endif startPOSTDelayCounter = 0; } Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r95eefee71702fbf031025dc35ebaf553dfb050b7 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -403,9 +403,8 @@ BOOL result = FALSE; // If DG is in standby mode or in the solo mode and the standby mode is in Idle state, request DG flush - if ( ( DG_MODE_STAN == getCurrentOperationMode() && DG_STANDBY_MODE_STATE_IDLE == standbyState ) || DG_MODE_SOLO == getCurrentOperationMode() ) + if ( ( DG_MODE_STAN == getCurrentOperationMode() && DG_STANDBY_MODE_STATE_IDLE == standbyState ) || ( DG_MODE_SOLO == getCurrentOperationMode() ) ) { -#ifndef DISABLE_CAP_SWITCHES DG_CMD_RESPONSE_T cmdResponse; cmdResponse.commandID = DG_CMD_START_FLUSH; @@ -414,12 +413,16 @@ if ( ( STATE_OPEN == getSwitchStatus( CONCENTRATE_CAP ) ) || ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ) ) { - cmdResponse.rejected = TRUE; - cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : - REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAPS_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : + REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); + } } else -#endif { pendingStartDGFlushRequest = TRUE; result = TRUE; @@ -445,7 +448,6 @@ // If DG is in standby mode and the standby mode is in Idle state or if DG is in solo mode, request DG heat disinfect if ( ( DG_MODE_STAN == getCurrentOperationMode() ) && ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) || ( DG_MODE_SOLO == getCurrentOperationMode() ) ) { -#ifndef DISABLE_CAP_SWITCHES DG_CMD_RESPONSE_T cmdResponse; cmdResponse.commandID = DG_CMD_START_HEAT_DISINFECT; @@ -454,13 +456,16 @@ if ( ( STATE_OPEN == getSwitchStatus( CONCENTRATE_CAP ) ) || ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ) ) { - cmdResponse.rejected = TRUE; - cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : - REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); - +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAPS_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : + REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); + } } else -#endif { pendingStartDGHeatDisinfectRequest = TRUE; status = TRUE; @@ -497,9 +502,14 @@ // When chemical disinfect is about to be started, both caps must be closed if ( ( STATE_OPEN == getSwitchStatus( CONCENTRATE_CAP ) ) || ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ) ) { - cmdResponse.rejected = TRUE; - cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : - REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAPS_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : + REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); + } } else #endif Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -113,11 +113,9 @@ execSwitches(); #endif -#ifndef DISABLE_HEATERS_AND_TEMPS - // Heaters controller execHeaters(); -#endif + // run operation mode state machine execOperationModes(); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -ra9315539f527b92523b1598ff91e47db4d71dae2 -r8fe65bf6222137cc7182ccacff3a5f2fb2f03753 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision a9315539f527b92523b1598ff91e47db4d71dae2) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 8fe65bf6222137cc7182ccacff3a5f2fb2f03753) @@ -84,10 +84,8 @@ // Control valves execValves(); -#ifndef DISABLE_ACCELS // Monitor accelerometer execAccel(); -#endif // Monitor RO pump execROPumpMonitor();