fsfw/src/fsfw/cfdp/CfdpHandler.cpp

59 lines
1.9 KiB
C++
Raw Normal View History

#include "fsfw/cfdp/CfdpHandler.h"
#include "fsfw/cfdp/CfdpMessage.h"
2022-02-02 10:29:30 +01:00
#include "fsfw/ipc/CommandMessage.h"
#include "fsfw/ipc/QueueFactory.h"
2022-02-02 10:29:30 +01:00
#include "fsfw/storagemanager/storeAddress.h"
#include "fsfw/tmtcservices/AcceptsTelemetryIF.h"
object_id_t CfdpHandler::packetSource = 0;
object_id_t CfdpHandler::packetDestination = 0;
CfdpHandler::CfdpHandler(object_id_t setObjectId, CFDPDistributor* dist)
2022-02-02 10:29:30 +01:00
: 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;
}
CfdpHandler::~CfdpHandler() = default;
ReturnValue_t CfdpHandler::initialize() {
2022-02-02 10:29:30 +01:00
ReturnValue_t result = SystemObject::initialize();
2022-08-16 01:08:26 +02:00
if (result != returnvalue::OK) {
2022-02-02 10:29:30 +01:00
return result;
}
this->distributor->registerHandler(this);
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
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;
#else
2022-02-02 10:29:30 +01:00
sif::printDebug("CFDPHandler::handleRequest\n");
#endif /* !FSFW_CPP_OSTREAM_ENABLED == 1 */
#endif
2022-02-02 10:29:30 +01:00
// TODO read out packet from store using storeId
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
ReturnValue_t CfdpHandler::performOperation(uint8_t opCode) {
2022-08-16 01:08:26 +02:00
ReturnValue_t status = returnvalue::OK;
2022-02-02 10:29:30 +01:00
CommandMessage currentMessage;
2022-08-16 01:08:26 +02:00
for (status = this->requestQueue->receiveMessage(&currentMessage); status == returnvalue::OK;
2022-02-02 10:29:30 +01:00
status = this->requestQueue->receiveMessage(&currentMessage)) {
store_address_t storeId = CfdpMessage::getStoreId(&currentMessage);
2022-02-02 10:29:30 +01:00
this->handleRequest(storeId);
}
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
uint16_t CfdpHandler::getIdentifier() { return 0; }
MessageQueueId_t CfdpHandler::getRequestQueue() { return this->requestQueue->getId(); }