From 6f2e03f0031fd54eb89ed0a12996400868ee7d7f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 9 May 2022 00:09:39 +0200 Subject: [PATCH] replaced loggers --- config/commonPollingSequenceFactory.cpp | 8 +- example/controller/FsfwTestController.cpp | 59 +--- example/test/FsfwExampleTask.cpp | 52 +--- example/test/FsfwReaderTask.cpp | 8 +- example/test/MutexExample.cpp | 26 +- example/test/testFmt.cpp | 22 +- example/test/testFmt.h | 337 ++++++++++++---------- example/utility/TaskCreation.h | 10 +- example/utility/TmFunnel.cpp | 28 +- 9 files changed, 238 insertions(+), 312 deletions(-) diff --git a/config/commonPollingSequenceFactory.cpp b/config/commonPollingSequenceFactory.cpp index 63050f8..d787d24 100644 --- a/config/commonPollingSequenceFactory.cpp +++ b/config/commonPollingSequenceFactory.cpp @@ -27,11 +27,7 @@ ReturnValue_t pst::pollingSequenceExamples(FixedTimeslotTaskIF* thisSequence) { if (thisSequence->checkSequence() == HasReturnvaluesIF::RETURN_OK) { return HasReturnvaluesIF::RETURN_OK; } else { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "pst::pollingSequenceInitFunction: Initialization errors!" << std::endl; -#else - sif::printError("pst::pollingSequenceInitFunction: Initialization errors!\n"); -#endif + std::cerr << "pst::pollingSequenceInitFunction: Initialization errors!" << std::endl; return HasReturnvaluesIF::RETURN_FAILED; } } @@ -58,7 +54,7 @@ ReturnValue_t pst::pollingSequenceDevices(FixedTimeslotTaskIF* thisSequence) { return HasReturnvaluesIF::RETURN_OK; } else { #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "pst::pollingSequenceTestFunction: Initialization errors!" << std::endl; + std::cerr << "pst::pollingSequenceTestFunction: Initialization errors!" << std::endl; #else sif::printError("pst::pollingSequenceTestFunction: Initialization errors!\n"); #endif diff --git a/example/controller/FsfwTestController.cpp b/example/controller/FsfwTestController.cpp index fd32d45..14f2208 100644 --- a/example/controller/FsfwTestController.cpp +++ b/example/controller/FsfwTestController.cpp @@ -33,24 +33,15 @@ void FsfwTestController::performControlOperation() { } case (TRACE_DEV_0_UINT8): { if (traceCounter == 0) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "Tracing finished" << std::endl; -#else - sif::printInfo("Tracing finished\n"); -#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */ + FSFW_LOGI("Tracing finished\n"); traceVariable = false; traceCounter = traceCycles; currentTraceType = TraceTypes::NONE; break; } PoolReadGuard readHelper(&deviceDataset0.testUint8Var); -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "Tracing device 0 variable 0 (UINT8), current value: " - << static_cast(deviceDataset0.testUint8Var.value) << std::endl; -#else - sif::printInfo("Tracing device 0 variable 0 (UINT8), current value: %d\n", - deviceDataset0.testUint8Var.value); -#endif + FSFW_FLOGI("Tracing device 0 variable 0 (UINT8), current value: {}", + static_cast(deviceDataset0.testUint8Var.value)); traceCounter--; break; } @@ -67,18 +58,10 @@ ReturnValue_t FsfwTestController::initializeAfterTaskCreation() { if (result != HasReturnvaluesIF::RETURN_OK) { return result; } - HasLocalDataPoolIF* device0 = + auto* device0 = ObjectManager::instance()->get(deviceDataset0.getCreatorObjectId()); if (device0 == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::warning << "TestController::initializeAfterTaskCreation: Test device handler 0 " - "handle invalid!" - << std::endl; -#else - sif::printWarning( - "TestController::initializeAfterTaskCreation: Test device handler 0 " - "handle invalid!"); -#endif + FSFW_LOGW("initializeAfterTaskCreation: Test device handler 0 handle invalid\n"); return ObjectManagerIF::CHILD_INIT_FAILED; } ProvidesDataPoolSubscriptionIF* subscriptionIF = device0->getSubscriptionInterface(); @@ -90,18 +73,10 @@ ReturnValue_t FsfwTestController::initializeAfterTaskCreation() { getCommandQueue(), false); } - HasLocalDataPoolIF* device1 = + auto* device1 = ObjectManager::instance()->get(deviceDataset0.getCreatorObjectId()); if (device1 == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::warning << "TestController::initializeAfterTaskCreation: Test device handler 1 " - "handle invalid!" - << std::endl; -#else - sif::printWarning( - "TestController::initializeAfterTaskCreation: Test device handler 1 " - "handle invalid!"); -#endif + FSFW_LOGW("initializeAfterTaskCreation: Test device handler 1 handle invalid\n"); } subscriptionIF = device1->getSubscriptionInterface(); @@ -133,18 +108,8 @@ void FsfwTestController::handleChangedDataset(sid_t sid, store_address_t storeId } else { printout = "Snapshot"; } -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "FsfwTestController::handleChangedDataset: " << printout - << " update" - "from object ID " - << setw(8) << setfill('0') << hex << sid.objectId << " and set ID " << sid.ownerSetId - << dec << setfill(' ') << endl; -#else - sif::printInfo( - "FsfwTestController::handleChangedPoolVariable: %s update from" - "object ID 0x%08x and set ID %lu\n", - printout, sid.objectId, sid.ownerSetId); -#endif + FSFW_FLOGI("handleChangedDataset: {} update from object ID {:#08x} and set ID {}\n", printout, + sid.objectId, sid.ownerSetId); if (storeId == storeId::INVALID_STORE_ADDRESS) { if (sid.objectId == device0Id) { @@ -154,7 +119,7 @@ void FsfwTestController::handleChangedDataset(sid_t sid, store_address_t storeId floatVec[1] = deviceDataset0.testFloat3Vec.value[1]; floatVec[2] = deviceDataset0.testFloat3Vec.value[2]; #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "Current float vector (3) values: [" << floatVec[0] << ", " << floatVec[1] + std::cout << "Current float vector (3) values: [" << floatVec[0] << ", " << floatVec[1] << ", " << floatVec[2] << "]" << std::endl; #else sif::printInfo("Current float vector (3) values: [%f, %f, %f]\n", floatVec[0], floatVec[1], @@ -185,7 +150,7 @@ void FsfwTestController::handleChangedPoolVariable(gp_id_t globPoolId, store_add } #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "TestController::handleChangedPoolVariable: " << printout + std::cout << "TestController::handleChangedPoolVariable: " << printout << " update from object " "ID 0x" << setw(8) << setfill('0') << hex << globPoolId.objectId << " and local pool ID " @@ -201,7 +166,7 @@ void FsfwTestController::handleChangedPoolVariable(gp_id_t globPoolId, store_add if (globPoolId.objectId == device0Id) { PoolReadGuard readHelper(&deviceDataset0.testUint8Var); #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "Current test variable 0 (UINT8) value: " + std::cout << "Current test variable 0 (UINT8) value: " << static_cast(deviceDataset0.testUint8Var.value) << std::endl; #else sif::printInfo("Current test variable 0 (UINT8) value %d\n", diff --git a/example/test/FsfwExampleTask.cpp b/example/test/FsfwExampleTask.cpp index c478763..0dc9b7a 100644 --- a/example/test/FsfwExampleTask.cpp +++ b/example/test/FsfwExampleTask.cpp @@ -80,24 +80,16 @@ object_id_t FsfwExampleTask::getSender() { ReturnValue_t FsfwExampleTask::initialize() { // Get the dataset of the sender. Will be cached for later checks. object_id_t sender = getSender(); - HasLocalDataPoolIF* senderIF = ObjectManager::instance()->get(sender); + auto* senderIF = ObjectManager::instance()->get(sender); if (senderIF == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "FsfwDemoTask::initialize: Sender object invalid!" << std::endl; -#else - sif::printError("FsfwDemoTask::initialize: Sender object invalid!\n"); -#endif + std::cerr << "FsfwDemoTask::initialize: Sender object invalid!" << std::endl; return HasReturnvaluesIF::RETURN_FAILED; } // we need a private copy of the previous dataset.. or we use the shared dataset. senderSet = new FsfwDemoSet(senderIF); if (senderSet == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "FsfwDemoTask::initialize: Sender dataset invalid!" << std::endl; -#else - sif::printError("FsfwDemoTask::initialize: Sender dataset invalid!\n"); -#endif + std::cerr << "FsfwDemoTask::initialize: Sender dataset invalid!" << std::endl; return HasReturnvaluesIF::RETURN_FAILED; } return poolManager.initialize(commandQueue); @@ -128,11 +120,7 @@ ReturnValue_t FsfwExampleTask::performMonitoringDemo() { ReturnValue_t result = demoSet.variableLimit.read(MutexIF::TimeoutType::WAITING, 20); if (result != HasReturnvaluesIF::RETURN_OK) { /* Configuration error */ -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "DummyObject::performOperation: Could not read variableLimit!" << std::endl; -#else - sif::printError("DummyObject::performOperation: Could not read variableLimit!\n"); -#endif + std::cerr << "DummyObject::performOperation: Could not read variableLimit!" << std::endl; return result; } if (this->getObjectId() == objects::TEST_DUMMY_5) { @@ -151,11 +139,7 @@ ReturnValue_t FsfwExampleTask::performSendOperation() { FsfwExampleTask* target = ObjectManager::instance()->get(nextRecipient); if (target == nullptr) { /* Configuration error */ -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "DummyObject::performOperation: Next recipient does not exist!" << std::endl; -#else - sif::printError("DummyObject::performOperation: Next recipient does not exist!\n"); -#endif + std::cerr << "DummyObject::performOperation: Next recipient does not exist!" << std::endl; return HasReturnvaluesIF::RETURN_FAILED; } @@ -167,22 +151,14 @@ ReturnValue_t FsfwExampleTask::performSendOperation() { /* Send message using own message queue */ ReturnValue_t result = commandQueue->sendMessage(target->getMessageQueueId(), &message); if (result != HasReturnvaluesIF::RETURN_OK && result != MessageQueueIF::FULL) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "FsfwDemoTask::performSendOperation: Send failed with " << result << std::endl; -#else - sif::printError("FsfwDemoTask::performSendOperation: Send failed with %hu\n", result); -#endif + std::cerr << "FsfwDemoTask::performSendOperation: Send failed with " << result << std::endl; } /* Send message without via MessageQueueSenderIF */ result = MessageQueueSenderIF::sendMessage(target->getMessageQueueId(), &message, commandQueue->getId()); if (result != HasReturnvaluesIF::RETURN_OK && result != MessageQueueIF::FULL) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "FsfwDemoTask::performSendOperation: Send failed with " << result << std::endl; -#else - sif::printError("FsfwDemoTask::performSendOperation: Send failed with %hu\n", result); -#endif + std::cerr << "FsfwDemoTask::performSendOperation: Send failed with " << result << std::endl; } demoSet.variableWrite.value = randomNumber; @@ -197,9 +173,7 @@ ReturnValue_t FsfwExampleTask::performReceiveOperation() { CommandMessage receivedMessage; result = commandQueue->receiveMessage(&receivedMessage); if (result != HasReturnvaluesIF::RETURN_OK && result != MessageQueueIF::EMPTY) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::debug << "Receive failed with " << result << std::endl; -#endif + FSFW_FLOGD("performReceiveOperation: Receive failed with {}\n", result); break; } if (result != MessageQueueIF::EMPTY) { @@ -221,11 +195,11 @@ ReturnValue_t FsfwExampleTask::performReceiveOperation() { } if (senderSet->variableRead.value != receivedMessage.getParameter()) { #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "FsfwDemoTask::performReceiveOperation: Variable " << std::hex << "0x" - << senderSet->variableRead.getDataPoolId() << std::dec << " has wrong value." - << std::endl; - sif::error << "Value: " << demoSet.variableRead.value - << ", expected: " << receivedMessage.getParameter() << std::endl; + std::cerr << "FsfwDemoTask::performReceiveOperation: Variable " << std::hex << "0x" + << senderSet->variableRead.getDataPoolId() << std::dec << " has wrong value." + << std::endl; + std::cerr << "Value: " << demoSet.variableRead.value + << ", expected: " << receivedMessage.getParameter() << std::endl; #endif } } diff --git a/example/test/FsfwReaderTask.cpp b/example/test/FsfwReaderTask.cpp index 5c1440a..5d6e2d7 100644 --- a/example/test/FsfwReaderTask.cpp +++ b/example/test/FsfwReaderTask.cpp @@ -35,10 +35,10 @@ ReturnValue_t FsfwReaderTask::performOperation(uint8_t operationCode) { #if OBSW_VERBOSE_LEVEL >= 1 if (opDivider.checkAndIncrement() and printoutEnabled) { #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::info << "FsfwPeriodicTask::performOperation: Reading variables." << std::endl; - sif::info << "Variable read from demo object 1: " << variable1 << std::endl; - sif::info << "Variable read from demo object 2: " << variable2 << std::endl; - sif::info << "Variable read from demo object 3: " << variable3 << std::endl; + std::cout << "FsfwPeriodicTask::performOperation: Reading variables." << std::endl; + std::cout << "Variable read from demo object 1: " << variable1 << std::endl; + std::cout << "Variable read from demo object 2: " << variable2 << std::endl; + std::cout << "Variable read from demo object 3: " << variable3 << std::endl; #else sif::printInfo("FsfwPeriodicTask::performOperation: Reading variables.\n\r"); sif::printInfo("Variable read from demo object 1: %d\n\r", variable1); diff --git a/example/test/MutexExample.cpp b/example/test/MutexExample.cpp index fb209ad..8bae8a5 100644 --- a/example/test/MutexExample.cpp +++ b/example/test/MutexExample.cpp @@ -1,7 +1,7 @@ #include "MutexExample.h" #include -#include +#include void MutexExample::example() { MutexIF* mutex = MutexFactory::instance()->createMutex(); @@ -9,37 +9,21 @@ void MutexExample::example() { ReturnValue_t result = mutex->lockMutex(MutexIF::TimeoutType::WAITING, 2 * 60 * 1000); if (result != HasReturnvaluesIF::RETURN_OK) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "MutexExample::example: Lock Failed with " << result << std::endl; -#else - sif::printError("MutexExample::example: Lock Failed with %hu\n", result); -#endif + FSFW_FLOGET("MutexExample::example: Lock Failed with {}\n", result); } result = mutex2->lockMutex(MutexIF::TimeoutType::BLOCKING); if (result != HasReturnvaluesIF::RETURN_OK) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "MutexExample::example: Lock Failed with " << result << std::endl; -#else - sif::printError("MutexExample::example: Lock Failed with %hu\n", result); -#endif + FSFW_FLOGET("MutexExample::example: Lock Failed with {}\n", result); } result = mutex->unlockMutex(); if (result != HasReturnvaluesIF::RETURN_OK) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "MutexExample::example: Unlock Failed with " << result << std::endl; -#else - sif::printError("MutexExample::example: Unlock Failed with %hu\n", result); -#endif + FSFW_FLOGET("MutexExample::example: Unlock Failed with {}\n", result); } result = mutex2->unlockMutex(); if (result != HasReturnvaluesIF::RETURN_OK) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "MutexExample::example: Unlock Failed with " << result << std::endl; -#else - sif::printError("MutexExample::example: Unlock Failed with %hu\n", result); -#endif + FSFW_FLOGET("MutexExample::example: Unlock Failed with {}\n", result); } } diff --git a/example/test/testFmt.cpp b/example/test/testFmt.cpp index e66ddc9..766821a 100644 --- a/example/test/testFmt.cpp +++ b/example/test/testFmt.cpp @@ -1,14 +1,14 @@ -#include "testFmt.h" +#include "fsfw/serviceinterface/fmtWrapper.h" void fmtTests() { - sif::fdebug(__FILENAME__, __LINE__, "Hello {} {}", "World\n"); - sif::fdebug_t(__FILENAME__, __LINE__, "Hallo\n"); - FSFW_LOGD("{}", "Hallo\n"); - // MY_LOG("{}", "test\n"); - // sif::finfo_t("Hallo\n"); - // sif::finfo("Hallo\n"); - // sif::fwarning("Hello\n"); - // sif::fwarning_t("Hello\n"); - // sif::ferror("Hello\n"); - // sif::ferror_t("Hello\n"); + sif::initialize(); + sif::debug(__FILENAME__, __LINE__, "Hello {}", "World\n"); + sif::debug_t(__FILENAME__, __LINE__, "Hallo\n"); + FSFW_FLOGD("{}", "Hallo\n"); + sif::info_t("Hallo\n"); + sif::info("Hallo\n"); + sif::warning(__FILENAME__, __LINE__, "Hello\n"); + sif::warning_t(__FILENAME__, __LINE__, "Hello\n"); + sif::error(__FILENAME__, __LINE__, "Hello\n"); + sif::error_t(__FILENAME__, __LINE__, "Hello\n"); } \ No newline at end of file diff --git a/example/test/testFmt.h b/example/test/testFmt.h index c47d683..20209f6 100644 --- a/example/test/testFmt.h +++ b/example/test/testFmt.h @@ -1,159 +1,180 @@ -#ifndef FSFW_EXAMPLE_HOSTED_TESTFMT_H -#define FSFW_EXAMPLE_HOSTED_TESTFMT_H - -#include -#include -#include -#include - -#include -#include - -#include "fsfw/ipc/MutexFactory.h" -#include "fsfw/ipc/MutexGuard.h" -#include "fsfw/ipc/MutexIF.h" -#include "fsfw/timemanager/Clock.h" - -#define __FILENAME_REL__ (((const char*)__FILE__ + SOURCE_PATH_SIZE)) -#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) - +//#ifndef FSFW_EXAMPLE_HOSTED_TESTFMT_H +//#define FSFW_EXAMPLE_HOSTED_TESTFMT_H +// +//#include +//#include +//#include +//#include +// +//#include +//#include +// +//#include "fsfw/ipc/MutexFactory.h" +//#include "fsfw/ipc/MutexGuard.h" +//#include "fsfw/ipc/MutexIF.h" +//#include "fsfw/timemanager/Clock.h" +// +//#define __FILENAME_REL__ (((const char*)__FILE__ + SOURCE_PATH_SIZE)) +//#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +// void fmtTests(); - -namespace sif { - -static std::array PRINT_BUF = {}; - -static const char INFO_PREFIX[] = "INFO"; -static const char DEBUG_PREFIX[] = "DEBUG"; -static const char WARNING_PREFIX[] = "WARNING"; -static const char ERROR_PREFIX[] = "ERROR"; - -enum class LogLevel : unsigned int { DEBUG = 0, INFO = 1, WARNING = 2, ERROR = 3 }; - -static const char* PREFIX_ARR[4] = {DEBUG_PREFIX, INFO_PREFIX, WARNING_PREFIX, ERROR_PREFIX}; - -static const std::array LOG_COLOR_ARR = { - fmt::color::deep_sky_blue, fmt::color::forest_green, fmt::color::orange_red, fmt::color::red}; - -static MutexIF* PRINT_MUTEX = MutexFactory::instance()->createMutex(); - -static size_t writeTypePrefix(LogLevel level) { - auto idx = static_cast(level); - const auto result = - fmt::format_to_n(PRINT_BUF.begin(), PRINT_BUF.size() - 1, - fmt::runtime(fmt::format(fg(LOG_COLOR_ARR[idx]), PREFIX_ARR[idx]))); - return result.size; -} - -template -size_t logTraced(LogLevel level, const char* file, unsigned int line, bool timed, - fmt::format_string fmt, T&&... args) noexcept { - try { - MutexGuard mg(PRINT_MUTEX); - size_t bufPos = writeTypePrefix(level); - auto currentIter = PRINT_BUF.begin() + bufPos; - if (timed) { - Clock::TimeOfDay_t logTime; - Clock::getDateAndTime(&logTime); - const auto result = fmt::format_to_n(currentIter, PRINT_BUF.size() - 1 - bufPos, - " | {}[l.{}] | {:02}:{:02}:{:02}.{:03} | {}", file, line, - logTime.hour, logTime.minute, logTime.second, - logTime.usecond / 1000, fmt::format(fmt, args...)); - *result.out = '\0'; - bufPos += result.size; - } else { - const auto result = fmt::format_to_n(currentIter, PRINT_BUF.size() - 1 - bufPos, - " | {}[l.{}] | {}", file, line, fmt::format(fmt, args...)); - *result.out = '\0'; - bufPos += result.size; - } - - fmt::print(fmt::runtime(PRINT_BUF.data())); - return bufPos; - } catch (const fmt::v8::format_error& e) { - fmt::print("Printing failed with error: {}\n", e.what()); - return 0; - } -} - -template -size_t log(LogLevel level, bool timed, fmt::format_string fmt, T&&... args) noexcept { - try { - MutexGuard mg(PRINT_MUTEX); - size_t bufPos = writeTypePrefix(level); - auto currentIter = PRINT_BUF.begin() + bufPos; - if (timed) { - Clock::TimeOfDay_t logTime; - Clock::getDateAndTime(&logTime); - const auto result = fmt::format_to_n( - currentIter, PRINT_BUF.size() - bufPos, " | {:02}:{:02}:{:02}.{:03} | {}", logTime.hour, - logTime.minute, logTime.second, logTime.usecond / 1000, fmt::format(fmt, args...)); - bufPos += result.size; - } - fmt::print(fmt::runtime(PRINT_BUF.data())); - return bufPos; - } catch (const fmt::v8::format_error& e) { - fmt::print("Printing failed with error: {}\n", e.what()); - return 0; - } -} - -template -void fdebug(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) noexcept { - logTraced(LogLevel::DEBUG, file, line, false, fmt, args...); -} - -template -void fdebug_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) noexcept { - logTraced(LogLevel::DEBUG, file, line, true, fmt, args...); -} - -template -void finfo_t(fmt::format_string fmt, T&&... args) { - log(LogLevel::INFO, true, fmt, args...); -} - -template -void finfo(fmt::format_string fmt, T&&... args) { - log(LogLevel::INFO, false, fmt, args...); -} - -template -void fwarning(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { - logTraced(LogLevel::WARNING, file, line, false, fmt, args...); -} - -template -void fwarning_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { - logTraced(LogLevel::WARNING, file, line, true, fmt, args...); -} - -template -void ferror(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { - logTraced(LogLevel::ERROR, file, line, false, fmt, args...); -} - -template -void ferror_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { - logTraced(LogLevel::ERROR, file, line, true, fmt, args...); -} - -} // namespace sif - -#define FSFW_LOGI(format, ...) finfo(FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGIT(format, ...) finfo_t(FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGD(format, ...) sif::fdebug(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGDT(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGW(format, ...) fdebug(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGWT(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGE(format, ...) fdebug(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#define FSFW_LOGET(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) - -#endif // FSFW_EXAMPLE_HOSTED_TESTFMT_H +// +// namespace sif { +// +// static std::array _PRINT_BUF = {}; +// +// static const char INFO_PREFIX[] = "INFO"; +// static const char DEBUG_PREFIX[] = "DEBUG"; +// static const char WARNING_PREFIX[] = "WARNING"; +// static const char ERROR_PREFIX[] = "ERROR"; +// +// enum class LogLevel : unsigned int { DEBUG = 0, INFO = 1, WARNING = 2, ERROR = 3 }; +// +// static const char* PREFIX_ARR[4] = {DEBUG_PREFIX, INFO_PREFIX, WARNING_PREFIX, ERROR_PREFIX}; +// +// static const std::array LOG_COLOR_ARR = { +// fmt::color::deep_sky_blue, fmt::color::forest_green, fmt::color::orange_red, fmt::color::red}; +// +// static MutexIF* PRINT_MUTEX = nullptr; +// +////static ReturnValue_t initialize() { +//// PRINT_MUTEX = MutexFactory::instance()->createMutex(); +//// if(PRINT_MUTEX == nullptr) { +//// return HasReturnvaluesIF::RETURN_FAILED; +//// } +//// return HasReturnvaluesIF::RETURN_OK; +////} +// +// static size_t writeTypePrefix(LogLevel level) { +// auto idx = static_cast(level); +// const auto result = +// fmt::format_to_n(_PRINT_BUF.begin(), _PRINT_BUF.size() - 1, +// fmt::runtime(fmt::format(fg(LOG_COLOR_ARR[idx]), PREFIX_ARR[idx]))); +// return result.size; +//} +// +// template +// size_t logTraced(LogLevel level, const char* file, unsigned int line, bool timed, +// fmt::format_string fmt, T&&... args) noexcept { +// if(PRINT_MUTEX == nullptr) { +// fmt::print("Please call sif::initialize at program startup\n"); +// return 0; +// } +// try { +// MutexGuard mg(PRINT_MUTEX); +// size_t bufPos = writeTypePrefix(level); +// auto currentIter = _PRINT_BUF.begin() + bufPos; +// if (timed) { +// Clock::TimeOfDay_t logTime; +// Clock::getDateAndTime(&logTime); +// const auto result = fmt::format_to_n(currentIter, _PRINT_BUF.size() - 1 - bufPos, +// " | {}[l.{}] | {:02}:{:02}:{:02}.{:03} | {}", file, +// line, logTime.hour, logTime.minute, logTime.second, +// logTime.usecond / 1000, fmt::format(fmt, args...)); +// *result.out = '\0'; +// bufPos += result.size; +// } else { +// const auto result = fmt::format_to_n(currentIter, _PRINT_BUF.size() - 1 - bufPos, +// " | {}[l.{}] | {}", file, line, fmt::format(fmt, +// args...)); +// *result.out = '\0'; +// bufPos += result.size; +// } +// +// fmt::print(fmt::runtime(_PRINT_BUF.data())); +// return bufPos; +// } catch (const fmt::v8::format_error& e) { +// fmt::print("Printing failed with error: {}\n", e.what()); +// return 0; +// } +//} +// +// template +// size_t log(LogLevel level, bool timed, fmt::format_string fmt, T&&... args) noexcept { +// if(PRINT_MUTEX == nullptr) { +// fmt::print("Please call sif::initialize at program startup\n"); +// return 0; +// } +// try { +// MutexGuard mg(PRINT_MUTEX); +// size_t bufPos = writeTypePrefix(level); +// auto currentIter = _PRINT_BUF.begin() + bufPos; +// if (timed) { +// Clock::TimeOfDay_t logTime; +// Clock::getDateAndTime(&logTime); +// const auto result = fmt::format_to_n( +// currentIter, _PRINT_BUF.size() - bufPos, " | {:02}:{:02}:{:02}.{:03} | {}", +// logTime.hour, logTime.minute, logTime.second, logTime.usecond / 1000, fmt::format(fmt, +// args...)); +// bufPos += result.size; +// } +// fmt::print(fmt::runtime(_PRINT_BUF.data())); +// return bufPos; +// } catch (const fmt::v8::format_error& e) { +// fmt::print("Printing failed with error: {}\n", e.what()); +// return 0; +// } +//} +// +// template +// void fdebug(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) +// noexcept { +// logTraced(LogLevel::DEBUG, file, line, false, fmt, args...); +//} +// +// template +// void fdebug_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) +// noexcept { +// logTraced(LogLevel::DEBUG, file, line, true, fmt, args...); +//} +// +// template +// void finfo_t(fmt::format_string fmt, T&&... args) { +// log(LogLevel::INFO, true, fmt, args...); +//} +// +// template +// void finfo(fmt::format_string fmt, T&&... args) { +// log(LogLevel::INFO, false, fmt, args...); +//} +// +// template +// void fwarning(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { +// logTraced(LogLevel::WARNING, file, line, false, fmt, args...); +//} +// +// template +// void fwarning_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { +// logTraced(LogLevel::WARNING, file, line, true, fmt, args...); +//} +// +// template +// void ferror(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { +// logTraced(LogLevel::ERROR, file, line, false, fmt, args...); +//} +// +// template +// void ferror_t(const char* file, unsigned int line, fmt::format_string fmt, T&&... args) { +// logTraced(LogLevel::ERROR, file, line, true, fmt, args...); +//} +// +//} // namespace sif +// +//#define FSFW_FLOGI(format, ...) finfo(FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGIT(format, ...) finfo_t(FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGD(format, ...) sif::fdebug(__FILENAME__, __LINE__, FMT_STRING(format), +//__VA_ARGS__) +// +//#define FSFW_FLOGDT(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGW(format, ...) fdebug(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGWT(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGE(format, ...) fdebug(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) +// +//#define FSFW_FLOGET(format, ...) fdebug_t(__FILENAME__, __LINE__, FMT_STRING(format), __VA_ARGS__) +// +//#endif // FSFW_EXAMPLE_HOSTED_TESTFMT_H diff --git a/example/utility/TaskCreation.h b/example/utility/TaskCreation.h index 6aede3b..cd841cd 100644 --- a/example/utility/TaskCreation.h +++ b/example/utility/TaskCreation.h @@ -2,18 +2,12 @@ #define MISSION_UTILITY_TASKCREATION_H_ #include -#include +#include namespace task { void printInitError(const char* objName, object_id_t objectId) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "InitMission: Adding object " << objName << "(" << std::setw(8) << std::setfill('0') - << std::hex << objectId << std::dec << ") failed." << std::endl; -#else - sif::printError("InitMission: Adding object %s (0x%08x) failed.\n", objName, - static_cast(objectId)); -#endif + FSFW_FLOGW("InitMission: Adding object {} ({:#08x}) failed\n", objName, objectId); } } // namespace task diff --git a/example/utility/TmFunnel.cpp b/example/utility/TmFunnel.cpp index 896df0a..7b37925 100644 --- a/example/utility/TmFunnel.cpp +++ b/example/utility/TmFunnel.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include object_id_t TmFunnel::downlinkDestination = objects::NO_OBJECT; @@ -56,9 +56,7 @@ ReturnValue_t TmFunnel::handlePacket(TmTcMessage* message) { result = tmQueue->sendToDefault(message); if (result != HasReturnvaluesIF::RETURN_OK) { tmPool->deleteData(message->getStorageId()); -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "TmFunnel::handlePacket: Error sending to downlink handler" << std::endl; -#endif + FSFW_FLOGET("{}", "handlePacket: Error sending to downlink handler\n"); return result; } @@ -66,9 +64,7 @@ ReturnValue_t TmFunnel::handlePacket(TmTcMessage* message) { result = storageQueue->sendToDefault(message); if (result != HasReturnvaluesIF::RETURN_OK) { tmPool->deleteData(message->getStorageId()); -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "TmFunnel::handlePacket: Error sending to storage handler" << std::endl; -#endif + FSFW_FLOGET("{}", "handlePacket: Error sending to storage handler\n"); return result; } } @@ -78,22 +74,18 @@ ReturnValue_t TmFunnel::handlePacket(TmTcMessage* message) { ReturnValue_t TmFunnel::initialize() { tmPool = ObjectManager::instance()->get(objects::TM_STORE); if (tmPool == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "TmFunnel::initialize: TM store not set." << std::endl; - sif::error << "Make sure the tm store is set up properly and implements StorageManagerIF" - << std::endl; -#endif + FSFW_FLOGE("{}", + "initialize: TM store not set\n" + "Make sure the tm store is set up properly and implements StorageManagerIF"); return ObjectManagerIF::CHILD_INIT_FAILED; } - AcceptsTelemetryIF* tmTarget = - ObjectManager::instance()->get(downlinkDestination); + auto* tmTarget = ObjectManager::instance()->get(downlinkDestination); if (tmTarget == nullptr) { #if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "TmFunnel::initialize: Downlink Destination not set." << std::endl; - sif::error << "Make sure the downlink destination object is set up properly and implements " - "AcceptsTelemetryIF" - << std::endl; + FSFW_FLOGE("{}", + "initialize: Downlink Destination not set. Make sure the downlink destination " + "object is set up properly and implements AcceptsTelemetryIF\n"); #endif return ObjectManagerIF::CHILD_INIT_FAILED; }