Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -rbe4507c7fef6c9d987eba9e34369402e989e962e -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision be4507c7fef6c9d987eba9e34369402e989e962e) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -58,6 +58,8 @@ #define NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK 1 ///< Number of acid and bicarb non-volatile data to check. +#define DATA_PUBLISH_COUNTER_START_COUNT 0 ///< Data publish counter start count. + /// Enumeration of concentrate pump states. typedef enum ConcentratePumpState { @@ -115,7 +117,7 @@ { CONCENTRATE_PUMPS_T pumpId; - concentratePumpMonitorTimerCounter = 0; + concentratePumpMonitorTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].control = &setFPGACP1Control; concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].setStepSpeed = &setFPGACP1SetStepSpeed; @@ -194,7 +196,7 @@ checkPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, cp2Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp2Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); #endif - concentratePumpMonitorTimerCounter = 0U; + concentratePumpMonitorTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; broadcastData( MSG_ID_DG_CONCENTRATE_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( CONCENTRATE_PUMP_DATA_T ) ); } } Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -rbe4507c7fef6c9d987eba9e34369402e989e962e -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision be4507c7fef6c9d987eba9e34369402e989e962e) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -62,6 +62,7 @@ #define EMSTAT_PICO_GOOD_STATUS 0x10 ///< Measurement good status. #define EMSTAT_PICO_TIMING_NOT_MET_STATUS 0x11 ///< Measurement takes too long status. #define EMSTAT_PICO_FIFO_EMPTY_MASK 0x8000 ///< Emstat Pico buffer empty indication bit. +#define DATA_PUBLISH_COUNTER_START_COUNT 24 ///< Data publish counter start count. #pragma pack(push,1) /// Emstat pico measurement data package structure @@ -94,7 +95,7 @@ static OVERRIDE_U32_T conductivityDataPublishInterval = { COND_SENSOR_REPORT_PERIOD, COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override. -static U32 conductivityDataPublicationTimerCounter = 0; ///< Conductivity sensors data publish timer counter. +static U32 conductivityDataPublicationTimerCounter; ///< Conductivity sensors data publish timer counter. static BOOL packageStarted = FALSE; ///< Flag to indicate the start of a package measurement data. static U08 packageIndex = 0U; ///< Current package measurement data bytes index. @@ -122,7 +123,8 @@ void initConductivitySensors( void ) { U32 i; - roRejectionRatio = 0.0; + roRejectionRatio = 0.0; + conductivityDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < NUM_OF_CONDUCTIVITY_SENSORS; i++ ) { @@ -172,8 +174,9 @@ calcRORejectionRatio(); - conductivityDataPublicationTimerCounter = 0; - data.roRejectionRatio = roRejectionRatio; + conductivityDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + data.roRejectionRatio = roRejectionRatio; + data.cpi = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); data.cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); data.cd1 = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); Index: firmware/App/Controllers/DialysateFlow.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/DialysateFlow.c (.../DialysateFlow.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/DialysateFlow.c (.../DialysateFlow.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -40,10 +40,11 @@ #define DIALYSATE_FLOW_ADC_TO_LPM_FACTOR 300 ///< Conversion factor from pulse period (2us units) to flow rate (L/min) for dialysate flow rate (divide this by pulse period). #define FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ( 12 * MS_PER_SECOND ) ///< Flow out of range time out in counts. +#define DATA_PUBLISH_COUNTER_START_COUNT 18 ///< Data publish counter start count. // ********** private data ********** -static U32 dialysateFlowDataPublicationTimerCounter = 0; ///< Used to schedule Dialysate flow data publication to CAN bus. +static U32 dialysateFlowDataPublicationTimerCounter; ///< Used to schedule Dialysate flow data publication to CAN bus. static OVERRIDE_U32_T dialysateFlowDataPublishInterval = { DIALYSATE_FLOW_DATA_PUB_INTERVAL, DIALYSATE_FLOW_DATA_PUB_INTERVAL, @@ -74,7 +75,7 @@ // Initialize the variables measuredFlowReadingsSum = 0; flowFilterCounter = 0; - dialysateFlowDataPublicationTimerCounter = 0; + dialysateFlowDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } /*********************************************************************//** @@ -177,7 +178,7 @@ dialysateFlowData.measuredDialysateFlowRate = getMeasuredDialysateFlowRate(); broadcastData( MSG_ID_DG_DIALYSATE_FLOW_METER_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&dialysateFlowData, sizeof( DIALYSATE_FLOW_METER_DATA_T ) ); - dialysateFlowDataPublicationTimerCounter = 0; + dialysateFlowDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r44222e803e04d057ab793ce6b72902b8bfe9b7d0 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 44222e803e04d057ab793ce6b72902b8bfe9b7d0) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -76,6 +76,7 @@ #define SAFETY_SHUTDOWN_TIMEOUT MS_PER_SECOND ///< Drain pump safety shutdown activation timeout. #define DRAIN_PUMP_OFF_RPM_ADC_COUNT 0xFFFF ///< ADC count value when pump is off. +#define DATA_PUBLISH_COUNTER_START_COUNT 33 ///< Data publish counter start count. /// Enumeration of drain pump states. typedef enum DrainPump_States @@ -98,7 +99,7 @@ // ********** private data ********** static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< Current state of drain pump controller state machine. -static U32 drainPumpDataPublicationTimerCounter = 0; ///< Used to schedule drain pump data publication to CAN bus. +static U32 drainPumpDataPublicationTimerCounter; ///< Used to schedule drain pump data publication to CAN bus. static U32 drainPumpDAC = 0; ///< Initial drain pump DAC value. static U32 drainPumpDACSet = 0; ///< Currently set drain pump DAC value. static PUMP_CONTROL_MODE_T drainPumpControlMode = NUM_OF_PUMP_CONTROL_MODES; ///< Requested drain pump control mode. @@ -142,8 +143,9 @@ { stopDrainPump(); - hasClosedLoopBeenRequested = FALSE; - signalNewRPMRequest = FALSE; + hasClosedLoopBeenRequested = FALSE; + signalNewRPMRequest = FALSE; + drainPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize the drain pump PI controller initializePIController( PI_CONTROLLER_ID_DRAIN_PUMP, DRAIN_PUMP_MIN_DAC, DRAIN_PUMP_P_COEFFICIENT, DRAIN_PUMP_I_COEFFICIENT, @@ -667,7 +669,7 @@ broadcastData( MSG_ID_DRAIN_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&drainPumpData, sizeof( DRAIN_PUMP_DATA_T ) ); - drainPumpDataPublicationTimerCounter = 0; + drainPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -rcc8b9ddb9905161ddb0dc2af6bfbf863408669c8 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision cc8b9ddb9905161ddb0dc2af6bfbf863408669c8) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -55,6 +55,7 @@ #define FANS_MIN_ALLOWED_RPM 150 ///< Fans max allowed RPM value. #define FANS_MIN_RPM_OUT_OF_RANGE_TOL 0.25 ///< Fans min RPM out of range tolerance. #define FANS_MAX_RPM_OUT_OF_RANGE_TOL 0.5 ///< Fans max RPM out of range tolerance. +#define DATA_PUBLISH_COUNTER_START_COUNT 4 ///< Data publish counter start count. /// Fans exec states typedef enum fans_Exec_States @@ -75,7 +76,7 @@ static FAN_STATUS_T fansStatus; ///< Fans status. static FANS_EXEC_STATES_T fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; ///< Fans exec state. static U32 fansControlCounter = 0; ///< Fans control interval counter. -static U32 fansPublishCounter = 0; ///< Fans data publish interval counter. +static U32 fansPublishCounter; ///< Fans data publish interval counter. static BOOL isPOSTComplete = FALSE; ///< Flag that indicates whether POST is complete or not. static BOOL hasAlarmBeenRaised = FALSE; ///< Flag that indicates whether the RPM out of range alarm been raise. static OVERRIDE_U32_T rpmAlarmStartTimeOffset = { 0, 0, 0, 0 }; ///< RPM out of range alarm start time offset. @@ -116,7 +117,7 @@ // Initialize the variables fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; fansControlCounter = 0; - fansPublishCounter = 0; + fansPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; isPOSTComplete = FALSE; hasAlarmBeenRaised = FALSE; rpmAlarmStartTime = 0; @@ -541,7 +542,7 @@ broadcastData( MSG_ID_DG_FANS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fansData, sizeof( FANS_DATA_T ) ); - fansPublishCounter = 0; + fansPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -31,11 +31,12 @@ // ********** private definitions ********** -#define FLUID_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the fluid leak data is published on the CAN bus. +#define FLUID_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the fluid leak data is published on the CAN bus. +#define DATA_PUBLISH_COUNTER_START_COUNT 39 ///< Data publish counter start count. // ********** private data ********** -static U32 fluidLeakStatePublicationTimerCounter = 0; ///< Timer counter used to schedule fluid leak publication to CAN bus. +static U32 fluidLeakStatePublicationTimerCounter; ///< Timer counter used to schedule fluid leak publication to CAN bus. /// Interval (in ms) at which to publish fluid leak data to CAN bus. static OVERRIDE_U32_T fluidLeakStatePublishInterval = { FLUID_LEAK_PUB_INTERVAL, FLUID_LEAK_PUB_INTERVAL, 0, 0 }; @@ -54,10 +55,11 @@ *************************************************************************/ void initFluidLeak( void ) { - fluidLeakState.data = FLUID_LEAK_STATE_DRY; - fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; - fluidLeakState.ovInitData = FLUID_LEAK_STATE_DRY; - fluidLeakState.override = OVERRIDE_RESET; + fluidLeakState.data = FLUID_LEAK_STATE_DRY; + fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; + fluidLeakState.ovInitData = FLUID_LEAK_STATE_DRY; + fluidLeakState.override = OVERRIDE_RESET; + fluidLeakStatePublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } /*********************************************************************//** @@ -135,7 +137,7 @@ U32 state = (U32)getFluidLeakState(); broadcastData( MSG_ID_DG_FLUID_LEAK_STATE, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&state, sizeof( U32 ) ); - fluidLeakStatePublicationTimerCounter = 0; + fluidLeakStatePublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -68,6 +68,7 @@ #define DELTA_TEMPERATURE_TIME_COSNTANT_C 8.6 ///< Delta temperature calculated from time constant. #define MAXIMUM_ALLOWED_TARGET_TEMPERATURE_DEVIATION_C 0.25 ///< Maximum allowed temperature deviation from target temperature in C. #define PRIMARY_HEATER_DUTY_CYCLE_PER_TEMPERATURE_C 0.03 ///< Primary heaters duty cycle per temperature in C. +#define DATA_PUBLISH_COUNTER_START_COUNT 36 ///< Data publish counter start count. 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.5; ///< Primary heaters maximum power (main primary = 475W and small primary = 237.5W). @@ -137,15 +138,16 @@ * The initHeaters initializes the heaters driver. * @details Inputs: none * @details Outputs: voltageMonitorTimeCounter, heaterStatus, - * hasTreatmentInternalTempBeenSet + * hasTreatmentInternalTempBeenSet, dataPublicationTimerCounter * @return none *************************************************************************/ void initHeaters( void ) { DG_HEATERS_T heater; - voltageMonitorTimeCounter = 0; - operationMode = 0; + voltageMonitorTimeCounter = 0; + operationMode = 0; + dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( heater = DG_PRIMARY_HEATER; heater < NUM_OF_DG_HEATERS; heater++ ) { @@ -835,7 +837,7 @@ broadcastData( MSG_ID_DG_HEATERS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( HEATERS_DATA_T ) ); - dataPublicationTimerCounter = 0; + dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -52,6 +52,7 @@ #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.0 ///< Load cell primary and backup maximum allowed weight drift in grams. +#define DATA_PUBLISH_COUNTER_START_COUNT 15 ///< Data publish counter start count. /// Load cell data structure. typedef struct @@ -76,7 +77,7 @@ LOAD_CELL_REPORT_PERIOD, 0, 0 }; ///< Broadcast load cell data publish interval. static LOADCELL_T loadcells[ NUM_OF_LOAD_CELLS ]; ///< Load cell data structures. static U32 loadCellFilterTimerCount = 0; ///< Load cell filtering timer count. -static U32 loadCellDataPublicationTimerCounter = 0; ///< Load cell data publication timer counter to CAN bus. +static U32 loadCellDataPublicationTimerCounter; ///< Load cell data publication timer counter to CAN bus. static U32 smallReadingsIdx; ///< Index for next sample in load cell small rolling average sample array. static U32 largeReadingsIdx; ///< Index for next sample in load cell large rolling average sample array. @@ -99,8 +100,9 @@ U32 i; U32 j; - smallReadingsIdx = 0; - largeReadingsIdx = 0; + smallReadingsIdx = 0; + largeReadingsIdx = 0; + loadCellDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < NUM_OF_LOAD_CELLS; i++ ) { @@ -249,7 +251,7 @@ // Broadcast small filtered load cell data broadcastData( MSG_ID_LOAD_CELL_READINGS, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&loadCellData, sizeof( LOAD_CELL_DATA_T ) ); - loadCellDataPublicationTimerCounter = 0; + loadCellDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } // Monitor the load cells drift Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -49,6 +49,7 @@ #define MIN_INLET_WATER_PRESSURE 25 ///< Minimum water input pressure. #define INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error. #define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the pressures data is published on the CAN bus. +#define DATA_PUBLISH_COUNTER_START_COUNT 13 ///< Data publish counter start count. /// Defined states for the pressures monitor state machine. typedef enum PresOccl_States @@ -70,7 +71,7 @@ // ********** private data ********** static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. -static U32 pressuresDataPublicationTimerCounter = 0; ///< used to schedule pressure data publication to CAN bus. +static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; /// Pressure data publish interval. @@ -114,7 +115,7 @@ pressuresState = PRESSURE_INIT_STATE; pressuresSelfTestState = PRESSURE_SELF_TEST_STATE_START; - pressuresDataPublicationTimerCounter = 0; + pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_PRESSURE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_FAULT, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); @@ -362,7 +363,7 @@ broadcastData( MSG_ID_DG_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( PRESSURES_DATA_T ) ); - pressuresDataPublicationTimerCounter = 0; + pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -90,6 +90,8 @@ #define ROP_FEEDBACK_100_PCT_DUTY_CYCLE_VOLTAGE 2.5 ///< RO pump 100% duty cycle feedback voltage. #define ROP_DUTY_CYCLE_OUT_OF_RANGE_TOLERANCE 0.05 ///< RO pump duty cycle out of range tolerance. +#define DATA_PUBLISH_COUNTER_START_COUNT 3 ///< Data publish counter start count. + /// Enumeration of RO pump states. typedef enum ROPump_States { @@ -190,7 +192,7 @@ roPumpOpenLoopTargetDutyCycle = 0; measuredFlowReadingsSum = 0; flowFilterCounter = 0; - roPumpDataPublicationTimerCounter = 0; + roPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; roPumpState = RO_PUMP_OFF_STATE; roPumpControlMode = NUM_OF_PUMP_CONTROL_MODES; isROPumpOn = FALSE; @@ -818,7 +820,7 @@ broadcastData( MSG_ID_RO_PUMP_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&pumpData, sizeof( RO_PUMP_DATA_T ) ); - roPumpDataPublicationTimerCounter = 0; + roPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Switches.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Switches.c (.../Switches.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Switches.c (.../Switches.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -30,8 +30,9 @@ // ********** private definitions ********** -#define SWITCHES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the switches data is published on the CAN bus. -#define SWITCHES_DEBOUNCE_TIME_MS ( MS_PER_SECOND / 4 ) ///< Switches debounce time in milliseconds. +#define SWITCHES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the switches data is published on the CAN bus. +#define SWITCHES_DEBOUNCE_TIME_MS ( MS_PER_SECOND / 4 ) ///< Switches debounce time in milliseconds. +#define DATA_PUBLISH_COUNTER_START_COUNT 7 ///< Data publish counter start count. /// Switch status structure typedef struct @@ -62,7 +63,7 @@ { U08 i; - switchesDataPublicationCounter = 0; + switchesDataPublicationCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize all the switches for ( i = 0; i < NUM_OF_DOORS_AND_CAPS; i++ ) @@ -184,7 +185,7 @@ data.dialysateCap = (U32)getSwitchStatus( DIALYSATE_CAP ); data.fluidDoor = (U32)getSwitchStatus( FLUID_DOOR ); - switchesDataPublicationCounter = 0; + switchesDataPublicationCounter = DATA_PUBLISH_COUNTER_START_COUNT; 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 -r44222e803e04d057ab793ce6b72902b8bfe9b7d0 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 44222e803e04d057ab793ce6b72902b8bfe9b7d0) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -83,6 +83,7 @@ #define TEMP_SENSORS_MAX_ALLOWED_DEGREE_C 120.0 ///< Temperature sensors maximum allowed temperature in C. #define NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C 80.0 ///< Non fluid temperature sensors path maximum allowed temperature in C. #define TEMP_SENSORS_OUT_OF_RANGE_PERSISTENT_PEROID_MS ( 5 * MS_PER_SECOND ) ///< Temperature sensor out of range persistent period in milliseconds. +#define DATA_PUBLISH_COUNTER_START_COUNT 21 ///< Data publish counter start count. // The count cannot be within 0.1V of the rail on both sides therefore: // ADC count = ((2^12) - 1 / ref voltage) * voltage @@ -184,7 +185,7 @@ tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; elapsedTime = 0; internalHeatersConversionTimer = 0; - dataPublicationTimerCounter = 0; + dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; fpgaRawADCReadInterval = 0; /* NOTE: The temperature sensors do not have conversion coefficient. @@ -876,7 +877,7 @@ broadcastData( MSG_ID_DG_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); - dataPublicationTimerCounter = 0; + dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Thermistors.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -44,6 +44,7 @@ #define MIN_ALLOWED_TEMPERATURE 0.0 ///< Thermistors/sensors minimum allowed temperature reading. #define MAX_ALLOWED_TEMPERATURE 80.0 ///< Thermistors/sensors maximum allowed temperature reading. #define MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD ( 5 * MS_PER_SECOND ) ///< Thermistors/sensors maximum allowed temperature out of range period. +#define DATA_PUBLISH_COUNTER_START_COUNT 2 ///< Data publish counter start count. /// Thermistors exec states typedef enum thermistors_Exec_States @@ -92,7 +93,7 @@ { // Reset the thermistors values for a run thermistorsExecState = THERMISTORS_EXEC_STATE_START_STATE; - dataPublishCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize a persistent alarm for thermistors temeprature out of range initPersistentAlarm( ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD ); @@ -339,7 +340,7 @@ broadcastData( MSG_ID_DG_THERMISTORS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&sensorsData, sizeof( THERMISTORS_DATA_T ) ); // Reset the counter - dataPublishCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -42,6 +42,7 @@ /// Self test wait time after enabling the reactors and before checking for their health in ms. #define SELF_TEST_DELAY_TIME 1000 #define MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD MS_PER_SECOND ///< UV reactors unhealthy state period. +#define DATA_PUBLISH_COUNTER_START_COUNT 6 ///< Data publish counter start count. /// UV reactors self test states typedef enum self_tests @@ -80,7 +81,7 @@ static OVERRIDE_U32_T uvReactorsDataPublishInterval = { UV_REACTORS_DATA_PUB_INTERVAL, UV_REACTORS_DATA_PUB_INTERVAL, 0, 0 }; ///< UV reactors data publish interval. -static U32 dataPublishCounter = 0; ///< UV reactors data publish counter. +static U32 dataPublishCounter; ///< UV reactors data publish counter. static U32 selfTestElapsedTime = 0; ///< UV reactors self test elapsed time. // Self test functions @@ -111,7 +112,7 @@ uvReactorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; uvReactorsSelfTestStates = UV_REACTORS_SELF_TEST_OFF; - dataPublishCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize the UV reactors. These values are specific to the inlet and outlet reactor // so they cannot be in a for loop @@ -466,7 +467,7 @@ broadcastData( MSG_ID_DG_UV_REACTORS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&uvReactorsData, sizeof( UV_REACTORS_DATA_T ) ); - dataPublishCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -35,10 +35,11 @@ #define MAX_VALVE_STATE_MISMATCH_COUNT 3 ///< Maximum number of times commanded valves state can fail to match read back valve states in a row. #define VALVES_STATE_PUB_INTERVAL ( 500 / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time) at which valves states are published on CAN bus. +#define DATA_PUBLISH_COUNTER_START_COUNT 27 ///< Data publish counter start count. // ********** private data ********** -static U32 valvesStatesPublicationTimerCounter = 0; ///< Timer counter used to schedule valve state publication to CAN bus. +static U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. static U16 commandedValvesStates = ALL_VALVES_DEENERGIZED; ///< Initialize commanded valves states bit field. static U32 valveStateMismatchCounter = 0; ///< Initialize valve state mismatch counter. static U32 pendingValveStateChanges[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state changes. @@ -79,7 +80,7 @@ commandedValvesStates = fromU32ArrayToU16(); setFPGAValveStates( commandedValvesStates ); // initially set all valves to de-energized state via FPGA - valvesStatesPublicationTimerCounter = 0; // reset valves states publication timer + valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer } /*********************************************************************//** @@ -429,7 +430,7 @@ U16 valvesStatus = getFPGAValveStates(); broadcastData( MSG_ID_DG_VALVES_STATES, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&valvesStatus, sizeof( U16 ) ); - valvesStatesPublicationTimerCounter = 0; + valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Controllers/Voltages.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -31,7 +31,8 @@ // ********** private definitions ********** #define VOLTAGES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the voltages data is published on the CAN bus. -#define VOLTAGES_ALARM_PERSISTENCE ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Alarm persistence period for voltage monitor alarms. +#define VOLTAGES_ALARM_PERSISTENCE ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Alarm persistence period for voltage monitor alarms. +#define DATA_PUBLISH_COUNTER_START_COUNT 1 ///< Data publish counter start count. /// Defined states for the voltage monitor state machine. typedef enum Voltages_States @@ -83,7 +84,7 @@ // ********** private data ********** static VOLTAGES_STATE_T voltagesState; ///< Current state of voltages monitor state machine. -static U32 voltagesDataPublicationTimerCounter = 14; ///< Used to schedule voltages monitor data publication to CAN bus. +static U32 voltagesDataPublicationTimerCounter; ///< Used to schedule voltages monitor data publication to CAN bus. /// Interval (in ms) at which to publish voltages monitor data to CAN bus. static OVERRIDE_U32_T voltagesDataPublishInterval = { VOLTAGES_DATA_PUB_INTERVAL, VOLTAGES_DATA_PUB_INTERVAL, 0, 0 }; @@ -110,6 +111,7 @@ U32 i; voltagesState = VOLTAGES_INIT_STATE; + voltagesDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < (U32)NUM_OF_MONITORED_LINES; i++ ) { @@ -298,7 +300,7 @@ data.adc24VTrimmerHtr = getMonitoredLineLevel( MONITORED_LINE_24V_PRIM_HTR_V ); broadcastData( MSG_ID_DG_VOLTAGES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( VOLTAGES_DATA_PAYLOAD_T ) ); - voltagesDataPublicationTimerCounter = 0; + voltagesDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/DGCommon.h =================================================================== diff -u -r0a040a300ce592c2a7cfc095d20f6ddc31036a54 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 0a040a300ce592c2a7cfc095d20f6ddc31036a54) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -54,6 +54,7 @@ #define DISABLE_FLOW_CHECK_IN_FILL 1 #define IGNORE_CONC_PUMP_IN_HEAT_DISINFECT 1 // #define NEW_FMD_FLOW_SENSOR 1 + #define DISABLE_SERVICE_RECORD 1 // Turn these flags on to disable dialysate mixing #define DISABLE_DIALYSATE_CHECK 1 // Disabled for Tom Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -40,7 +40,8 @@ // ********** private definitions ********** -#define BROADCAST_DG_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the operation mode is published on the CAN bus. +#define BROADCAST_DG_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the operation mode is published on the CAN bus. +#define DATA_PUBLISH_COUNTER_START_COUNT 11 ///< Data publish counter start count. // ********** private data ********** @@ -50,7 +51,7 @@ static U32 currentSubMode = 0; ///< The currently active state of the active mode. /// DG operation mode data publish interval. static OVERRIDE_U32_T dgOpModePublishInterval = { BROADCAST_DG_OP_MODE_INTERVAL, BROADCAST_DG_OP_MODE_INTERVAL, 0, 0 }; -static U32 broadcastModeIntervalCtr = 11; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. +static U32 dataPublishCounter; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. static U32 priorSubMode = 0; ///< The prior submode state. /// This matrix determines legal transitions from one mode to another. @@ -99,6 +100,8 @@ currentMode = DG_MODE_INIT; currentSubMode = 0; priorSubMode = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; + transitionToNewOperationMode( DG_MODE_INIT ); // call initializers for the individual modes @@ -369,7 +372,7 @@ *************************************************************************/ static void broadcastOperationMode( void ) { - if ( ++broadcastModeIntervalCtr >= getDGOpModePublishInterval() ) + if ( ++dataPublishCounter >= getDGOpModePublishInterval() ) { OP_MODES_DATA_T data; @@ -378,7 +381,7 @@ broadcastData( MSG_ID_DG_OP_MODE, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( OP_MODES_DATA_T ) ); - broadcastModeIntervalCtr = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -35,6 +35,7 @@ /// Interval (ms/task time) at which the alarm information is published on the CAN bus. #define ALARM_INFO_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +#define DATA_PUBLISH_COUNTER_START_COUNT 12 ///< Data publish counter start count. // *** This declaration will cause a compiler error if ALARM_TABLE does not have same # of alarms as the Alarm_List enumeration. U08 alarmTableSizeAssertion[ ( ( sizeof( ALARM_TABLE ) / sizeof( ALARM_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; @@ -50,7 +51,7 @@ static BOOL alarmIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of current state of each alarm static BOOL alarmConditionIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of flag indicates if an alarm condition is active -static U32 alarmInfoPublicationTimerCounter = 0; ///< Used to schedule alarm information publication to CAN bus. +static U32 alarmInfoPublicationTimerCounter; ///< Used to schedule alarm information publication to CAN bus. /// Interval (in task intervals) at which to publish alarm information to CAN bus. static OVERRIDE_U32_T alarmInfoPublishInterval = { ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, 0 }; @@ -68,7 +69,9 @@ *************************************************************************/ void initAlarmMgmt( void ) { - ALARM_ID_T alrm; + ALARM_ID_T alrm; + + alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // initialize alarm states and start time stamps for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) @@ -273,7 +276,7 @@ U32 safetyActivated = (U32)isSafetyShutdownActivated(); broadcastData( MSG_ID_DG_ALARM_INFO, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&safetyActivated, sizeof( U32 ) ); - alarmInfoPublicationTimerCounter = 0; + alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; } } Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r05019ca03114d75099dd3ae6e09f776bd8a2c46e -r31aa23b12f37b9d16b5160369ccb7dab6c6eca4d --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 05019ca03114d75099dd3ae6e09f776bd8a2c46e) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 31aa23b12f37b9d16b5160369ccb7dab6c6eca4d) @@ -48,6 +48,7 @@ #define RESERVOIR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the reservoir data is published on the CAN bus. #define MAX_REDUNDANT_LOAD_CELL_DIFF 50.0 ///< Maximum difference in redundant load cells when determining if fill completed. #define DRAIN_THRESHOLD_ML 30.0 ///< Drain threshold in milliliters. +#define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. // ********** private data ********** @@ -67,7 +68,7 @@ } HEATERS_TEMPERATURE_CALC_DATA_T; static HEATERS_TEMPERATURE_CALC_DATA_T heatersTempCalc; ///< Heaters temperature calculations data structure. -static U32 reservoirDataPublicationTimerCounter = 0; ///< used to schedule reservoir data publication to CAN bus. +static U32 dataPublishCounter; ///< used to schedule reservoir data publication to CAN bus. static OVERRIDE_U32_T activeReservoir = { 0, 0, 0, 0 }; ///< The active reservoir that the DG is filling/draining/etc. static OVERRIDE_U32_T fillVolumeTargetMl = { 0, 0, 0, 0 }; ///< The target reservoir fill volume (in mL). @@ -94,7 +95,7 @@ * @details Inputs: none * @details Outputs: activeReservoir.data, fillVolumeTargetMl.data, * drainVolumeTargetMl.data, targetFillFlowRateLPM, isThisTheFirstCycle, - * previousReservoiWeight + * previousReservoiWeight, dataPublishCounter * @return none *************************************************************************/ void initReservoirs( void ) @@ -104,6 +105,7 @@ drainVolumeTargetMl.data = DEFAULT_DRAIN_VOLUME_ML; targetFillFlowRateLPM = 0.0; isThisTheFirstCycle = TRUE; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; memset( &previousReservoiWeight, 0.0, sizeof( F32 ) * NUM_OF_DG_RESERVOIRS ); } @@ -130,7 +132,7 @@ } // publish active reservoir, fill/drain volume targets at 1 Hz. - if ( ++reservoirDataPublicationTimerCounter >= RESERVOIR_DATA_PUB_INTERVAL ) + if ( ++dataPublishCounter >= RESERVOIR_DATA_PUB_INTERVAL ) { RESERVOIR_DATA_T data; @@ -148,7 +150,7 @@ data.timereservoirFill = heatersTempCalc.timeReservoirFillMS; broadcastData( MSG_ID_DG_RESERVOIRS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( RESERVOIR_DATA_T ) ); - reservoirDataPublicationTimerCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } }