diff --git a/.clang-format b/.clang-format
new file mode 100644
index 00000000..ec53b72b
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,7 @@
+---
+BasedOnStyle: Google
+IndentWidth: 2
+---
+Language: Cpp
+ColumnLimit: 100
+---
diff --git a/README.md b/README.md
index c63db634..a2261c99 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,12 @@ cmake --build . -- fsfw-tests_coverage -j
The `coverage.py` script located in the `script` folder can also be used to do this conveniently.
+## Formatting the sources
+
+The formatting is done by the `clang-format` tool. The configuration is contained within the
+`.clang-format` file in the repository root. As long as `clang-format` is installed, you
+can run the `apply-clang-format.sh` helper script to format all source files consistently.
+
## Index
[1. High-level overview](docs/README-highlevel.md#top)
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 00000000..a485625d
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1 @@
+/_build
diff --git a/scripts/apply-clang-format.sh b/scripts/apply-clang-format.sh
new file mode 100755
index 00000000..27202324
--- /dev/null
+++ b/scripts/apply-clang-format.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+if [[ ! -f README.md ]]; then
+ cd ..
+fi
+
+find ./src -iname *.h -o -iname *.cpp -o -iname *.c | xargs clang-format --style=file -i
+find ./hal -iname *.h -o -iname *.cpp -o -iname *.c | xargs clang-format --style=file -i
+find ./tests -iname *.h -o -iname *.cpp -o -iname *.c | xargs clang-format --style=file -i
diff --git a/src/fsfw/globalfunctions/timevalOperations.h b/src/fsfw/globalfunctions/timevalOperations.h
index db68f330..41f4e52f 100644
--- a/src/fsfw/globalfunctions/timevalOperations.h
+++ b/src/fsfw/globalfunctions/timevalOperations.h
@@ -2,8 +2,9 @@
#define TIMEVALOPERATIONS_H_
#include
+#include
-#ifdef WIN32
+#ifdef PLATFORM_WIN
#include
#else
#include
diff --git a/tests/src/fsfw_tests/integration/controller/TestController.cpp b/tests/src/fsfw_tests/integration/controller/TestController.cpp
index 96da5fe3..8c2c9330 100644
--- a/tests/src/fsfw_tests/integration/controller/TestController.cpp
+++ b/tests/src/fsfw_tests/integration/controller/TestController.cpp
@@ -1,15 +1,12 @@
#include "TestController.h"
-#include "OBSWConfig.h"
#include
#include
#include
-TestController::TestController(object_id_t objectId, object_id_t device0, object_id_t device1,
+TestController::TestController(object_id_t objectId, object_id_t parentId,
size_t commandQueueDepth):
- ExtendedControllerBase(objectId, objects::NO_OBJECT, commandQueueDepth),
- deviceDataset0(device0),
- deviceDataset1(device1) {
+ ExtendedControllerBase(objectId, parentId, commandQueueDepth) {
}
TestController::~TestController() {
@@ -20,136 +17,15 @@ ReturnValue_t TestController::handleCommandMessage(CommandMessage *message) {
}
void TestController::performControlOperation() {
- /* We will trace vaiables if we received an update notification or snapshots */
-#if OBSW_CONTROLLER_PRINTOUT == 1
- if(not traceVariable) {
- return;
- }
- switch(currentTraceType) {
- case(NONE): {
- break;
- }
- 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 */
- 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
- traceCounter--;
- break;
- }
- case(TRACE_DEV_0_VECTOR): {
- break;
- }
-
- }
-#endif /* OBSW_CONTROLLER_PRINTOUT == 1 */
}
void TestController::handleChangedDataset(sid_t sid, store_address_t storeId, bool* clearMessage) {
- using namespace std;
-#if OBSW_CONTROLLER_PRINTOUT == 1
- char const* printout = nullptr;
- if(storeId == storeId::INVALID_STORE_ADDRESS) {
- printout = "Notification";
- }
- else {
- printout = "Snapshot";
- }
-#if FSFW_CPP_OSTREAM_ENABLED == 1
- sif::info << "TestController::handleChangedDataset: " << printout << " update from object "
- "ID " << setw(8) << setfill('0') << hex << sid.objectId <<
- " and set ID " << sid.ownerSetId << dec << setfill(' ') << endl;
-#else
- sif::printInfo("TestController::handleChangedPoolVariable: %s update from object ID 0x%08x and "
- "set ID %lu\n", printout, sid.objectId, sid.ownerSetId);
-#endif
-
- if (storeId == storeId::INVALID_STORE_ADDRESS) {
- if(sid.objectId == objects::TEST_DEVICE_HANDLER_0) {
- PoolReadGuard readHelper(&deviceDataset0.testFloat3Vec);
- float floatVec[3];
- floatVec[0] = deviceDataset0.testFloat3Vec.value[0];
- 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] << ", " << floatVec[2] << "]" << std::endl;
-#else
- sif::printInfo("Current float vector (3) values: [%f, %f, %f]\n",
- floatVec[0], floatVec[1], floatVec[2]);
-#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
- }
- }
-#endif /* OBSW_CONTROLLER_PRINTOUT == 1 */
-
- /* We will trace the variables for snapshots and update notifications */
- if(not traceVariable) {
- traceVariable = true;
- traceCounter = traceCycles;
- currentTraceType = TraceTypes::TRACE_DEV_0_VECTOR;
- }
}
void TestController::handleChangedPoolVariable(gp_id_t globPoolId, store_address_t storeId,
bool* clearMessage) {
- using namespace std;
-
-#if OBSW_CONTROLLER_PRINTOUT == 1
- char const* printout = nullptr;
- if (storeId == storeId::INVALID_STORE_ADDRESS) {
- printout = "Notification";
- }
- else {
- printout = "Snapshot";
- }
-
-#if FSFW_CPP_OSTREAM_ENABLED == 1
- sif::info << "TestController::handleChangedPoolVariable: " << printout << " update from object "
- "ID 0x" << setw(8) << setfill('0') << hex << globPoolId.objectId <<
- " and local pool ID " << globPoolId.localPoolId << dec << setfill(' ') << endl;
-#else
- sif::printInfo("TestController::handleChangedPoolVariable: %s update from object ID 0x%08x and "
- "local pool ID %lu\n", printout, globPoolId.objectId, globPoolId.localPoolId);
-#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
-
- if (storeId == storeId::INVALID_STORE_ADDRESS) {
- if(globPoolId.objectId == objects::TEST_DEVICE_HANDLER_0) {
- PoolReadGuard readHelper(&deviceDataset0.testUint8Var);
-#if FSFW_CPP_OSTREAM_ENABLED == 1
- sif::info << "Current test variable 0 (UINT8) value: " << static_cast(
- deviceDataset0.testUint8Var.value) << std::endl;
-#else
- sif::printInfo("Current test variable 0 (UINT8) value %d\n",
- deviceDataset0.testUint8Var.value);
-#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
- }
- }
-#endif /* OBSW_CONTROLLER_PRINTOUT == 1 */
-
- /* We will trace the variables for snapshots and update notifications */
- if(not traceVariable) {
- traceVariable = true;
- traceCounter = traceCycles;
- currentTraceType = TraceTypes::TRACE_DEV_0_UINT8;
- }
}
LocalPoolDataSetBase* TestController::getDataSetHandle(sid_t sid) {
@@ -162,50 +38,7 @@ ReturnValue_t TestController::initializeLocalDataPool(localpool::DataPool &local
}
ReturnValue_t TestController::initializeAfterTaskCreation() {
- namespace td = testdevice;
- HasLocalDataPoolIF* 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
- return ObjectManagerIF::CHILD_INIT_FAILED;
- }
- ProvidesDataPoolSubscriptionIF* subscriptionIF = device0->getSubscriptionInterface();
- if(subscriptionIF != nullptr) {
- /* For DEVICE_0, we only subscribe for notifications */
- subscriptionIF->subscribeForSetUpdateMessage(td::TEST_SET_ID, getObjectId(),
- getCommandQueue(), false);
- subscriptionIF->subscribeForVariableUpdateMessage(td::PoolIds::TEST_UINT8_ID,
- getObjectId(), getCommandQueue(), false);
- }
-
-
- HasLocalDataPoolIF* 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
- }
-
- subscriptionIF = device1->getSubscriptionInterface();
- if(subscriptionIF != nullptr) {
- /* For DEVICE_1, we will subscribe for snapshots */
- subscriptionIF->subscribeForSetUpdateMessage(td::TEST_SET_ID, getObjectId(),
- getCommandQueue(), true);
- subscriptionIF->subscribeForVariableUpdateMessage(td::PoolIds::TEST_UINT8_ID,
- getObjectId(), getCommandQueue(), true);
- }
- return HasReturnvaluesIF::RETURN_OK;
+ return ExtendedControllerBase::initializeAfterTaskCreation();
}
ReturnValue_t TestController::checkModeCommand(Mode_t mode, Submode_t submode,
diff --git a/tests/src/fsfw_tests/integration/controller/TestController.h b/tests/src/fsfw_tests/integration/controller/TestController.h
index 475d8703..7d94367d 100644
--- a/tests/src/fsfw_tests/integration/controller/TestController.h
+++ b/tests/src/fsfw_tests/integration/controller/TestController.h
@@ -8,20 +8,18 @@
class TestController:
public ExtendedControllerBase {
public:
- TestController(object_id_t objectId, object_id_t device0, object_id_t device1,
- size_t commandQueueDepth = 10);
+ TestController(object_id_t objectId, object_id_t parentId, size_t commandQueueDepth = 10);
virtual~ TestController();
protected:
- testdevice::TestDataSet deviceDataset0;
- testdevice::TestDataSet deviceDataset1;
- /* Extended Controller Base overrides */
+ // Extended Controller Base overrides
ReturnValue_t handleCommandMessage(CommandMessage *message) override;
void performControlOperation() override;
- /* HasLocalDatapoolIF callbacks */
- void handleChangedDataset(sid_t sid, store_address_t storeId, bool* clearMessage) override;
- void handleChangedPoolVariable(gp_id_t globPoolId, store_address_t storeId,
+ // HasLocalDatapoolIF callbacks
+ virtual void handleChangedDataset(sid_t sid, store_address_t storeId,
+ bool* clearMessage) override;
+ virtual void handleChangedPoolVariable(gp_id_t globPoolId, store_address_t storeId,
bool* clearMessage) override;
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
@@ -34,17 +32,6 @@ protected:
ReturnValue_t initializeAfterTaskCreation() override;
private:
-
- bool traceVariable = false;
- uint8_t traceCycles = 5;
- uint8_t traceCounter = traceCycles;
-
- enum TraceTypes {
- NONE,
- TRACE_DEV_0_UINT8,
- TRACE_DEV_0_VECTOR
- };
- TraceTypes currentTraceType = TraceTypes::NONE;
};