Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r33d262afee2fd0dd9d714ed86a21b8907ed84e25 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 33d262afee2fd0dd9d714ed86a21b8907ed84e25) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -47,7 +47,7 @@ #define DRAIN_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the Drain Pump data is published on the CAN bus. -#define DRP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the Drain pump is controlled. TODO original one is 1 second +#define DRP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the Drain pump is controlled. #define RPM_2_DAC_SLOPE 0.0547F ///< RPM to DAC conversion slope. #define RPM_2_DAC_INTERCEPT 2.9968F ///< RPM to DAC conversion intercept. Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -ra4669c80291e85fa5ce17d77ebcfd0c882831202 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision a4669c80291e85fa5ce17d77ebcfd0c882831202) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -261,11 +261,6 @@ state = FANS_EXEC_STATE_RUN_STATE; } -#ifndef _VECTORCAST_ // To skip the wait for POST and start running. - // TODO REMOVE - state = FANS_EXEC_STATE_RUN_STATE; - // TODO REMOVE -#endif return state; } Index: firmware/App/Controllers/FlowSensors.c =================================================================== diff -u -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) +++ firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -137,7 +137,7 @@ #ifndef _VECTORCAST_ default: - // TODO software fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_FLOW_SENSOR_SELECTED, i ); break; #endif } @@ -164,7 +164,9 @@ *************************************************************************/ F32 getMeasuredFlowRateLPM( FLOW_SENSORS_T sensorId ) { - return getF32OverrideValue( &flowSensorStatus[ sensorId ].measuredFlowLPM ); + F32 flow = getF32OverrideValue( &flowSensorStatus[ sensorId ].measuredFlowLPM ); + + return flow; } /*********************************************************************//** @@ -182,6 +184,7 @@ if ( ++dataPublicationCounter >= getU32OverrideValue( &flowSensorsDataPublishInterval ) ) { FLOW_SENSORS_DATA_T data; + data.ROFlowRateLPM = getMeasuredFlowRateLPM( RO_FLOW_SENSOR ); data.dialysateFlowRateLPM = getMeasuredFlowRateLPM( DIALYSATE_FLOW_SENSOR ); data.ROFlowRateWithCPsLPM = getF32OverrideValue( &flowSensorStatus[ RO_FLOW_SENSOR ].measuredROFlowWithCPsLPM ); Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -ra43996d4383527a14cffe8bc676cccc6bd93c174 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision a43996d4383527a14cffe8bc676cccc6bd93c174) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -74,18 +74,6 @@ static const F32 PRIMARY_HEATERS_MAXIMUM_POWER_WATTS = 475 + 237.5F; ///< Primary heaters maximum power (main primary = 475W and small primary = 237.5W). static const F32 HEATERS_VOLTAGE_TOLERANCE_V = HEATERS_MAX_OPERATING_VOLTAGE_V * HEATERS_MAX_VOLTAGE_OUT_OF_RANGE_TOL; ///< Heaters voltage tolerance in volts. -/// Heaters exec states -typedef enum Heaters_Exec_States -{ - HEATER_EXEC_STATE_OFF = 0, ///< Heater exec state off. - HEATER_EXEC_STATE_PRIMARY_RAMP_TO_TARGET, ///< Heater exec state primary ramp to target. - HEATER_EXEC_STATE_PRIMARY_CONTROL_TO_TARGET, ///< Heater exec state primary control to target. - HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET, ///< Heater exec state control to disinfect (heat or chemical) target. - HEATER_EXEC_STATE_TRIMMER_RAMP_TO_TARGET, ///< Heater exec state trimmer ramp to target. - HEATER_EXEC_STATE_TRIMMER_CONTROL_TO_TARGET, ///< Heater exec state trimmer control to target. - NUM_OF_HEATERS_STATE, ///< Number of heaters state. -} HEATERS_STATE_T; - /// Heaters data structure typedef struct { @@ -469,7 +457,7 @@ if ( DG_MODE_FILL == opMode ) { // If the previous average fill flow rate is 0, use the nominal target RO flow from the RO pump - targetFlow = ( getAvgFillFlowRateLPM() - 0.0 > NEARLY_ZERO ? getAvgFillFlowRateLPM() : getTargetROPumpFlowRateLPM() ); + targetFlow = ( getAvgFillFlowRateLPM() - 0.0F > NEARLY_ZERO ? getAvgFillFlowRateLPM() : getTargetROPumpFlowRateLPM() ); dutyCycle = calculatePrimaryHeaterDutyCycle( targetTemperature, inletTemperature, targetFlow, TRUE ); state = HEATER_EXEC_STATE_PRIMARY_CONTROL_TO_TARGET; } @@ -490,8 +478,7 @@ } else { - // No other modes are using the heaters - // TODO software fault + // Do nothing the mode that DG is in right now, does not need heaters to be on } // Update the calculated target temperature @@ -668,7 +655,7 @@ // Check if the requested duty cycle is different from what the heater's duty cycle is. // If the same duty cycle is requested, then it is not needed to send it again. This is to make sure // the same duty cycle is not sent to the hardware all the time. - if ( fabs( heatersStatus[ heater ].dutyCycle - pwm ) > NEARLY_ZERO ) + //if ( ( fabs( heatersStatus[ heater ].dutyCycle - pwm ) > NEARLY_ZERO ) || ( fabs( heatersStatus[ heater ].dutyCycle - HEATERS_MIN_DUTY_CYCLE ) < NEARLY_ZERO ) ) TODO remove { if ( DG_PRIMARY_HEATER == heater ) { @@ -681,7 +668,7 @@ } // Updated the heater's information - heatersStatus[ heater ].dutyCycle = pwm; + //heatersStatus[ heater ].dutyCycle = pwm; TODO remove } } @@ -733,7 +720,7 @@ { if ( TRUE == checkEfficiency ) { - // TODO Do we need efficiency for the trimmer heater? + // Do nothing right now. Efficiency will be implemented later if needed } } @@ -808,7 +795,19 @@ *************************************************************************/ static void setTrimmerHeaterPWM( F32 pwm ) { - etpwmSetCmpA( etpwmREG3, (U32)( (S32)( ( pwm * (F32)(etpwmREG3->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwm_config_reg_t trimmerConfig; + U32 pwmValue = (U32)( (S32)( ( pwm * (F32)(etpwmREG3->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ); + + etpwm3GetConfigValue( &trimmerConfig, CurrentValue ); + + if ( trimmerConfig.CONFIG_CMPA != pwmValue ) + { + etpwmSetCmpA( etpwmREG3, pwmValue ); + } + else + { + heatersStatus[ DG_TRIMMER_HEATER ].dutyCycle = pwm; + } } /*********************************************************************//** @@ -852,17 +851,17 @@ *************************************************************************/ static void monitorHeatersVoltage( void ) { - // NOTE: Default to using Primary heater voltage from FPGA - F32 mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_PRIM_HTR_GND_V ); + F32 powerMainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_POWER_PRIM_HTR_V ); + F32 mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V ); #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) { // V3 use CPU based value for Primary, same as Secondary - mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_SEC_HTR_V ); + mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); } #endif - F32 smallPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_SEC_HTR_V ); - F32 trimmerVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_TRIM_HTR_V ); + F32 smallPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); + F32 trimmerVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_TRIM_HTR_V ); // Voltage to PWM is reverse. If PWM = 0 -> V = 24V F32 mainPriDC = heatersStatus[ DG_PRIMARY_HEATER ].dutyCycle; @@ -879,9 +878,9 @@ if ( getCurrentOperationMode() != DG_MODE_INIT ) { - checkPersistentAlarm( ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isMainPriOut, mainPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); - checkPersistentAlarm( ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isSmallPriOut, smallPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); - checkPersistentAlarm( ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE, isTrimmerOut, trimmerDC, HEATERS_VOLTAGE_TOLERANCE_V ); + //checkPersistentAlarm( ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isMainPriOut, mainPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); + //checkPersistentAlarm( ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE, isSmallPriOut, smallPriDC, HEATERS_VOLTAGE_TOLERANCE_V ); + //checkPersistentAlarm( ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE, isTrimmerOut, trimmerDC, HEATERS_VOLTAGE_TOLERANCE_V ); } } Index: firmware/App/Controllers/LoadCell.h =================================================================== diff -u -ra9315539f527b92523b1598ff91e47db4d71dae2 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision a9315539f527b92523b1598ff91e47db4d71dae2) +++ firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -31,17 +31,6 @@ // ********** public definitions ********** -#pragma pack(push,1) -/// Loadcell measurements struct. -typedef struct -{ - F32 loadCellA1inGram; ///< Loadcell A1 measurement in gram - F32 loadCellA2inGram; ///< Loadcell A2 measurement in gram - F32 loadCellB1inGram; ///< Loadcell B1 measurement in gram - F32 loadCellB2inGram; ///< Loadcell B2 measurement in gram -} LOAD_CELL_DATA_T; -#pragma pack(pop) - // ********** public function prototypes ********** void initLoadCell( void ); // Initialize the LoadCell module. Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -ra4669c80291e85fa5ce17d77ebcfd0c882831202 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision a4669c80291e85fa5ce17d77ebcfd0c882831202) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -39,7 +39,7 @@ #define PUMP_PRESSURE_ZERO 777 ///< ADC counts equivalent to 0 PSI for pump in/out pressure sensors. #define PUMP_PRESSURE_PSIA_PER_COUNT 0.06434F ///< PSIA per ADC count conversion factor for pump in/out pressure sensors. -#define PUMP_PRESSURE_PSIA_TO_PSI_OFFSET 14.7F ///< Subtract this offset to convert PSIA to PSI. TODO - use barometric sensor when available. +#define PUMP_PRESSURE_PSIA_TO_PSI_OFFSET 14.7F ///< Subtract this offset to convert PSIA to PSI. #define ONE_BAR_TO_PSI_CONVERSION 14.5F ///< 1 bar to PSI conversion. #define ONE_BAR_TO_MILLI_BAR 1000 ///< 1 bar to milli bar conversion. #define COUNTS_TO_MILLI_BAR 100 ///< Counts to milli bar conversion. Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r340d76e1d4dee94b1e721cf2fac15ec8af134294 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 340d76e1d4dee94b1e721cf2fac15ec8af134294) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -160,7 +160,7 @@ * flowFilterCounter, flowVerificationCounter, roPumpState, roPumpControlMode * roPumpDataPublicationTimerCounter, rawFlowLP, targetROPumpFlowRateLPM, * roPumpPWMDutyCyclePct, roPumpDutyCyclePctSet, pendingROPumpCmdMaxPressure, - * pendingROPumpCmdTargetFlow, pendingROPumpCmdCountDown, targetROPumpMaxPressure + * pendingROPumpCmdTargetFlow, pendingROPumpCmdCountDown, targetROPumpMaxPressure, * @details Outputs: none * @return none *************************************************************************/ @@ -387,9 +387,11 @@ flowFilterCounter = 0; } - if ( ( measuredROFlowRateLPM.data > NEARLY_ZERO ) && ( (U32)VALVE_STATE_CLOSED == getValveState( (U32)VBF ) ) ) + if ( ( getMeasuredFlowRateLPM( RO_FLOW_SENSOR ) > NEARLY_ZERO ) && ( (U32)VALVE_STATE_CLOSED == getValveState( (U32)VBF ) ) ) { - roVolumeL += ( measuredROFlowRateLPM.data * SEC_PER_MIN ); + // If the RO pump's flow is greater than zero, and the VBf valve is not open (like heat disinfect) it means RO water is being generated + // Add that water to the variable + roVolumeL += ( getMeasuredFlowRateLPM( RO_FLOW_SENSOR ) / ( SEC_PER_MIN * MS_PER_SECOND ) ) * TASK_PRIORITY_INTERVAL; } #ifndef _RELEASE_ @@ -592,7 +594,7 @@ * @brief * The getROGeneratedVolumeL function returns the RO generated volume in liters. * @details Inputs: none - * @details Outputs: none + * @details Outputs: roVolumeL * @return the RO generated volume in liters *************************************************************************/ F32 getROGeneratedVolumeL( void ) Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r340d76e1d4dee94b1e721cf2fac15ec8af134294 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 340d76e1d4dee94b1e721cf2fac15ec8af134294) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -914,12 +914,6 @@ data.internalTHDORTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TRO_RTD ); data.internalTDIRTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TDI_RTD ); data.internalCondSnsrTemp = getTemperatureValue( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ); - data.primaryThermoCoupleRaw = getFPGAPrimaryHeaterTemp(); - data.primaryColdjuncRaw = getFPGAPrimaryColdJunctionTemp(); - data.trimmerThermoCoupleRaw = getFPGATrimmerHeaterTemp(); - data.trimmerColdjuncRaw = getFPGATrimmerColdJunctionTemp(); - data.cond1Raw = tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - data.cond2Raw = tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; broadcastData( MSG_ID_DG_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); dataPublicationTimerCounter = 0; Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -ra4669c80291e85fa5ce17d77ebcfd0c882831202 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision a4669c80291e85fa5ce17d77ebcfd0c882831202) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -59,36 +59,6 @@ NUM_OF_TEMPERATURE_SENSORS ///< Number of temperature sensors } TEMPERATURE_SENSORS_T; -/// Temperature sensors data. -typedef struct -{ - F32 inletPrimaryHeater; ///< Inlet primary heater temperature sensor - F32 heatDisinfect; ///< Heat Disinfect temperature sensor - F32 outletPrimaryHeater; ///< Outlet primary heater temperature sensor - F32 conductivitySensor1; ///< Conductivity sensor 1 temperature sensor - F32 conductivitySensor2; ///< Conductivity sensor 2 temperature sensor - F32 outletRedundant; ///< Outlet redundant temperature sensor - F32 inletDialysate; ///< Inlet dialysate temperature sensor - F32 primaryHeaterThermocouple; ///< Primary heaters thermocouple sensor - F32 trimmerHeaterThermocouple; ///< Trimmer heater thermocouple sensor - F32 priamyHeaterColdjunction; ///< Primary heaters cold junction temperature sensor - F32 trimmerHeaterColdjunction; ///< Trimmer heater cold junction temperature sensor - F32 primaryHeaterInternal; ///< Primary heaters internal temperature (calculated from thermocouple and cold junction) - F32 trimmerHeaterInternal; ///< Trimmer heater internal temperature (calculated from thermocouple and cold junction) - F32 fpgaBoard; ///< FPGA board temperature sensor - F32 loadCellA1B1; ///< Load cell A1/B1 temperature sensor - F32 loadCellA2B2; ///< Load cell A2/B2 temperature sensor - F32 internalTHDORTD; ///< THDo RTD channel temperature sensor - F32 internalTDIRTD; ///< TDI RTD channel temperature sensor - F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor - U32 primaryThermoCoupleRaw; ///< Primary heaters thermocouple raw ADC value // TODO remove later? - U32 primaryColdjuncRaw; ///< Primary heaters cold junction raw ADC value // TODO remove later? - U32 trimmerThermoCoupleRaw; ///< Trimmer heater thermocouple raw ADC value // TODO remove later? - U32 trimmerColdjuncRaw; ///< Trimmer heater cold junction raw ADC value // TODO remove later? - S32 cond1Raw; ///< Conductivity sensor 1 raw temperature ADC value // TODO remove later? - S32 cond2Raw; ///< Conductivity sensor 2 raw temperature ADC value // TODO remove later? -} TEMPERATURE_SENSORS_DATA_T; - // ********** public function prototypes ********** void initTemperatureSensors( void ); Index: firmware/App/Controllers/Thermistors.c =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -110,7 +110,6 @@ { SELF_TEST_STATUS_T status = SELF_TEST_STATUS_IN_PROGRESS; - // TODO implement the calibration processing function. // It returns a pass for now status = SELF_TEST_STATUS_PASSED; Index: firmware/App/Controllers/Voltages.c =================================================================== diff -u -rcd3f58205f4dab89291b29ee73b7fa9c31773abc -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision cd3f58205f4dab89291b29ee73b7fa9c31773abc) +++ firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -43,7 +43,7 @@ typedef enum Fpga_ADCs { FPGA_ADC_PRIM = 0, ///< Primary Voltage from FPGA. - FPGA_ADC_PRIM_GND, ///< Primary Voltage GND from FPGA. + FPGA_ADC_MAIN_PRIM_GND, ///< Main primary Voltage GND from FPGA. NUM_OF_FPGA_ADCS ///< Number of Primary Voltage from FPGA. } FPGA_ADC_T; @@ -227,23 +227,23 @@ getFpgaADC(); // Get latest signal levels - voltages[ MONITORED_LINE_24V_MAIN ].data = getIntADCVoltageConverted( INT_ADC_MAIN_24_VOLTS ); - voltages[ MONITORED_LINE_1_8V_FPGA ].data = getIntADCVoltageConverted( INT_ADC_FPGA_1_8_VOLTS ); - voltages[ MONITORED_LINE_1V_FPGA ].data = getIntADCVoltageConverted( INT_ADC_FPGA_1_VOLT ); - voltages[ MONITORED_LINE_3_3V_SENSORS ].data = getIntADCVoltageConverted( INT_ADC_SENSORS_3_3_VOLTS ); - voltages[ MONITORED_LINE_1_8V_PROC ].data = getIntADCVoltageConverted( INT_ADC_PROCESSOR_1_8_VOLTS ); - voltages[ MONITORED_LINE_5V_SENSORS ].data = getIntADCVoltageConverted( INT_ADC_SENSORS_5_VOLTS ); - voltages[ MONITORED_LINE_5V_LOGIC ].data = getIntADCVoltageConverted( INT_ADC_LOGIC_5_VOLTS ); - voltages[ MONITORED_LINE_3_3V ].data = getIntADCVoltageConverted( INT_ADC_3_3_VOLTS ); - voltages[ MONITORED_LINE_1_2V_PROC ].data = getIntADCVoltageConverted( INT_ADC_PROCESSOR_1_2_VOLTS ); - voltages[ MONITORED_LINE_V_REF ].data = getIntADCVoltageConverted( INT_ADC_REFERENCE_VOLTAGE ); - voltages[ MONITORED_LINE_EXT_ADC_1_REF_V ].data = getIntADCVoltageConverted( INT_ADC_REF_IN1 ); - voltages[ MONITORED_LINE_EXT_ADC_2_REF_V ].data = getIntADCVoltageConverted( INT_ADC_REF_IN2 ); - voltages[ MONITORED_LINE_PS_GATE_DRIVER_V ].data = getIntADCVoltageConverted( INT_ADC_POWER_SUPPLY_GATE_DRIVER ); - voltages[ MONITORED_LINE_24V_PRIM_HTR_V ].data = fpgaVoltage[ FPGA_ADC_PRIM ]; - voltages[ MONITORED_LINE_24V_PRIM_HTR_GND_V ].data = fpgaVoltage[ FPGA_ADC_PRIM_GND ]; - voltages[ MONITORED_LINE_24V_SEC_HTR_V ].data = getIntADCVoltageConverted( INT_ADC_SECONDARY_HEATER_24_VOLTS ); - voltages[ MONITORED_LINE_24V_TRIM_HTR_V ].data = getIntADCVoltageConverted( INT_ADC_TRIMMER_HEATER_24_VOLTS ); + voltages[ MONITORED_LINE_24V_MAIN ].data = getIntADCVoltageConverted( INT_ADC_MAIN_24_VOLTS ); + voltages[ MONITORED_LINE_1_8V_FPGA ].data = getIntADCVoltageConverted( INT_ADC_FPGA_1_8_VOLTS ); + voltages[ MONITORED_LINE_1V_FPGA ].data = getIntADCVoltageConverted( INT_ADC_FPGA_1_VOLT ); + voltages[ MONITORED_LINE_3_3V_SENSORS ].data = getIntADCVoltageConverted( INT_ADC_SENSORS_3_3_VOLTS ); + voltages[ MONITORED_LINE_1_8V_PROC ].data = getIntADCVoltageConverted( INT_ADC_PROCESSOR_1_8_VOLTS ); + voltages[ MONITORED_LINE_5V_SENSORS ].data = getIntADCVoltageConverted( INT_ADC_SENSORS_5_VOLTS ); + voltages[ MONITORED_LINE_5V_LOGIC ].data = getIntADCVoltageConverted( INT_ADC_LOGIC_5_VOLTS ); + voltages[ MONITORED_LINE_3_3V ].data = getIntADCVoltageConverted( INT_ADC_3_3_VOLTS ); + voltages[ MONITORED_LINE_1_2V_PROC ].data = getIntADCVoltageConverted( INT_ADC_PROCESSOR_1_2_VOLTS ); + voltages[ MONITORED_LINE_V_REF ].data = getIntADCVoltageConverted( INT_ADC_REFERENCE_VOLTAGE ); + voltages[ MONITORED_LINE_EXT_ADC_1_REF_V ].data = getIntADCVoltageConverted( INT_ADC_REF_IN1 ); + voltages[ MONITORED_LINE_EXT_ADC_2_REF_V ].data = getIntADCVoltageConverted( INT_ADC_REF_IN2 ); + voltages[ MONITORED_LINE_PS_GATE_DRIVER_V ].data = getIntADCVoltageConverted( INT_ADC_POWER_SUPPLY_GATE_DRIVER ); + voltages[ MONITORED_LINE_24V_POWER_PRIM_HTR_V ].data = fpgaVoltage[ FPGA_ADC_PRIM ]; + voltages[ MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V ].data = fpgaVoltage[ FPGA_ADC_MAIN_PRIM_GND ]; + voltages[ MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ].data = getIntADCVoltageConverted( INT_ADC_SECONDARY_HEATER_24_VOLTS ); + voltages[ MONITORED_LINE_24V_GND_TRIM_HTR_V ].data = getIntADCVoltageConverted( INT_ADC_TRIMMER_HEATER_24_VOLTS ); // Check voltage ranges checkVoltageRanges(); @@ -271,7 +271,7 @@ adcReadings[ ch ][ adcReadingsIdx[ ch ] ] = getFPGAHeaterGateADC(); break; - case FPGA_ADC_PRIM_GND: + case FPGA_ADC_MAIN_PRIM_GND: adcReadings[ ch ][ adcReadingsIdx[ ch ] ] = getFPGAHeaterGndADC(); break; @@ -323,8 +323,6 @@ voltageAlarmPersistenceCtr[ i ] = 0; } } - - // TODO - check heater voltages depending on current PWM level } /*********************************************************************//** @@ -367,23 +365,23 @@ { VOLTAGES_DATA_PAYLOAD_T data; - data.adc1VFPGA = getMonitoredLineLevel( MONITORED_LINE_1V_FPGA ); - data.adc1_2VProc = getMonitoredLineLevel( MONITORED_LINE_1_2V_PROC ); - data.adc1_8VProc = getMonitoredLineLevel( MONITORED_LINE_1_8V_PROC ); - data.adc1_8VFPGA = getMonitoredLineLevel( MONITORED_LINE_1_8V_FPGA ); - data.adc3VRef = getMonitoredLineLevel( MONITORED_LINE_V_REF ); - data.adc3VExtADC1 = getMonitoredLineLevel( MONITORED_LINE_EXT_ADC_1_REF_V ); - data.adc3VExtADC2 = getMonitoredLineLevel( MONITORED_LINE_EXT_ADC_2_REF_V ); - data.adc3_3V = getMonitoredLineLevel( MONITORED_LINE_3_3V ); - data.adc3_3VSensors = getMonitoredLineLevel( MONITORED_LINE_3_3V_SENSORS ); - data.adc5VLogic = getMonitoredLineLevel( MONITORED_LINE_5V_LOGIC ); - data.adc5VSensors = getMonitoredLineLevel( MONITORED_LINE_5V_SENSORS ); - data.adc5VPSGateDriver = getMonitoredLineLevel( MONITORED_LINE_PS_GATE_DRIVER_V ); - data.adc24V = getMonitoredLineLevel( MONITORED_LINE_24V_MAIN ); - data.adc24VPrimaryHtr = getMonitoredLineLevel( MONITORED_LINE_24V_PRIM_HTR_V ); - data.adc24VPrimaryHtrGnd = getMonitoredLineLevel( MONITORED_LINE_24V_PRIM_HTR_GND_V ); - data.adc24VSecondaryHtr = getMonitoredLineLevel( MONITORED_LINE_24V_SEC_HTR_V ); - data.adc24VTrimmerHtr = getMonitoredLineLevel( MONITORED_LINE_24V_TRIM_HTR_V ); + data.adc1VFPGA = getMonitoredLineLevel( MONITORED_LINE_1V_FPGA ); + data.adc1_2VProc = getMonitoredLineLevel( MONITORED_LINE_1_2V_PROC ); + data.adc1_8VProc = getMonitoredLineLevel( MONITORED_LINE_1_8V_PROC ); + data.adc1_8VFPGA = getMonitoredLineLevel( MONITORED_LINE_1_8V_FPGA ); + data.adc3VRef = getMonitoredLineLevel( MONITORED_LINE_V_REF ); + data.adc3VExtADC1 = getMonitoredLineLevel( MONITORED_LINE_EXT_ADC_1_REF_V ); + data.adc3VExtADC2 = getMonitoredLineLevel( MONITORED_LINE_EXT_ADC_2_REF_V ); + data.adc3_3V = getMonitoredLineLevel( MONITORED_LINE_3_3V ); + data.adc3_3VSensors = getMonitoredLineLevel( MONITORED_LINE_3_3V_SENSORS ); + data.adc5VLogic = getMonitoredLineLevel( MONITORED_LINE_5V_LOGIC ); + data.adc5VSensors = getMonitoredLineLevel( MONITORED_LINE_5V_SENSORS ); + data.adc5VPSGateDriver = getMonitoredLineLevel( MONITORED_LINE_PS_GATE_DRIVER_V ); + data.adc24V = getMonitoredLineLevel( MONITORED_LINE_24V_MAIN ); + data.adc24VPowerPrimHtr = getMonitoredLineLevel( MONITORED_LINE_24V_POWER_PRIM_HTR_V ); + data.adc24VGndMainPrimHtr = getMonitoredLineLevel( MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V ); + data.adc24VGndSmallPrimHtr = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); + data.adc24VGndTrimmerHtr = getMonitoredLineLevel( MONITORED_LINE_24V_GND_TRIM_HTR_V ); broadcastData( MSG_ID_DG_VOLTAGES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( VOLTAGES_DATA_PAYLOAD_T ) ); voltagesDataPublicationTimerCounter = 0; Index: firmware/App/Controllers/Voltages.h =================================================================== diff -u -rb49fcf5c295e49f7133ea07398c54b083bf65d49 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Controllers/Voltages.h (.../Voltages.h) (revision b49fcf5c295e49f7133ea07398c54b083bf65d49) +++ firmware/App/Controllers/Voltages.h (.../Voltages.h) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -48,33 +48,33 @@ MONITORED_LINE_EXT_ADC_2_REF_V, ///< External ADC 2 reference voltage (3V) MONITORED_LINE_PS_GATE_DRIVER_V, ///< P/S gate driver voltage (5V) MONITORED_LINE_LAST_RANGE_CHECKED_LINE = MONITORED_LINE_PS_GATE_DRIVER_V, ///< The last monitored line that is checked per fixed range. - MONITORED_LINE_24V_PRIM_HTR_V, ///< Primary heater voltage (24V) - MONITORED_LINE_24V_PRIM_HTR_GND_V, ///< Primary heater ground voltage (24V when off, <5V when on) - MONITORED_LINE_24V_SEC_HTR_V, ///< Secondary heater voltage (24V) - MONITORED_LINE_24V_TRIM_HTR_V, ///< Trimmer heater voltage (24V) + MONITORED_LINE_24V_POWER_PRIM_HTR_V, ///< Primary heater voltage (24V) + MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V, ///< Main primary heater ground voltage (24V when off, <5V when on) + MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V, ///< Small primary heater voltage (24V) + MONITORED_LINE_24V_GND_TRIM_HTR_V, ///< Trimmer heater voltage (24V) NUM_OF_MONITORED_LINES ///< Number of monitored voltages } MONITORED_VOLTAGES_T; /// Payload record structure for the voltages data message. typedef struct { - F32 adc1VFPGA; ///< Internal ADC channel for 1V FPGA reference - F32 adc1_2VProc; ///< Internal ADC channel for 1.2V to processor - F32 adc1_8VProc; ///< Internal ADC channel for 1.8V to processor - F32 adc1_8VFPGA; ///< Internal ADC channel for 1.8V to FPGA - F32 adc3VRef; ///< Internal ADC channel for 3V reference - F32 adc3VExtADC1; ///< Internal ADC channel for 3V reference to external ADC 1 - F32 adc3VExtADC2; ///< Internal ADC channel for 3V reference to external ADC 2 - F32 adc3_3V; ///< Internal ADC channel for 3.3V - F32 adc3_3VSensors; ///< Internal ADC channel for 3.3V to sensors - F32 adc5VLogic; ///< Internal ADC channel for 5V to logic - F32 adc5VSensors; ///< Internal ADC channel for 5V to sensors - F32 adc5VPSGateDriver; ///< Internal ADC channel for 5V P/S gate driver - F32 adc24V; ///< Internal ADC channel for 24V - F32 adc24VPrimaryHtr; ///< FPGA ADC channel for 24V to primary heater - F32 adc24VPrimaryHtrGnd; ///< FPGA ADC channel for 24V to primary heater - F32 adc24VSecondaryHtr; ///< Internal ADC channel for 24V to secondary heater - F32 adc24VTrimmerHtr; ///< Internal ADC channel for 24V to trimmer heater + F32 adc1VFPGA; ///< Internal ADC channel for 1V FPGA reference + F32 adc1_2VProc; ///< Internal ADC channel for 1.2V to processor + F32 adc1_8VProc; ///< Internal ADC channel for 1.8V to processor + F32 adc1_8VFPGA; ///< Internal ADC channel for 1.8V to FPGA + F32 adc3VRef; ///< Internal ADC channel for 3V reference + F32 adc3VExtADC1; ///< Internal ADC channel for 3V reference to external ADC 1 + F32 adc3VExtADC2; ///< Internal ADC channel for 3V reference to external ADC 2 + F32 adc3_3V; ///< Internal ADC channel for 3.3V + F32 adc3_3VSensors; ///< Internal ADC channel for 3.3V to sensors + F32 adc5VLogic; ///< Internal ADC channel for 5V to logic + F32 adc5VSensors; ///< Internal ADC channel for 5V to sensors + F32 adc5VPSGateDriver; ///< Internal ADC channel for 5V P/S gate driver + F32 adc24V; ///< Internal ADC channel for 24V + F32 adc24VPowerPrimHtr; ///< FPGA ADC channel for 24V to primary heater + F32 adc24VGndMainPrimHtr; ///< FPGA ADC channel for 24V to primary heater + F32 adc24VGndSmallPrimHtr; ///< Internal ADC channel for 24V to secondary heater + F32 adc24VGndTrimmerHtr; ///< Internal ADC channel for 24V to trimmer heater } VOLTAGES_DATA_PAYLOAD_T; // ********** public function prototypes ********** Index: firmware/App/DGCommon.h =================================================================== diff -u -r33d262afee2fd0dd9d714ed86a21b8907ed84e25 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 33d262afee2fd0dd9d714ed86a21b8907ed84e25) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -31,7 +31,6 @@ #ifndef _RELEASE_ #ifndef _VECTORCAST_ -// 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_ACK_ALARM 1 // Build switch Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r8fc97ad09c8cbdf76dc19929c4751df3feacb40d -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 8fc97ad09c8cbdf76dc19929c4751df3feacb40d) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -828,9 +828,6 @@ calculateHeaterEstimationGain( DG_PRIMARY_HEATER ); - // Write the latest fill data into the RTC RAM for heaters control - // setFillInfoToRTCRAM(); // TODO we do not need to write to NV memory for now - requestNewOperationMode( DG_MODE_GENE ); } Index: firmware/App/Modes/ModeService.c =================================================================== diff -u -ra4669c80291e85fa5ce17d77ebcfd0c882831202 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Modes/ModeService.c (.../ModeService.c) (revision a4669c80291e85fa5ce17d77ebcfd0c882831202) +++ firmware/App/Modes/ModeService.c (.../ModeService.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -76,7 +76,7 @@ break; default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_SERVICE_STATE_SELECTED, serviceState ); serviceState = DG_SERVICE_STATE_START; break; } Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r46bf7baaa9d8095e0405b018fcd4bc594907797e -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 46bf7baaa9d8095e0405b018fcd4bc594907797e) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -44,6 +44,8 @@ #define MAX_WATER_SAMPLE_TIME_MS ( 10 * MS_PER_SECOND ) ///< Maximum duration of water sample state (in ms). #define FLUSH_EXPIRATION_TIME_MS ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Duration in which a filter flush is valid (in ms). #define FILTER_FLUSH_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Filter flush data broadcast interval. +// Milliseconds was too big, greater than U32 +#define DG_SRVC_TIME_INTERVAL_S ( 6 * 30 * SECONDS_IN_A_DAY ) ///< DG service interval in seconds. ( 6 months with 30 days each). // ********** private data ********** @@ -71,6 +73,9 @@ static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbySampleWaterState( void ); +static BOOL isDisinfectValid( void ); +static BOOL isServiceTimeValid( void ); + /*********************************************************************//** * @brief * The initStandbyMode function initializes the standby mode module. @@ -152,7 +157,7 @@ default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_STANDBY_MODE_INVALID_EXEC_STATE, standbyState ) - standbyState = DG_STANDBY_MODE_STATE_START; + standbyState = DG_STANDBY_MODE_STATE_IDLE; break; } @@ -317,6 +322,60 @@ /*********************************************************************//** * @brief + * The isDisinfectValid function checks whether the last disinfect has been + * voided or not + * @details Inputs: none + * @details Outputs: none + * @return TRUE if the disinfect is still valid otherwise, FALSE + ***********************************************************************/ +static BOOL isDisinfectValid( void ) +{ + BOOL status = TRUE; + DG_USAGE_INFO_RECORD_T dgUsageInfo; + + // No need to check the CRC of the record because the record'sCRC has been checked in NV POST. + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&dgUsageInfo, sizeof( DG_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + + if ( FALSE == dgUsageInfo.isDisinfected ) + { + status = FALSE; + + activateAlarmNoData( ALARM_ID_DG_DISINFECT_HAS_BEEN_EXPIRED ); + } + + return status; +} + +/*********************************************************************//** + * @brief + * The isServiceTimeValid function checks whether the last service time is + * still within the interval or not. + * @details Inputs: none + * @details Outputs: none + * @return TRUE if the service time is still valid otherwise, FALSE + ***********************************************************************/ +static BOOL isServiceTimeValid( void ) +{ + BOOL status = TRUE; + DG_SERVICE_RECORD_T dgServiceRecord; + + // No need to check the CRC of the record because the record'sCRC has been checked in NV POST. + getNVRecord2Driver( GET_SRV_RECORD, (U08*)&dgServiceRecord, sizeof( DG_SERVICE_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + + if ( ( ( getRTCTimestamp() - dgServiceRecord.lastServiceEpochDate ) / MS_PER_SECOND > DG_SRVC_TIME_INTERVAL_S ) || + ( 0 == dgServiceRecord.lastServiceEpochDate ) ) + { + // Compare the current time in epoch to the last service data in epoch and convert them to seconds + status = FALSE; + + activateAlarmNoData( ALARM_ID_DG_SERIVCE_TIME_INTERVAL_HAS_ELAPSED ); + } + + return status; +} + +/*********************************************************************//** + * @brief * The requestWaterSample function handles an HD request to sample water. * @details Inputs: standbyState * @details Outputs: pendingSampleWaterRequest @@ -385,10 +444,25 @@ *************************************************************************/ BOOL requestDGStart( void ) { - BOOL result = FALSE; + BOOL result = FALSE; + BOOL disinfectStatus = FALSE; + BOOL serviceStatus = FALSE; - if ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_SERVICE_AND_DISINFECT_CHECK ) ) { + disinfectStatus = TRUE; + serviceStatus = TRUE; + } + else +#endif + { + disinfectStatus = isDisinfectValid(); + serviceStatus = isServiceTimeValid(); + } + + if ( ( DG_STANDBY_MODE_STATE_IDLE == standbyState ) && ( TRUE == disinfectStatus ) && ( TRUE == serviceStatus ) ) + { result = TRUE; pendingStartDGRequest = TRUE; Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r98a1a2a624373a1d140daed0136522ab6e635237 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 98a1a2a624373a1d140daed0136522ab6e635237) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -65,7 +65,7 @@ /* SERV */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* INIT */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_INIT, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* STAN */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_GENE, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM }, - /* SOLO */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM /*DG_MODE_NLEG*/ }, // TODO for testing only + /* SOLO */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_NLEG }, /* GENE */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_FILL, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* FILL */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_FILL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* DRAI */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_GENE, DG_MODE_NLEG, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r33d262afee2fd0dd9d714ed86a21b8907ed84e25 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 33d262afee2fd0dd9d714ed86a21b8907ed84e25) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -132,6 +132,9 @@ SW_FAULT_ID_ILLEGAL_MEM_ACCESS, SW_FAULT_ID_INVALID_CHEMICAL_BOTTLE_SELECTED, SW_FAULT_ID_INVALID_FPGA_SENSOR_GROUP_SELECTED, + SW_FAULT_ID_INVALID_FLOW_SENSOR_SELECTED, + SW_FAULT_ID_INVALID_SERVICE_STATE_SELECTED, // 105 + SW_FAULT_ID_INVALID_NV_RECORD_SELECTED, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r98a1a2a624373a1d140daed0136522ab6e635237 -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 98a1a2a624373a1d140daed0136522ab6e635237) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -153,6 +153,7 @@ if ( ( ( DG_MODE_FAUL == getCurrentOperationMode() ) || ( DG_MODE_STAN == getCurrentOperationMode() ) ) && ( FALSE == hasROVolBeenWrittenToNV ) ) { + // If the mode is fault or it is standby and the RO volume has not been written already, write it BOOL status; DG_OP_MODE_T prevMode = getPreviousOperationMode(); @@ -165,19 +166,22 @@ case DG_MODE_HEAT: case DG_MODE_CHEM: // Mode is changing, write the RO generated volume to the RTC RAM and set the service flag to FALSE - // since this is not a from a service change + // since this is not a from a service change. If the previous modes were any of the above modes, it means + // it has been generating water. status = setROWaterGeneratedL( getROGeneratedVolumeL() ); break; } if ( TRUE == status ) { + // The generated water has been successfully written hasROVolBeenWrittenToNV = TRUE; } } if ( ( FALSE == hasDisinfectStatusBeenSet ) && ( MODE_TREA == hdModes.hdMode ) ) { + // If the disinfect status has not been set and we are in treatment mode, void the disinfect (chemical or heat disinfects) BOOL status = setDisinfectStatus( FALSE ); if ( TRUE == status ) Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r46bf7baaa9d8095e0405b018fcd4bc594907797e -r4e11c80367b5ae522aa34fb137079e516c98831b --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 46bf7baaa9d8095e0405b018fcd4bc594907797e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) @@ -890,7 +890,7 @@ msg.hdr.msgID = MSG_ID_DG_SCHEDULED_RUNS_DATA; msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - // TODO this message is for Phase 1B. + // Do nothing this message is for Phase 1B. // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_2_UI, ACK_REQUIRED );