Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
0b17a2e74e | |||
ec1d64e061 | |||
a16b77daf0 | |||
830b907910 | |||
b762f97bfb | |||
5bd3abed8b | |||
eb46f0c473 | |||
15d69e64f3 | |||
d74bcbb1f8 | |||
c00cb1680d | |||
7109422e2c | |||
efd12544df | |||
b9fbb4fd4c | |||
9368ae81e5 | |||
618f76ae78 | |||
ee2f8d6956 |
@ -46,18 +46,14 @@ class ExtendedControllerBase : public ControllerBase,
|
||||
*/
|
||||
virtual void performControlOperation() = 0;
|
||||
|
||||
/* Handle the four messages mentioned above */
|
||||
// Handle the four messages mentioned above
|
||||
void handleQueue() override;
|
||||
|
||||
/* HasActionsIF overrides */
|
||||
// HasActionsIF overrides
|
||||
virtual ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
|
||||
const uint8_t* data, size_t size) override;
|
||||
|
||||
/* HasLocalDatapoolIF overrides */
|
||||
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
||||
virtual object_id_t getObjectId() const override;
|
||||
virtual uint32_t getPeriodicOperationFrequency() const override;
|
||||
|
||||
// HasLocalDatapoolIF overrides
|
||||
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||
LocalDataPoolManager& poolManager) override = 0;
|
||||
virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override = 0;
|
||||
@ -65,6 +61,12 @@ class ExtendedControllerBase : public ControllerBase,
|
||||
// Mode abstract functions
|
||||
virtual ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
||||
uint32_t* msToReachTheMode) override = 0;
|
||||
|
||||
virtual LocalDataPoolManager* getHkManagerHandle() override;
|
||||
virtual object_id_t getObjectId() const override;
|
||||
virtual uint32_t getPeriodicOperationFrequency() const override;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif /* FSFW_CONTROLLER_EXTENDEDCONTROLLERBASE_H_ */
|
||||
|
@ -1,3 +1,4 @@
|
||||
target_sources(
|
||||
${LIB_FSFW_NAME} PRIVATE TcPacketPusBase.cpp TcPacketPus.cpp
|
||||
TcPacketStoredBase.cpp TcPacketStoredPus.cpp)
|
||||
${LIB_FSFW_NAME}
|
||||
PRIVATE TcPacketPusBase.cpp TcPacketPus.cpp TcPacketStoredBase.cpp
|
||||
TcPacketStoredPus.cpp TcPacketSerializer.cpp)
|
||||
|
@ -22,7 +22,7 @@ class TcPacketPusBase : public SpacePacketBase, virtual public RedirectableDataP
|
||||
friend class TcPacketStoredBase;
|
||||
|
||||
public:
|
||||
enum AckField {
|
||||
enum AckField : uint8_t {
|
||||
//! No acknowledgements are expected.
|
||||
ACK_NONE = 0b0000,
|
||||
//! Acknowledgements on acceptance are expected.
|
||||
|
42
src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp
Normal file
42
src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
#include "TcPacketSerializer.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
TcPacketSerializer::TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg)
|
||||
: TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {}
|
||||
|
||||
ReturnValue_t TcPacketSerializer::serialize(uint8_t** buffer, size_t* size, size_t maxSize,
|
||||
Endianness streamEndianness) const {
|
||||
if (*size + getSerializedSize() > maxSize) {
|
||||
return BUFFER_TOO_SHORT;
|
||||
}
|
||||
std::memcpy(*buffer, store, getSerializedSize());
|
||||
*buffer += getSerializedSize();
|
||||
*size += getSerializedSize();
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
size_t TcPacketSerializer::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; }
|
||||
|
||||
ReturnValue_t TcPacketSerializer::initialize() {
|
||||
if (getSerializedSize() > maxSize) {
|
||||
return SerializeIF::BUFFER_TOO_SHORT;
|
||||
}
|
||||
ReturnValue_t result = setData(store, maxSize);
|
||||
if (result != RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice,
|
||||
PusConfig::PUS_VERSION, cfg.sourceId);
|
||||
if (cfg.appData != nullptr and cfg.appDataLen > 0) {
|
||||
std::memcpy(&tcData->appData, cfg.appData, cfg.appDataLen);
|
||||
}
|
||||
setPacketDataLength(calculateFullPacketLength(cfg.appDataLen) - sizeof(CCSDSPrimaryHeader) - 1);
|
||||
setErrorControl();
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t TcPacketSerializer::deSerialize(const uint8_t** buffer, size_t* size,
|
||||
Endianness streamEndianness) {
|
||||
return RETURN_FAILED;
|
||||
}
|
43
src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h
Normal file
43
src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h
Normal file
@ -0,0 +1,43 @@
|
||||
#ifndef FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_
|
||||
#define FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#include "TcPacketPus.h"
|
||||
#include "fsfw/serialize/SerializeIF.h"
|
||||
|
||||
struct PusConfig {
|
||||
uint16_t apid = 0;
|
||||
uint8_t service = 0;
|
||||
uint8_t subservice = 0;
|
||||
uint16_t sequenceCount = 0;
|
||||
uint16_t sourceId = 0;
|
||||
uint8_t* appData = nullptr;
|
||||
size_t appDataLen = 0;
|
||||
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
|
||||
static constexpr pus::PusVersion PUS_VERSION = pus::PusVersion::PUS_C_VERSION;
|
||||
#else
|
||||
static constexpr pus::PusVersion PUS_VERSION = pus::PusVersion::PUS_A_VERSION;
|
||||
#endif
|
||||
uint8_t ack = TcPacketPus::ACK_ALL;
|
||||
};
|
||||
|
||||
class TcPacketSerializer : public TcPacketPus, public SerializeIF, public HasReturnvaluesIF {
|
||||
public:
|
||||
TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg);
|
||||
|
||||
ReturnValue_t initialize();
|
||||
|
||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize,
|
||||
Endianness streamEndianness) const override;
|
||||
size_t getSerializedSize() const override;
|
||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||
Endianness streamEndianness) override;
|
||||
|
||||
private:
|
||||
uint8_t* store;
|
||||
size_t maxSize;
|
||||
PusConfig& cfg;
|
||||
};
|
||||
|
||||
#endif /* FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_ */
|
Reference in New Issue
Block a user