#ifndef TCS_THERMALCOMPONENT_H_ #define TCS_THERMALCOMPONENT_H_ #include #include #include #include class TCS_ThermalComponent: public CoreComponent { public: struct Parameters { float lowerNopLimit; float lowerOpLimit; float upperOpLimit; float upperNopLimit; float heaterOn; float hysteresis; float heaterSwitchoff; }; struct NopParameters { float lowerNopLimit; float upperNopLimit; }; TCS_ThermalComponent(object_id_t reportingObjectId, uint8_t domainId, uint32_t temperaturePoolId, uint32_t targetStatePoolId, uint32_t currentStatePoolId, uint32_t requestPoolId, DataSet *dataSet, ArduinoTCSTemperatureSensor *sensor, ArduinoTCSTemperatureSensor *firstRedundantSensor, ArduinoTCSTemperatureSensor *secondRedundantSensor, TCS_Heater *Heater, TCS_Heater *RedundantHeater, ThermalModuleIF *thermalModule, Parameters parameters, Priority priority); virtual ~TCS_ThermalComponent(); virtual HeaterRequest performOperation(uint8_t opCode, bool redundancy, bool dual); ReturnValue_t setTargetState(int8_t newState) override; virtual ReturnValue_t setLimits( const uint8_t* data, uint32_t size); protected: NopParameters nopParameters; TCS_Heater *Heater; TCS_Heater *RedundantHeater; State getState(float temperature, CoreComponent::Parameters parameters, int8_t targetState); virtual void checkLimits(State state); virtual HeaterRequest getHeaterRequest(int8_t targetState, float temperature, CoreComponent::Parameters parameters); State getIgnoredState(int8_t state); enum Informee { ALL, SAFE, NONE }; //void informComponentsAboutHeaterState(bool heaterIsOn, Informee whomToInform, Priority priority, HeaterRequest request); //Strategy oldStrategy; }; #endif /* TCS_THERMALCOMPONENT_H_ */