fsfw/src/fsfw/thermal/ThermalComponentCore.h

112 lines
3.1 KiB
C
Raw Permalink Normal View History

2020-12-03 18:32:32 +01:00
#ifndef FSFW_THERMAL_THERMALCOMPONENTCORE_H_
#define FSFW_THERMAL_THERMALCOMPONENTCORE_H_
#include "AbstractTemperatureSensor.h"
2022-02-02 10:29:30 +01:00
#include "ThermalComponentIF.h"
2020-12-03 18:32:32 +01:00
#include "ThermalModule.h"
2022-02-02 10:29:30 +01:00
#include "ThermalMonitorReporter.h"
2021-07-13 20:58:45 +02:00
#include "fsfw/datapoollocal/LocalPoolVariable.h"
2020-12-03 18:32:32 +01:00
/**
* @brief
* @details
*/
2022-02-02 10:29:30 +01:00
class ThermalComponentCore : public ThermalComponentIF {
public:
struct Parameters {
float lowerOpLimit;
float upperOpLimit;
float heaterOn;
float hysteresis;
float heaterSwitchoff;
};
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
static const uint16_t COMPONENT_TEMP_CONFIRMATION = 5;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
/**
* Some documentation
* @param reportingObjectId
* @param domainId
* @param temperaturePoolId
* @param targetStatePoolId
* @param currentStatePoolId
* @param requestPoolId
* @param dataSet
* @param parameters
* @param initialTargetState
*/
ThermalComponentCore(
object_id_t reportingObjectId, uint8_t domainId, gp_id_t temperaturePoolId,
gp_id_t targetStatePoolId, gp_id_t currentStatePoolId, gp_id_t requestPoolId,
LocalPoolDataSetBase *dataSet, Parameters parameters,
StateRequest initialTargetState = ThermalComponentIF::STATE_REQUEST_OPERATIONAL);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
void addSensor(AbstractTemperatureSensor *firstRedundantSensor);
void addFirstRedundantSensor(AbstractTemperatureSensor *firstRedundantSensor);
void addSecondRedundantSensor(AbstractTemperatureSensor *secondRedundantSensor);
void addThermalModule(ThermalModule *thermalModule, Priority priority);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
void setPriority(Priority priority);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual ~ThermalComponentCore();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual HeaterRequest performOperation(uint8_t opCode);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
void markStateIgnored();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
object_id_t getObjectId();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
uint8_t getDomainId() const;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual float getLowerOpLimit();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
ReturnValue_t setTargetState(int8_t newState);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual void setOutputInvalid();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueId,
ParameterWrapper *parameterWrapper,
const ParameterWrapper *newValues, uint16_t startAtIndex);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
protected:
AbstractTemperatureSensor *sensor = nullptr;
AbstractTemperatureSensor *firstRedundantSensor = nullptr;
AbstractTemperatureSensor *secondRedundantSensor = nullptr;
ThermalModuleIF *thermalModule = nullptr;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
lp_var_t<float> temperature;
lp_var_t<int8_t> targetState;
lp_var_t<int8_t> currentState;
lp_var_t<uint8_t> heaterRequest;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
bool isHeating = false;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
bool isSafeComponent = false;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
float minTemp = 999;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
float maxTemp = AbstractTemperatureSensor::ZERO_KELVIN_C;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
Parameters parameters;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
const uint8_t domainId;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
ThermalMonitorReporter temperatureMonitor;
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual float getTemperature();
virtual State getState(float temperature, Parameters parameters, int8_t targetState);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual void checkLimits(State state);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual HeaterRequest getHeaterRequest(int8_t targetState, float temperature,
Parameters parameters);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual State getIgnoredState(int8_t state);
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
void updateMinMaxTemp();
2020-12-03 18:32:32 +01:00
2022-02-02 10:29:30 +01:00
virtual Parameters getParameters();
2020-12-03 18:32:32 +01:00
};
#endif /* FSFW_THERMAL_THERMALCOMPONENT_CORE_H_ */