Compare commits

...

16 Commits

Author SHA1 Message Date
faeca1b419 update PUS5 TM format 2025-02-25 16:25:54 +01:00
7b6981e162 update for event definitions 2025-02-25 14:46:36 +01:00
b8979d8f90 Merge pull request 'Improve readability of SubsystemBase::executeTable' (#49) from spahr/SubsystemBase into main
Reviewed-on: #49
2025-02-19 11:26:36 +01:00
9557db7036 Merge branch 'main' into spahr/SubsystemBase 2025-02-19 11:26:26 +01:00
c9fcabccd6 Merge pull request 'Missing valid flag update in readWithoutLock and commitWithoutLock' (#48) from bugfix-poolvariable into main
Reviewed-on: #48
2025-02-19 11:26:04 +01:00
ecd36f5e52 Merge branch 'main' into bugfix-poolvariable 2025-02-19 11:25:52 +01:00
fc19c0838e Merge pull request 'Formatting of debug printout' (#50) from spahr/formattingForDebugPrintout into main
Reviewed-on: #50
2025-02-19 11:24:39 +01:00
spahr@ksat-stuttgart.de
8c3f366d1a formatting for time prinout 2025-02-16 17:36:22 +01:00
spahr@ksat-stuttgart.de
6efb2641a7 Re-write the logic in executeTable() to improve the readabilty of the code. This gets rid of the usage of isFaulty() (which is misleading), and removes nexted if-statements 2025-02-16 17:07:40 +01:00
spahr@ksat-stuttgart.de
260bbad9a0 Modify the hard-coded strings which are printed to into the debug session to enforce alignment of all printouts, regardless of their printlevel (info, debug, warning, error). 2025-02-14 19:02:57 +01:00
9edd6221f8 Missing valid flag update in readWithoutLock and commitWithoutLock 2025-02-11 15:16:27 +01:00
735e341aab Merge pull request 'temperaturesensor-bugfix' (#47) from temperaturesensor-bugfix into main
Reviewed-on: #47
2025-01-21 14:33:29 +01:00
921bfb1e99 Merge branch 'main' into temperaturesensor-bugfix 2025-01-21 14:31:59 +01:00
5b1651e1a6 Merge pull request 'Update HK and datapool handling' (#45) from update-hk-handling-datapools into main
Reviewed-on: #45
2025-01-08 10:38:34 +01:00
mikael.senger
69c33587e8 Merge remote-tracking branch 'origin/main' into temperaturesensor-bugfix 2024-12-31 10:51:11 +01:00
mikael.senger
81cd8bd290 did not build before 2024-12-15 23:52:32 +01:00
7 changed files with 47 additions and 35 deletions

View File

@@ -210,6 +210,7 @@ inline ReturnValue_t PoolVariable<T>::readWithoutLock() {
} }
this->value = *(poolEntry->getDataPtr()); this->value = *(poolEntry->getDataPtr());
this->valid = poolEntry->getValid();
return returnvalue::OK; return returnvalue::OK;
} }
@@ -241,6 +242,7 @@ ReturnValue_t PoolVariable<T>::commitWithoutLock() {
} }
*(poolEntry->getDataPtr()) = this->value; *(poolEntry->getDataPtr()) = this->value;
poolEntry->setValid(this->valid);
return returnvalue::OK; return returnvalue::OK;
} }

View File

