fsfw/src/fsfw/parameters/ParameterMessage.h

62 lines
2.6 KiB
C++

#ifndef FSFW_PARAMETERS_PARAMETERMESSAGE_H_
#define FSFW_PARAMETERS_PARAMETERMESSAGE_H_
#include "../ipc/CommandMessage.h"
#include "../storagemanager/StorageManagerIF.h"
#include "HasParametersIF.h"
/**
* @brief ParameterMessage interface
* @details
* General structure of a parameter message:
* 1. 4-byte Object ID
* 2. 4-byte Parameter ID, first byte is Domain ID, second byte is unique
* identifier, third and fourth byte is linear index to start from
* 3. 4-byte Parameter Settings. First byte and second byte are the PTC and PFC
* ECSS type identifiers (see ECSS-E-ST-70-41C15 p.428 or Type class in
* globalfunctions). Third byte is the number of rows and fourth byte
* is the number of columns. For single variable parameters, this will
* be [1, 1].
*
*/
class ParameterMessage {
private:
ParameterMessage();
public:
static const uint8_t MESSAGE_ID = messagetypes::PARAMETER;
static const Command_t CMD_PARAMETER_LOAD = MAKE_COMMAND_ID(0x01);
static const Command_t CMD_PARAMETER_DUMP = MAKE_COMMAND_ID(0x02);
static const Command_t REPLY_PARAMETER_DUMP = MAKE_COMMAND_ID(0x03);
static ParameterId_t getParameterId(const CommandMessage* message);
static store_address_t getStoreId(const CommandMessage* message);
static void setParameterDumpCommand(CommandMessage* message, ParameterId_t id);
static void setParameterDumpReply(CommandMessage* message, ParameterId_t id,
store_address_t storageID);
/**
* Command to set a load parameter message. The CCSDS / ECSS type in
* form of a PTC and a PFC is expected. See ECSS-E-ST-70-41C15 p.428
* for all types or the Type class in globalfunctions.
* @param message
* @param id
* @param storeId
* @param ptc Type information according to CCSDS/ECSS standards
* @param pfc Type information according to CCSDS/ECSS standards
* @param rows Set number of rows in parameter set, minimum one.
* @param columns Set number of columns in parameter set, minimum one
*/
static void setParameterLoadCommand(CommandMessage* message, ParameterId_t id,
store_address_t storeId, uint8_t ptc, uint8_t pfc,
uint8_t rows, uint8_t columns);
static store_address_t getParameterLoadCommand(const CommandMessage* message,
ParameterId_t* parameterId, uint8_t* ptc,
uint8_t* pfc, uint8_t* rows, uint8_t* columns);
static void clear(CommandMessage* message);
};
#endif /* FSFW_PARAMETERS_PARAMETERMESSAGE_H_ */