fsfw/src/fsfw/thermal/AbstractTemperatureSensor.cpp

71 lines
2.1 KiB
C++
Raw Permalink Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/thermal/AbstractTemperatureSensor.h"
2022-02-02 10:29:30 +01:00
2021-07-13 20:22:54 +02:00
#include "fsfw/ipc/QueueFactory.h"
AbstractTemperatureSensor::AbstractTemperatureSensor(object_id_t setObjectid,
2022-02-02 10:29:30 +01:00
ThermalModuleIF *thermalModule)
2022-02-22 10:17:56 +01:00
: SystemObject(setObjectid), healthHelper(this, setObjectid), parameterHelper(this) {
2022-02-19 16:14:02 +01:00
if (thermalModule != nullptr) {
2022-02-02 10:29:30 +01:00
thermalModule->registerSensor(this);
}
2022-02-22 10:17:56 +01:00
auto mqArgs = MqArgs(setObjectid, static_cast<void *>(this));
commandQueue = QueueFactory::instance()->createMessageQueue(
3, MessageQueueMessage::MAX_MESSAGE_SIZE, &mqArgs);
}
AbstractTemperatureSensor::~AbstractTemperatureSensor() {
2022-02-02 10:29:30 +01:00
QueueFactory::instance()->deleteMessageQueue(commandQueue);
}
MessageQueueId_t AbstractTemperatureSensor::getCommandQueue() const {
2022-02-02 10:29:30 +01:00
return commandQueue->getId();
}
ReturnValue_t AbstractTemperatureSensor::initialize() {
2022-02-02 10:29:30 +01:00
ReturnValue_t result = SystemObject::initialize();
2022-08-16 01:08:26 +02:00
if (result != returnvalue::OK) {
2022-02-02 10:29:30 +01:00
return result;
}
result = healthHelper.initialize();
2022-08-16 01:08:26 +02:00
if (result != returnvalue::OK) {
2022-02-02 10:29:30 +01:00
return result;
}
result = parameterHelper.initialize();
return result;
}
ReturnValue_t AbstractTemperatureSensor::performOperation(uint8_t opCode) {
2022-02-02 10:29:30 +01:00
handleCommandQueue();
doChildOperation();
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
ReturnValue_t AbstractTemperatureSensor::performHealthOp() {
2022-02-02 10:29:30 +01:00
handleCommandQueue();
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
void AbstractTemperatureSensor::handleCommandQueue() {
2022-02-02 10:29:30 +01:00
CommandMessage command;
ReturnValue_t result = commandQueue->receiveMessage(&command);
2022-08-16 01:08:26 +02:00
if (result == returnvalue::OK) {
2022-02-02 10:29:30 +01:00
result = healthHelper.handleHealthCommand(&command);
2022-08-16 01:08:26 +02:00
if (result == returnvalue::OK) {
2022-02-02 10:29:30 +01:00
return;
}
result = parameterHelper.handleParameterMessage(&command);
2022-08-16 01:08:26 +02:00
if (result == returnvalue::OK) {
2022-02-02 10:29:30 +01:00
return;
}
command.setToUnknownCommand();
commandQueue->reply(&command);
}
}
ReturnValue_t AbstractTemperatureSensor::setHealth(HealthState health) {
2022-02-02 10:29:30 +01:00
healthHelper.setHealth(health);
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
2022-02-02 10:29:30 +01:00
HasHealthIF::HealthState AbstractTemperatureSensor::getHealth() { return healthHelper.getHealth(); }