@@ -5,28 +5,28 @@
#include "fwSubsystemIdRanges.h" #include "fwSubsystemIdRanges.h"
using EventId_t = uint16_t;
using EventSeverity_t = uint8_t; using EventSeverity_t = uint8_t;
using UniqueEventId_t = uint8_t; using GroupId_t = uint16_t;
using UniqueEventId_t = uint16_t;
namespace severity { namespace severity {
enum Severity : EventSeverity_t { INFO = 1, LOW = 2, MEDIUM = 3, HIGH = 4 }; enum Severity : EventSeverity_t { INFO = 0, LOW = 1, MEDIUM = 2, HIGH = 3 };
} // namespace severity } // namespace severity
#define MAKE_EVENT(id, severity) (((severity) << 16) + (SUBSYSTEM_ID * 100) + (id)) #define MAKE_EVENT(id, severity) (((severity) << 30) | (SUBSYSTEM_ID << 16) | id)
typedef uint32_t Event; typedef uint32_t Event;
namespace event { namespace event {
constexpr EventId_t getEventId(Event event) { return (event & 0xFFFF); } constexpr UniqueEventId_t getEventId(Event event) { return (event & 0xFFFF); }
constexpr EventSeverity_t getSeverity(Event event) { return ((event >> 16) & 0xFF); } constexpr EventSeverity_t getSeverity(Event event) { return ((event >> 30) & 0b11); }
constexpr Event makeEvent(uint8_t subsystemId, UniqueEventId_t uniqueEventId, constexpr Event makeEvent(GroupId_t groupId, UniqueEventId_t uniqueEventId,
EventSeverity_t eventSeverity) { EventSeverity_t eventSeverity) {
return (eventSeverity << 16) + (subsystemId * 100) + uniqueEventId; return (eventSeverity << 30) | (groupId << 16) | uniqueEventId;
} }
} // namespace event } // namespace event

View File

@@ -44,7 +44,7 @@ ReturnValue_t Service5EventReporting::performService() {
} }
ReturnValue_t Service5EventReporting::generateEventReport(EventMessage message) { ReturnValue_t Service5EventReporting::generateEventReport(EventMessage message) {
EventReport report(message.getEventId(), message.getReporter(), message.getParameter1(), EventReport report(message.getEvent(), message.getReporter(), message.getParameter1(),
message.getParameter2()); message.getParameter2());
storeHelper.preparePacket(psbParams.serviceId, message.getSeverity(), tmHelper.sendCounter); storeHelper.preparePacket(psbParams.serviceId, message.getSeverity(), tmHelper.sendCounter);
storeHelper.setSourceDataSerializable(report); storeHelper.setSourceDataSerializable(report);

View File

@@ -17,17 +17,13 @@
*/ */
class EventReport : public SerializeIF { //!< [EXPORT] : [SUBSERVICE] 1, 2, 3, 4 class EventReport : public SerializeIF { //!< [EXPORT] : [SUBSERVICE] 1, 2, 3, 4
public: public:
EventReport(EventId_t reportId_, object_id_t objectId_, uint32_t parameter1_, EventReport(Event event_, object_id_t objectId_, uint32_t parameter1_, uint32_t parameter2_)
uint32_t parameter2_) : event(event_), objectId(objectId_), parameter1(parameter1_), parameter2(parameter2_) {}
: reportId(reportId_),
objectId(objectId_),
parameter1(parameter1_),
parameter2(parameter2_) {}
ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize, ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize,
SerializeIF::Endianness streamEndianness) const override { SerializeIF::Endianness streamEndianness) const override {
ReturnValue_t result = ReturnValue_t result =
SerializeAdapter::serialize(&reportId, buffer, size, maxSize, streamEndianness); SerializeAdapter::serialize(&event, buffer, size, maxSize, streamEndianness);
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
return result; return result;
} }
@@ -48,7 +44,7 @@ class EventReport : public SerializeIF { //!< [EXPORT] : [SUBSERVICE] 1, 2, 3,
size_t getSerializedSize() const override { size_t getSerializedSize() const override {
uint32_t size = 0; uint32_t size = 0;
size += SerializeAdapter::getSerializedSize(&reportId); size += SerializeAdapter::getSerializedSize(&event);
size += SerializeAdapter::getSerializedSize(&objectId); size += SerializeAdapter::getSerializedSize(&objectId);
size += SerializeAdapter::getSerializedSize(&parameter1); size += SerializeAdapter::getSerializedSize(&parameter1);
size += SerializeAdapter::getSerializedSize(&parameter2); size += SerializeAdapter::getSerializedSize(&parameter2);
@@ -61,7 +57,7 @@ class EventReport : public SerializeIF { //!< [EXPORT] : [SUBSERVICE] 1, 2, 3,
} }
private: private:
EventId_t reportId; Event event;
object_id_t objectId; object_id_t objectId;
uint32_t parameter1; uint32_t parameter1;
uint32_t parameter2; uint32_t parameter2;

View File

@@ -53,17 +53,17 @@ void fsfwPrint(sif::PrintLevel printType, const char *fmt, va_list arg) {
#endif #endif
if (printType == sif::PrintLevel::INFO_LEVEL) { if (printType == sif::PrintLevel::INFO_LEVEL) {
len += sprintf(bufferPosition + len, "INFO"); len += sprintf(bufferPosition + len, "INFO ");
} }
if (printType == sif::PrintLevel::DEBUG_LEVEL) { if (printType == sif::PrintLevel::DEBUG_LEVEL) {
len += sprintf(bufferPosition + len, "DEBUG"); len += sprintf(bufferPosition + len, "DEBUG ");
} }
if (printType == sif::PrintLevel::WARNING_LEVEL) { if (printType == sif::PrintLevel::WARNING_LEVEL) {
len += sprintf(bufferPosition + len, "WARNING"); len += sprintf(bufferPosition + len, "WARNING");
} }
if (printType == sif::PrintLevel::ERROR_LEVEL) { if (printType == sif::PrintLevel::ERROR_LEVEL) {
len += sprintf(bufferPosition + len, "ERROR"); len += sprintf(bufferPosition + len, "ERROR ");
} }
#if FSFW_COLORED_OUTPUT == 1 #if FSFW_COLORED_OUTPUT == 1
@@ -75,7 +75,7 @@ void fsfwPrint(sif::PrintLevel printType, const char *fmt, va_list arg) {
/* /*
* Log current time to terminal if desired. * Log current time to terminal if desired.
*/ */
len += sprintf(bufferPosition + len, " | %lu:%02lu:%02lu.%03lu | ", (unsigned long)now.hour, len += sprintf(bufferPosition + len, " | %02lu:%02lu:%02lu.%03lu | ", (unsigned long)now.hour,
(unsigned long)now.minute, (unsigned long)now.second, (unsigned long)now.minute, (unsigned long)now.second,
(unsigned long)now.usecond / 1000); (unsigned long)now.usecond / 1000);

View File

@@ -79,22 +79,36 @@ void SubsystemBase::executeTable(HybridIterator<ModeListEntry> tableIter, Submod
} }
if (healthHelper.healthTable->hasHealth(object)) { if (healthHelper.healthTable->hasHealth(object)) {
if (healthHelper.healthTable->isFaulty(object)) {
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND, HasModesIF::MODE_OFF, switch (healthHelper.healthTable->getHealth(object)) {
SUBMODE_NONE); case NEEDS_RECOVERY:
} else { case FAULTY:
if (modeHelper.isForced()) { case PERMANENT_FAULTY:
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND_FORCED, ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND, HasModesIF::MODE_OFF,
tableIter.value->getMode(), submodeToCommand); SUBMODE_NONE);
} else { break;
if (healthHelper.healthTable->isCommandable(object)) { case HEALTHY:
if (modeHelper.isForced()) {
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND_FORCED,
tableIter.value->getMode(), submodeToCommand);
} else {
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND, ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND,
tableIter.value->getMode(), submodeToCommand); tableIter.value->getMode(), submodeToCommand);
}
break;
case EXTERNAL_CONTROL:
if (modeHelper.isForced()) {
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND_FORCED,
tableIter.value->getMode(), submodeToCommand);
} else { } else {
continue; continue;
} }
} break;
default:
// This never happens
break;
} }
} else { } else {
ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND, ModeMessage::setModeMessage(&command, ModeMessage::CMD_MODE_COMMAND,
tableIter.value->getMode(), submodeToCommand); tableIter.value->getMode(), submodeToCommand);

View File

@@ -142,7 +142,7 @@ class TemperatureSensor : public AbstractTemperatureSensor {
deltaTime = (uptime.tv_sec + uptime.tv_usec / 1000000.) - deltaTime = (uptime.tv_sec + uptime.tv_usec / 1000000.) -
(uptimeOfOldTemperature.tv_sec + uptimeOfOldTemperature.tv_usec / 1000000.); (uptimeOfOldTemperature.tv_sec + uptimeOfOldTemperature.tv_usec / 1000000.);
deltaTemp = oldTemperature - outputTemperature; deltaTemp = oldTemperature - outputTemperature.value;
if (deltaTemp < 0) { if (deltaTemp < 0) {
deltaTemp = -deltaTemp; deltaTemp = -deltaTemp;
} }
@@ -160,13 +160,13 @@ class TemperatureSensor : public AbstractTemperatureSensor {
outputTemperature.setValid(PoolVariableIF::INVALID); outputTemperature.setValid(PoolVariableIF::INVALID);
outputTemperature = thermal::INVALID_TEMPERATURE; outputTemperature = thermal::INVALID_TEMPERATURE;
} else { } else {
oldTemperature = outputTemperature; oldTemperature = outputTemperature.value;
uptimeOfOldTemperature = uptime; uptimeOfOldTemperature = uptime;
} }
} }
public: public:
float getTemperature() { return outputTemperature; } float getTemperature() { return outputTemperature.value; }
bool isValid() { return outputTemperature.isValid(); } bool isValid() { return outputTemperature.isValid(); }