Add PUS TC scheduler service #594
|
@ -6,6 +6,7 @@
|
||||||
#include <fsfw/tmtcservices/TmTcMessage.h>
|
#include <fsfw/tmtcservices/TmTcMessage.h>
|
||||||
|
|
||||||
#include "fsfw/FSFW.h"
|
#include "fsfw/FSFW.h"
|
||||||
|
#include "fsfw/returnvalues/FwClassIds.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief: PUS-Service 11 - Telecommand scheduling.
|
* @brief: PUS-Service 11 - Telecommand scheduling.
|
||||||
|
@ -34,8 +35,12 @@
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
class Service11TelecommandScheduling final : public PusServiceBase {
|
class Service11TelecommandScheduling final : public PusServiceBase {
|
||||||
public:
|
public:
|
||||||
|
static constexpr uint8_t CLASS_ID = CLASS_ID::PUS_SERVICE_11;
|
||||||
|
|
||||||
|
static constexpr ReturnValue_t INVALID_TYPE_TIME_WINDOW =
|
||||||
|
HasReturnvaluesIF::makeReturnCode(CLASS_ID, 1);
|
||||||
// The types of PUS-11 subservices
|
// The types of PUS-11 subservices
|
||||||
enum Subservice {
|
enum Subservice : uint8_t {
|
||||||
ENABLE_SCHEDULING = 1,
|
ENABLE_SCHEDULING = 1,
|
||||||
DISABLE_SCHEDULING = 2,
|
DISABLE_SCHEDULING = 2,
|
||||||
RESET_SCHEDULING = 3,
|
RESET_SCHEDULING = 3,
|
||||||
|
@ -103,31 +108,31 @@ class Service11TelecommandScheduling final : public PusServiceBase {
|
||||||
* @brief Logic to be performed on an incoming TC[11,4].
|
* @brief Logic to be performed on an incoming TC[11,4].
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t doInsertActivity(void);
|
ReturnValue_t doInsertActivity(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Logic to be performed on an incoming TC[11,5].
|
* @brief Logic to be performed on an incoming TC[11,5].
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t doDeleteActivity(void);
|
ReturnValue_t doDeleteActivity(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Logic to be performed on an incoming TC[11,6].
|
* @brief Logic to be performed on an incoming TC[11,6].
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t doFilterDeleteActivity(void);
|
ReturnValue_t doFilterDeleteActivity(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Logic to be performed on an incoming TC[11,7].
|
* @brief Logic to be performed on an incoming TC[11,7].
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t doTimeshiftActivity(void);
|
ReturnValue_t doTimeshiftActivity(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Logic to be performed on an incoming TC[11,8].
|
* @brief Logic to be performed on an incoming TC[11,8].
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t doFilterTimeshiftActivity(void);
|
ReturnValue_t doFilterTimeshiftActivity(const uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Deserializes a generic type from a payload buffer by using the FSFW
|
* @brief Deserializes a generic type from a payload buffer by using the FSFW
|
||||||
|
@ -158,7 +163,7 @@ class Service11TelecommandScheduling final : public PusServiceBase {
|
||||||
* @param [out] requestId Request ID
|
* @param [out] requestId Request ID
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t getRequestIdFromData(const uint8_t* data, size_t& dataSize, uint64_t& requestId);
|
ReturnValue_t getRequestIdFromData(const uint8_t*& data, size_t& dataSize, uint64_t& requestId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Builds the Request ID from its three elements.
|
* @brief Builds the Request ID from its three elements.
|
||||||
|
@ -177,9 +182,10 @@ class Service11TelecommandScheduling final : public PusServiceBase {
|
||||||
* @param [out] itEnd End of filter range
|
* @param [out] itEnd End of filter range
|
||||||
* @return RETURN_OK if successful
|
* @return RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t getMapFilterFromData(const uint8_t* data, size_t dataSize, TcMapIter& itBegin,
|
ReturnValue_t getMapFilterFromData(const uint8_t*& data, size_t& size, TcMapIter& itBegin,
|
||||||
TcMapIter& itEnd);
|
TcMapIter& itEnd);
|
||||||
|
|
||||||
|
ReturnValue_t handleInvalidData(const char* ctx);
|
||||||
/**
|
/**
|
||||||
* @brief Prints content of multimap. Use for simple debugging only.
|
* @brief Prints content of multimap. Use for simple debugging only.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
|
static constexpr auto DEF_END = SerializeIF::Endianness::BIG;
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline Service11TelecommandScheduling<MAX_NUM_TCS>::Service11TelecommandScheduling(
|
inline Service11TelecommandScheduling<MAX_NUM_TCS>::Service11TelecommandScheduling(
|
||||||
object_id_t objectId, uint16_t apid, uint8_t serviceId, AcceptsTelecommandsIF *tcRecipient,
|
object_id_t objectId, uint16_t apid, uint8_t serviceId, AcceptsTelecommandsIF *tcRecipient,
|
||||||
|
@ -28,17 +30,23 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::handleRequest(
|
||||||
sif::printInfo("PUS11::handleRequest: Handling request %d\n", subservice);
|
sif::printInfo("PUS11::handleRequest: Handling request %d\n", subservice);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
// Get de-serialized Timestamp
|
||||||
|
const uint8_t *data = currentPacket.getApplicationData();
|
||||||
|
size_t size = currentPacket.getApplicationDataSize();
|
||||||
|
if (data == nullptr) {
|
||||||
|
return handleInvalidData("handleRequest");
|
||||||
|
}
|
||||||
switch (subservice) {
|
switch (subservice) {
|
||||||
case Subservice::INSERT_ACTIVITY:
|
case Subservice::INSERT_ACTIVITY:
|
||||||
return doInsertActivity();
|
return doInsertActivity(data, size);
|
||||||
case Subservice::DELETE_ACTIVITY:
|
case Subservice::DELETE_ACTIVITY:
|
||||||
return doDeleteActivity();
|
return doDeleteActivity(data, size);
|
||||||
case Subservice::FILTER_DELETE_ACTIVITY:
|
case Subservice::FILTER_DELETE_ACTIVITY:
|
||||||
return doFilterDeleteActivity();
|
return doFilterDeleteActivity(data, size);
|
||||||
case Subservice::TIMESHIFT_ACTIVITY:
|
case Subservice::TIMESHIFT_ACTIVITY:
|
||||||
return doTimeshiftActivity();
|
return doTimeshiftActivity(data, size);
|
||||||
case Subservice::FILTER_TIMESHIFT_ACTIVITY:
|
case Subservice::FILTER_TIMESHIFT_ACTIVITY:
|
||||||
return doFilterTimeshiftActivity();
|
return doFilterTimeshiftActivity(data, size);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -105,17 +113,15 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
gaisser marked this conversation as resolved
|
|||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doInsertActivity(void) {
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doInsertActivity(
|
||||||
// Get de-serialized Timestamp
|
const uint8_t *data, size_t size) {
|
||||||
const uint8_t *data = currentPacket.getApplicationData();
|
|
||||||
size_t dataSize = currentPacket.getApplicationDataSize();
|
|
||||||
|
|
||||||
uint32_t timestamp = 0;
|
uint32_t timestamp = 0;
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(timestamp, data, dataSize) != RETURN_OK) {
|
const uint8_t *initData = data;
|
||||||
return RETURN_FAILED;
|
size_t initSz = size;
|
||||||
|
ReturnValue_t result = SerializeAdapter::deSerialize(×tamp, &data, &size, DEF_END);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
data += sizeof(uint32_t); // move ptr past timestamp (for later)
|
|
||||||
dataSize -= sizeof(uint32_t); // and reduce size accordingly
|
|
||||||
|
|
||||||
// Insert possible if sched. time is above margin
|
// Insert possible if sched. time is above margin
|
||||||
// (See requirement for Time margin)
|
// (See requirement for Time margin)
|
||||||
|
@ -135,8 +141,8 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doInsertActivi
|
||||||
}
|
}
|
||||||
|
|
||||||
// store currentPacket and receive the store address
|
// store currentPacket and receive the store address
|
||||||
store_address_t addr;
|
store_address_t addr{};
|
||||||
if (tcStore->addData(&addr, data, dataSize) != RETURN_OK ||
|
if (tcStore->addData(&addr, initData, initSz) != RETURN_OK ||
|
||||||
addr.raw == storeId::INVALID_STORE_ADDRESS) {
|
addr.raw == storeId::INVALID_STORE_ADDRESS) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "Service11TelecommandScheduling::doInsertActivity: Adding data to TC Store failed"
|
sif::error << "Service11TelecommandScheduling::doInsertActivity: Adding data to TC Store failed"
|
||||||
|
@ -172,14 +178,13 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doInsertActivi
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doDeleteActivity(void) {
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doDeleteActivity(
|
||||||
const uint8_t *data = currentPacket.getApplicationData();
|
const uint8_t *data, size_t size) {
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Return returncode from getRequestId Return returncode from getRequestId
|
|||||||
size_t dataSize = currentPacket.getApplicationDataSize();
|
|
||||||
|
|
||||||
// Get request ID
|
// Get request ID
|
||||||
uint64_t requestId;
|
uint64_t requestId;
|
||||||
if (getRequestIdFromData(data, dataSize, requestId) != RETURN_OK) {
|
ReturnValue_t result = getRequestIdFromData(data, size, requestId);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG
|
// DEBUG
|
||||||
|
@ -240,16 +245,15 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doDeleteActivi
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doFilterDeleteActivity(void) {
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doFilterDeleteActivity(
|
||||||
const uint8_t *data = currentPacket.getApplicationData();
|
const uint8_t *data, size_t size) {
|
||||||
size_t dataSize = currentPacket.getApplicationDataSize();
|
|
||||||
|
|
||||||
TcMapIter itBegin;
|
TcMapIter itBegin;
|
||||||
TcMapIter itEnd;
|
TcMapIter itEnd;
|
||||||
|
|
||||||
gaisser marked this conversation as resolved
gaisser
commented
Return returncode from getMapFilter... Return returncode from getMapFilter...
|
|||||||
|
ReturnValue_t result = getMapFilterFromData(data, size, itBegin, itEnd);
|
||||||
// get the filter window as map range via dedicated method
|
// get the filter window as map range via dedicated method
|
||||||
if (getMapFilterFromData(data, dataSize, itBegin, itEnd) != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
return RETURN_FAILED;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int deletedTCs = 0;
|
int deletedTCs = 0;
|
||||||
|
@ -290,26 +294,22 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doFilterDelete
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doTimeshiftActivity(void) {
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doTimeshiftActivity(
|
||||||
const uint8_t *data = currentPacket.getApplicationData();
|
const uint8_t *data, size_t size) {
|
||||||
size_t dataSize = currentPacket.getApplicationDataSize();
|
|
||||||
|
|
||||||
// Get relative time
|
// Get relative time
|
||||||
uint32_t relativeTime = 0;
|
uint32_t relativeTime = 0;
|
||||||
gaisser marked this conversation as resolved
gaisser
commented
Return the returncode of deSerialize instead of a generic Failed Return the returncode of deSerialize instead of a generic Failed
muellerr
commented
done done
|
|||||||
if (deserializeViaFsfwInterface<uint32_t>(relativeTime, data, dataSize) != RETURN_OK) {
|
ReturnValue_t result = SerializeAdapter::deSerialize(&relativeTime, &data, &size, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Returncode Returncode
muellerr
commented
added added
|
|||||||
}
|
}
|
||||||
if (relativeTime == 0) {
|
if (relativeTime == 0) {
|
||||||
return RETURN_FAILED;
|
return RETURN_FAILED;
|
||||||
}
|
}
|
||||||
// TODO further check sanity of the relative time?
|
// TODO further check sanity of the relative time?
|
||||||
|
|
||||||
data += sizeof(uint32_t);
|
|
||||||
dataSize -= sizeof(uint32_t);
|
|
||||||
|
|
||||||
// Get request ID
|
// Get request ID
|
||||||
uint64_t requestId;
|
uint64_t requestId;
|
||||||
if (getRequestIdFromData(data, dataSize, requestId) != RETURN_OK) {
|
if (getRequestIdFromData(data, size, requestId) != RETURN_OK) {
|
||||||
return RETURN_FAILED;
|
return RETURN_FAILED;
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Return of returncode from getRequestIdFromData would be better Return of returncode from getRequestIdFromData would be better
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,26 +371,24 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doTimeshiftAct
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doFilterTimeshiftActivity(void) {
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::doFilterTimeshiftActivity(
|
||||||
const uint8_t *data = currentPacket.getApplicationData();
|
const uint8_t *data, size_t size) {
|
||||||
uint32_t dataSize = currentPacket.getApplicationDataSize();
|
|
||||||
|
|
||||||
// Get relative time
|
// Get relative time
|
||||||
uint32_t relativeTime = 0;
|
uint32_t relativeTime = 0;
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(relativeTime, data, dataSize) != RETURN_OK) {
|
ReturnValue_t result = SerializeAdapter::deSerialize(&relativeTime, &data, &size, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Return the returncode of deSerialize instead of a generic Failed Return the returncode of deSerialize instead of a generic Failed
|
|||||||
if (relativeTime == 0) {
|
if (relativeTime == 0) {
|
||||||
return RETURN_FAILED;
|
return RETURN_FAILED;
|
||||||
}
|
}
|
||||||
data += sizeof(uint32_t);
|
|
||||||
dataSize -= sizeof(uint32_t);
|
|
||||||
|
|
||||||
// Do time window
|
// Do time window
|
||||||
TcMapIter itBegin;
|
TcMapIter itBegin;
|
||||||
TcMapIter itEnd;
|
TcMapIter itEnd;
|
||||||
if (getMapFilterFromData(data, dataSize, itBegin, itEnd) != RETURN_OK) {
|
result = getMapFilterFromData(data, size, itBegin, itEnd);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
gaisser marked this conversation as resolved
gaisser
commented
Return the returncode of getMapFilterFromData instead of a generic Failed Return the returncode of getMapFilterFromData instead of a generic Failed
|
|||||||
int shiftedItemsCount = 0;
|
int shiftedItemsCount = 0;
|
||||||
|
@ -438,27 +436,23 @@ inline uint64_t Service11TelecommandScheduling<MAX_NUM_TCS>::getRequestIdFromDat
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getRequestIdFromData(
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getRequestIdFromData(
|
||||||
const uint8_t *data, size_t &dataSize, uint64_t &requestId) {
|
const uint8_t *&data, size_t &dataSize, uint64_t &requestId) {
|
||||||
uint32_t srcId = 0;
|
uint32_t srcId = 0;
|
||||||
uint16_t apid = 0;
|
uint16_t apid = 0;
|
||||||
uint16_t ssc = 0;
|
uint16_t ssc = 0;
|
||||||
|
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(srcId, data, dataSize) != RETURN_OK) {
|
ReturnValue_t result = SerializeAdapter::deSerialize(&srcId, &data, &dataSize, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Return the returncode of deSerialize instead of a generic Failed Return the returncode of deSerialize instead of a generic Failed
|
|||||||
|
result = SerializeAdapter::deSerialize(&apid, &data, &dataSize, DEF_END);
|
||||||
data += sizeof(uint32_t);
|
if (result != RETURN_OK) {
|
||||||
dataSize -= sizeof(uint32_t);
|
return result;
|
||||||
if (deserializeViaFsfwInterface<uint16_t>(apid, data, dataSize) != RETURN_OK) {
|
|
||||||
return RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
|
result = SerializeAdapter::deSerialize(&ssc, &data, &dataSize, DEF_END);
|
||||||
data += sizeof(uint32_t);
|
if (result != RETURN_OK) {
|
||||||
gaisser marked this conversation as resolved
Outdated
gaisser
commented
Return the returncode of deSerialize instead of a generic Failed Return the returncode of deSerialize instead of a generic Failed
|
|||||||
dataSize -= sizeof(uint32_t);
|
return result;
|
||||||
if (deserializeViaFsfwInterface<uint16_t>(ssc, data, dataSize) != RETURN_OK) {
|
|
||||||
return RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
requestId = buildRequestId(srcId, apid, ssc);
|
requestId = buildRequestId(srcId, apid, ssc);
|
||||||
|
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
|
@ -477,16 +471,17 @@ inline uint64_t Service11TelecommandScheduling<MAX_NUM_TCS>::buildRequestId(uint
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFromData(
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFromData(
|
||||||
const uint8_t *data, size_t dataSize, TcMapIter &itBegin, TcMapIter &itEnd) {
|
const uint8_t *&data, size_t &dataSize, TcMapIter &itBegin, TcMapIter &itEnd) {
|
||||||
// get filter type first
|
// get filter type first
|
||||||
uint32_t typeRaw;
|
uint32_t typeRaw = 0;
|
||||||
if (deserializeViaFsfwInterface(typeRaw, data, dataSize) != RETURN_OK) {
|
ReturnValue_t result = SerializeAdapter::deSerialize(&typeRaw, &data, &dataSize, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
// can be modified as the uint8_t pointer is passed by value (copy of ptr is modified)
|
|
||||||
data += sizeof(uint32_t);
|
|
||||||
dataSize -= sizeof(uint32_t);
|
|
||||||
|
|
||||||
|
if (typeRaw > 3) {
|
||||||
|
return INVALID_TYPE_TIME_WINDOW;
|
||||||
|
}
|
||||||
TypeOfTimeWindow type = static_cast<TypeOfTimeWindow>(typeRaw);
|
TypeOfTimeWindow type = static_cast<TypeOfTimeWindow>(typeRaw);
|
||||||
|
|
||||||
// we now have the type of delete activity - so now we set the range to delete,
|
// we now have the type of delete activity - so now we set the range to delete,
|
||||||
|
@ -501,9 +496,10 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFr
|
||||||
}
|
}
|
||||||
|
|
||||||
case TypeOfTimeWindow::FROM_TIMETAG: {
|
case TypeOfTimeWindow::FROM_TIMETAG: {
|
||||||
uint32_t fromTimestamp;
|
uint32_t fromTimestamp = 0;
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(fromTimestamp, data, dataSize) != RETURN_OK) {
|
result = SerializeAdapter::deSerialize(&fromTimestamp, &data, &dataSize, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
itBegin = telecommandMap.begin();
|
itBegin = telecommandMap.begin();
|
||||||
|
@ -517,8 +513,9 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFr
|
||||||
|
|
||||||
case TypeOfTimeWindow::TO_TIMETAG: {
|
case TypeOfTimeWindow::TO_TIMETAG: {
|
||||||
uint32_t toTimestamp;
|
uint32_t toTimestamp;
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(toTimestamp, data, dataSize) != RETURN_OK) {
|
result = SerializeAdapter::deSerialize(&toTimestamp, &data, &dataSize, DEF_END);
|
||||||
return RETURN_FAILED;
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
itBegin = telecommandMap.begin();
|
itBegin = telecommandMap.begin();
|
||||||
itEnd = telecommandMap.begin();
|
itEnd = telecommandMap.begin();
|
||||||
|
@ -532,14 +529,15 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFr
|
||||||
uint32_t fromTimestamp;
|
uint32_t fromTimestamp;
|
||||||
uint32_t toTimestamp;
|
uint32_t toTimestamp;
|
||||||
|
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(fromTimestamp, data, dataSize) != RETURN_OK) {
|
result = SerializeAdapter::deSerialize(&fromTimestamp, &data, &dataSize,
|
||||||
return RETURN_FAILED;
|
SerializeIF::Endianness::BIG);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
data += sizeof(uint32_t);
|
result = SerializeAdapter::deSerialize(&toTimestamp, &data, &dataSize,
|
||||||
dataSize -= sizeof(uint32_t);
|
SerializeIF::Endianness::BIG);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
if (deserializeViaFsfwInterface<uint32_t>(toTimestamp, data, dataSize) != RETURN_OK) {
|
return result;
|
||||||
return RETURN_FAILED;
|
|
||||||
}
|
}
|
||||||
itBegin = telecommandMap.begin();
|
itBegin = telecommandMap.begin();
|
||||||
itEnd = telecommandMap.begin();
|
itEnd = telecommandMap.begin();
|
||||||
|
@ -568,25 +566,16 @@ inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::getMapFilterFr
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
template <typename T>
|
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::handleInvalidData(
|
||||||
inline ReturnValue_t Service11TelecommandScheduling<MAX_NUM_TCS>::deserializeViaFsfwInterface(
|
const char *ctx) {
|
||||||
T &output, const uint8_t *buf, size_t bufsize) {
|
|
||||||
if (buf == nullptr) {
|
|
||||||
#if FSFW_VERBOSE_LEVEL >= 1
|
#if FSFW_VERBOSE_LEVEL >= 1
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
gaisser marked this conversation as resolved
gaisser
commented
Is this extra Wrapper even necessary? Is this extra Wrapper even necessary?
muellerr
commented
wrapper removed, nullptr checked moved up top and wrapper removed, nullptr checked moved up top and `SerializeAdapter::deSerialize` called directly now.
|
|||||||
sif::warning << "Service11TelecommandScheduling::deserializeViaFsfwInterface: "
|
sif::warning << "Service11TelecommandScheduling:: " << ctx << ": Invalid buffer" << std::endl;
|
||||||
"Invalid buffer"
|
|
||||||
<< std::endl;
|
|
||||||
#else
|
#else
|
||||||
sif::printWarning(
|
sif::printWarning("Service11TelecommandScheduling::%s: Invalid buffer\n", ctx);
|
||||||
"Service11TelecommandScheduling::deserializeViaFsfwInterface: "
|
|
||||||
"Invalid buffer\n");
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
return RETURN_FAILED;
|
return RETURN_FAILED;
|
||||||
}
|
|
||||||
|
|
||||||
return SerializeAdapter::deSerialize<T>(&output, &buf, &bufsize, SerializeIF::Endianness::BIG);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t MAX_NUM_TCS>
|
template <size_t MAX_NUM_TCS>
|
||||||
|
|
|
@ -72,6 +72,7 @@ enum : uint8_t {
|
||||||
DLE_ENCODER, // DLEE
|
DLE_ENCODER, // DLEE
|
||||||
PUS_SERVICE_3, // PUS3
|
PUS_SERVICE_3, // PUS3
|
||||||
PUS_SERVICE_9, // PUS9
|
PUS_SERVICE_9, // PUS9
|
||||||
|
PUS_SERVICE_11, // PUS11
|
||||||
FILE_SYSTEM, // FILS
|
FILE_SYSTEM, // FILS
|
||||||
LINUX_OSAL, // UXOS
|
LINUX_OSAL, // UXOS
|
||||||
HAL_SPI, // HSPI
|
HAL_SPI, // HSPI
|
||||||
|
|
Loading…
Reference in New Issue
Block a user
Return the returncode of deSerialize instead of a generic Failed