Update Linux GPIO #20
@ -10,6 +10,7 @@ endif()
|
|||||||
option(FSFW_WARNING_SHADOW_LOCAL_GCC "Enable -Wshadow=local warning in GCC" ON)
|
option(FSFW_WARNING_SHADOW_LOCAL_GCC "Enable -Wshadow=local warning in GCC" ON)
|
||||||
# Options to exclude parts of the FSFW from compilation.
|
# Options to exclude parts of the FSFW from compilation.
|
||||||
option(FSFW_ADD_INTERNAL_TESTS "Add internal unit tests" ON)
|
option(FSFW_ADD_INTERNAL_TESTS "Add internal unit tests" ON)
|
||||||
|
option(FSFW_ADD_UNITTESTS "Add regular unittests. Requires Catch2" OFF)
|
||||||
option(FSFW_ADD_HAL "Add Hardware Abstraction Layer" ON)
|
option(FSFW_ADD_HAL "Add Hardware Abstraction Layer" ON)
|
||||||
|
|
||||||
# Optional sources
|
# Optional sources
|
||||||
@ -38,7 +39,7 @@ elseif(${CMAKE_CXX_STANDARD} LESS 11)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Backwards comptability
|
# Backwards comptability
|
||||||
if(OS_FSFW)
|
if(OS_FSFW AND NOT FSFW_OSAL)
|
||||||
message(WARNING "Please pass the FSFW OSAL as FSFW_OSAL instead of OS_FSFW")
|
message(WARNING "Please pass the FSFW OSAL as FSFW_OSAL instead of OS_FSFW")
|
||||||
set(FSFW_OSAL OS_FSFW)
|
set(FSFW_OSAL OS_FSFW)
|
||||||
endif()
|
endif()
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
|
#include "fsfw/FSFW.h"
|
||||||
|
#include "fsfw/serviceinterface.h"
|
||||||
#include "fsfw_hal/linux/UnixFileGuard.h"
|
#include "fsfw_hal/linux/UnixFileGuard.h"
|
||||||
|
|
||||||
|
#include <cerrno>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
UnixFileGuard::UnixFileGuard(std::string device, int* fileDescriptor, int flags,
|
UnixFileGuard::UnixFileGuard(std::string device, int* fileDescriptor, int flags,
|
||||||
std::string diagnosticPrefix):
|
std::string diagnosticPrefix):
|
||||||
fileDescriptor(fileDescriptor) {
|
fileDescriptor(fileDescriptor) {
|
||||||
@ -10,12 +15,11 @@ UnixFileGuard::UnixFileGuard(std::string device, int* fileDescriptor, int flags,
|
|||||||
if (*fileDescriptor < 0) {
|
if (*fileDescriptor < 0) {
|
||||||
#if FSFW_VERBOSE_LEVEL >= 1
|
#if FSFW_VERBOSE_LEVEL >= 1
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << diagnosticPrefix <<"Opening device failed with error code " << errno <<
|
sif::warning << diagnosticPrefix << ": Opening device failed with error code " <<
|
||||||
"." << std::endl;
|
errno << ": " << strerror(errno) << std::endl;
|
||||||
sif::warning << "Error description: " << strerror(errno) << std::endl;
|
|
||||||
#else
|
#else
|
||||||
sif::printError("%sOpening device failed with error code %d.\n", diagnosticPrefix);
|
sif::printWarning("%s: Opening device failed with error code %d: %s\n",
|
||||||
sif::printWarning("Error description: %s\n", strerror(errno));
|
diagnosticPrefix, errno, strerror(errno));
|
||||||
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
#endif /* FSFW_VERBOSE_LEVEL >= 1 */
|
#endif /* FSFW_VERBOSE_LEVEL >= 1 */
|
||||||
openStatus = OPEN_FILE_FAILED;
|
openStatus = OPEN_FILE_FAILED;
|
||||||
|
@ -90,7 +90,7 @@ ReturnValue_t SpiComIF::initializeInterface(CookieIF *cookie) {
|
|||||||
|
|
||||||
int fileDescriptor = 0;
|
int fileDescriptor = 0;
|
||||||
UnixFileGuard fileHelper(spiCookie->getSpiDevice(), &fileDescriptor, O_RDWR,
|
UnixFileGuard fileHelper(spiCookie->getSpiDevice(), &fileDescriptor, O_RDWR,
|
||||||
"SpiComIF::initializeInterface: ");
|
"SpiComIF::initializeInterface");
|
||||||
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return fileHelper.getOpenResult();
|
return fileHelper.getOpenResult();
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ ReturnValue_t SpiComIF::performRegularSendOperation(SpiCookie *spiCookie, const
|
|||||||
/* Prepare transfer */
|
/* Prepare transfer */
|
||||||
int fileDescriptor = 0;
|
int fileDescriptor = 0;
|
||||||
std::string device = spiCookie->getSpiDevice();
|
std::string device = spiCookie->getSpiDevice();
|
||||||
UnixFileGuard fileHelper(device, &fileDescriptor, O_RDWR, "SpiComIF::sendMessage: ");
|
UnixFileGuard fileHelper(device, &fileDescriptor, O_RDWR, "SpiComIF::sendMessage");
|
||||||
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return OPENING_FILE_FAILED;
|
return OPENING_FILE_FAILED;
|
||||||
}
|
}
|
||||||
@ -273,7 +273,7 @@ ReturnValue_t SpiComIF::performHalfDuplexReception(SpiCookie* spiCookie) {
|
|||||||
std::string device = spiCookie->getSpiDevice();
|
std::string device = spiCookie->getSpiDevice();
|
||||||
int fileDescriptor = 0;
|
int fileDescriptor = 0;
|
||||||
UnixFileGuard fileHelper(device, &fileDescriptor, O_RDWR,
|
UnixFileGuard fileHelper(device, &fileDescriptor, O_RDWR,
|
||||||
"SpiComIF::requestReceiveMessage: ");
|
"SpiComIF::requestReceiveMessage");
|
||||||
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
if(fileHelper.getOpenResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return OPENING_FILE_FAILED;
|
return OPENING_FILE_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "fsfw_hal/linux/uart/UartComIF.h"
|
#include "UartComIF.h"
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
|
|
||||||
|
#include "fsfw_hal/linux/utility.h"
|
||||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
@ -60,7 +61,13 @@ int UartComIF::configureUartPort(UartCookie* uartCookie) {
|
|||||||
struct termios options = {};
|
struct termios options = {};
|
||||||
|
|
||||||
std::string deviceFile = uartCookie->getDeviceFile();
|
std::string deviceFile = uartCookie->getDeviceFile();
|
||||||
int fd = open(deviceFile.c_str(), O_RDWR);
|
int flags = O_RDWR;
|
||||||
|
if(uartCookie->getUartMode() == UartModes::CANONICAL) {
|
||||||
|
// In non-canonical mode, don't specify O_NONBLOCK because these properties will be
|
||||||
|
// controlled by the VTIME and VMIN parameters and O_NONBLOCK would override this
|
||||||
|
flags |= O_NONBLOCK;
|
||||||
|
}
|
||||||
|
int fd = open(deviceFile.c_str(), flags);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
sif::warning << "UartComIF::configureUartPort: Failed to open uart " << deviceFile <<
|
sif::warning << "UartComIF::configureUartPort: Failed to open uart " << deviceFile <<
|
||||||
@ -259,23 +266,22 @@ void UartComIF::configureBaudrate(struct termios* options, UartCookie* uartCooki
|
|||||||
|
|
||||||
ReturnValue_t UartComIF::sendMessage(CookieIF *cookie,
|
ReturnValue_t UartComIF::sendMessage(CookieIF *cookie,
|
||||||
const uint8_t *sendData, size_t sendLen) {
|
const uint8_t *sendData, size_t sendLen) {
|
||||||
|
|
||||||
int fd = 0;
|
int fd = 0;
|
||||||
std::string deviceFile;
|
std::string deviceFile;
|
||||||
UartDeviceMapIter uartDeviceMapIter;
|
UartDeviceMapIter uartDeviceMapIter;
|
||||||
|
|
||||||
if(sendData == nullptr) {
|
|
||||||
sif::debug << "UartComIF::sendMessage: Send Data is nullptr" << std::endl;
|
|
||||||
return RETURN_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sendLen == 0) {
|
if(sendLen == 0) {
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(sendData == nullptr) {
|
||||||
|
sif::warning << "UartComIF::sendMessage: Send data is nullptr" << std::endl;
|
||||||
|
return RETURN_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
UartCookie* uartCookie = dynamic_cast<UartCookie*>(cookie);
|
UartCookie* uartCookie = dynamic_cast<UartCookie*>(cookie);
|
||||||
if(uartCookie == nullptr) {
|
if(uartCookie == nullptr) {
|
||||||
sif::debug << "UartComIF::sendMessasge: Invalid UART Cookie!" << std::endl;
|
sif::warning << "UartComIF::sendMessasge: Invalid UART Cookie!" << std::endl;
|
||||||
return NULLPOINTER;
|
return NULLPOINTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,12 +353,13 @@ ReturnValue_t UartComIF::handleCanonicalRead(UartCookie& uartCookie, UartDeviceM
|
|||||||
size_t maxReplySize = uartCookie.getMaxReplyLen();
|
size_t maxReplySize = uartCookie.getMaxReplyLen();
|
||||||
int fd = iter->second.fileDescriptor;
|
int fd = iter->second.fileDescriptor;
|
||||||
auto bufferPtr = iter->second.replyBuffer.data();
|
auto bufferPtr = iter->second.replyBuffer.data();
|
||||||
|
iter->second.replyLen = 0;
|
||||||
do {
|
do {
|
||||||
size_t allowedReadSize = 0;
|
size_t allowedReadSize = 0;
|
||||||
if(currentBytesRead >= maxReplySize) {
|
if(currentBytesRead >= maxReplySize) {
|
||||||
// Overflow risk. Emit warning, trigger event and break. If this happens,
|
// Overflow risk. Emit warning, trigger event and break. If this happens,
|
||||||
// the reception buffer is not large enough or data is not polled often enough.
|
// the reception buffer is not large enough or data is not polled often enough.
|
||||||
#if OBSW_VERBOSE_LEVEL >= 1
|
#if FSFW_VERBOSE_LEVEL >= 1
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::warning << "UartComIF::requestReceiveMessage: Next read would cause overflow!"
|
sif::warning << "UartComIF::requestReceiveMessage: Next read would cause overflow!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
@ -370,8 +377,21 @@ ReturnValue_t UartComIF::handleCanonicalRead(UartCookie& uartCookie, UartDeviceM
|
|||||||
|
|
||||||
bytesRead = read(fd, bufferPtr, allowedReadSize);
|
bytesRead = read(fd, bufferPtr, allowedReadSize);
|
||||||
if (bytesRead < 0) {
|
if (bytesRead < 0) {
|
||||||
|
// EAGAIN: No data available in non-blocking mode
|
||||||
|
if(errno != EAGAIN) {
|
||||||
|
#if FSFW_VERBOSE_LEVEL >= 1
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::warning << "UartComIF::handleCanonicalRead: read failed with code" <<
|
||||||
|
errno << ": " << strerror(errno) << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printWarning("UartComIF::handleCanonicalRead: read failed with code %d: %s\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
return RETURN_FAILED;
|
return RETURN_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
else if(bytesRead > 0) {
|
else if(bytesRead > 0) {
|
||||||
iter->second.replyLen += bytesRead;
|
iter->second.replyLen += bytesRead;
|
||||||
bufferPtr += bytesRead;
|
bufferPtr += bytesRead;
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
UartCookie::UartCookie(object_id_t handlerId, std::string deviceFile, UartModes uartMode,
|
UartCookie::UartCookie(object_id_t handlerId, std::string deviceFile, UartModes uartMode,
|
||||||
uint32_t baudrate, size_t maxReplyLen):
|
uint32_t baudrate, size_t maxReplyLen):
|
||||||
handlerId(handlerId), deviceFile(deviceFile), uartMode(uartMode), baudrate(baudrate),
|
handlerId(handlerId), deviceFile(deviceFile), uartMode(uartMode),
|
||||||
maxReplyLen(maxReplyLen) {
|
baudrate(baudrate), maxReplyLen(maxReplyLen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
UartCookie::~UartCookie() {}
|
UartCookie::~UartCookie() {}
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
#ifndef FSFW_DEFAULTCFG_VERSION_H_
|
#ifndef FSFW_VERSION_H_
|
||||||
#define FSFW_DEFAULTCFG_VERSION_H_
|
#define FSFW_VERSION_H_
|
||||||
|
|
||||||
const char* const FSFW_VERSION_NAME = "ASTP";
|
const char* const FSFW_VERSION_NAME = "ASTP";
|
||||||
|
|
||||||
#define FSFW_VERSION 1
|
#define FSFW_VERSION 1
|
||||||
#define FSFW_SUBVERSION 0
|
#define FSFW_SUBVERSION 2
|
||||||
#define FSFW_REVISION 0
|
#define FSFW_REVISION 0
|
||||||
|
|
||||||
|
#endif /* FSFW_VERSION_H_ */
|
||||||
|
|
||||||
#endif /* FSFW_DEFAULTCFG_VERSION_H_ */
|
|
||||||
|
@ -469,7 +469,7 @@ ReturnValue_t DeviceHandlerBase::updateReplyMapEntry(DeviceCommandId_t deviceRep
|
|||||||
auto replyIter = deviceReplyMap.find(deviceReply);
|
auto replyIter = deviceReplyMap.find(deviceReply);
|
||||||
if (replyIter == deviceReplyMap.end()) {
|
if (replyIter == deviceReplyMap.end()) {
|
||||||
triggerEvent(INVALID_DEVICE_COMMAND, deviceReply);
|
triggerEvent(INVALID_DEVICE_COMMAND, deviceReply);
|
||||||
return RETURN_FAILED;
|
return COMMAND_NOT_SUPPORTED;
|
||||||
} else {
|
} else {
|
||||||
DeviceReplyInfo *info = &(replyIter->second);
|
DeviceReplyInfo *info = &(replyIter->second);
|
||||||
if (maxDelayCycles != 0) {
|
if (maxDelayCycles != 0) {
|
||||||
@ -481,6 +481,25 @@ ReturnValue_t DeviceHandlerBase::updateReplyMapEntry(DeviceCommandId_t deviceRep
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t DeviceHandlerBase::updatePeriodicReply(bool enable, DeviceCommandId_t deviceReply) {
|
||||||
|
auto replyIter = deviceReplyMap.find(deviceReply);
|
||||||
|
if (replyIter == deviceReplyMap.end()) {
|
||||||
|
triggerEvent(INVALID_DEVICE_COMMAND, deviceReply);
|
||||||
|
return COMMAND_NOT_SUPPORTED;
|
||||||
|
} else {
|
||||||
|
DeviceReplyInfo *info = &(replyIter->second);
|
||||||
|
if(not info->periodic) {
|
||||||
|
return COMMAND_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
if(enable) {
|
||||||
|
info->delayCycles = info->maxDelayCycles;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info->delayCycles = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t DeviceHandlerBase::setReplyDataset(DeviceCommandId_t replyId,
|
ReturnValue_t DeviceHandlerBase::setReplyDataset(DeviceCommandId_t replyId,
|
||||||
LocalPoolDataSetBase *dataSet) {
|
LocalPoolDataSetBase *dataSet) {
|
||||||
|
@ -449,7 +449,9 @@ protected:
|
|||||||
* @param replyLen Will be supplied to the requestReceiveMessage call of
|
* @param replyLen Will be supplied to the requestReceiveMessage call of
|
||||||
* the communication interface.
|
* the communication interface.
|
||||||
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
||||||
* by the device repeatedly without request) or not. Default is aperiodic (0)
|
* by the device repeatedly without request) or not. Default is aperiodic (0).
|
||||||
|
* Please note that periodic replies are disabled by default. You can enable them with
|
||||||
|
* #updatePeriodicReply
|
||||||
* @return - @c RETURN_OK when the command was successfully inserted,
|
* @return - @c RETURN_OK when the command was successfully inserted,
|
||||||
* - @c RETURN_FAILED else.
|
* - @c RETURN_FAILED else.
|
||||||
*/
|
*/
|
||||||
@ -464,7 +466,9 @@ protected:
|
|||||||
* @param maxDelayCycles The maximum number of delay cycles the reply waits
|
* @param maxDelayCycles The maximum number of delay cycles the reply waits
|
||||||
* until it times out.
|
* until it times out.
|
||||||
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
||||||
* by the device repeatedly without request) or not. Default is aperiodic (0)
|
* by the device repeatedly without request) or not. Default is aperiodic (0).
|
||||||
|
* Please note that periodic replies are disabled by default. You can enable them with
|
||||||
|
* #updatePeriodicReply
|
||||||
* @return - @c RETURN_OK when the command was successfully inserted,
|
* @return - @c RETURN_OK when the command was successfully inserted,
|
||||||
* - @c RETURN_FAILED else.
|
* - @c RETURN_FAILED else.
|
||||||
*/
|
*/
|
||||||
@ -480,6 +484,14 @@ protected:
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t insertInCommandMap(DeviceCommandId_t deviceCommand);
|
ReturnValue_t insertInCommandMap(DeviceCommandId_t deviceCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables a periodic reply for a given command. It sets to delay cycles to the specified
|
||||||
|
* maximum delay cycles for a given reply ID if enabled or to 0 if disabled.
|
||||||
|
* @param enable Specify whether to enable or disable a given periodic reply
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ReturnValue_t updatePeriodicReply(bool enable, DeviceCommandId_t deviceReply);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function returns the reply length of the next reply to read.
|
* @brief This function returns the reply length of the next reply to read.
|
||||||
*
|
*
|
||||||
@ -493,12 +505,10 @@ protected:
|
|||||||
virtual size_t getNextReplyLength(DeviceCommandId_t deviceCommand);
|
virtual size_t getNextReplyLength(DeviceCommandId_t deviceCommand);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a helper method to facilitate updating entries
|
* @brief This is a helper method to facilitate updating entries in the reply map.
|
||||||
* in the reply map.
|
|
||||||
* @param deviceCommand Identifier of the reply to update.
|
* @param deviceCommand Identifier of the reply to update.
|
||||||
* @param delayCycles The current number of delay cycles to wait.
|
* @param delayCycles The current number of delay cycles to wait. As stated in
|
||||||
* As stated in #fillCommandAndCookieMap, to disable periodic commands,
|
* #fillCommandAndReplyMap, to disable periodic commands, this is set to zero.
|
||||||
* this is set to zero.
|
|
||||||
* @param maxDelayCycles The maximum number of delay cycles the reply waits
|
* @param maxDelayCycles The maximum number of delay cycles the reply waits
|
||||||
* until it times out. By passing 0 the entry remains untouched.
|
* until it times out. By passing 0 the entry remains untouched.
|
||||||
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
* @param periodic Indicates if the command is periodic (i.e. it is sent
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "fsfw/platform.h"
|
#include "fsfw/platform.h"
|
||||||
#include "fsfw/osal/common/TcpTmTcBridge.h"
|
#include "fsfw/osal/common/TcpTmTcBridge.h"
|
||||||
#include "fsfw/osal/common/tcpipHelpers.h"
|
|
||||||
|
|
||||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||||
#include "fsfw/ipc/MutexGuard.h"
|
#include "fsfw/ipc/MutexGuard.h"
|
||||||
@ -17,8 +16,6 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const std::string TcpTmTcBridge::DEFAULT_UDP_SERVER_PORT = tcpip::DEFAULT_SERVER_PORT;
|
|
||||||
|
|
||||||
TcpTmTcBridge::TcpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
TcpTmTcBridge::TcpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
||||||
object_id_t tmStoreId, object_id_t tcStoreId):
|
object_id_t tmStoreId, object_id_t tcStoreId):
|
||||||
TmTcBridge(objectId, tcDestination, tmStoreId, tcStoreId) {
|
TmTcBridge(objectId, tcDestination, tmStoreId, tcStoreId) {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define FSFW_OSAL_COMMON_TCPTMTCBRIDGE_H_
|
#define FSFW_OSAL_COMMON_TCPTMTCBRIDGE_H_
|
||||||
|
|
||||||
#include "TcpIpBase.h"
|
#include "TcpIpBase.h"
|
||||||
#include "../../tmtcservices/TmTcBridge.h"
|
#include "fsfw/tmtcservices/TmTcBridge.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
@ -29,8 +29,6 @@ class TcpTmTcBridge:
|
|||||||
public TmTcBridge {
|
public TmTcBridge {
|
||||||
friend class TcpTmTcServer;
|
friend class TcpTmTcServer;
|
||||||
public:
|
public:
|
||||||
/* The ports chosen here should not be used by any other process. */
|
|
||||||
static const std::string DEFAULT_UDP_SERVER_PORT;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -22,14 +22,14 @@
|
|||||||
#define FSFW_TCP_RECV_WIRETAPPING_ENABLED 0
|
#define FSFW_TCP_RECV_WIRETAPPING_ENABLED 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const std::string TcpTmTcServer::DEFAULT_TCP_SERVER_PORT = "7303";
|
const std::string TcpTmTcServer::DEFAULT_SERVER_PORT = tcpip::DEFAULT_SERVER_PORT;
|
||||||
|
|
||||||
TcpTmTcServer::TcpTmTcServer(object_id_t objectId, object_id_t tmtcTcpBridge,
|
TcpTmTcServer::TcpTmTcServer(object_id_t objectId, object_id_t tmtcTcpBridge,
|
||||||
size_t receptionBufferSize, std::string customTcpServerPort):
|
size_t receptionBufferSize, std::string customTcpServerPort):
|
||||||
SystemObject(objectId), tmtcBridgeId(tmtcTcpBridge),
|
SystemObject(objectId), tmtcBridgeId(tmtcTcpBridge),
|
||||||
tcpPort(customTcpServerPort), receptionBuffer(receptionBufferSize) {
|
tcpPort(customTcpServerPort), receptionBuffer(receptionBufferSize) {
|
||||||
if(tcpPort == "") {
|
if(tcpPort == "") {
|
||||||
tcpPort = DEFAULT_TCP_SERVER_PORT;
|
tcpPort = DEFAULT_SERVER_PORT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,6 +200,10 @@ void TcpTmTcServer::setTcpBacklog(uint8_t tcpBacklog) {
|
|||||||
this->tcpBacklog = tcpBacklog;
|
this->tcpBacklog = tcpBacklog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string TcpTmTcServer::getTcpPort() const {
|
||||||
|
return tcpPort;
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t TcpTmTcServer::handleTmSending(socket_t connSocket) {
|
ReturnValue_t TcpTmTcServer::handleTmSending(socket_t connSocket) {
|
||||||
// Access to the FIFO is mutex protected because it is filled by the bridge
|
// Access to the FIFO is mutex protected because it is filled by the bridge
|
||||||
MutexGuard(tmtcBridge->mutex, tmtcBridge->timeoutType, tmtcBridge->mutexTimeoutMs);
|
MutexGuard(tmtcBridge->mutex, tmtcBridge->timeoutType, tmtcBridge->mutexTimeoutMs);
|
||||||
|
@ -3,13 +3,14 @@
|
|||||||
|
|
||||||
#include "TcpIpBase.h"
|
#include "TcpIpBase.h"
|
||||||
|
|
||||||
#include "../../platform.h"
|
#include "fsfw/platform.h"
|
||||||
#include "../../ipc/messageQueueDefinitions.h"
|
#include "fsfw/osal/common/tcpipHelpers.h"
|
||||||
#include "../../ipc/MessageQueueIF.h"
|
#include "fsfw/ipc/messageQueueDefinitions.h"
|
||||||
#include "../../objectmanager/frameworkObjects.h"
|
#include "fsfw/ipc/MessageQueueIF.h"
|
||||||
#include "../../objectmanager/SystemObject.h"
|
#include "fsfw/objectmanager/frameworkObjects.h"
|
||||||
#include "../../storagemanager/StorageManagerIF.h"
|
#include "fsfw/objectmanager/SystemObject.h"
|
||||||
#include "../../tasks/ExecutableObjectIF.h"
|
#include "fsfw/storagemanager/StorageManagerIF.h"
|
||||||
|
#include "fsfw/tasks/ExecutableObjectIF.h"
|
||||||
|
|
||||||
#ifdef PLATFORM_UNIX
|
#ifdef PLATFORM_UNIX
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@ -41,8 +42,7 @@ class TcpTmTcServer:
|
|||||||
public TcpIpBase,
|
public TcpIpBase,
|
||||||
public ExecutableObjectIF {
|
public ExecutableObjectIF {
|
||||||
public:
|
public:
|
||||||
/* The ports chosen here should not be used by any other process. */
|
static const std::string DEFAULT_SERVER_PORT;
|
||||||
static const std::string DEFAULT_TCP_SERVER_PORT;
|
|
||||||
|
|
||||||
static constexpr size_t ETHERNET_MTU_SIZE = 1500;
|
static constexpr size_t ETHERNET_MTU_SIZE = 1500;
|
||||||
|
|
||||||
@ -65,6 +65,8 @@ public:
|
|||||||
ReturnValue_t performOperation(uint8_t opCode) override;
|
ReturnValue_t performOperation(uint8_t opCode) override;
|
||||||
ReturnValue_t initializeAfterTaskCreation() override;
|
ReturnValue_t initializeAfterTaskCreation() override;
|
||||||
|
|
||||||
|
std::string getTcpPort() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageManagerIF* tcStore = nullptr;
|
StorageManagerIF* tcStore = nullptr;
|
||||||
StorageManagerIF* tmStore = nullptr;
|
StorageManagerIF* tmStore = nullptr;
|
||||||
|
@ -17,13 +17,13 @@
|
|||||||
#define FSFW_UDP_SEND_WIRETAPPING_ENABLED 0
|
#define FSFW_UDP_SEND_WIRETAPPING_ENABLED 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const std::string UdpTmTcBridge::DEFAULT_UDP_SERVER_PORT = tcpip::DEFAULT_SERVER_PORT;
|
const std::string UdpTmTcBridge::DEFAULT_SERVER_PORT = tcpip::DEFAULT_SERVER_PORT;
|
||||||
|
|
||||||
UdpTmTcBridge::UdpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
UdpTmTcBridge::UdpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
||||||
std::string udpServerPort, object_id_t tmStoreId, object_id_t tcStoreId):
|
std::string udpServerPort, object_id_t tmStoreId, object_id_t tcStoreId):
|
||||||
TmTcBridge(objectId, tcDestination, tmStoreId, tcStoreId) {
|
TmTcBridge(objectId, tcDestination, tmStoreId, tcStoreId) {
|
||||||
if(udpServerPort == "") {
|
if(udpServerPort == "") {
|
||||||
this->udpServerPort = DEFAULT_UDP_SERVER_PORT;
|
this->udpServerPort = DEFAULT_SERVER_PORT;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this->udpServerPort = udpServerPort;
|
this->udpServerPort = udpServerPort;
|
||||||
@ -108,6 +108,10 @@ UdpTmTcBridge::~UdpTmTcBridge() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string UdpTmTcBridge::getUdpPort() const {
|
||||||
|
return udpServerPort;
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t UdpTmTcBridge::sendTm(const uint8_t *data, size_t dataLen) {
|
ReturnValue_t UdpTmTcBridge::sendTm(const uint8_t *data, size_t dataLen) {
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#define FSFW_OSAL_COMMON_TMTCUDPBRIDGE_H_
|
#define FSFW_OSAL_COMMON_TMTCUDPBRIDGE_H_
|
||||||
|
|
||||||
#include "TcpIpBase.h"
|
#include "TcpIpBase.h"
|
||||||
#include "../../platform.h"
|
#include "fsfw/platform.h"
|
||||||
#include "../../tmtcservices/TmTcBridge.h"
|
#include "fsfw/tmtcservices/TmTcBridge.h"
|
||||||
|
|
||||||
#ifdef PLATFORM_WIN
|
#ifdef PLATFORM_WIN
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
@ -28,7 +28,7 @@ class UdpTmTcBridge:
|
|||||||
friend class UdpTcPollingTask;
|
friend class UdpTcPollingTask;
|
||||||
public:
|
public:
|
||||||
/* The ports chosen here should not be used by any other process. */
|
/* The ports chosen here should not be used by any other process. */
|
||||||
static const std::string DEFAULT_UDP_SERVER_PORT;
|
static const std::string DEFAULT_SERVER_PORT;
|
||||||
|
|
||||||
UdpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
UdpTmTcBridge(object_id_t objectId, object_id_t tcDestination,
|
||||||
std::string udpServerPort = "", object_id_t tmStoreId = objects::TM_STORE,
|
std::string udpServerPort = "", object_id_t tmStoreId = objects::TM_STORE,
|
||||||
@ -44,6 +44,8 @@ public:
|
|||||||
|
|
||||||
void checkAndSetClientAddress(sockaddr& clientAddress);
|
void checkAndSetClientAddress(sockaddr& clientAddress);
|
||||||
|
|
||||||
|
std::string getUdpPort() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ReturnValue_t sendTm(const uint8_t * data, size_t dataLen) override;
|
virtual ReturnValue_t sendTm(const uint8_t * data, size_t dataLen) override;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef FSFW_OSAL_COMMON_TCPIPCOMMON_H_
|
#ifndef FSFW_OSAL_COMMON_TCPIPCOMMON_H_
|
||||||
#define FSFW_OSAL_COMMON_TCPIPCOMMON_H_
|
#define FSFW_OSAL_COMMON_TCPIPCOMMON_H_
|
||||||
|
|
||||||
#include "../../timemanager/clockDefinitions.h"
|
#include "fsfw/timemanager/clockDefinitions.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
namespace tcpip {
|
namespace tcpip {
|
||||||
|
|
||||||
const char* const DEFAULT_SERVER_PORT = "7301";
|
static constexpr char DEFAULT_SERVER_PORT[] = "7301";
|
||||||
|
|
||||||
enum class Protocol {
|
enum class Protocol {
|
||||||
UDP,
|
UDP,
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
CatchDefinitions.cpp
|
||||||
|
CatchFactory.cpp
|
||||||
|
printChar.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
if(FSFW_CUSTOM_UNITTEST_RUNNER)
|
||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
CatchRunner.cpp
|
||||||
|
CatchSetup.cpp
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(action)
|
add_subdirectory(action)
|
||||||
add_subdirectory(container)
|
add_subdirectory(container)
|
||||||
add_subdirectory(osal)
|
add_subdirectory(osal)
|
||||||
|
@ -1,17 +1,21 @@
|
|||||||
#include "CatchFactory.h"
|
#include "CatchFactory.h"
|
||||||
|
#include "datapoollocal/LocalPoolOwnerBase.h"
|
||||||
|
#include "mocks/HkReceiverMock.h"
|
||||||
|
|
||||||
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
||||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
|
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
|
||||||
|
|
||||||
#include <fsfw/events/EventManager.h>
|
#include <fsfw/events/EventManager.h>
|
||||||
#include <fsfw/health/HealthTable.h>
|
#include <fsfw/health/HealthTable.h>
|
||||||
#include <fsfw/internalError/InternalErrorReporter.h>
|
#include <fsfw/internalerror/InternalErrorReporter.h>
|
||||||
#include <fsfw/objectmanager/frameworkObjects.h>
|
#include <fsfw/objectmanager/frameworkObjects.h>
|
||||||
#include <fsfw/storagemanager/PoolManager.h>
|
#include <fsfw/storagemanager/PoolManager.h>
|
||||||
#include <fsfw/tmtcpacket/pus/tm/TmPacketStored.h>
|
#include <fsfw/tmtcpacket/pus/tm/TmPacketStored.h>
|
||||||
#include <fsfw/tmtcservices/CommandingServiceBase.h>
|
#include <fsfw/tmtcservices/CommandingServiceBase.h>
|
||||||
#include <fsfw/tmtcservices/PusServiceBase.h>
|
#include <fsfw/tmtcservices/PusServiceBase.h>
|
||||||
#include <fsfw/unittest/tests/datapoollocal/LocalPoolOwnerBase.h>
|
|
||||||
#include <fsfw/unittest/tests/mocks/HkReceiverMock.h>
|
|
||||||
|
#if FSFW_ADD_DEFAULT_FACTORY_FUNCTIONS == 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Produces system objects.
|
* @brief Produces system objects.
|
||||||
@ -26,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
* @ingroup init
|
* @ingroup init
|
||||||
*/
|
*/
|
||||||
void Factory::produce(void) {
|
void Factory::produceFrameworkObjects(void* args) {
|
||||||
setStaticFrameworkObjectIds();
|
setStaticFrameworkObjectIds();
|
||||||
new EventManager(objects::EVENT_MANAGER);
|
new EventManager(objects::EVENT_MANAGER);
|
||||||
new HealthTable(objects::HEALTH_TABLE);
|
new HealthTable(objects::HEALTH_TABLE);
|
||||||
@ -55,7 +59,6 @@ void Factory::produce(void) {
|
|||||||
};
|
};
|
||||||
new PoolManager(objects::IPC_STORE, poolCfg);
|
new PoolManager(objects::IPC_STORE, poolCfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Factory::setStaticFrameworkObjectIds() {
|
void Factory::setStaticFrameworkObjectIds() {
|
||||||
@ -77,5 +80,4 @@ void Factory::setStaticFrameworkObjectIds() {
|
|||||||
TmPacketBase::timeStamperId = objects::NO_OBJECT;
|
TmPacketBase::timeStamperId = objects::NO_OBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
24
tests/src/fsfw_tests/unit/CatchFactory.h
Normal file
24
tests/src/fsfw_tests/unit/CatchFactory.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef FSFW_CATCHFACTORY_H_
|
||||||
|
#define FSFW_CATCHFACTORY_H_
|
||||||
|
|
||||||
|
#include "TestConfig.h"
|
||||||
|
#include "fsfw/objectmanager/SystemObjectIF.h"
|
||||||
|
#include "fsfw/objectmanager/ObjectManager.h"
|
||||||
|
|
||||||
|
// TODO: It is possible to solve this more cleanly using a special class which
|
||||||
|
// is allowed to set the object IDs and has virtual functions.
|
||||||
|
#if FSFW_ADD_DEFAULT_FACTORY_FUNCTIONS == 1
|
||||||
|
|
||||||
|
namespace Factory {
|
||||||
|
/**
|
||||||
|
* @brief Creates all SystemObject elements which are persistent
|
||||||
|
* during execution.
|
||||||
|
*/
|
||||||
|
void produceFrameworkObjects(void* args);
|
||||||
|
void setStaticFrameworkObjectIds();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFW_ADD_DEFAULT_FSFW_FACTORY == 1 */
|
||||||
|
|
||||||
|
#endif /* FSFW_CATCHFACTORY_H_ */
|
@ -6,7 +6,7 @@
|
|||||||
* from the eclipse market place to get colored characters.
|
* from the eclipse market place to get colored characters.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <TestsConfig.h>
|
#include "CatchRunner.h"
|
||||||
|
|
||||||
#define CATCH_CONFIG_COLOUR_WINDOWS
|
#define CATCH_CONFIG_COLOUR_WINDOWS
|
||||||
|
|
||||||
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
extern int customSetup();
|
extern int customSetup();
|
||||||
|
|
||||||
int main( int argc, char* argv[] ) {
|
int fsfwtest::customMain(int argc, char* argv[]) {
|
||||||
customSetup();
|
customSetup();
|
||||||
|
|
||||||
// Catch internal function call
|
// Catch internal function call
|
14
tests/src/fsfw_tests/unit/CatchRunner.h
Normal file
14
tests/src/fsfw_tests/unit/CatchRunner.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef FSFW_TESTS_USER_UNITTEST_CORE_CATCHRUNNER_H_
|
||||||
|
#define FSFW_TESTS_USER_UNITTEST_CORE_CATCHRUNNER_H_
|
||||||
|
|
||||||
|
namespace fsfwtest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be called by upper level main() if default Catch2 main is overriden
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int customMain(int argc, char* argv[]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFW_TESTS_USER_UNITTEST_CORE_CATCHRUNNER_H_ */
|
@ -5,10 +5,9 @@
|
|||||||
#include <gcov.h>
|
#include <gcov.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include "fsfw/objectmanager/ObjectManager.h"
|
||||||
#include <fsfw/objectmanager/ObjectManagerIF.h>
|
#include "fsfw/storagemanager/StorageManagerIF.h"
|
||||||
#include <fsfw/storagemanager/StorageManagerIF.h>
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||||
#include <fsfw/serviceinterface/ServiceInterfaceStream.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Global instantiations normally done in main.cpp */
|
/* Global instantiations normally done in main.cpp */
|
||||||
@ -24,13 +23,11 @@ ServiceInterfaceStream warning("WARNING");
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Global object manager */
|
|
||||||
ObjectManagerIF *objectManager;
|
|
||||||
|
|
||||||
int customSetup() {
|
int customSetup() {
|
||||||
// global setup
|
// global setup
|
||||||
objectManager = new ObjectManager(Factory::produce);
|
ObjectManager* objMan = ObjectManager::instance();
|
||||||
objectManager -> initialize();
|
objMan->setObjectFactoryFunction(Factory::produceFrameworkObjects, nullptr);
|
||||||
|
objMan->initialize();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1,13 +1,10 @@
|
|||||||
#include "TestActionHelper.h"
|
#include "TestActionHelper.h"
|
||||||
|
#include "fsfw_tests/unit/mocks/MessageQueueMockBase.h"
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <fsfw/action/ActionHelper.h>
|
#include <fsfw/action/ActionHelper.h>
|
||||||
#include <fsfw/ipc/CommandMessage.h>
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
#include <fsfw/tests/unit/mocks/MessageQueueMockBase.h>
|
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
#ifndef UNITTEST_HOSTED_TESTACTIONHELPER_H_
|
#ifndef UNITTEST_HOSTED_TESTACTIONHELPER_H_
|
||||||
#define UNITTEST_HOSTED_TESTACTIONHELPER_H_
|
#define UNITTEST_HOSTED_TESTACTIONHELPER_H_
|
||||||
|
|
||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <fsfw/action/HasActionsIF.h>
|
#include <fsfw/action/HasActionsIF.h>
|
||||||
#include <fsfw/ipc/MessageQueueIF.h>
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
class ActionHelperOwnerMockBase: public HasActionsIF {
|
class ActionHelperOwnerMockBase: public HasActionsIF {
|
||||||
public:
|
public:
|
||||||
bool getCommandQueueCalled = false;
|
bool getCommandQueueCalled = false;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <unittest/core/CatchDefinitions.h>
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <fsfw/container/SimpleRingBuffer.h>
|
#include <fsfw/container/SimpleRingBuffer.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/ArrayList.h>
|
#include <fsfw/container/ArrayList.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Array List test
|
* @brief Array List test
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/DynamicFIFO.h>
|
#include <fsfw/container/DynamicFIFO.h>
|
||||||
#include <fsfw/container/FIFO.h>
|
#include <fsfw/container/FIFO.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE( "Dynamic Fifo Tests", "[TestDynamicFifo]") {
|
TEST_CASE( "Dynamic Fifo Tests", "[TestDynamicFifo]") {
|
||||||
INFO("Dynamic Fifo Tests");
|
INFO("Dynamic Fifo Tests");
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/DynamicFIFO.h>
|
#include <fsfw/container/DynamicFIFO.h>
|
||||||
#include <fsfw/container/FIFO.h>
|
#include <fsfw/container/FIFO.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE( "Static Fifo Tests", "[TestFifo]") {
|
TEST_CASE( "Static Fifo Tests", "[TestFifo]") {
|
||||||
INFO("Fifo Tests");
|
INFO("Fifo Tests");
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/FixedArrayList.h>
|
#include <fsfw/container/FixedArrayList.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE( "FixedArrayList Tests", "[TestFixedArrayList]") {
|
TEST_CASE( "FixedArrayList Tests", "[TestFixedArrayList]") {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/FixedMap.h>
|
#include <fsfw/container/FixedMap.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
template class FixedMap<unsigned int, unsigned short>;
|
template class FixedMap<unsigned int, unsigned short>;
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/FixedOrderedMultimap.h>
|
#include <fsfw/container/FixedOrderedMultimap.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE( "FixedOrderedMultimap Tests", "[TestFixedOrderedMultimap]") {
|
TEST_CASE( "FixedOrderedMultimap Tests", "[TestFixedOrderedMultimap]") {
|
||||||
INFO("FixedOrderedMultimap Tests");
|
INFO("FixedOrderedMultimap Tests");
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/container/PlacementFactory.h>
|
#include <fsfw/container/PlacementFactory.h>
|
||||||
#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
#include <fsfw/container/ArrayList.h>
|
#include <fsfw/container/ArrayList.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE( "PlacementFactory Tests", "[TestPlacementFactory]") {
|
TEST_CASE( "PlacementFactory Tests", "[TestPlacementFactory]") {
|
||||||
INFO("PlacementFactory Tests");
|
INFO("PlacementFactory Tests");
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include "LocalPoolOwnerBase.h"
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
#include <catch2/catch_approx.hpp>
|
|
||||||
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
@ -10,7 +8,8 @@
|
|||||||
#include <fsfw/datapool/PoolReadGuard.h>
|
#include <fsfw/datapool/PoolReadGuard.h>
|
||||||
#include <fsfw/globalfunctions/bitutility.h>
|
#include <fsfw/globalfunctions/bitutility.h>
|
||||||
|
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <catch2/catch_approx.hpp>
|
||||||
|
|
||||||
TEST_CASE("DataSetTest" , "[DataSetTest]") {
|
TEST_CASE("DataSetTest" , "[DataSetTest]") {
|
||||||
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include "LocalPoolOwnerBase.h"
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
#include <catch2/catch_approx.hpp>
|
|
||||||
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/datapool/PoolReadGuard.h>
|
#include <fsfw/datapool/PoolReadGuard.h>
|
||||||
@ -10,7 +8,10 @@
|
|||||||
#include <fsfw/housekeeping/HousekeepingSnapshot.h>
|
#include <fsfw/housekeeping/HousekeepingSnapshot.h>
|
||||||
#include <fsfw/ipc/CommandMessageCleaner.h>
|
#include <fsfw/ipc/CommandMessageCleaner.h>
|
||||||
#include <fsfw/timemanager/CCSDSTime.h>
|
#include <fsfw/timemanager/CCSDSTime.h>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <catch2/catch_approx.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define FSFW_UNITTEST_TESTS_DATAPOOLLOCAL_LOCALPOOLOWNERBASE_H_
|
#define FSFW_UNITTEST_TESTS_DATAPOOLLOCAL_LOCALPOOLOWNERBASE_H_
|
||||||
|
|
||||||
#include "objects/systemObjectList.h"
|
#include "objects/systemObjectList.h"
|
||||||
|
#include "../mocks/MessageQueueMockBase.h"
|
||||||
|
|
||||||
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
#include <fsfw/datapoollocal/LocalDataSet.h>
|
#include <fsfw/datapoollocal/LocalDataSet.h>
|
||||||
@ -10,7 +11,6 @@
|
|||||||
#include <fsfw/datapoollocal/LocalPoolVector.h>
|
#include <fsfw/datapoollocal/LocalPoolVector.h>
|
||||||
#include <fsfw/ipc/QueueFactory.h>
|
#include <fsfw/ipc/QueueFactory.h>
|
||||||
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
||||||
#include <fsfw/tests/unit/mocks/MessageQueueMockBase.h>
|
|
||||||
#include <fsfw/datapool/PoolReadGuard.h>
|
#include <fsfw/datapool/PoolReadGuard.h>
|
||||||
|
|
||||||
namespace lpool {
|
namespace lpool {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#include "LocalPoolOwnerBase.h"
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
|
||||||
TEST_CASE("LocalPoolVariable" , "[LocPoolVarTest]") {
|
TEST_CASE("LocalPoolVariable" , "[LocPoolVarTest]") {
|
||||||
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#include "LocalPoolOwnerBase.h"
|
#include "LocalPoolOwnerBase.h"
|
||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
#include <fsfw/datapoollocal/HasLocalDataPoolIF.h>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE("LocalPoolVector" , "[LocPoolVecTest]") {
|
TEST_CASE("LocalPoolVector" , "[LocPoolVecTest]") {
|
||||||
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
LocalPoolOwnerBase* poolOwner = ObjectManager::instance()->
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
#ifndef FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
#ifndef FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
||||||
#define FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
#define FSFW_UNITTEST_TESTS_MOCKS_MESSAGEQUEUEMOCKBASE_H_
|
||||||
|
|
||||||
#include <fsfw/ipc/MessageQueueIF.h>
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <fsfw/ipc/MessageQueueMessage.h>
|
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
#include "fsfw/ipc/CommandMessage.h"
|
||||||
|
#include "fsfw/ipc/MessageQueueIF.h"
|
||||||
|
#include "fsfw/ipc/MessageQueueMessage.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/ipc/MessageQueueIF.h>
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
#include <fsfw/ipc/QueueFactory.h>
|
#include <fsfw/ipc/QueueFactory.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/serialize/SerialBufferAdapter.h>
|
#include <fsfw/serialize/SerialBufferAdapter.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
#include "TestSerialLinkedPacket.h"
|
#include "TestSerialLinkedPacket.h"
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/globalfunctions/arrayprinter.h>
|
#include <fsfw/globalfunctions/arrayprinter.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
#include <fsfw/serialize/SerializeAdapter.h>
|
#include <fsfw/serialize/SerializeAdapter.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <catch2/catch_approx.hpp>
|
#include <catch2/catch_approx.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
#include "fsfw_tests/unit/CatchDefinitions.h"
|
||||||
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <unittest/core/CatchDefinitions.h>
|
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ if(NOT FSFW_OSAL)
|
|||||||
set(FSFW_OSAL host CACHE STRING "OS for the FSFW.")
|
set(FSFW_OSAL host CACHE STRING "OS for the FSFW.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(CUSTOM_UNITTEST_RUNNER
|
option(FSFW_CUSTOM_UNITTEST_RUNNER
|
||||||
"Specify whether custom main or Catch2 main is used" TRUE
|
"Specify whether custom main or Catch2 main is used" TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|||||||
|
|
||||||
# Set names and variables
|
# Set names and variables
|
||||||
set(TARGET_NAME ${CMAKE_PROJECT_NAME})
|
set(TARGET_NAME ${CMAKE_PROJECT_NAME})
|
||||||
if(CUSTOM_UNITTEST_RUNNER)
|
if(FSFW_CUSTOM_UNITTEST_RUNNER)
|
||||||
set(CATCH2_TARGET Catch2)
|
set(CATCH2_TARGET Catch2)
|
||||||
else()
|
else()
|
||||||
set(CATCH2_TARGET Catch2WithMain)
|
set(CATCH2_TARGET Catch2WithMain)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef FSFW_UNITTEST_CONFIG_TESTSCONFIG_H_
|
#ifndef FSFW_UNITTEST_CONFIG_TESTSCONFIG_H_
|
||||||
#define FSFW_UNITTEST_CONFIG_TESTSCONFIG_H_
|
#define FSFW_UNITTEST_CONFIG_TESTSCONFIG_H_
|
||||||
|
|
||||||
|
#define FSFW_ADD_DEFAULT_FACTORY_FUNCTIONS 1
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
#include "objects/systemObjectList.h"
|
#include "objects/systemObjectList.h"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
add_subdirectory(core)
|
|
@ -1,13 +0,0 @@
|
|||||||
target_sources(${TARGET_NAME} PRIVATE
|
|
||||||
CatchDefinitions.cpp
|
|
||||||
CatchFactory.cpp
|
|
||||||
CatchRunner.cpp
|
|
||||||
CatchSetup.cpp
|
|
||||||
printChar.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CUSTOM_UNITTEST_RUNNER)
|
|
||||||
target_sources(${TARGET_NAME} PRIVATE
|
|
||||||
CatchRunner.cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
@ -1,16 +0,0 @@
|
|||||||
#ifndef FSFW_CATCHFACTORY_H_
|
|
||||||
#define FSFW_CATCHFACTORY_H_
|
|
||||||
|
|
||||||
#include <fsfw/objectmanager/SystemObjectIF.h>
|
|
||||||
|
|
||||||
namespace Factory {
|
|
||||||
/**
|
|
||||||
* @brief Creates all SystemObject elements which are persistent
|
|
||||||
* during execution.
|
|
||||||
*/
|
|
||||||
void produce(void* args);
|
|
||||||
void setStaticFrameworkObjectIds();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* FSFW_CATCHFACTORY_H_ */
|
|
@ -1,3 +0,0 @@
|
|||||||
CXXSRC += $(wildcard $(CURRENTPATH)/*.cpp)
|
|
||||||
|
|
||||||
INCLUDES += $(CURRENTPATH)
|
|
Loading…
Reference in New Issue
Block a user