From 8f1a54aa19aa4ce7a7774004316020acce428b74 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:27:33 +0200 Subject: [PATCH 01/11] clarification --- osal/FreeRTOS/QueueMapManager.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.h b/osal/FreeRTOS/QueueMapManager.h index 07ca8b9e..e86fe17b 100644 --- a/osal/FreeRTOS/QueueMapManager.h +++ b/osal/FreeRTOS/QueueMapManager.h @@ -39,7 +39,8 @@ private: QueueMapManager(); ~QueueMapManager(); - uint32_t queueCounter = 0; + // Start at 1 because 0 might be the NO_QUEUE value + uint32_t queueCounter = 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From f6d1b8981cb6a09b3c8ef6d59641060d03eee23e Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:33:55 +0200 Subject: [PATCH 02/11] additional safety by check against NO_QUEUE --- osal/FreeRTOS/QueueMapManager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 51cfe11d..7d0873b9 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -18,6 +18,10 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueueId_t* id) { MutexGuard lock(mapLock); uint32_t currentId = queueCounter++; + if(currentId == MessageQueueIF::NO_QUEUE) { + // Skip the NO_QUEUE value + queueCounter++; + } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { #if FSFW_CPP_OSTREAM_ENABLED == 1 From 5f0a3f3baaa1a05f48e641db564d87c5d224a4b3 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:34:38 +0200 Subject: [PATCH 03/11] using current ID --- osal/FreeRTOS/QueueMapManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 7d0873b9..e60b5689 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -20,7 +20,7 @@ ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueue uint32_t currentId = queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - queueCounter++; + currentId++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { From df1d5e50054d53d65effd5413f54f8cfb78d3ebe Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:35:37 +0200 Subject: [PATCH 04/11] this is the correct implementation --- osal/FreeRTOS/QueueMapManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index e60b5689..8e8b0c3e 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -20,7 +20,7 @@ ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueue uint32_t currentId = queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId++; + currentId = queueCounter++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { From fbdff5d0b464da15524e52e9b2a0074ec0ec31a1 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 11:14:25 +0200 Subject: [PATCH 05/11] updated change log --- CHANGELOG | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 09b8db6a..75e7ced5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,17 +1,80 @@ -## Changes from ASTP 1.0.0 to 1.1.0 +# Changed from ASTP 1.1.0 to 1.2.0 + +## API Changes + +### FSFW Architecture + +- Internal API changed completely to have separation of sources and headers +- External API mostly stayed the same +- Folder names are now all smaller case: internalError was renamed to internalerror and + FreeRTOS was renamed to freertos + +### HAL + +- HAL added back into FSFW. It is tightly bound to the FSFW, and compiling it as a static library + made using it more complicated than necessary + +## Bugfixes + +### FreeRTOS QueueMapManager + +- Fixed a bug which causes the first generated Queue ID to be invalid + +## Enhancements + +### FSFW Architecture + +- See API changes chapter. This change will keep the internal API consistent in the future + +# Changes from ASTP 1.0.0 to 1.1.0 + +## API Changes ### PUS - Added PUS C support +- SUBSYSTEM_IDs added for PUS Services +- Added new Parameter which must be defined in config: fsfwconfig::FSFW_MAX_TM_PACKET_SIZE + +### ObjectManager + + - ObjectManager is now a singelton + ### Configuration - Additional configuration option fsfwconfig::FSFW_MAX_TM_PACKET_SIZE which need to be specified in FSFWConfig.h +### CMake + +- Changed Cmake FSFW_ADDITIONAL_INC_PATH to FSFW_ADDITIONAL_INC_PATHS + +## Bugfixes + +- timemanager/TimeStamperIF.h: Timestamp config was not used correctly, leading to different timestamp sizes than configured in fsfwconfig::FSFW_MISSION_TIMESTAMP_SIZE +- TCP server fixes + +## Enhancements + +### FreeRTOS Queue Handles + +- Fixed an internal issue how FreeRTOS MessageQueues were handled + +### Linux OSAL + +- Better printf error messages + +### CMake + +- Check for C++11 as mininimum required Version + +### Debug Output + +- Changed Warning color to magenta, which is well readable on both dark and light mode IDEs -## Changes from ASTP 0.0.1 to 1.0.0 +# Changes from ASTP 0.0.1 to 1.0.0 ### Host OSAL From 0b45e5c89a25e0f0222ae7c5a20d5839b80efff7 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:40:32 +0200 Subject: [PATCH 06/11] fix --- osal/host/QueueMapManager.cpp | 4 ++++ osal/host/QueueMapManager.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/osal/host/QueueMapManager.cpp b/osal/host/QueueMapManager.cpp index 879bc36d..cea79f7b 100644 --- a/osal/host/QueueMapManager.cpp +++ b/osal/host/QueueMapManager.cpp @@ -25,6 +25,10 @@ ReturnValue_t QueueMapManager::addMessageQueue( MessageQueueIF* queueToInsert, MessageQueueId_t* id) { MutexGuard lock(mapLock); uint32_t currentId = queueCounter++; + if(currentId == MessageQueueIF::NO_QUEUE) { + // Skip the NO_QUEUE value + currentId = queueCounter++; + } auto returnPair = queueMap.emplace(currentId, queueToInsert); if(not returnPair.second) { /* This should never happen for the atomic variable. */ diff --git a/osal/host/QueueMapManager.h b/osal/host/QueueMapManager.h index e274bed2..c4e0fcdf 100644 --- a/osal/host/QueueMapManager.h +++ b/osal/host/QueueMapManager.h @@ -41,7 +41,8 @@ private: QueueMapManager(); ~QueueMapManager(); - uint32_t queueCounter = 0; + // Start at 1 because 0 might be the NO_QUEUE value + uint32_t queueCounter = 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From e93230d0efae8cc2045299346406ff6026f27fcd Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:47:33 +0200 Subject: [PATCH 07/11] update init value --- osal/FreeRTOS/QueueMapManager.h | 3 +-- osal/host/QueueMapManager.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/osal/FreeRTOS/QueueMapManager.h b/osal/FreeRTOS/QueueMapManager.h index e86fe17b..032fb2ba 100644 --- a/osal/FreeRTOS/QueueMapManager.h +++ b/osal/FreeRTOS/QueueMapManager.h @@ -39,8 +39,7 @@ private: QueueMapManager(); ~QueueMapManager(); - // Start at 1 because 0 might be the NO_QUEUE value - uint32_t queueCounter = 1; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; diff --git a/osal/host/QueueMapManager.h b/osal/host/QueueMapManager.h index c4e0fcdf..2dd2a01d 100644 --- a/osal/host/QueueMapManager.h +++ b/osal/host/QueueMapManager.h @@ -41,8 +41,7 @@ private: QueueMapManager(); ~QueueMapManager(); - // Start at 1 because 0 might be the NO_QUEUE value - uint32_t queueCounter = 1; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From baf3d4da477a07ee42a0a537721e4fd35bbd11b8 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:57:10 +0200 Subject: [PATCH 08/11] better form --- osal/FreeRTOS/QueueMapManager.cpp | 6 ++++-- osal/host/QueueMapManager.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 8e8b0c3e..b58fd4fe 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -17,10 +17,12 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId = queueCounter++; + currentId = queueCounter; + queueCounter++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { diff --git a/osal/host/QueueMapManager.cpp b/osal/host/QueueMapManager.cpp index cea79f7b..5117d551 100644 --- a/osal/host/QueueMapManager.cpp +++ b/osal/host/QueueMapManager.cpp @@ -24,10 +24,12 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue( MessageQueueIF* queueToInsert, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId = queueCounter++; + currentId = queueCounter; + queueCounter++; } auto returnPair = queueMap.emplace(currentId, queueToInsert); if(not returnPair.second) { From 16ed5e32706f431bf8e3d16c9a570006d376c017 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 15:01:43 +0200 Subject: [PATCH 09/11] update to bugfix --- src/osal/freertos/QueueMapManager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/osal/freertos/QueueMapManager.cpp b/src/osal/freertos/QueueMapManager.cpp index e32cbe1d..7d6b2f12 100644 --- a/src/osal/freertos/QueueMapManager.cpp +++ b/src/osal/freertos/QueueMapManager.cpp @@ -17,10 +17,12 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId = queueCounter++; + currentId = queueCounter; + queueCounter++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { From 4c41cb1f715c7f1dd25cb9cd3f85add45889ae92 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 15:03:02 +0200 Subject: [PATCH 10/11] update to upstream --- src/osal/host/QueueMapManager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/osal/host/QueueMapManager.cpp b/src/osal/host/QueueMapManager.cpp index ad39972f..58575cf6 100644 --- a/src/osal/host/QueueMapManager.cpp +++ b/src/osal/host/QueueMapManager.cpp @@ -24,7 +24,13 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue( MessageQueueIF* queueToInsert, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; + if(currentId == MessageQueueIF::NO_QUEUE) { + // Skip the NO_QUEUE value + currentId = queueCounter; + queueCounter++; + } auto returnPair = queueMap.emplace(currentId, queueToInsert); if(not returnPair.second) { /* This should never happen for the atomic variable. */ From cbdf92a775300885916add805fafd4f7f9de786a Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 15:04:08 +0200 Subject: [PATCH 11/11] update to origin --- inc/fsfw/osal/freertos/QueueMapManager.h | 3 +-- inc/fsfw/osal/host/QueueMapManager.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/inc/fsfw/osal/freertos/QueueMapManager.h b/inc/fsfw/osal/freertos/QueueMapManager.h index 7e999b0d..dbe0526b 100644 --- a/inc/fsfw/osal/freertos/QueueMapManager.h +++ b/inc/fsfw/osal/freertos/QueueMapManager.h @@ -39,8 +39,7 @@ private: QueueMapManager(); ~QueueMapManager(); - // Start at 1 because 0 might be the NO_QUEUE value - uint32_t queueCounter = 1; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; diff --git a/inc/fsfw/osal/host/QueueMapManager.h b/inc/fsfw/osal/host/QueueMapManager.h index e274bed2..2dd2a01d 100644 --- a/inc/fsfw/osal/host/QueueMapManager.h +++ b/inc/fsfw/osal/host/QueueMapManager.h @@ -41,7 +41,7 @@ private: QueueMapManager(); ~QueueMapManager(); - uint32_t queueCounter = 0; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance;