moved action parameters to a generic place to use them for HK TM
fsfw/fsfw/pipeline/head There was a failure building this commit Details

This commit is contained in:
Ulrich Mohr 2023-07-12 12:52:07 +02:00
parent d766469f1e
commit 3a433915f1
10 changed files with 37 additions and 19 deletions

View File

@ -6,7 +6,7 @@
#include <fsfw/serialize/SerializeIF.h>
#include "ActionMessage.h"
#include "ParameterIF.h"
#include <fsfw/introspection/HasTmTcParametersIF.h>
#ifdef FSFW_INTROSPECTION
@ -15,7 +15,7 @@
//TODO ActionId_t
class Action: public SerializeIF {
class Action: public SerializeIF, public HasTmTcParametersIF {
public:
#ifdef FSFW_INTROSPECTION
Action();
@ -30,7 +30,7 @@ class Action: public SerializeIF {
[[nodiscard]] virtual ReturnValue_t handle() = 0;
void registerParameter(ParameterIF *parameter);
void registerParameter(ParameterIF *parameter) override;
std::vector<ParameterIF *> const *getParameters() const;

View File

@ -1,5 +0,0 @@
#pragma once
class HousekeepingEntryIF {
};

View File

@ -16,3 +16,10 @@ HousekeepingSet::HousekeepingSet(GeneratesHousekeepingIF* owner, HousekeepingSet
owner->getHelper()->registerSet(this);
}
#endif
void HousekeepingSet::registerParameter(ParameterIF* parameter) {
parameterList.push_back(parameter);
}
std::vector<ParameterIF*> const* HousekeepingSet::getParameters() { return &parameterList; }

View File

@ -2,34 +2,37 @@
#include <fsfw/action/Action.h>
#include <fsfw/introspection/Enum.h>
#include <fsfw/introspection/HasTmTcParametersIF.h>
#include <fsfw/introspection/ParameterIF.h>
#include <cstdint>
#include "HousekeepingEntryIF.h"
class HousekeepingHelper;
class GeneratesHousekeepingIF;
using HousekeepingSetId_t = uint32_t;
class HousekeepingSet {
class HousekeepingSet : public HasTmTcParametersIF {
public:
#ifdef FSFW_INTROSPECTION
HousekeepingSet(GeneratesHousekeepingIF* owner);
void setEnum(EnumIF* theEnum);
#else
HousekeepingSet(GeneratesHousekeepingIF* owner, HousekeepingSetId_t id);
HousekeepingSet(GeneratesHousekeepingIF *owner, HousekeepingSetId_t id);
#endif
HousekeepingSetId_t getId() const { return id; }
void report(const Action* action = nullptr);
void registerParameter(ParameterIF* parameter) override;
std::vector<ParameterIF*> const* getParameters() override;
protected:
HousekeepingHelper* helper;
HousekeepingSetId_t id;
#ifdef FSFW_INTROSPECTION
const char* description;
#endif
std::vector<HousekeepingEntryIF*> variables;
std::vector<ParameterIF*> parameterList;
};

View File

@ -0,0 +1,12 @@
#pragma once
#include "ParameterIF.h"
#include <vector>
class HasTmTcParametersIF {
public:
~HasTmTcParametersIF() = default;
virtual void registerParameter(ParameterIF *parameter) = 0;
virtual std::vector<ParameterIF *> const *getParameters() const = 0;
};

View File

@ -2,7 +2,7 @@
#include <stdio.h>
#include "Action.h"
#include "HasTmTcParametersIF.h"
#include <fsfw/introspection/Types.h>
#include <fsfw/introspection/TypesHelper.h>
#include "ParameterIF.h"
@ -14,10 +14,10 @@ template <typename T>
class Parameter : public ParameterIF {
protected:
#ifdef FSFW_INTROSPECTION
Parameter(Action *owner, const char *name)
Parameter(HasTmTcParametersIF *owner, const char *name)
: name(name)
#else
Parameter(Action *owner)
Parameter(HasTmTcParametersIF *owner)
#endif
{
owner->registerParameter(this);
@ -25,11 +25,11 @@ class Parameter : public ParameterIF {
public:
#ifdef FSFW_INTROSPECTION
static Parameter createParameter(Action *owner, const char *name) {
static Parameter createParameter(HasTmTcParametersIF *owner, const char *name) {
return Parameter(owner, name);
}
#else
static Parameter createParameter(Action *owner) { return Parameter(owner); }
static Parameter createParameter(HasTmTcParametersIF *owner) { return Parameter(owner); }
#endif
bool isValid() override {

View File

@ -3,6 +3,7 @@
//maybe call them MIB types as these are the ones exposed to the MIB?
// Note: some DBs (Postgress, Mongo) only support signed 64bit integers. To have a common denominator, all integers are int64_t.
// As such, ther is no unsigned Type, as there can not be a uint64_t and uint32_t completely fits into int64_t
// Floating is IEEE double
namespace Types {
enum ParameterType { SIGNED, FLOATING, ENUM, UNSUPPORTED };
} // namespace Types

View File

@ -31,7 +31,7 @@ class enumHelper<true> {
return 0;
}
static std::vector<int64_t> getEnumValues() { return std::vector<int64_t>(); }
//TODO needed?: static std::vector<int64_t> getEnumValues() { return std::vector<int64_t>(); }
static std::vector<int64_t> getEnumValues(EnumIF *anEnum) {
std::vector<int64_t> vector;