fsfw/src/fsfw_tests/integration/devices/TestEchoComIF.cpp

83 lines
2.6 KiB
C++
Raw Normal View History

2021-10-17 23:27:31 +02:00
#include "TestEchoComIF.h"
#include <fsfw/serialize/SerializeAdapter.h>
#include <fsfw/serviceinterface/ServiceInterface.h>
#include <fsfw/tmtcpacket/pus/tm.h>
2022-02-02 10:29:30 +01:00
#include <fsfw/tmtcservices/CommandingServiceBase.h>
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
#include "TestCookie.h"
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
TestEchoComIF::TestEchoComIF(object_id_t objectId) : SystemObject(objectId) {}
2021-10-17 23:27:31 +02:00
TestEchoComIF::~TestEchoComIF() {}
2022-02-02 10:29:30 +01:00
ReturnValue_t TestEchoComIF::initializeInterface(CookieIF *cookie) {
TestCookie *dummyCookie = dynamic_cast<TestCookie *>(cookie);
if (dummyCookie == nullptr) {
2021-10-17 23:27:31 +02:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::warning << "TestEchoComIF::initializeInterface: Invalid cookie!" << std::endl;
2021-10-17 23:27:31 +02:00
#else
2022-02-02 10:29:30 +01:00
sif::printWarning("TestEchoComIF::initializeInterface: Invalid cookie!\n");
2021-10-17 23:27:31 +02:00
#endif
2022-02-02 10:29:30 +01:00
return NULLPOINTER;
}
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
auto resultPair =
replyMap.emplace(dummyCookie->getAddress(), ReplyBuffer(dummyCookie->getReplyMaxLen()));
if (not resultPair.second) {
return HasReturnvaluesIF::RETURN_FAILED;
}
return RETURN_OK;
2021-10-17 23:27:31 +02:00
}
2022-02-02 10:29:30 +01:00
ReturnValue_t TestEchoComIF::sendMessage(CookieIF *cookie, const uint8_t *sendData,
size_t sendLen) {
TestCookie *dummyCookie = dynamic_cast<TestCookie *>(cookie);
if (dummyCookie == nullptr) {
return NULLPOINTER;
}
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
ReplyBuffer &replyBuffer = replyMap.find(dummyCookie->getAddress())->second;
if (sendLen > replyBuffer.capacity()) {
2021-10-17 23:27:31 +02:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::warning << "TestEchoComIF::sendMessage: Send length " << sendLen
<< " larger than "
"current reply buffer length!"
<< std::endl;
2021-10-17 23:27:31 +02:00
#else
2022-02-02 10:29:30 +01:00
sif::printWarning(
"TestEchoComIF::sendMessage: Send length %d larger than current "
"reply buffer length!\n",
sendLen);
2021-10-17 23:27:31 +02:00
#endif
2022-02-02 10:29:30 +01:00
return HasReturnvaluesIF::RETURN_FAILED;
}
replyBuffer.resize(sendLen);
memcpy(replyBuffer.data(), sendData, sendLen);
return RETURN_OK;
2021-10-17 23:27:31 +02:00
}
2022-02-02 10:29:30 +01:00
ReturnValue_t TestEchoComIF::getSendSuccess(CookieIF *cookie) { return RETURN_OK; }
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
ReturnValue_t TestEchoComIF::requestReceiveMessage(CookieIF *cookie, size_t requestLen) {
return RETURN_OK;
2021-10-17 23:27:31 +02:00
}
2022-02-02 10:29:30 +01:00
ReturnValue_t TestEchoComIF::readReceivedMessage(CookieIF *cookie, uint8_t **buffer, size_t *size) {
TestCookie *dummyCookie = dynamic_cast<TestCookie *>(cookie);
if (dummyCookie == nullptr) {
return NULLPOINTER;
}
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
ReplyBuffer &replyBuffer = replyMap.find(dummyCookie->getAddress())->second;
*buffer = replyBuffer.data();
*size = replyBuffer.size();
2021-10-17 23:27:31 +02:00
2022-02-02 10:29:30 +01:00
dummyReplyCounter++;
if (dummyReplyCounter == 10) {
// add anything that needs to be read periodically by dummy handler
dummyReplyCounter = 0;
}
return RETURN_OK;
2021-10-17 23:27:31 +02:00
}