|
|
|
@@ -3,7 +3,6 @@
|
|
|
|
|
#include <bsp_q7s/core/CoreDefinitions.h>
|
|
|
|
|
#include <fsfw/datapool/PoolReadGuard.h>
|
|
|
|
|
#include <fsfw/thermal/ThermalComponentIF.h>
|
|
|
|
|
#include <fsfw/thermal/ThermalModuleIF.h>
|
|
|
|
|
#include <fsfw_hal/devicehandlers/devicedefinitions/MgmLIS3HandlerDefs.h>
|
|
|
|
|
#include <linux/devices/devicedefinitions/StarTrackerDefinitions.h>
|
|
|
|
|
#include <mission/devices/devicedefinitions/BpxBatteryDefinitions.h>
|
|
|
|
@@ -989,16 +988,14 @@ void ThermalController::ctrlAcsBoard() {
|
|
|
|
|
|
|
|
|
|
if (heaterAvailable) {
|
|
|
|
|
// A side
|
|
|
|
|
chooseOf5Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
|
|
|
|
|
deviceTemperatures.gyro1SideA, deviceTemperatures.mgm0SideA,
|
|
|
|
|
sensorTemperatures.sensor_tcs_board);
|
|
|
|
|
chooseOf4Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
|
|
|
|
|
deviceTemperatures.gyro1SideA, sensorTemperatures.sensor_tcs_board);
|
|
|
|
|
if (sensorTempAvailable) {
|
|
|
|
|
ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits);
|
|
|
|
|
}
|
|
|
|
|
// B side
|
|
|
|
|
chooseOf5Sensors(switchNr, deviceTemperatures.gyro2SideB, deviceTemperatures.mgm2SideB,
|
|
|
|
|
deviceTemperatures.gyro3SideB, deviceTemperatures.mgm2SideB,
|
|
|
|
|
sensorTemperatures.sensor_tcs_board);
|
|
|
|
|
chooseOf4Sensors(switchNr, deviceTemperatures.gyro2SideB, deviceTemperatures.mgm2SideB,
|
|
|
|
|
deviceTemperatures.gyro3SideB, sensorTemperatures.sensor_tcs_board);
|
|
|
|
|
if (sensorTempAvailable) {
|
|
|
|
|
ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits);
|
|
|
|
|
}
|
|
|
|
@@ -1151,6 +1148,9 @@ void ThermalController::ctrlObc() {
|
|
|
|
|
ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD,
|
|
|
|
|
deviceTemperatures.q7s, sensorTemperatures.tmp1075Tcs1,
|
|
|
|
|
sensorTemperatures.tmp1075Tcs0, &obcLimits);
|
|
|
|
|
if (componentOverheating) {
|
|
|
|
|
triggerEvent(OBC_OVERHEATING);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ThermalController::ctrlObcIfBoard() {
|
|
|
|
@@ -1164,6 +1164,9 @@ void ThermalController::ctrlSBandTransceiver() {
|
|
|
|
|
deviceTemperatures.syrlinksPowerAmplifier,
|
|
|
|
|
deviceTemperatures.syrlinksBasebandBoard,
|
|
|
|
|
sensorTemperatures.sensor_4k_camera, &sBandTransceiverLimits);
|
|
|
|
|
if (componentOverheating) {
|
|
|
|
|
triggerEvent(SYRLINKS_OVERHEATING);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void ThermalController::ctrlPcduP60Board() {
|
|
|
|
|
ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD,
|
|
|
|
@@ -1219,6 +1222,9 @@ void ThermalController::ctrlPlPcduBoard() {
|
|
|
|
|
sensorTemperatures.sensor_plpcdu_heatspreader);
|
|
|
|
|
if (sensorTempAvailable) {
|
|
|
|
|
ctrlHeater(switchNr, redSwitchNr, &plPcduBoardLimits);
|
|
|
|
|
if (componentOverheating) {
|
|
|
|
|
triggerEvent(PLPCDU_OVERHEATING, switchNr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -1228,6 +1234,9 @@ void ThermalController::ctrlPlocMissionBoard() {
|
|
|
|
|
sensorTemperatures.sensor_ploc_heatspreader,
|
|
|
|
|
sensorTemperatures.sensor_ploc_missionboard,
|
|
|
|
|
sensorTemperatures.sensor_dac_heatspreader, &plocMissionBoardLimits);
|
|
|
|
|
if (componentOverheating) {
|
|
|
|
|
triggerEvent(PLOC_OVERHEATING);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ThermalController::ctrlPlocProcessingBoard() {
|
|
|
|
@@ -1278,6 +1287,9 @@ void ThermalController::ctrlHpa() {
|
|
|
|
|
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA,
|
|
|
|
|
sensorTemperatures.sensor_hpa, sensorTemperatures.sensor_x8,
|
|
|
|
|
sensorTemperatures.sensor_mpa, &hpaLimits);
|
|
|
|
|
if (componentOverheating) {
|
|
|
|
|
triggerEvent(HPA_OVERHEATING);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ThermalController::ctrlScexBoard() {
|
|
|
|
@@ -1288,20 +1300,25 @@ void ThermalController::ctrlScexBoard() {
|
|
|
|
|
|
|
|
|
|
void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr,
|
|
|
|
|
struct TempLimits* tempLimit) {
|
|
|
|
|
componentOverheating = false;
|
|
|
|
|
// Heater off
|
|
|
|
|
if (not heaterHandler.checkSwitchState(switchNr)) {
|
|
|
|
|
if (sensorTemp < (*tempLimit).opLowerLimit) {
|
|
|
|
|
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::ON);
|
|
|
|
|
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " ON" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
// Heater on
|
|
|
|
|
} else if (heaterHandler.checkSwitchState(switchNr)) {
|
|
|
|
|
if (sensorTemp >= (*tempLimit).opLowerLimit + TEMP_OFFSET) {
|
|
|
|
|
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
|
|
|
|
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
} else if (not redSwitchNrInUse) {
|
|
|
|
|
if (heaterHandler.checkSwitchState(redSwitchNr)) {
|
|
|
|
|
if (sensorTemp >= (*tempLimit).cutOffLimit) {
|
|
|
|
|
componentOverheating = true;
|
|
|
|
|
heaterHandler.switchHeater(redSwitchNr, HeaterHandler::SwitchState::OFF);
|
|
|
|
|
sif::info << "ThermalController::ctrlHeater: Heater" << redSwitchNr << " OFF" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -1327,15 +1344,16 @@ void ThermalController::chooseSensor(heater::Switchers switchNr, const lp_float_
|
|
|
|
|
const lp_float_t& sensor2, const lp_float_t& sensor3) {
|
|
|
|
|
sensorTempAvailable = true;
|
|
|
|
|
|
|
|
|
|
if (sensor1.isValid()) {
|
|
|
|
|
if (sensor1.isValid() and sensor1.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor1.value;
|
|
|
|
|
} else if (sensor2.isValid()) {
|
|
|
|
|
} else if (sensor2.isValid() and sensor2.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor2.value;
|
|
|
|
|
} else if (sensor3.isValid()) {
|
|
|
|
|
} else if (sensor3.isValid() and sensor3.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor3.value;
|
|
|
|
|
} else {
|
|
|
|
|
if (heaterHandler.checkSwitchState(switchNr)) {
|
|
|
|
|
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
|
|
|
|
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
|
|
|
|
sensorTempAvailable = false;
|
|
|
|
@@ -1363,40 +1381,18 @@ void ThermalController::chooseOf4Sensors(heater::Switchers switchNr, const lp_fl
|
|
|
|
|
const lp_float_t& sensor4) {
|
|
|
|
|
sensorTempAvailable = true;
|
|
|
|
|
|
|
|
|
|
if (sensor1.isValid()) {
|
|
|
|
|
if (sensor1.isValid() and sensor1.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor1.value;
|
|
|
|
|
} else if (sensor2.isValid()) {
|
|
|
|
|
} else if (sensor2.isValid() and sensor2.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor2.value;
|
|
|
|
|
} else if (sensor3.isValid()) {
|
|
|
|
|
} else if (sensor3.isValid() and sensor3.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor3.value;
|
|
|
|
|
} else if (sensor4.isValid()) {
|
|
|
|
|
} else if (sensor4.isValid() and sensor4.value != INVALID_TEMPERATURE) {
|
|
|
|
|
sensorTemp = sensor4.value;
|
|
|
|
|
} else {
|
|
|
|
|
if (heaterHandler.checkSwitchState(switchNr)) {
|
|
|
|
|
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
|
|
|
|
}
|
|
|
|
|
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
|
|
|
|
sensorTempAvailable = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void ThermalController::chooseOf5Sensors(heater::Switchers switchNr, const lp_float_t& sensor1,
|
|
|
|
|
const lp_float_t& sensor2, const lp_float_t& sensor3,
|
|
|
|
|
const lp_float_t& sensor4, const lp_float_t& sensor5) {
|
|
|
|
|
sensorTempAvailable = true;
|
|
|
|
|
|
|
|
|
|
if (sensor1.isValid()) {
|
|
|
|
|
sensorTemp = sensor1.value;
|
|
|
|
|
} else if (sensor2.isValid()) {
|
|
|
|
|
sensorTemp = sensor2.value;
|
|
|
|
|
} else if (sensor3.isValid()) {
|
|
|
|
|
sensorTemp = sensor3.value;
|
|
|
|
|
} else if (sensor4.isValid()) {
|
|
|
|
|
sensorTemp = sensor4.value;
|
|
|
|
|
} else if (sensor5.isValid()) {
|
|
|
|
|
sensorTemp = sensor5.value;
|
|
|
|
|
} else {
|
|
|
|
|
if (heaterHandler.checkSwitchState(switchNr)) {
|
|
|
|
|
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
|
|
|
|
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
|
|
|
|
sensorTempAvailable = false;
|
|
|
|
|