Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r364c00d074d23989f2d714189a8c89964e32b458 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 364c00d074d23989f2d714189a8c89964e32b458) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -23,6 +23,7 @@ #include "AlarmMgmt.h" #include "DGDefs.h" #include "FlowSensors.h" +#include "FPGA.h" #include "Heaters.h" #include "MessageSupport.h" #include "ModeFill.h" @@ -70,6 +71,7 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. #define MIN_RO_HEATER_FLOWRATE_LPM 0.2F ///< Minimum target RO heater flow rate in L/min. #define PRIMARY_HEATER_POWER_TOL 0.1F ///< Primary heater power tolerance. +#define MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Main primary heater voltage ADC FPGA error. static const F32 WATER_SPECIFIC_HEAT_DIVIDED_BY_MINUTES = 4184 / SEC_PER_MIN; ///< Water specific heat in J/KgC / 60. static const F32 PRIMARY_HEATERS_MAXIMUM_POWER_WATTS = 475 + 237.5F; ///< Primary heaters maximum power (main primary = 475W and small primary = 237.5W). @@ -152,6 +154,10 @@ initPersistentAlarm( ALARM_ID_DG_PRIMARY_HEATER_POWER_VOLTAGE_OUT_OF_RANGE, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); + + // Initialize the FPGA persistent alarm + initFPGAPersistentAlarm( MAIN_PRIMARY_HEATER_VOLTAGE_ADC, ALARM_ID_DG_MAIN_PRIMARY_HEATER_FPGA_FAULT, + MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS, MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -530,8 +536,7 @@ *************************************************************************/ static HEATERS_STATE_T handleHeaterStateControlToDisinfectTarget( DG_HEATERS_T heater ) { - HEATERS_STATE_T state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; - + HEATERS_STATE_T state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; F32 heatDisinfectSensorTemp = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); // Check if the heaters control conditions have changed, if yes, switch back to ramp to target @@ -877,9 +882,14 @@ 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_GND_SMALL_PRIM_HTR_V ); + mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); } + else #endif + { + // If the system is DVT, check the FPGA persistent alarm of the main primary heater's voltage ADC + checkFPGAPersistentAlarms( MAIN_PRIMARY_HEATER_VOLTAGE_ADC, getFPGAHeaterGateADCErrorCount(), getFPGAHeaterGateADCReadCount() ); + } F32 smallPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); F32 trimmerVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_TRIM_HTR_V ); Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r7fb16c92973a551dda1d801d5f255f88c0c81f12 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 7fb16c92973a551dda1d801d5f255f88c0c81f12) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -46,13 +46,14 @@ #define LOAD_CELL_MIN_ALLOWED_WEIGHT_GRAMS 0.0F ///< Load cell minimum allowed weight in grams. #define LOAD_CELL_MAX_ALLOWED_WEIGHT_GRAMS 4500.0F ///< Load cell maximum allowed weight in grams. #define LOAD_CELL_MIN_ALLOWED_WEIGHT_BEFORE_TARE_GRAMS 1600.0F ///< Load cell minimum allowed weight before tare in grams. -#define LOAD_CELL_WEIGHT_OUT_RANGE_PERSISTENT_PERIOD_MS (5 * MS_PER_SECOND) ///< Load cell weight out of range persistent period in milliseconds. -#define LOAD_CELL_PRIMARY_BACKUP_MAX_DRIFT_PERSISTENT_PERIOD_MS (5 * MS_PER_SECOND) ///< Load cell primary and backup maximum allowed weight drift persistent period in milliseconds. +#define LOAD_CELL_WEIGHT_OUT_RANGE_PERSISTENT_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Load cell weight out of range persistent period in milliseconds. +#define LOAD_CELL_PRIMARY_BACKUP_MAX_DRIFT_PERSISTENT_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Load cell primary and backup maximum allowed weight drift persistent period in milliseconds. #define EMPTY_RESERVOIR_WEIGHT_GRAMS 1600 ///< Reservoirs empty weight in grams. #define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_FIRST_TARE_GRAMS 300 ///< Max allowed extra weight before first tare in grams. #define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS 60 ///< Max allowed extra weight before tare in grams. #define LOAD_CELL_PRIMARY_BACKUP_MAX_ALLOWED_DRIFT_GRAMS 60.0F ///< Load cell primary and backup maximum allowed weight drift in grams. #define DATA_PUBLISH_COUNTER_START_COUNT 0 ///< Data publish counter start count. +#define LOAD_CELL_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Load cell FPGA error timeout in milliseconds. /// Load cell data structure. typedef struct @@ -110,37 +111,38 @@ benignPolynomialCalRecord( &loadCellsCalRecord.loadCells[ i ] ); loadcells[ i ].rawReading = 0; - loadcells[ i ].weight.data = 0.0; - loadcells[ i ].weight.ovData = 0.0; - loadcells[ i ].weight.ovInitData = 0.0; + loadcells[ i ].weight.data = 0.0F; + loadcells[ i ].weight.ovData = 0.0F; + loadcells[ i ].weight.ovInitData = 0.0F; loadcells[ i ].weight.override = OVERRIDE_RESET; - loadcells[ i ].autoCalOffset = 0.0; - loadcells[ i ].largeFilterTotal = 0.0; - loadcells[ i ].largeFilteredWeight = 0.0; - loadcells[ i ].smallFilterTotal = 0.0; - loadcells[ i ].smallFilteredWeight = 0.0; + loadcells[ i ].autoCalOffset = 0.0F; + loadcells[ i ].largeFilterTotal = 0.0F; + loadcells[ i ].largeFilteredWeight = 0.0F; + loadcells[ i ].smallFilterTotal = 0.0F; + loadcells[ i ].smallFilteredWeight = 0.0F; for ( j = 0; j < SIZE_OF_SMALL_LOAD_CELL_AVG; j++ ) { - loadcells[ i ].smallFilterReadings[ j ] = 0.0; + loadcells[ i ].smallFilterReadings[ j ] = 0.0F; } for ( j = 0; j < SIZE_OF_LARGE_LOAD_CELL_AVG; j++ ) { - loadcells[ i ].largeFilterReadings[ j ] = 0.0; + loadcells[ i ].largeFilterReadings[ j ] = 0.0F; } - loadcells[ i ].loadCellVelocity_g_min = 0.0; + loadcells[ i ].loadCellVelocity_g_min = 0.0F; } // Initialize persistent alarm(s) - initPersistentAlarm( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, 0, LOAD_CELL_ADC_ERROR_PERSISTENCE ); - initPersistentAlarm( ALARM_ID_DG_LOAD_CELL_WEIGHT_OUT_OF_RANGE, LOAD_CELL_WEIGHT_OUT_RANGE_PERSISTENT_PERIOD_MS, LOAD_CELL_WEIGHT_OUT_RANGE_PERSISTENT_PERIOD_MS ); - initPersistentAlarm( ALARM_ID_DG_LOAD_CELL_PRIMARY_BACKUP_DRIFT_OUT_OF_RANGE, LOAD_CELL_PRIMARY_BACKUP_MAX_DRIFT_PERSISTENT_PERIOD_MS, LOAD_CELL_PRIMARY_BACKUP_MAX_DRIFT_PERSISTENT_PERIOD_MS ); + + // Initialize the FPGA persistent alarms + initFPGAPersistentAlarm( LOAD_CELL_A1_B1_SENSORS, ALARM_ID_DG_LOAD_CELL_A1_B1_FPGA_FAULT, LOAD_CELL_FPGA_ERROR_TIMEOUT_MS, LOAD_CELL_FPGA_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( LOAD_CELL_A2_B2_SENSORS, ALARM_ID_DG_LOAD_CELL_A2_B2_FPGA_FAULT, LOAD_CELL_FPGA_ERROR_TIMEOUT_MS, LOAD_CELL_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -154,29 +156,35 @@ void execLoadCell( void ) { U32 ii; - U32 a1 = getFPGALoadCellA1(); U32 a2 = getFPGALoadCellA2(); U32 b1 = getFPGALoadCellB1(); U32 b2 = getFPGALoadCellB2(); - // update sums for load cell average calculations - loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading = a1 & MASK_OFF_U32_MSB; - loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading = a2 & MASK_OFF_U32_MSB; - loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading = b1 & MASK_OFF_U32_MSB; - loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading = b2 & MASK_OFF_U32_MSB; - // Check error bits from new readings a1 = ( a1 >> SHIFT_BITS_BY_31 ) << SHIFT_24_BITS; a2 = ( a2 >> SHIFT_BITS_BY_31 ) << SHIFT_16_BITS_FOR_WORD_SHIFT; b1 = ( b1 >> SHIFT_BITS_BY_31 ) << SHIFT_8_BITS_FOR_BYTE_SHIFT; b2 = ( b2 >> SHIFT_BITS_BY_31 ); - if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, ( ( a1 > 0 ) || ( a2 > 0 ) || ( b1 > 0 ) || ( b2 > 0 ) ) ) ) + + loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading = ( 0 == a1 ? a1 & MASK_OFF_U32_MSB : loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading ); + loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading = ( 0 == a2 ? a2 & MASK_OFF_U32_MSB : loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading ); + loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading = ( 0 == b1 ? b1 & MASK_OFF_U32_MSB : loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading ); + loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading = ( 0 == b2 ? b2 & MASK_OFF_U32_MSB : loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading ); + + /* + loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading = a1 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading = a2 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading = b1 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading = b2 & MASK_OFF_U32_MSB; + + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID__AVAILABLE_13, ( ( a1 > 0 ) || ( a2 > 0 ) || ( b1 > 0 ) || ( b2 > 0 ) ) ) ) { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, ( a1 | a2 | b1 | b2 ) ) - } + SET_ALARM_WITH_1_U32_DATA( ALARM_ID__AVAILABLE_13, ( a1 | a2 | b1 | b2 ) ) + }*/ - // TODO use ALARM_ID_DG_LOAD_CELL_FPGA_READ_ERROR for read error + checkFPGAPersistentAlarms( LOAD_CELL_A1_B1_SENSORS, getFPGAADC1ErrorCount(), getFPGAADC1ReadCount() ); + checkFPGAPersistentAlarms( LOAD_CELL_A2_B2_SENSORS, getFPGAADC2ErrorCount(), getFPGAADC2ReadCount() ); // Check if a new calibration is available if ( TRUE == isNewCalibrationRecordAvailable() ) @@ -185,10 +193,10 @@ NUM_OF_CAL_DATA_LOAD_CELLS, ALARM_ID_DG_LOAD_CELLS_INVALID_CAL_RECORD ); // Zero the current tare values when new calibration data is available - loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].autoCalOffset = 0.0; - loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].autoCalOffset = 0.0; - loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].autoCalOffset = 0.0; - loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].autoCalOffset = 0.0; + loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].autoCalOffset = 0.0F; + loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].autoCalOffset = 0.0F; + loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].autoCalOffset = 0.0F; + loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].autoCalOffset = 0.0F; } // Rolling average of last 100 raw samples in small filter @@ -208,9 +216,9 @@ loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ] ) * (F32)SEC_PER_MIN; // Update small filter with new weight sample - loadcells[ ii ].smallFilterTotal -= loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ]; - loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ] = getLoadCellWeight( (LOAD_CELL_ID_T)ii ); - loadcells[ ii ].smallFilterTotal += getLoadCellWeight( (LOAD_CELL_ID_T)ii ); + loadcells[ ii ].smallFilterTotal -= loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ]; + loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ] = getLoadCellWeight( (LOAD_CELL_ID_T)ii ); + loadcells[ ii ].smallFilterTotal += getLoadCellWeight( (LOAD_CELL_ID_T)ii ); // Calculate the load cell value before applying calibration to it loadcells[ ii ].smallFilteredWeight = (F32)( loadcells[ ii ].smallFilterTotal / (F64)SIZE_OF_SMALL_LOAD_CELL_AVG ); @@ -230,10 +238,10 @@ for ( ii = 0; ii < NUM_OF_LOAD_CELLS; ++ii ) { // Update large filter with new small filter weight sample - loadcells[ ii ].largeFilterTotal -= loadcells[ ii ].largeFilterReadings[ largeReadingsIdx ]; - loadcells[ ii ].largeFilterReadings[ largeReadingsIdx ] = loadcells[ ii ].smallFilteredWeight; - loadcells[ ii ].largeFilterTotal += loadcells[ ii ].smallFilteredWeight; - loadcells[ ii ].largeFilteredWeight = (F32)( loadcells[ ii ].largeFilterTotal / (F64)SIZE_OF_LARGE_LOAD_CELL_AVG ); + loadcells[ ii ].largeFilterTotal -= loadcells[ ii ].largeFilterReadings[ largeReadingsIdx ]; + loadcells[ ii ].largeFilterReadings[ largeReadingsIdx ] = loadcells[ ii ].smallFilteredWeight; + loadcells[ ii ].largeFilterTotal += loadcells[ ii ].smallFilteredWeight; + loadcells[ ii ].largeFilteredWeight = (F32)( loadcells[ ii ].largeFilterTotal / (F64)SIZE_OF_LARGE_LOAD_CELL_AVG ); } loadCellFilterTimerCount = 0; Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r4e11c80367b5ae522aa34fb137079e516c98831b -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 4e11c80367b5ae522aa34fb137079e516c98831b) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -375,11 +375,13 @@ // publish pressure/occlusion data on interval if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) { - PRESSURES_DATA_T data; + PRESSURES_DATA_T data; + data.roPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); data.roPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); data.drainPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); - data.drainPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); + data.drainPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); + data.barometricPressure = getMeasuredDGPressure( PRESSURE_SENSOR_BAROMETRIC ); broadcastData( MSG_ID_DG_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( PRESSURES_DATA_T ) ); pressuresDataPublicationTimerCounter = 0; Index: firmware/App/Controllers/Pressures.h =================================================================== diff -u -r544e9782a1b8d444224f41efef38a5204c262722 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 544e9782a1b8d444224f41efef38a5204c262722) +++ firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -35,10 +35,11 @@ /// Pressure data struct. typedef struct { - F32 roPumpInletPressure; ///< RO pump inlet pressure - F32 roPumpOutletPressure; ///< RO pump outlet pressure - F32 drainPumpInletPressure; ///< Drain pump inlet pressure - F32 drainPumpOutletPressure; ///< Drain pump outlet pressure + F32 roPumpInletPressure; ///< RO pump inlet pressure + F32 roPumpOutletPressure; ///< RO pump outlet pressure + F32 drainPumpInletPressure; ///< Drain pump inlet pressure + F32 drainPumpOutletPressure; ///< Drain pump outlet pressure + F32 barometricPressure; ///< Barometric pressure } PRESSURES_DATA_T; #pragma pack(pop) Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r35fe6a299d68fe65dbb318134b2e0a8eb2806a24 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 35fe6a299d68fe65dbb318134b2e0a8eb2806a24) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -184,15 +184,15 @@ roPumpState = RO_PUMP_OFF_STATE; roPumpControlMode = NUM_OF_PUMP_CONTROL_MODES; isROPumpOn = FALSE; - roPumpFeedbackDutyCyclePct = 0.0; - roVolumeL = 0.0; - targetROPumpFlowRateLPM = 0.0; - roPumpPWMDutyCyclePct = 0.0; - roPumpDutyCyclePctSet = 0.0; - pendingROPumpCmdMaxPressure = 0.0; - pendingROPumpCmdTargetFlow = 0.0; + roPumpFeedbackDutyCyclePct = 0.0F; + roVolumeL = 0.0F; + targetROPumpFlowRateLPM = 0.0F; + roPumpPWMDutyCyclePct = 0.0F; + roPumpDutyCyclePctSet = 0.0F; + pendingROPumpCmdMaxPressure = 0.0F; + pendingROPumpCmdTargetFlow = 0.0F; pendingROPumpCmdCountDown = 0; - targetROPumpMaxPressure = 0.0; + targetROPumpMaxPressure = 0.0F; } /*********************************************************************//** @@ -776,12 +776,11 @@ { RO_PUMP_DATA_T pumpData; - pumpData.roPumpTgtFlowRateLM = getTargetROPumpFlowRateLPM(); - pumpData.roPumpTgtPressure = getTargetROPumpPressure(); - pumpData.measROFlowRate = getMeasuredFlowRateLPM( RO_FLOW_SENSOR ); - pumpData.roPumpDutyCycle = roPumpDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; - pumpData.roPumpState = (U32)roPumpState; - pumpData.roPumpFBDutyCycle = roPumpFeedbackDutyCyclePct * FRACTION_TO_PERCENT_FACTOR; + pumpData.roPumpTgtFlowRateLM = getTargetROPumpFlowRateLPM(); + pumpData.roPumpTgtPressure = getTargetROPumpPressure(); + pumpData.roPumpDutyCycle = roPumpDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; + pumpData.roPumpState = (U32)roPumpState; + pumpData.roPumpFBDutyCycle = roPumpFeedbackDutyCyclePct * FRACTION_TO_PERCENT_FACTOR; broadcastData( MSG_ID_RO_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&pumpData, sizeof( RO_PUMP_DATA_T ) ); roPumpDataPublicationTimerCounter = 0; Index: firmware/App/Controllers/ROPump.h =================================================================== diff -u -r8074ecece0b11532c173ad951a98036f0c54ca52 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 8074ecece0b11532c173ad951a98036f0c54ca52) +++ firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -38,7 +38,6 @@ typedef struct { F32 roPumpTgtPressure; ///< RO pump target pressure. - F32 measROFlowRate; ///< RO flow rate measurement. F32 roPumpDutyCycle; ///< RO pump duty cycle. U32 roPumpState; ///< RO pump current state. F32 roPumpTgtFlowRateLM; ///< RO pump target flow rate in L/min Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r97e05773e710de7cf31c717399fe1e99a3cc7d0c -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 97e05773e710de7cf31c717399fe1e99a3cc7d0c) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -909,6 +909,7 @@ data.internalTHDORTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TRO_RTD ); data.internalTDIRTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TDI_RTD ); data.internalCondSnsrTemp = getTemperatureValue( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ); + data.baroTempSensor = getTemperatureValue( TEMPSENSORS_BAROMETRIC_TEMP_SENSOR ); broadcastData( MSG_ID_DG_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); dataPublicationTimerCounter = 0; Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rcd3f58205f4dab89291b29ee73b7fa9c31773abc -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision cd3f58205f4dab89291b29ee73b7fa9c31773abc) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -163,10 +163,10 @@ U08 fpgaTRoErrorCnt; ///< Reg 361. Redundant outlet temperature sensor error count U08 fpgaTDiReadCnt; ///< Reg 362. Dialysate inlet temperature sensor read count U08 fpgaTDiErrorCnt; ///< Reg 363. Dialysate inlet temperature sensor error count - U08 fpgaPrimaryHeaterFlags; ///< Reg 364. Primary heater flags - U08 fpgaPrimaryHeaterReadCnt; ///< Reg 365. Primary heater read count - U08 fpgaTrimmerHeaterFlags; ///< Reg 366. Trimmer heater flags - U08 fpgaTrimmerHeaterReadCnt; ///< Reg 367. Trimmer heater read count + U08 fpgaPrimaryHeaterFlags; ///< Reg 364. Primary heater flags (thermo-couple) + U08 fpgaPrimaryHeaterReadCnt; ///< Reg 365. Primary heater read count (thermo-couple) + U08 fpgaTrimmerHeaterFlags; ///< Reg 366. Trimmer heater flags (thermo-couple) + U08 fpgaTrimmerHeaterReadCnt; ///< Reg 367. Trimmer heater read count (thermo-couple) U08 fpgaCPoFault; ///< Reg 368. CPo conductivity sensor fault U08 fpgaCPoReadCnt; ///< Reg 369. CPo conductivity sensor read count @@ -2368,4 +2368,14 @@ return fpgaSensorReadings.fpgaHeaterGNDADC; } +U08 getFPGAHeaterGateADCReadCount( void ) +{ + return fpgaSensorReadings.fpgaHeater1ADCReadCount; +} + +U08 getFPGAHeaterGateADCErrorCount( void ) +{ + return fpgaSensorReadings.fpgaHeater1ADCErrorCount; +} + /**@}*/ Index: firmware/App/Services/FPGA.h =================================================================== diff -u -rb49fcf5c295e49f7133ea07398c54b083bf65d49 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision b49fcf5c295e49f7133ea07398c54b083bf65d49) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -169,6 +169,8 @@ U16 getFPGAHeaterGateADC( void ); U16 getFPGAHeaterGndADC( void ); +U08 getFPGAHeaterGateADCReadCount( void ); +U08 getFPGAHeaterGateADCErrorCount( void ); /**@}*/