Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -rd3819286869611f9c02add72a0f8e321598fdf42 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision d3819286869611f9c02add72a0f8e321598fdf42) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -19,6 +19,7 @@ #include "ConductivitySensors.h" #include "FPGA.h" #include "PersistentAlarm.h" +#include "MessageSupport.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TaskPriority.h" @@ -178,7 +179,7 @@ data.cd1 = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); data.cd2 = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - broadcastConductivityData( &data ); + broadcastData( MSG_ID_DG_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( CONDUCTIVITY_DATA_T ) ); } } Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -22,6 +22,7 @@ #include "DrainPump.h" #include "FPGA.h" +#include "MessageSupport.h" #include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" @@ -653,7 +654,7 @@ drainPumpData.drainPumpRPM = getDrainPumpMeasuredRPM(); drainPumpData.trgtOutletPrsr = targetDrainPumpOutletPressure; - broadcastDrainPumpData( &drainPumpData ); + broadcastData( MSG_ID_DRAIN_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&drainPumpData, sizeof( DRAIN_PUMP_DATA_T ) ); drainPumpDataPublicationTimerCounter = 0; } Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r54e58f64179ea382d2e2c403c8c3b9a15a612636 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 54e58f64179ea382d2e2c403c8c3b9a15a612636) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -3,6 +3,7 @@ #include "Fans.h" #include "FPGA.h" +#include "MessageSupport.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" @@ -487,7 +488,7 @@ fansData.fanOutlet2RPM = getMeasuredFanRPM( FAN_OUTLET_2 ); fansData.fanOutlet3RPM = getMeasuredFanRPM( FAN_OUTLET_3 ); - broadcastFansData( &fansData ); + broadcastData( MSG_ID_DG_FANS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fansData, sizeof( FANS_DATA_T ) ); fansPublishCounter = 0; } Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -rd3819286869611f9c02add72a0f8e321598fdf42 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision d3819286869611f9c02add72a0f8e321598fdf42) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -18,6 +18,7 @@ #include "AlarmMgmt.h" #include "FluidLeak.h" #include "FPGA.h" +#include "MessageSupport.h" #include "OperationModes.h" #include "SystemCommMessages.h" #include "TaskPriority.h" @@ -133,7 +134,7 @@ { FLUID_LEAK_STATES_T state = getFluidLeakState(); - broadcastFluidLeakState( state ); + broadcastData( MSG_ID_DG_FLUID_LEAK_STATE, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&state, sizeof( FLUID_LEAK_STATES_T ) ); fluidLeakStatePublicationTimerCounter = 0; } } Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r2468e56fbecd26da713bc78535bd727f4b105fe1 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 2468e56fbecd26da713bc78535bd727f4b105fe1) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -19,6 +19,7 @@ #include "FPGA.h" #include "LoadCell.h" +#include "MessageSupport.h" #include "NVDataMgmt.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" @@ -247,7 +248,7 @@ loadCellData.loadCellB2inGram = getLoadCellSmallFilteredWeight( LOAD_CELL_RESERVOIR_2_BACKUP ); // Broadcast small filtered load cell data - broadcastLoadCellData( &loadCellData ); + broadcastData( MSG_ID_LOAD_CELL_READINGS, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&loadCellData, sizeof( LOAD_CELL_DATA_T ) ); loadCellDataPublicationTimerCounter = 0; } Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -rdd4b570099bb9b669fa652e1db4e076add853cf4 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision dd4b570099bb9b669fa652e1db4e076add853cf4) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -19,6 +19,7 @@ #include "AlarmMgmt.h" #include "FPGA.h" #include "InternalADC.h" +#include "MessageSupport.h" #include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" @@ -393,13 +394,16 @@ { // publish pressure/occlusion data on interval if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) - { - F32 roIn = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - F32 roOut = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); - F32 drainIn = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); - F32 drainOut = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); + { + PRESSURES_DATA_T data; - broadcastPressureSensorsData( roIn, roOut, drainIn, drainOut ); + 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 ); + + broadcastData( MSG_ID_DG_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( PRESSURES_DATA_T ) ); + pressuresDataPublicationTimerCounter = 0; } } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -22,6 +22,7 @@ #include "FPGA.h" #include "NVDataMgmt.h" +#include "MessageSupport.h" #include "OperationModes.h" #include "PersistentAlarm.h" #include "PIControllers.h" @@ -85,6 +86,10 @@ #define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< Conversion factor from target PSI to PWM duty cycle estimate. #define SAFETY_SHUTDOWN_TIMEOUT ( 3 * MS_PER_SECOND ) ///< RO pump safety shutdown activation timeout in ms. +#define ROP_ZERO_DUTY_CYCLE_FEEDBACK 0x01FF ///< RO pump zero duty cycle feedback from FPGA. +#define ROP_DUTY_CYCLE_PERIOD_US 500 ///< RO pump duty cycle period in micro seconds. +#define ROP_DUTY_CYCLE_OUT_OF_RANGE_TOLERANCE 0.05 ///< RO pump duty cycle out of range tolerance. + /// Enumeration of RO pump states. typedef enum ROPump_States { @@ -122,8 +127,7 @@ static F32 targetROPumpMaxPressure = 0.0; ///< Target RO max allowed pressure (in PSI). static OVERRIDE_U32_T roPumpDataPublishInterval = { RO_PUMP_DATA_PUB_INTERVAL, - RO_PUMP_DATA_PUB_INTERVAL, - 0, 0 }; ///< Interval (in ms) at which to publish RO flow data to CAN bus. + RO_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish RO flow data to CAN bus. static OVERRIDE_F32_T measuredROFlowRateLPM = { 0.0, 0.0, 0.0, 0 }; ///< Measured RO flow rate (in L/min). static U32 roControlTimerCounter = 0; ///< Determines when to perform control on RO pump. @@ -322,15 +326,16 @@ *************************************************************************/ void execROPumpMonitor( void ) { - U16 roFlowReading = getFPGAROPumpFlowRate(); + U16 roFlowReading = getFPGAROPumpFlowRate(); + U16 roFeedbackDCPeriod = getFPGAROPumpDutyCycleFeedback(); // Update sum for flow average calculation measuredFlowReadingsSum += (S32)roFlowReading; // Read the pressure at the sensor. The pump cannot be more that the maximum allowed pressure // to make sure the hardware (especially the ROF) is not damaged. If it is the case, we need to stop immediately F32 actualPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); - BOOL isPressureMax = actualPressure >= MAX_ALLOWED_MEASURED_PRESSURE_PSI; + BOOL isPressureMax = ( actualPressure >= MAX_ALLOWED_MEASURED_PRESSURE_PSI ? TRUE : FALSE ); checkPersistentAlarm( ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE, isPressureMax, actualPressure, MAX_ALLOWED_MEASURED_PRESSURE_PSI ); // Check if a new calibration is available @@ -359,7 +364,7 @@ } measuredFlowReadingsSum = 0; - flowFilterCounter = 0; + flowFilterCounter = 0; } #ifndef IGNORE_RO_PUMP_MONITOR @@ -368,32 +373,36 @@ // 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 const currentFlow = getMeasuredROFlowRate(); - F32 const targetFlow = getTargetROPumpFlowRate(); + F32 currentFlow = getMeasuredROFlowRate(); + F32 targetFlow = getTargetROPumpFlowRate(); // The flow cannot be out of range for than 10% of the target flow - BOOL const isFlowOutOfRange = fabs( 1.0 - ( currentFlow / targetFlow ) ) > MAX_ALLOWED_FLOW_DEVIATION; + 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 const isFlowOutOfUpperRange = isFlowOutOfRange && ( currentFlow > targetFlow ); - BOOL const isFlowOutOfLowerRange = isFlowOutOfRange && ( currentFlow < targetFlow ); + BOOL isFlowOutOfUpperRange = ( isFlowOutOfRange && ( currentFlow > targetFlow ) ? TRUE : FALSE ); + BOOL isFlowOutOfLowerRange = ( isFlowOutOfRange && ( currentFlow < targetFlow ) ? 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 ); } - // If the pump is off and PPi + 5psi < PPo for a certain period of time, activate safety shutdown - if ( FALSE == isROPumpOn ) + if ( ( FALSE == isROPumpOn ) && ( roFeedbackDCPeriod != ROP_ZERO_DUTY_CYCLE_FEEDBACK ) ) { - F32 pressureInlet = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL isPumpRunning = ( pressureInlet + MAX_PRESSURE_TARGET_TOLERANCE ) < actualPressure; + checkPersistentAlarm( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE, TRUE, roFeedbackDCPeriod, ROP_ZERO_DUTY_CYCLE_FEEDBACK ); - checkPersistentAlarm( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE, isPumpRunning, pressureInlet, ( pressureInlet + MAX_PRESSURE_TARGET_TOLERANCE ) ); - // Check if it has timed out if ( TRUE == isAlarmActive( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE ) ) { activateSafetyShutdown(); } } + + if ( TRUE == isROPumpOn ) // TODO do we need to check all this every 1 second and not every 10 ms? + { + F32 roDutyCycle = roFeedbackDCPeriod / ROP_DUTY_CYCLE_PERIOD_US; + BOOL isDCOutOfRange = ( fabs( roDutyCycle - roPumpDutyCyclePctSet ) > ROP_DUTY_CYCLE_OUT_OF_RANGE_TOLERANCE ? TRUE : FALSE ); + + checkPersistentAlarm( ALARM_ID_RO_PUMP_DUTY_CYCLE_OUT_OF_RANGE, TRUE, roDutyCycle, roPumpDutyCyclePctSet ); + } #endif // Publish RO pump data on interval @@ -833,7 +842,7 @@ pumpData.roPumpDutyCycle = roPumpDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; pumpData.roPumpState = (U32)roPumpState; - broadcastROPumpData( &pumpData ); + 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/Switches.c =================================================================== diff -u -r54e58f64179ea382d2e2c403c8c3b9a15a612636 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Switches.c (.../Switches.c) (revision 54e58f64179ea382d2e2c403c8c3b9a15a612636) +++ firmware/App/Controllers/Switches.c (.../Switches.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -1,6 +1,7 @@ #include "FPGA.h" +#include "MessageSupport.h" #include "Switches.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" @@ -169,7 +170,7 @@ switchesDataPublicationCounter = 0; - broadcastSwitchesData( &data ); + broadcastData( MSG_ID_DG_SWITCHES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( SWITCHES_DATA_T ) ); } } Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r5dc3a6d25308c9fca6a20c3df486253495ff6a33 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5dc3a6d25308c9fca6a20c3df486253495ff6a33) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -18,6 +18,7 @@ #include // For memset() #include "FPGA.h" +#include "MessageSupport.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TemperatureSensors.h" @@ -866,7 +867,7 @@ 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( &data ); + 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/Thermistors.c =================================================================== diff -u -r54e58f64179ea382d2e2c403c8c3b9a15a612636 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 54e58f64179ea382d2e2c403c8c3b9a15a612636) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -3,6 +3,7 @@ #include "FPGA.h" #include "InternalADC.h" +#include "MessageSupport.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "Thermistors.h" @@ -319,7 +320,8 @@ sensorsData.powerSupply2Thermistor = getThermistorTemperatureValue( THERMISTOR_POWER_SUPPLY_2 ); // Broadcast the thermistors data - broadcastThermistorsData( &sensorsData ); + broadcastData( MSG_ID_DG_THERMISTORS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&sensorsData, sizeof( THERMISTORS_DATA_T ) ); + // Reset the counter dataPublishCounter = 0; } Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r373b25b7e3229e9203f4af6bfa491def69e2ce83 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 373b25b7e3229e9203f4af6bfa491def69e2ce83) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -4,6 +4,7 @@ #include "AlarmMgmt.h" #include "Common.h" +#include "MessageSupport.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" @@ -447,7 +448,7 @@ uvReactorsData.inletUVReactorState = (U32)reactorsStatus[ INLET_UV_REACTOR ].execState; uvReactorsData.outletUVReactorState = (U32)reactorsStatus[ OUTLET_UV_REACTOR ].execState; - broadcastUVReactorsData( &uvReactorsData ); + broadcastData( MSG_ID_DG_UV_REACTORS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&uvReactorsData, sizeof( UV_REACTORS_DATA_T ) ); dataPublishCounter = 0; } Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rd3819286869611f9c02add72a0f8e321598fdf42 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision d3819286869611f9c02add72a0f8e321598fdf42) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -15,7 +15,8 @@ * ***************************************************************************/ -#include "FPGA.h" +#include "FPGA.h" +#include "MessageSupport.h" #include "SystemCommMessages.h" #include "TaskPriority.h" #include "Valves.h" @@ -425,7 +426,9 @@ // publish valve state on interval if ( ++valvesStatesPublicationTimerCounter >= getU32OverrideValue( &valvesStatesPublishInterval ) ) { - broadcastValvesStates( getFPGAValveStates() ); + U16 valvesStatus = getFPGAValveStates(); + broadcastData( MSG_ID_DG_VALVES_STATES, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&valvesStatus, sizeof( U16 ) ); + valvesStatesPublicationTimerCounter = 0; } } Index: firmware/App/Controllers/Voltages.c =================================================================== diff -u -rd3819286869611f9c02add72a0f8e321598fdf42 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision d3819286869611f9c02add72a0f8e321598fdf42) +++ firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -16,7 +16,8 @@ ***************************************************************************/ #include "AlarmMgmt.h" -#include "InternalADC.h" +#include "InternalADC.h" +#include "MessageSupport.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" @@ -296,7 +297,7 @@ data.adc24VPrimaryHtr = getMonitoredLineLevel( MONITORED_LINE_24V_TRIM_HTR_V ); data.adc24VTrimmerHtr = getMonitoredLineLevel( MONITORED_LINE_24V_PRIM_HTR_V ); - broadcastVoltagesData( data ); + broadcastData( MSG_ID_DG_VOLTAGES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( VOLTAGES_DATA_PAYLOAD_T ) ); voltagesDataPublicationTimerCounter = 0; } } Index: firmware/App/DGCommon.h =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -45,7 +45,7 @@ // #define PRESSURES_DEBUG 1 // #define IGNORE_DRAIN_PUMP_MONITOR 1 // #define IGNORE_HEATERS_MONITOR 1 - #define IGNORE_RO_PUMP_MONITOR 1 +// #define IGNORE_RO_PUMP_MONITOR 1 #define DISABLE_RO_RATIO_CHECK 1 // #define DISABLE_COND_SENSOR_CHECK 1 // #define DISABLE_WATER_QUALITY_CHECK 1 @@ -57,6 +57,7 @@ #define DISABLE_DIALYSATE_CHECK 1 #define DISABLE_MIXING 1 //#define DISABLE_FLOW_CONTROL_TREATMENT 1 + #define DISABLE_ACK_ALARM 1 #include #include Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -20,6 +20,7 @@ #include "DrainPump.h" #include "Heaters.h" #include "LoadCell.h" +#include "MessageSupport.h" #include "ModeChemicalDisinfect.h" #include "ModeFault.h" #include "ModeStandby.h" @@ -2031,10 +2032,10 @@ data.chemDisinfectUIState = chemDisinfectUIState; // General data publish channel - broadcastChemicalDisinfectData( &data ); + broadcastData( MSG_ID_DG_CHEM_DISINFECT_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( MODE_CHEMICAL_DISINFECT_DATA_T ) ); - // Data publish channel to UI - broadcastChemicalDisinfectData2UI( &uiData ); + // Publish data to UI + broadcastData( MSG_ID_DG_CHEM_DISINFECT_TIME_DATA, COMM_BUFFER_OUT_CAN_DG_2_UI, (U08*)&uiData, sizeof( MODE_CHEMICAL_DISINFECT_UI_DATA_T ) ); dataPublishCounter = 0; } Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -36,7 +36,7 @@ // ********** private definitions ********** -#define TARGET_DRAIN_PUMP_RPM 2400 ///< Target drain pump speed (in RPM). +#define TARGET_DRAIN_PUMP_RPM 2300 ///< Target drain pump speed (in RPM). #define DRAIN_WEIGHT_UNCHANGE_TIMEOUT ( 2 * MS_PER_SECOND ) ///< Time period of unchanged weight during draining before timeout. #define DRAIN_EMPTY_TARE_WAIT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) /// Time period to wait after drain complete and before taring load cells. Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -131,7 +131,7 @@ // Get the heaters info form the NV data management DG_HEATERS_RECORD_T heaterInfo = getHeatersInfoReocrd(); // If the data in the NV data management was not initialized properly, set it to 0 otherwise, set the average flow rate - fillStatus.fillFlowRateAverage = ( heaterInfo.averageFillFlow - 0.0 < NEARLY_ZERO ? 0.0 : heaterInfo.averageFillFlow ); + fillStatus.fillFlowRateAverage = ( heaterInfo.averageFillFlow < NEARLY_ZERO ? 0.0 : heaterInfo.averageFillFlow ); fillStatus.fillFlowRateRunningSum = 0.0; fillStatus.fillSampleCounter = 0; fillStatus.fillTemperatureRunningSum = 0.0; @@ -188,7 +188,6 @@ checkInletWaterTemperature(); checkInletPressure(); checkRORejectionRatio(); - setFillInfoToRTCRAM(); // TODO: Check for open straw door status and alarm if closed // Check if run out of time to fill the reservoir @@ -254,19 +253,6 @@ /*********************************************************************//** * @brief - * The setAvgFillFlowRateToRTCRAM function sets the average fill flow rate - * at the end of the treatment. - * @details Inputs: none - * @details Outputs: averageFillFlowRate - * @return none - *************************************************************************/ -void setAvgFillFlowRateToRTCRAM( void ) -{ - -} - -/*********************************************************************//** - * @brief * The getAverageFillTemperature function returns the average fill temperature * in each fill. * @details Inputs: none Index: firmware/App/Modes/ModeFlush.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -19,6 +19,7 @@ #include "DrainPump.h" #include "Heaters.h" #include "LoadCell.h" +#include "MessageSupport.h" #include "ModeFault.h" #include "ModeFlush.h" #include "OperationModes.h" @@ -1013,7 +1014,7 @@ data.drainLineVolume = flushLinesVolumeL; data.flushUIState = (U32)flushUIState; - broadcastFlushData( &data ); + broadcastData( MSG_ID_DG_FLUSH_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( MODE_FLUSH_DATA_T ) ); dataPublishCounter = 0; } Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r03e051ef654a1bff100da02483645c4e9d0b7a30 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 03e051ef654a1bff100da02483645c4e9d0b7a30) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -108,7 +108,7 @@ // the new PWMs for the main and small primary heaters #ifndef DISABLE_FLOW_CONTROL_TREATMENT setROPumpTargetFlowRate( TARGET_FLUSH_LINES_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); - setHeaterTargetTemperature( DG_PRIMARY_HEATER, 39.0 ); // remove this line. It comes form HD this for testing only + setHeaterTargetTemperature( DG_PRIMARY_HEATER, 39.0 ); // TODO remove this line. It comes form HD this for testing only startHeater( DG_PRIMARY_HEATER ); #endif @@ -139,7 +139,7 @@ { if ( TRUE == didTimeout( hdLostCommStartTime_ms, HD_LOST_COMM_TIMEOUT_MS ) ) { - //requestNewOperationMode( DG_MODE_STAN ); TODO uncomment there is no HD in unit 2 + requestNewOperationMode( DG_MODE_STAN ); } } Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -20,6 +20,7 @@ #include "DrainPump.h" #include "Heaters.h" #include "LoadCell.h" +#include "MessageSupport.h" #include "ModeFault.h" #include "ModeHeatDisinfect.h" #include "OperationModes.h" @@ -2014,10 +2015,10 @@ data.R2FillLevel = 0.0; } - broadcastHeatDisinfectData( &data ); + broadcastData( MSG_ID_DG_HEAT_DISINFECT_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( MODE_HEAT_DISINFECT_DATA_T ) ); // Publish data to UI - broadcastHeatDisinfectData2UI( &uiData ); + broadcastData( MSG_ID_DG_HEAT_DISINFECT_TIME_DATA, COMM_BUFFER_OUT_CAN_DG_2_UI, (U08*)&uiData, sizeof( MODE_HEAT_DISINFECT_UI_DATA_T ) ); dataPublishCounter = 0; } Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -rbd9f7ebe27d5fbdc893d04c9925f1990e873edfa -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision bd9f7ebe27d5fbdc893d04c9925f1990e873edfa) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -44,10 +44,11 @@ * @{ */ -// ********** private data ********** +// ********** private definitions ********** #define START_POST_DELAY_COUNT ( ( 1 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Start POST delay in count. +// ********** private data ********** static DG_POST_STATE_T postState = DG_POST_STATE_START; ///< Currently active initialize & POST state. static BOOL postCompleted = FALSE; ///< Flag indicating POST completed. Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -19,6 +19,7 @@ #include "CPLD.h" #include "DrainPump.h" #include "Heaters.h" +#include "MessageSupport.h" #include "ModeFault.h" #include "ModeStandby.h" #include "OperationModes.h" @@ -206,11 +207,13 @@ if ( FILTER_FLUSH_DATA_PUBLISH_INTERVAL <= filterFlushPublishTimerCounter++ ) { - U32 const timeout = filterFlushTimePeriod_ms / MS_PER_SECOND; - U32 const countdown = timeout - ( calcTimeSince( filterFlushStartTime ) / MS_PER_SECOND ); + STANDBY_MODE_DATA_T data; + + data.timeout = filterFlushTimePeriod_ms / MS_PER_SECOND; + data.countdown = data.timeout - ( calcTimeSince( filterFlushStartTime ) / MS_PER_SECOND ); filterFlushPublishTimerCounter = 0; - broadcastFilterFlushData( timeout, countdown ); + broadcastData( MSG_ID_DG_FILTER_FLUSH_PROGRESS, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( STANDBY_MODE_DATA_T ) ); } if ( TRUE == endSampleWaterRequest ) Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -raf0faf02f1bd7bffcce083e9b52988a01c343d8e -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision af0faf02f1bd7bffcce083e9b52988a01c343d8e) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -31,10 +31,17 @@ // ********** public definitions ********** +/// Standby mode data structure +typedef struct +{ + U32 timeout; ///< Timeout. + U32 countdown; ///< Count down. +} STANDBY_MODE_DATA_T; + // ********** public function prototypes ********** void initStandbyMode( void ); // initialize this module -U32 transitionToStandbyMode( void ); // prepares for transition to standby mode +U32 transitionToStandbyMode( void ); // prepares for transition to standby mode U32 execStandbyMode( void ); // execute the standby mode state machine (call from OperationModes) void waterSampleCommandHandler( SAMPLE_WATER_CMD_T sampleWaterCmd ); Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -raf0faf02f1bd7bffcce083e9b52988a01c343d8e -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision af0faf02f1bd7bffcce083e9b52988a01c343d8e) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -17,6 +17,7 @@ #include "gio.h" +#include "MessageSupport.h" #include "ModeChemicalDisinfect.h" #include "ModeDrain.h" #include "ModeFault.h" @@ -368,8 +369,14 @@ { if ( ++broadcastModeIntervalCtr >= getDGOpModePublishInterval() ) { + OP_MODES_DATA_T data; + + data.currentMode = (U32)currentMode; + data.currentSubMode = currentSubMode; + + broadcastData( MSG_ID_DG_OP_MODE, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( OP_MODES_DATA_T ) ); + broadcastModeIntervalCtr = 0; - broadcastDGOperationMode( (U32)currentMode, currentSubMode ); } } Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r6818dafc0839d6e8585f5e6f35013f539ad5a0ed -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 6818dafc0839d6e8585f5e6f35013f539ad5a0ed) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -31,6 +31,13 @@ // ********** public definitions ********** +/// Operation modes data structure +typedef struct +{ + U32 currentMode; ///< Current Mode. + U32 currentSubMode; ///< Current Submode. +} OP_MODES_DATA_T; + // ********** public function prototypes ********** void initOperationModes( void ); // initialize this module Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r752defbb739ea0756a8bf060f00bc6b9429c2764 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 752defbb739ea0756a8bf060f00bc6b9429c2764) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -191,7 +191,7 @@ U16 fpgaADCVccAux; ///< Reg 408. Internal FPGA Vcc auxiliary voltage. U16 fpgaADCVPVN; ///< Reg 410. Internal FPGA VPVN voltage. - U16 fpgaROPumpFeedback; ///< Reg 412. RO pump duty cycle feedback. + U16 fpgaROPumpDutyCycleFeedback; ///< Reg 412. RO pump duty cycle feedback. U16 fpgaDrainPumpSpeedFeedback; ///< Reg 414. Drain pump speed feedback. U16 fpgaDrainPumpCurrentFeedback; ///< Reg 416. Drain pump current feedback. @@ -1936,4 +1936,17 @@ return ( fpgaSensorReadings.fpgaGPIO & CONCENTRATE_CAP_SWITCH_MASK ); } + +/*********************************************************************//** + * @brief + * The getFPGAROPumpDutyCycleFeedback function returns the RO pump duty cycle feedback. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return RO pump PWM feedback + *************************************************************************/ +U16 getFPGAROPumpDutyCycleFeedback( void ) +{ + return fpgaSensorReadings.fpgaROPumpDutyCycleFeedback; +} + /**@}*/ Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r752defbb739ea0756a8bf060f00bc6b9429c2764 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 752defbb739ea0756a8bf060f00bc6b9429c2764) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -142,6 +142,8 @@ U08 getFPGADialysateCapStatus( void ); U08 getFPGAConcentrateCapStatus( void ); +U16 getFPGAROPumpDutyCycleFeedback( void ); + /**@}*/ #endif Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rcbcd41ec1ac2d5ae6446ec206ed6991a5306c249 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision cbcd41ec1ac2d5ae6446ec206ed6991a5306c249) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -18,6 +18,7 @@ #include // for memcpy() #include "LoadCell.h" +#include "MessageSupport.h" #include "ModeGenIdle.h" #include "OperationModes.h" #include "Reservoirs.h" @@ -99,11 +100,14 @@ // publish active reservoir, fill/drain volume targets at 1 Hz. if ( ++reservoirDataPublicationTimerCounter >= RESERVOIR_DATA_PUB_INTERVAL ) - { - U32 actRes = getU32OverrideValue( &activeReservoir ); - U32 filVol = getU32OverrideValue( &fillVolumeTargetMl ); - U32 drnVol = getU32OverrideValue( &drainVolumeTargetMl ); - broadcastReservoirData( actRes, filVol, drnVol ); + { + RESERVOIR_DATA_T data; + + data.activeReservoir = getU32OverrideValue( &activeReservoir ); + data.fillToVolumeMl = getU32OverrideValue( &fillVolumeTargetMl ); + data.drainToVolumeMl = getU32OverrideValue( &drainVolumeTargetMl ); + + broadcastData( MSG_ID_DG_RESERVOIR_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( RESERVOIR_DATA_T ) ); reservoirDataPublicationTimerCounter = 0; } } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -950,7 +950,9 @@ U16 msgID; memcpy( &msgID, &pendingAckList[ i ].msg[ sizeof( U08 ) + sizeof( U16) ], sizeof( U16 ) ); - //SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CAN_MESSAGE_NOT_ACKED, (U32)msgID ); TODO uncomment this unit 2 raises this alarm no HD +#ifndef DISABLE_ACK_ALARM + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CAN_MESSAGE_NOT_ACKED, (U32)msgID ); +#endif pendingAckList[ i ].used = FALSE; // take pending message off of list } } Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -344,375 +344,7 @@ return result; } -/*********************************************************************//** - * @brief - * The broadcastAccelData function constructs an accelerometer data msg to - * be broadcast and queues the msg for transmit on the appropriate CAN channel. - * @details Inputs: none - * @details Outputs: accelerometer data broadcast msg constructed and queued. - * @param x X axis vector magnitude (in g) - * @param y Y axis vector magnitude (in g) - * @param z Z axis vector magnitude (in g) - * @param xm max X axis vector magnitude (in g) - * @param ym max Y axis vector magnitude (in g) - * @param zm max Z axis vector magnitude (in g) - * @param xt X axis tilt (in degrees) - * @param yt Y axis tilt (in degrees) - * @param zt Z axis tilt (in degrees) - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastAccelData( F32 x, F32 y, F32 z, F32 xm, F32 ym, F32 zm, F32 xt, F32 yt, F32 zt ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - ACCEL_DATA_PAYLOAD_T payload; - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_ACCELEROMETER_DATA; - msg.hdr.payloadLen = sizeof( ACCEL_DATA_PAYLOAD_T ); - payload.x = x; - payload.y = y; - payload.z = z; - payload.xMax = xm; - payload.yMax = ym; - payload.zMax = zm; - payload.xTilt = xt; - payload.yTilt = yt; - payload.zTilt = zt; - - memcpy( payloadPtr, &payload, sizeof( ACCEL_DATA_PAYLOAD_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastRTCEpoch function constructs an epoch msg to be broadcast - * and queues the msg for transmit on the appropriate CAN channel. - * @details Inputs: none - * @details Outputs: RTC time and date in epoch - * @param epoch Current time and date in epoch - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastRTCEpoch( U32 epoch ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_RTC_EPOCH; - msg.hdr.payloadLen = sizeof( U32 ); - - memcpy( payloadPtr, &epoch, sizeof( U32 ) ); - - // 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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastLoadCellData function sends out load cell data. - * @details Inputs: none - * @details Outputs: load cell data msg constructed and queued - * @param loadCell which is the loadcells data structure pointer - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastLoadCellData( LOAD_CELL_DATA_T *loadCell ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_LOAD_CELL_READINGS; - msg.hdr.payloadLen = sizeof( LOAD_CELL_DATA_T ); - - memcpy( payloadPtr, loadCell, sizeof( LOAD_CELL_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastValvesStates function sends out DG valves states. - * @details Inputs: none - * @details Outputs: Valves states msg constructed and queued - * @param valvesStates valves states - * refer to setFPGAValveStates function in FPGA.c for details - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastValvesStates( U16 valvesStates ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_VALVES_STATES; - msg.hdr.payloadLen = sizeof( U16 ); - - memcpy( payloadPtr, &valvesStates, sizeof( U16 ) ); - - // 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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastDrainPumpData function sends out the drain pump data. - * @details Inputs: none - * @details Outputs: Drain pump data msg constructed and queued - * @param drainPumpData which is the drain pump data structure pointer - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastDrainPumpData( DRAIN_PUMP_DATA_T *drainPumpData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DRAIN_PUMP_DATA; - msg.hdr.payloadLen = sizeof( DRAIN_PUMP_DATA_T ); - - memcpy( payloadPtr, drainPumpData, sizeof( DRAIN_PUMP_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastDGHDOperationMode function constructs a DG operation mode - * broadcast message and queues the msg for transmit on the appropriate CAN channel. - * @details Inputs: none - * @details Outputs: DG operation mode msg constructed and queued - * @param mode current operation mode of the DG. - * @param subMode current sub-mode of the current operation mode of the DG. - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastDGOperationMode( U32 mode, U32 subMode ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_OP_MODE; - msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - - memcpy( payloadPtr, &mode, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &subMode, sizeof( U32 ) ); - - // 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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastROPumpData function sends out RO pump data. - * @details Inputs: none - * @details Outputs: RO pump data msg constructed and queued - * @param tgtPressure target pressure for RO pump in PSI - * @param measFlow measure RO flow rate in LPM - * @param setPWM set PWM duty cycle in % - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastROPumpData( RO_PUMP_DATA_T *pumpData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_RO_PUMP_DATA; - msg.hdr.payloadLen = sizeof( RO_PUMP_DATA_T ); - - memcpy( payloadPtr, pumpData, sizeof( RO_PUMP_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastPressureSensorsData function sends out DG pressure data. - * @details Inputs: none - * @details Outputs: Pressure data msg constructed and queued - * @param measROIn measured RO pump inlet pressure in PSI - * @param measROOut measured RO pump outlet pressure in PSI - * @param measDrainIn measured Drain pump inlet pressure in PSI - * @param measDrainOut measured Drain pump outlet pressure in PSI - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastPressureSensorsData( F32 measROIn, F32 measROOut, F32 measDrainIn, F32 measDrainOut ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - PRESSURES_DATA_T payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_PRESSURES_DATA; - msg.hdr.payloadLen = sizeof( PRESSURES_DATA_T ); - - payload.roPumpInletPressure = measROIn; - payload.roPumpOutletPressure = measROOut; - payload.drainPumpInletPressure = measDrainIn; - payload.drainPumpOutletPressure = measDrainOut; - - memcpy( payloadPtr, &payload, sizeof( PRESSURES_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastReservoirData function broadcasts the DG reservoir data. - * @details Inputs: none - * @details Outputs: Reservoir data msg constructed and queued - * @param resID ID of currently active reservoir - * @param fillToVol Current target fill to volume for inactive reservoir - * @param drainToVol Current target drain to volume for inactive reservoir - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastReservoirData( U32 resID, U32 fillToVol, U32 drainToVol ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - RESERVOIR_DATA_T payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_RESERVOIR_DATA; - msg.hdr.payloadLen = sizeof( RESERVOIR_DATA_T ); - - payload.activeReservoir = resID; - payload.fillToVolumeMl = fillToVol; - payload.drainToVolumeMl = drainToVol; - - memcpy( payloadPtr, &payload, sizeof( RESERVOIR_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastTemperatureSensorsData function sends out DG temperature - * sensors data. - * @details Inputs: none - * @details Outputs: temperature sensors data message constructed and queued - * @param tempSensorsData which is constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastTemperatureSensorsData ( TEMPERATURE_SENSORS_DATA_T* tempSensorsData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_TEMPERATURE_DATA; - msg.hdr.payloadLen = sizeof( TEMPERATURE_SENSORS_DATA_T ); - - 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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastThermistorsData function sends out the thermistors data. - * @details - * @details Inputs: none - * @details Outputs: thermistors data msg constructed and queued - * @param thermistorsData which is constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastThermistorsData( THERMISTORS_DATA_T *thermistorsData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_THERMISTORS_DATA; - msg.hdr.payloadLen = sizeof( THERMISTORS_DATA_T ); - - memcpy( payloadPtr, thermistorsData, sizeof( THERMISTORS_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastFansData function sends out the fans data. - * @details Inputs: none - * @details Outputs: fans data msg constructed and queued - * @param fansData which is constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastFansData( FANS_DATA_T *fansData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_FANS_DATA; - msg.hdr.payloadLen = sizeof( FANS_DATA_T ); - - memcpy( payloadPtr, fansData, sizeof( FANS_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 ); - - return result; -} - // *********************************************************************** // **************** Message Handling Helper Functions ******************** // *********************************************************************** @@ -877,117 +509,6 @@ /*********************************************************************//** * @brief - * The broadcastConductivityData function sends out conductivity data. - * @details Inputs: none - * @details Outputs: conductivity data message constructed and queued - * @param conductivityDataPtr which is the data msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastConductivityData( void * conductivityDataPtr ) -{ - BOOL result; - MESSAGE_T msg; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_CONDUCTIVITY_DATA; - msg.hdr.payloadLen = sizeof( CONDUCTIVITY_DATA_T ); - - memcpy( &msg.payload, conductivityDataPtr, sizeof( CONDUCTIVITY_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastUVReactorsData function sends out the UV reactors data. - * @details Inputs: none - * @details Outputs: UV reactors data msg constructed and queued - * @param uvReactorsData which is UV reactors msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastUVReactorsData( UV_REACTORS_DATA_T *uvReactorsData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_UV_REACTORS_DATA; - msg.hdr.payloadLen = sizeof( UV_REACTORS_DATA_T ); - - memcpy( payloadPtr, uvReactorsData, sizeof( UV_REACTORS_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastHeatDisinfectData function sends out the heat disinfect - * mode data. - * @details Inputs: none - * @details Outputs: heat disinfect data msg constructed and queued - * @param heatDisinfectData which is heat disinfect msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastHeatDisinfectData( MODE_HEAT_DISINFECT_DATA_T *heatDisinfectData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_HEAT_DISINFECT_DATA; - msg.hdr.payloadLen = sizeof( MODE_HEAT_DISINFECT_DATA_T ); - - memcpy( payloadPtr, heatDisinfectData, sizeof( MODE_HEAT_DISINFECT_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastFilterFlushData function sends out the filter flush progress data. - * @details Inputs: none - * @details Outputs: filter flush data msg constructed and queued - * @param timeout flush filter timeout (in sec) - * @param countdown flush filter timeout count down (in sec) - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastFilterFlushData( U32 timeout, U32 countdown ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_FILTER_FLUSH_PROGRESS; - msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - - memcpy( payloadPtr, &timeout, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &countdown, sizeof( U32 ) ); - - // 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 ); - - return result; -} - -/*********************************************************************//** - * @brief * The sendDGCalibrationRecord function sends out the DG calibration * record. * @details Inputs: none @@ -1026,203 +547,9 @@ return result; } -/***********************************************************************//** - * @brief - * The broadcastFluidLeakState function constructs a DG fluid leak state msg to \n - * be broadcasted and queues the msg for transmit on the appropriate CAN channel. - * @details Inputs: none - * @details Outputs: fluid leak state msg constructed and queued - * @param state fluid leak state - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - U32 leakState = (U32)state; - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_FLUID_LEAK_STATE; - msg.hdr.payloadLen = sizeof( U32 ); - - memcpy( payloadPtr, &leakState, sizeof( U32 ) ); - - // 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 ); - - return result; -} - /*********************************************************************//** * @brief - * The broadcastVoltagesData function constructs a monitored voltages data msg to - * be broadcast and queues the msg for transmit on the appropriate CAN channel. - * @details Inputs: none - * @details Outputs: monitored voltages data msg constructed and queued. - * @param data Latest monitored voltage values. - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastVoltagesData( VOLTAGES_DATA_PAYLOAD_T data ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_VOLTAGES_DATA; - msg.hdr.payloadLen = sizeof( VOLTAGES_DATA_PAYLOAD_T ); - - memcpy( payloadPtr, &data, sizeof( VOLTAGES_DATA_PAYLOAD_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 ); - - return result; -} - - /*********************************************************************//** - * @brief - * The broadcastFlushData function sends out the flush mode data. - * @details Inputs: none - * @details Outputs: flush data msg constructed and queued - * @param flushData which is flush msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastFlushData( MODE_FLUSH_DATA_T *flushData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_FLUSH_DATA; - msg.hdr.payloadLen = sizeof( MODE_FLUSH_DATA_T ); - - memcpy( payloadPtr, flushData, sizeof( MODE_FLUSH_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastChemicalDisinfectData function sends out the chemical - * disinfect mode data. - * @details Inputs: none - * @details Outputs: chemical disinfect data msg constructed and queued - * @param chemDisinfectData which is flush msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastChemicalDisinfectData( MODE_CHEMICAL_DISINFECT_DATA_T *chemDisinfectData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_CHEM_DISINFECT_DATA; - msg.hdr.payloadLen = sizeof( MODE_CHEMICAL_DISINFECT_DATA_T ); - - memcpy( payloadPtr, chemDisinfectData, sizeof( MODE_CHEMICAL_DISINFECT_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 ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastChemicalDisinfectData2UI function sends out the chemical - * disinfect mode data to the UI. - * @details Inputs: none - * @details Outputs: chemical disinfect UI data msg constructed and queued - * @param chemDisinfectUIData which is flush msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastChemicalDisinfectData2UI( MODE_CHEMICAL_DISINFECT_UI_DATA_T *chemDisinfectUIData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_CHEM_DISINFECT_TIME_DATA; - msg.hdr.payloadLen = sizeof( MODE_CHEMICAL_DISINFECT_UI_DATA_T ); - - memcpy( payloadPtr, chemDisinfectUIData, sizeof( MODE_CHEMICAL_DISINFECT_UI_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_2_UI, ACK_NOT_REQUIRED ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastChemicalDisinfectData2UI function sends out the heat - * disinfect mode data to the UI. - * @details Inputs: none - * @details Outputs: heat disinfect UI data msg constructed and queued - * @param heatDisinfectUIData which is flush msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastHeatDisinfectData2UI( MODE_HEAT_DISINFECT_UI_DATA_T *heatDisinfectUIData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_HEAT_DISINFECT_TIME_DATA; - msg.hdr.payloadLen = sizeof( MODE_HEAT_DISINFECT_UI_DATA_T ); - - memcpy( payloadPtr, heatDisinfectUIData, sizeof( MODE_HEAT_DISINFECT_UI_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_2_UI, ACK_NOT_REQUIRED ); - - return result; -} - -/*********************************************************************//** - * @brief - * The broadcastSwitchesData function sends out switches data. - * @details Inputs: none - * @details Outputs: switches data msg constructed and queued - * @param switchesData which is switches msg constructed and queued - * @return TRUE if msg successfully queued for transmit, FALSE if not - *************************************************************************/ -BOOL broadcastSwitchesData( SWITCHES_DATA_T *switchesData ) -{ - BOOL result; - MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_SWITCHES_DATA; - msg.hdr.payloadLen = sizeof( SWITCHES_DATA_T ); - - memcpy( payloadPtr, switchesData, sizeof( SWITCHES_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 ); - - return result; -} - -/*********************************************************************//** - * @brief * The sendDGSystemRecord function sends out the DG system record. * @details Inputs: none * @details Outputs: DG system record msg constructed and queued @@ -1454,7 +781,6 @@ sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); } - /*********************************************************************//** * @brief * The handleChangeValveSettingCmd function handles a switch reservoirs command @@ -3035,7 +2361,15 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } -//*******************************************************************/ +/*********************************************************************//** +* @brief +* The handleTestROPumpTargetFlowOverride function handles a request to +* set the RO pump target flow. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ void handleTestROPumpTargetFlowOverride( MESSAGE_T *message ) { BOOL result = FALSE; Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r26f63d0260a3c35277e3e6dbca3573c253775318 -r622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 26f63d0260a3c35277e3e6dbca3573c253775318) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 622eebf6fb7f1c6c232ffd82bc072dd30a7b3f94) @@ -70,75 +70,6 @@ // MSG_ID_ALARM_CONDITION_CLEARED BOOL broadcastAlarmConditionCleared( U32 alarm ); -// MSG_ID_DG_ACCELEROMETER_DATA -BOOL broadcastAccelData( F32 x, F32 y, F32 z, F32 xm, F32 ym, F32 zm, F32 xt, F32 yt, F32 zt ); - -// MSG_ID_RTC_EPOCH -BOOL broadcastRTCEpoch( U32 epoch ); // TODO - probably don't want DG to broadcast these - -// MSG_ID_DG_OP_MODE -BOOL broadcastDGOperationMode( U32 mode, U32 subMode ); - -// MSG_ID_LOAD_CELL_READINGS -BOOL broadcastLoadCellData( LOAD_CELL_DATA_T *loadCell ); - -// MSG_ID_DG_VALVES_STATES -BOOL broadcastValvesStates( U16 valvesStates ); - -// MSG_ID_RO_PUMP_DATA -BOOL broadcastROPumpData( RO_PUMP_DATA_T *pumpData ); - -// MSG_ID_DRAIN_PUMP_DATA -BOOL broadcastDrainPumpData( DRAIN_PUMP_DATA_T *drainPumpData ); - -// MSG_ID_DG_PRESSURES_DATA -BOOL broadcastPressureSensorsData( F32 measROIn, F32 measROOut, F32 measDrainIn, F32 measDrainOut ); - -// MSG_ID_DG_RESERVOIR_DATA -BOOL broadcastReservoirData( U32 resID, U32 fillToVol, U32 drainToVol ); - -// MSG_ID_TEMPERATURE_SENSORS_READINGS -BOOL broadcastTemperatureSensorsData( TEMPERATURE_SENSORS_DATA_T* tempSensorsData ); - -// MSG_ID_DG_CONDUCTIVITY_DATA -BOOL broadcastConductivityData( void * conductivityDataPtr ); - -// MSG_ID_DG_THERMISTORS_DATA -BOOL broadcastThermistorsData( THERMISTORS_DATA_T *thermistorsData ); - -// MSG_ID_DG_FANS_DATA -BOOL broadcastFansData( FANS_DATA_T * fansData ); - -// MSG_ID_DG_UV_REACTORS_DATA -BOOL broadcastUVReactorsData( UV_REACTORS_DATA_T *uvReactorsData ); - -// MSG_ID_DG_HEAT_DISINFECT_DATA -BOOL broadcastHeatDisinfectData( MODE_HEAT_DISINFECT_DATA_T *heatDisinfectData ); - -// MSG_ID_DG_FILTER_FLUSH_PROGRESS -BOOL broadcastFilterFlushData( U32 timeout, U32 countdown ); - -// MSG_ID_DG_FLUID_LEAK_STATE -BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state); - -// MSG_ID_DG_VOLTAGES_DATA -BOOL broadcastVoltagesData( VOLTAGES_DATA_PAYLOAD_T data ); - -// MSG_ID_DG_FLUSH_DATA -BOOL broadcastFlushData( MODE_FLUSH_DATA_T *flushData ); - -// MSG_ID_DG_CHEM_DISINFECT_DATA -BOOL broadcastChemicalDisinfectData( MODE_CHEMICAL_DISINFECT_DATA_T *chemDisinfectData ); - -// MSG_ID_DG_CHEM_DISINFECT_TIME_TO_UI_DATA_PUBLISH -BOOL broadcastChemicalDisinfectData2UI( MODE_CHEMICAL_DISINFECT_UI_DATA_T *chemDisinfectUIData ); - -// MSG_ID_DG_HEAT_DISINFECT_TO_UI_DATA_PUBLISH -BOOL broadcastHeatDisinfectData2UI( MODE_HEAT_DISINFECT_UI_DATA_T *heatDisinfectUIData ); - -// MSG_ID_DG_SWITCHES_DATA -BOOL broadcastSwitchesData( SWITCHES_DATA_T *switchesData ); - // MSG_ID_DG_COMMAND_RESPONSE void sendCommandResponseMsg( DG_CMD_RESPONSE_T *cmdResponsePtr );