Index: firmware/.launches/DG.launch =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/.launches/DG.launch (.../DG.launch) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/.launches/DG.launch (.../DG.launch) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -1,30 +1,10 @@ -<<<<<<< HEAD -======= - - - - - - - - - - ->>>>>>> staging - - - - - - - @@ -33,5 +13,4 @@ - Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -387,6 +387,7 @@ activateSafetyShutdown(); } } +#endif /* * If any of the heaters are on, check if the flow is below than the minimum value @@ -419,7 +420,6 @@ heatersOnWithNoFlowTimer = getMSTimerCount(); } } -#endif // Check for data publication publishHeatersData(); Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r2326a384932d92d970f9ec46c1dc1e8881b8bc8d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 2326a384932d92d970f9ec46c1dc1e8881b8bc8d) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -74,7 +74,7 @@ #define FLOW_SENSOR_ZERO_READING 0xFFFF ///< Flow sensor reading indicates zero flow (or flow lower than can be detected by sensor). #define MAX_ALLOWED_FLOW_DEVIATION 0.1 ///< Max allowed deviation from target flow. -#define FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ( 10 * MS_PER_SECOND ) ///< Flow out of range time out in counts. +#define FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ( 12 * MS_PER_SECOND ) ///< Flow out of range time out in counts. #define MAX_PRESSURE_TARGET_TOLERANCE 5 ///< Pressure tolerance from maximum set pressure by user in psi. #define MAX_ALLOWED_PRESSURE_PSI 130 ///< Maximum allowed pressure that the RO pump can go to. #define MIN_ALLOWED_PRESSURE_PSI 10 ///< Minimum allowed pressure that the RO pump can go to. Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -117,7 +117,6 @@ static U32 elapsedTime = 0; ///< Elapsed time variable. static U32 internalHeatersConversionTimer = 0; ///< Conversion timer variable to calculate the heaters internal temperature. -static F32 tempValuesForPublication [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors data publication array. static U32 dataPublicationTimerCounter; ///< Temperature sensors data publish timer counter. static OVERRIDE_U32_T tempSensorsPublishInterval = { TEMP_SENSORS_DATA_PUBLISH_INTERVAL, TEMP_SENSORS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Temperature sensors publish time interval override. @@ -239,7 +238,7 @@ // FPGA board temperature conversion coefficient tempSensors[ TEMPSENSORS_FPGA_BOARD_SENSOR ].conversionCoeff = 503.975 / (F32)TWELVE_BIT_RESOLUTION; - F32 const conversionCoeff = 1.0 / 13584.0; + F32 const conversionCoeff = 1.0 / 13584.0; // Board temperature sensors conversion coefficient tempSensors[ TEMPSENSORS_LOAD_CELL_A1_B1 ].conversionCoeff = conversionCoeff; @@ -283,8 +282,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_INVALID_SELF_TEST_STATE, - tempSensorsSelfTestState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_INVALID_SELF_TEST_STATE, tempSensorsSelfTestState ); tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_COMPLETE; break; } @@ -519,7 +517,8 @@ { if ( TRUE == isADCReadValid( sensorIndex, fpgaError, fpgaCount ) ) { - processADCRead( sensorIndex, (S32)adc ); + S16 convert = (S16)adc; + processADCRead( sensorIndex, (S32)convert ); } } @@ -548,9 +547,9 @@ BOOL isFPGAErrorZero = fpgaError == 0; BOOL isFPGACountChanging = tempSensors[ sensorIndex ].readCount != fpgaCount; - if ( isFPGAErrorZero ) + if ( TRUE == isFPGAErrorZero ) { - if ( isFPGACountChanging ) + if ( TRUE == isFPGACountChanging ) { tempSensors[ sensorIndex ].readCount = fpgaCount; isADCValid = TRUE; @@ -667,7 +666,7 @@ BOOL const isLessThanZero = tpiADC <= 0; BOOL const isGreaterThanFullScale = tpiADC >= TEMP_SENSORS_ADC_MAX_COUNT; - if ( isLessThanZero || isGreaterThanFullScale ) + if ( ( TRUE == isLessThanZero ) || ( TRUE == isGreaterThanFullScale ) ) { tempSensorsSelfTestResult = SELF_TEST_STATUS_FAILED; SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TEMPERATURE_SENSORS_FAULT, TEMPSENSORS_SELF_TEST_ADC_CHECK ); @@ -693,7 +692,7 @@ elapsedTime = getMSTimerCount(); } // A delay to let FPGA to boot up - else if ( didTimeout( elapsedTime, ADC_FPGA_READ_DELAY ) ) + else if ( TRUE == didTimeout( elapsedTime, ADC_FPGA_READ_DELAY ) ) { elapsedTime = 0; state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; @@ -793,15 +792,35 @@ { if ( ++dataPublicationTimerCounter >= getPublishTemperatureSensorsDataInterval() ) { - U32 i; + TEMPERATURE_SENSORS_DATA_T data; - // Populate all the temperature values - for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) - { - tempValuesForPublication[ i ] = getTemperatureValue ( i ); - } + data.inletPrimaryHeater = getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER ); + data.outletPrimaryHeater = getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); + data.conductivitySensor1 = getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ); + data.conductivitySensor2 = getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ); + data.outletRedundant = getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANT ); + data.inletDialysate = getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE ); + data.primaryHeaterThermocouple = getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ); + data.trimmerHeaterThermocouple = getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ); + data.priamyHeaterColdjunction = getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ); + data.trimmerHeaterColdjunction = getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ); + data.primaryHeaterInternal = getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL ); + data.trimmerHeaterInternal = getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL ); + data.fpgaBoard = getTemperatureValue ( TEMPSENSORS_FPGA_BOARD_SENSOR ); + data.loadCellA1B1 = getTemperatureValue ( TEMPSENSORS_LOAD_CELL_A1_B1 ); + data.loadCellA2B2 = getTemperatureValue ( TEMPSENSORS_LOAD_CELL_A2_B2 ); + data.internalTHDORTD = getTemperatureValue ( TEMPSENSORS_INTERNAL_THDO_RTD ); + data.internalTDIRTD = getTemperatureValue ( TEMPSENSORS_INTERNAL_TDI_RTD ); + data.internalCondSnsrTemp = getTemperatureValue ( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ); + data.primaryThermoCoupleRaw = tempSensors[ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; + data.primaryColdjuncRaw = tempSensors[ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; + data.trimmerThermoCoupleRaw = tempSensors[ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; + data.trimmerColdjuncRaw = tempSensors[ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; + 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 ]; - broadcastTemperatureSensorsData( (U08*)(&tempValuesForPublication), NUM_OF_TEMPERATURE_SENSORS * sizeof(F32) ); + broadcastTemperatureSensorsData( &data ); + dataPublicationTimerCounter = 0; } } Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -rf6016459473bdb85aebe393c07cd580b973d7247 -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision f6016459473bdb85aebe393c07cd580b973d7247) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -55,6 +55,35 @@ NUM_OF_TEMPERATURE_SENSORS ///< Number of temperature sensors } TEMPERATURE_SENSORS_T; +/// Temperature sensors data. +typedef struct +{ + F32 inletPrimaryHeater; + F32 outletPrimaryHeater; + F32 conductivitySensor1; + F32 conductivitySensor2; + F32 outletRedundant; + F32 inletDialysate; + F32 primaryHeaterThermocouple; + F32 trimmerHeaterThermocouple; + F32 priamyHeaterColdjunction; + F32 trimmerHeaterColdjunction; + F32 primaryHeaterInternal; + F32 trimmerHeaterInternal; + F32 fpgaBoard; + F32 loadCellA1B1; + F32 loadCellA2B2; + F32 internalTHDORTD; + F32 internalTDIRTD; + F32 internalCondSnsrTemp; + S32 primaryThermoCoupleRaw; + S32 primaryColdjuncRaw; + S32 trimmerThermoCoupleRaw; + S32 trimmerColdjuncRaw; + S32 cond1Raw; + S32 cond2Raw; +} TEMPERATURE_SENSORS_DATA_T; + // ********** public function prototypes ********** void initTemperatureSensors( void ); Index: firmware/App/Controllers/Thermistors.c =================================================================== diff -u -rfba89d67dd2bef913e85a13563e2aa49f0e2e2f5 -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision fba89d67dd2bef913e85a13563e2aa49f0e2e2f5) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -320,7 +320,7 @@ for ( thermistor = THERMISTOR_ONBOARD_NTC; thermistor < NUM_OF_THERMISTORS; thermistor++ ) { temperature = getThermistorTemperatureValue( thermistor ); - BOOL const isTempOutOfRange = ( temperature >= MAX_ALLOWED_TEMPERATURE ) && ( temperature < MIN_ALLOWED_TEMPERATURE ); + BOOL const isTempOutOfRange = ( temperature > MAX_ALLOWED_TEMPERATURE ) && ( temperature < MIN_ALLOWED_TEMPERATURE ); checkPersistentAlarm( ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE, isTempOutOfRange, temperature, MAX_ALLOWED_TEMPERATURE ); } Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r2326a384932d92d970f9ec46c1dc1e8881b8bc8d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 2326a384932d92d970f9ec46c1dc1e8881b8bc8d) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -89,6 +89,7 @@ #define RSRVRS_MIX_DRAIN_TIMEOUT_MS ( 20 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoirs 1 & 2 mix drain timeout in ms. #define DRAIN_PUMP_START_TIME_IN_MIX_DRAIN_MS ( 5 * MS_PER_SECOND ) ///< Time to start the drain pump at mix drain after directing the flow to drain in ms. #define DRAIN_PUMP_RPM_IN_MIX_DRAIN 600 ///< The RPM that the drain pump should be run during mix drain. +#define MIX_DRAIN_WEIGHT_UNCHANGE_TIMEOUT ( 15 * MS_PER_SECOND ) ///< Time period of unchanged weight during mix draining before timeout. // Rinse R1 to R2 #define ROF_MIN_LOW_PRESSURE_TEMPERATURE_C 45.0 ///< RO filter minimum temperature that the pressure must be no more than 30psi in C. TODO the actual value is 45.0 @@ -1192,7 +1193,7 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1; - if ( TRUE == didTimeout( stateTimer, DRAIN_PUMP_START_TIME_IN_MIX_DRAIN_MS ) && isDrainPumpInMixDrainOn == FALSE ) + if ( ( TRUE == didTimeout( stateTimer, DRAIN_PUMP_START_TIME_IN_MIX_DRAIN_MS ) ) && ( isDrainPumpInMixDrainOn == FALSE ) ) { isDrainPumpInMixDrainOn = TRUE; @@ -1203,7 +1204,7 @@ { if ( DG_RESERVOIR_ABOVE_TARGET == rsrvr1Status ) { - rsrvr1Status = getRsrvrDrainStatus( DG_RESERVOIR_1, DRAIN_WEIGHT_UNCHANGE_TIMEOUT, RSRVRS_MIX_DRAIN_TIMEOUT_MS ); + rsrvr1Status = getRsrvrDrainStatus( DG_RESERVOIR_1, MIX_DRAIN_WEIGHT_UNCHANGE_TIMEOUT, RSRVRS_MIX_DRAIN_TIMEOUT_MS ); } else if ( DG_RESERVOIR_REACHED_TARGET == rsrvr1Status ) { @@ -1240,7 +1241,7 @@ if ( DG_RESERVOIR_ABOVE_TARGET == rsrvr2Status ) { - rsrvr2Status = getRsrvrDrainStatus( DG_RESERVOIR_2, DRAIN_WEIGHT_UNCHANGE_TIMEOUT, RSRVRS_MIX_DRAIN_TIMEOUT_MS ); + rsrvr2Status = getRsrvrDrainStatus( DG_RESERVOIR_2, MIX_DRAIN_WEIGHT_UNCHANGE_TIMEOUT, RSRVRS_MIX_DRAIN_TIMEOUT_MS ); } else if ( DG_RESERVOIR_REACHED_TARGET == rsrvr2Status ) { Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -662,11 +662,10 @@ * sensors data. * @details Inputs: none * @details Outputs: temperature sensors data message constructed and queued - * @param sensorsValue sensors value array - * @param byteLength payload length in bytes + * @param tempSensorsData which is constructed and queued * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastTemperatureSensorsData ( U08 *sensorsValue, U32 byteLength ) +BOOL broadcastTemperatureSensorsData ( TEMPERATURE_SENSORS_DATA_T* tempSensorsData ) { BOOL result; MESSAGE_T msg; @@ -675,9 +674,9 @@ // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_TEMPERATURE_DATA; - msg.hdr.payloadLen = byteLength; + msg.hdr.payloadLen = sizeof( TEMPERATURE_SENSORS_DATA_T ); - memcpy( payloadPtr, sensorsValue, byteLength ); + memcpy( payloadPtr, tempSensorsData, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -r28b5f2e7f757647145a82a39aca0a5f3652c68a1 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 28b5f2e7f757647145a82a39aca0a5f3652c68a1) @@ -28,6 +28,7 @@ #include "NVDataMgmt.h" #include "Reservoirs.h" #include "ROPump.h" +#include "TemperatureSensors.h" #include "Thermistors.h" #include "UVReactors.h" @@ -86,10 +87,10 @@ BOOL broadcastReservoirData( U32 resID, U32 fillToVol, U32 drainToVol ); // MSG_ID_HEATERS_READINGS -BOOL broadcastHeatersData ( HEATERS_DATA_T *heatersData ); +BOOL broadcastHeatersData( HEATERS_DATA_T *heatersData ); // MSG_ID_TEMPERATURE_SENSORS_READINGS -BOOL broadcastTemperatureSensorsData ( U08 *sensorsValue, U32 byteLength ); +BOOL broadcastTemperatureSensorsData( TEMPERATURE_SENSORS_DATA_T* tempSensorsData ); // MSG_ID_DG_CONDUCTIVITY_DATA BOOL broadcastConductivityData( void * conductivityDataPtr );