#pragma once #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define INITIALISATION_VALUE 0.0f #define AVG10S_SAMPLE_SIZE 10U #define AVG60S_SAMPLE_SIZE 60U #define AVG24H_SAMPLE_SIZE 24U #define PRED60S_SAMPLE_SIZE 60U #define DAMPING_FACTOR_WARMER 0.001f #define DAMPING_FACTOR_COLDER 0.005f typedef enum _BurnerErrorState { NO_ERROR, FAULT } eBurnerErrorState; typedef enum _MeasurementErrorState { MEASUREMENT_NO_ERROR, MEASUREMENT_FAULT } eMeasurementErrorState; typedef struct _Average { float fValue; float samples[MAX(AVG10S_SAMPLE_SIZE, MAX(AVG60S_SAMPLE_SIZE, AVG24H_SAMPLE_SIZE))]; size_t bufferIndex; size_t bufferCount; } sAverage; typedef struct _Predict { float fValue; float samples[PRED60S_SAMPLE_SIZE]; size_t bufferIndex; size_t bufferCount; } sPredict; typedef struct _Measurement { float fCurrentValue; float fDampedValue; sAverage average10s; sAverage average60s; sPredict predict60s; eMeasurementErrorState state; } sMeasurement; void initInputs(void); sMeasurement getChamberTemperature(void); sMeasurement getOutdoorTemperature(void); sMeasurement getInletFlowTemperature(void); sMeasurement getReturnFlowTemperature(void); eBurnerErrorState getBurnerError(void);