2021-12-03 15:37:49 +01:00
|
|
|
#include "fsfw/cfdp/CFDPHandler.h"
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/cfdp/CFDPMessage.h"
|
|
|
|
#include "fsfw/ipc/CommandMessage.h"
|
2021-12-03 15:37:49 +01:00
|
|
|
#include "fsfw/ipc/QueueFactory.h"
|
|
|
|
#include "fsfw/objectmanager/ObjectManager.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/storagemanager/storeAddress.h"
|
|
|
|
#include "fsfw/tmtcservices/AcceptsTelemetryIF.h"
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
object_id_t CFDPHandler::packetSource = 0;
|
|
|
|
object_id_t CFDPHandler::packetDestination = 0;
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
CFDPHandler::CFDPHandler(object_id_t setObjectId, CFDPDistributor* dist)
|
|
|
|
: SystemObject(setObjectId) {
|
2022-02-19 16:14:02 +01:00
|
|
|
auto mqArgs = MqArgs(setObjectId, static_cast<void*>(this));
|
2022-02-22 10:17:56 +01:00
|
|
|
requestQueue = QueueFactory::instance()->createMessageQueue(
|
|
|
|
CFDP_HANDLER_MAX_RECEPTION, MessageQueueMessage::MAX_MESSAGE_SIZE, &mqArgs);
|
2022-02-02 10:29:30 +01:00
|
|
|
distributor = dist;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
CFDPHandler::~CFDPHandler() {}
|
|
|
|
|
|
|
|
ReturnValue_t CFDPHandler::initialize() {
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t result = SystemObject::initialize();
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
this->distributor->registerHandler(this);
|
|
|
|
return HasReturnvaluesIF::RETURN_OK;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t CFDPHandler::handleRequest(store_address_t storeId) {
|
|
|
|
#if FSFW_VERBOSE_LEVEL >= 1
|
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2022-02-02 10:29:30 +01:00
|
|
|
sif::debug << "CFDPHandler::handleRequest" << std::endl;
|
2021-12-03 15:37:49 +01:00
|
|
|
#else
|
2022-02-02 10:29:30 +01:00
|
|
|
sif::printDebug("CFDPHandler::handleRequest\n");
|
2021-12-03 15:37:49 +01:00
|
|
|
#endif /* !FSFW_CPP_OSTREAM_ENABLED == 1 */
|
|
|
|
#endif
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
// TODO read out packet from store using storeId
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
return RETURN_OK;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t CFDPHandler::performOperation(uint8_t opCode) {
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t status = RETURN_OK;
|
|
|
|
CommandMessage currentMessage;
|
|
|
|
for (status = this->requestQueue->receiveMessage(¤tMessage); status == RETURN_OK;
|
|
|
|
status = this->requestQueue->receiveMessage(¤tMessage)) {
|
|
|
|
store_address_t storeId = CFDPMessage::getStoreId(¤tMessage);
|
|
|
|
this->handleRequest(storeId);
|
|
|
|
}
|
|
|
|
return RETURN_OK;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
uint16_t CFDPHandler::getIdentifier() { return 0; }
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
MessageQueueId_t CFDPHandler::getRequestQueue() { return this->requestQueue->getId(); }
|